我正在审查我编写的一些代码的一位新合作者告诉我,她不习惯看到直接在Java代码中使用的接口,例如:
public interface GeneralFoo { ... }
public class SpecificFoo implements GeneralFoo { ... }
public class UsesFoo {
GeneralFoo foo = new SpecificFoo();
}
Run Code Online (Sandbox Code Playgroud)
相反,期待看到
public interface GeneralFoo { ... }
public abstract class AbstractFoo implements GeneralFoo { ... }
public class SpecificFoo extends AbstractFoo { ... }
public class UsesFoo {
AbstractFoo foo = new SpecificFoo();
}
Run Code Online (Sandbox Code Playgroud)
我可以看到这个模式何时有意义,如果所有SpecificFoos通过AbstractFoo共享功能,但如果各种Foos有完全不同的内部实现(或者我们不关心特定的Foo如何做Bar,只要它这样做),直接在代码中使用接口有什么害处吗?我在某种程度上意识到这可能是一个番茄/西红柿的东西,但我很好奇第二种风格的优势,或者第一种风格的缺点,我不知道.
众所周知,WebGL 对NPOT(非二次幂)纹理的支持很差.但是矩形纹理的宽度和高度都是2的幂?具体来说,我正在尝试绘制矩形帧缓冲区作为渲染到纹理方案的一部分,以生成一些UI元素.帧缓冲区需要为512x64左右.
在绘图方面效率会低多少?如果帧率是一个问题,我会更好地分配一个512x512两倍大小的功率缓冲区,只渲染到前64个像素,牺牲内存的速度?
我正在尝试使用Pattern.split()将Java正则表达式分解为"foo"和"bar"." - "字符可能是几个短划线之一:ASCII' - ',em-dash,en-dash等.我构造了以下正则表达式:
private static final Pattern titleSegmentSeparator = Pattern.compile("\\s(\\x45|\\u8211|\\u8212|\\u8213|\\u8214)\\s");
Run Code Online (Sandbox Code Playgroud)
如果我正确地阅读Pattern文档,那么当两边都被空格包围时,它应该捕获任何unicode破折号或ascii破折号.我使用的模式如下:
String[] sectionSegments = titleSegmentSeparator.split(sectionTitle);
Run Code Online (Sandbox Code Playgroud)
没有快乐.对于下面的示例输入,未检测到破折号,titleSegmentSeparator.matcher(sectionTitle).find()返回false!
为了确保我没有遗漏任何不寻常的字符实体,我使用System.out打印一些调试信息.输出如下 - 每个字符后跟(int)char的输出,它应该是它的'unicode代码点,不是吗?
样本输入:
研究摘要(1/10) - 竞争
S(83)t(116)u(117)d(100)y(121)(32)S(83)u(117)m(109)m(109)a(97)r(114)y(121) )(32)((40)1(49)(32)o(111)f(102)(32)1(49)0(48))(41)(32) - (8211)(32)C( 67)O(111)M(109)p(112)E(101)T(116)I(105)T(116)1(105)○(111)N(110)
在我看来,破折号是代码点8211,它应该与正则表达式匹配,但事实并非如此!这里发生了什么?
我有兴趣在JOGL 2中编写OpenGL应用程序,使用着色器而不是固定功能管道.我需要做一些4x4双精度矩阵数学CPU端,以取代固定功能管道的推/弹/变换业务.相同的应用程序也将包括一些需要在大型矩阵上进行操作的机器学习代码.我已经看过JBLAS用于机器学习的东西(因为我已经在使用JNI用于JOGL,依赖于另一个本地库的缺点很小)),但我不确定它是否是GL-的最佳选择相关矩阵.思考?
我正在编写一个算法生成几何的WebGL应用程序.几何体将包含4到150个对象,每个对象由16到2048个点组成,通过drawElements绘制为TRIANGLE_STRIP.几何图形将是静态的大多数帧,但需要根据用户输入进行动画处理.在更新几何体时的这些帧中,可以添加或移除点/三元组.还需要在程序的生命周期内添加/删除对象.
在此上下文中分配/更新VBO的最有效方法是什么?我很确定我应该使用DYNAMIC_DRAW和bufferSubData来更新每个对象,但我是否想要过度分配一些巨大的VBO(假设每个对象的点数最坏的情况)并将每个对象定义为offset(对象编号*每个对象的最大大小),然后在最好的情况下有很多未分配的未使用的VBO内存?或者我应该尝试另一种方法吗?或者就内存占用而言,这是否足够小我是否过度思考?
我正在尝试在slf4j中设置一个带有logback的控制台记录器.我的logback配置如下:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<logger name="org.hibernate" level="INFO" />
<logger name="com.myapp" level="TRACE" />
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
即使Logback似乎设置没有问题,我似乎无法从任何记录器输出到我的控制台.我测试过LOGGER.isInfoEnabled()在我的应用程序中返回true.
Logback的StatusPrinter的输出:
17:25:11,736 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
17:25:11,737 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/Users/ryanspicer/NetBeansProjects/Oncewhen/build/classes/logback.xml]
17:25:11,996 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
17:25:11,996 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate …Run Code Online (Sandbox Code Playgroud) 我正在使用glslcs #include(不是核心规范 IIRC 的一部分,但在 shaderc 中受支持,它是 背后的引擎glslc,随 LunarG Vulkan SDK 分发)将 GLSL 着色器编译为 Vulkan 和 GL 4.5 的 SPIR-V。发出包含依赖信息的glslcgcc 样式 depsfiles ( ) 文件。[my_shader].[ext].d
我的项目是使用 cmake/ninja/MSVC 2017 构建的。
今天,我使用 cmake在磁盘上的着色器发生更改时custom_command进行调用glslc,作为我的主要目标的构建后步骤。但是,这不会捕获包含文件中的更改(根本不知道 .d 文件或其内容),因此当包含的 glsl 文件发生更改时重建着色器可能会让我自己和团队中的其他人陷入困境。
看起来 ninja 可以调用任意编译器,并且由于 ninja 知道如何处理 depsfiles,我应该能够强制 ninja 运行 glslc - 不确定其他构建系统,因为现在我们对 ninja 进行了标准化。
那么我如何告诉 cmake 配置 ninja 对特定目标使用 glslc 呢?或者有没有一个典型的方法来完成这个任务?它看起来像是一个cmake pull request,以添加对 glslc 的支持,因为编译器在 2016 年左右没有进入 cmake,所以无论我做什么都将是一个解决方法。
我正在重构现有的Java桌面应用程序,以从.properties文件加载国际化的UI文本标签.在应用程序生命周期中是否适合加载属性文件并在内存中填充字符串?现有的实现将每个组件的标签定义为:例如:public static final String foo = "bar";在构造函数中加载文本似乎效率低(因为它将在所有实例之间共享),但是在static {...}块中执行所有操作似乎也不是很明智.这里的最佳做法是什么?
我在 OS X 10.7.1 上。我已经下载了最新的 JavaCV 二进制文件,并从当前的 subversion checkout 构建了 OpenCV。cvLoadImage() 函数返回 null,无论我传递什么。我已验证我正在将有效路径传递给有效的 jpg 图像。其他 JavaCV 函数似乎返回了合理的值,但是由于我无法加载图像,因此我无法真正检查。
我想我可能在某处有错误,但我不熟悉 JavaCV 如何报告错误,所以我无法检查。
编辑:我可以验证整个 JavaCV 安装是否有效且正常运行,因为如果我使用 Java 的 ImageIO 加载图像,它可以工作,然后我可以对加载的图像进行操作,并保存图像(再次,通过 ImageIO) . SSCE 如下:
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_objdetect.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.io.File;
import java.awt.image.BufferedImage;
import com.googlecode.javacv.cpp.*;
import com.googlecode.javacpp.Loader;
class ImgLoadTest {
public static void main(String[] args) {
//comment out EITHER the BufferedImage bit OR the cvLoadImage portion.
//works
BufferedImage img = ImageIO.read(new File(args[0])); …Run Code Online (Sandbox Code Playgroud) 我需要用C++/Obj-C编写一个服务器,它可以从几个用Java和C++构建的客户端接收流数据.挑战:我需要有效地序列化和反序列化数据结构.一个C++客户端将生成128x96x2维浮点数组,加上一些元数据,大约每秒30次(视频功能).Java客户端将生成一个较小的特征向量 - 大概200个值,每秒1-10次.我已经辞去了自己的责任,推出自己的实施,但在此之前,我想提出建议.
我有一个CvSeq*包含通过在b&w输入图像上运行cvFindContors创建的CvSeq*上运行cvApproxPoly()而创建的多边形.我想访问从CvSeq*返回的每个多边形的CvPoints.代码到目前为止(轮廓是包含黑白输入图像的IplImage):
//create pointers to store data we're going to be calculating
CvMemStorage* storage = cvCreateMemStorage();
CvSeq* first_contour = NULL;
CvSeq* first_polygon = NULL;
//find the contours (edges) of the silhouette, in terms of pixels.
cvFindContours( &outlines,
storage,
&first_contour,
sizeof(CvContour),
CV_RETR_LIST );
//convert the pixel contours to line segments in a polygon.
first_polygon = cvApproxPoly(first_contour,
sizeof(CvContour),
storage,
CV_POLY_APPROX_DP,
2,
1);
Run Code Online (Sandbox Code Playgroud)
我可以使用cvDrawContour将多边形绘制到图像上,但我想迭代定义每个轮廓的每个2D点.看起来CvSeq*first_polygon的每个元素都包含单个多边形的点集(根据first_polygon-> total的值得出结论;但我不知道如何访问各个点.请帮助吗?