我有以下文件:
java_classes/TerrainMesh.class
java_classes/TerrainMesh$Vertex.class
Run Code Online (Sandbox Code Playgroud)
它们是从以下来源编译的:
class TerrainMesh {
static class Vertex {
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在构建一个这样的JAR文件:
jar cf jar/cities.jar -C java_classes "cities/TerrainMesh.class" -C java_classes "cities/TerrainMesh$Vertex.class"
Run Code Online (Sandbox Code Playgroud)
检查JAR内容jar tf jar/cities.jar给了我:
META-INF/
META-INF/MANIFEST.MF
cities/TerrainMesh.class
Run Code Online (Sandbox Code Playgroud)
如您所见,TerrainMesh$Vertex.classJAR文件中缺少.可以预见,当我TerrainMesh使用内部Vertex类调用方法时,我得到了java.lang.NoClassDefFoundError.我很确定这是因为内部类不包含在JAR中.
如何将内部类放入JAR文件中?jar cf忽视它似乎很奇怪.
对于它的价值,我已经验证了jar tf在其他人制作的JAR文件上运行确实显示了内部类.
这是几个问题:
在do表示法中,每行必须返回相同的类型吗?例如,我可以在一个do返回IOmonad的块中写一行,而另一行返回一个整数吗?(我的理解,基于如何解除加糖>>和>>=似乎有效,答案是否定的.)
如果没有,那么编译器如何确定行必须返回的类型?在我看过的所有例子中,作者认为我们只是与IOmonad 合作已成定局.但是,对于给定的do块,您如何知道每条线必须返回什么?
再次假设#1的答案是否定的:你如何使用不能在do块内返回正确类型的monad的函数?例如,考虑这个websockets代码:
application :: MVar ServerState -> WS.Request -> WS.WebSockets WS.Hybi00 ()
application state rq = do
WS.acceptRequest rq
msg <- WS.receiveData :: WS.WebSockets WS.Hybi00 Text
return ()
Run Code Online (Sandbox Code Playgroud)
假设我要打印的值msg.我怎么会以与do块的类型不冲突的方式去做?
一些OpenGL纹理函数接受GLint我期望的那些GLenum.例如,glTexImage2D具有以下参数:
GLint internalformat
Run Code Online (Sandbox Code Playgroud)
文档描述该参数如下:
internalformat
指定纹理的内部格式.必须是以下符号常量之一:GL_ALPHA,GL_LUMINANCE,GL_LUMINANCE_ALPHA,GL_RGB,GL_RGBA.
大多数情况下,GLenum当值必须是几个符号常量之一时,API将使用.这是有道理的.但是这个(和其他一些与纹理相关的参数)是GLints.为什么?
当然,它们都是内心的整体,而在C中,区别并不重要.但这不是一个纯粹的学术问题.在其他更强类型的语言的OpenGL绑定中,区别GLint和GLenum重要的区别,因为一个是签名而另一个不签名.例如,在Haskell OpenGLRaw包中,所有符号常量都是GLenums,这意味着fromIntegral每次调用glTexImage2D和类似函数时都必须显式转换.
我正在构建一个包含许多小纹理的OpenGL应用程序.我估计在任何特定时刻屏幕上都会有几百个纹理.
任何人都可以推荐将所有这些纹理存储在内存中的最佳实践,以避免潜在的性能问题吗?
我也有兴趣了解OpenGL如何管理纹理.OpenGL会尝试将它们存储到GPU内存中吗?如果是这样,我可以依靠多少GPU内存?如果没有,OpenGL多久会将纹理从应用程序内存传递到GPU,当发生这种情况时,我是否应该担心延迟?
我正在使用OpenGL 3.3.我打算只使用现代功能,即没有立即模式的东西.
我有以下功能编译并成功运行:
-- Linearly interpolates between two values. That is, it is a function which:
-- returns y1 when x = x1
-- returns y2 when x = x2
-- returns a value between y1 and y2 when x1 < x < x2
linearInterp x1 y1 x2 y2 x =
(x - x1) * slope + y1
where slope = (y2 - y1) / (x2 - x1)
Run Code Online (Sandbox Code Playgroud)
我想给它一个类型签名:
linearInterp :: a -> b -> a -> b -> a -> b …Run Code Online (Sandbox Code Playgroud) 假设我调用glGenBuffers(或WebGL中的createBuffer),后来我丢失了缓冲区名称.例如,它超出范围,是垃圾收集,无论情况如何.类似于C编程,这似乎是一个内存泄漏.实际上,有一块已分配的内存(在GPU上),没有指向它的指针.我猜测GPU不能垃圾收集那个内存,因为它不能自动推断出客户端应用程序是用它完成的.
首先,这确实是内存泄漏吗?其次,如果我在丢失缓冲区名称之前调用glDeleteBuffers(或WebGL中的deleteBuffer),是否会释放内存并避免泄漏?
从http://kramdown.rubyforge.org/syntax.html#footnotes逐字获取示例,我在 IRB 中运行以下命令:
Kramdown::Document.new('This is some text.[^1]. Other text.[^footnote].').to_html
Run Code Online (Sandbox Code Playgroud)
返回:
"<p>This is some text.[^1]. Other text.[^footnote].</p>\n"
Run Code Online (Sandbox Code Playgroud)
这似乎表明默认情况下 Kramdown 中禁用脚注。我怎样才能启用它们?我查看了[选项文档](http://kramdown.rubyforge.org/options.html),但我没有看到那里列出的启用/禁用脚注的选项。
在iPad应用程序中,我正在使用UIView的自定义子类和UIViewController.这是视图标题:
@interface pdfView : UIView {
CGPDFDocumentRef doc;
}
-(void)setDoc:(CGPDFDocumentRef)newDoc;
@end
Run Code Online (Sandbox Code Playgroud)
这是控制器头:
@interface iPadPDFTestViewController : UIViewController {
CGPDFDocumentRef doc;
}
- (void)loadPDF;
@end
Run Code Online (Sandbox Code Playgroud)
控制器实现的一部分:
- (void)viewDidLoad {
[super viewDidLoad];
[self loadPDF];
[self.view setDoc:doc];
}
Run Code Online (Sandbox Code Playgroud)
在Interface Builder中,我将视图对象设置为使用类pdfView.
在编译时,[self.view setDoc:doc];会发出警告"'UIView'可能无法响应'--setDoc'." 我猜这个警告出现是因为编译器认为它正在查看UIView(它没有实现setDoc方法)而不是pdfView.但为什么会这么想?我怎么能告诉它它正在看什么类,以便清除警告?
在OpenGL 2.1中,我将位置和法线向量传递给我的顶点着色器.然后顶点着色器将a varying设置为法线向量,因此理论上它是对每个三角形的法线进行线性插值.(据我所知,这是Phong着色的基础.)
在片段着色器中,我使用法线和Lambert定律来计算漫反射.这可以按预期工作,除了顶点之间的插值看起来很有趣.具体来说,我看到了一个星暴影响,其中沿顶点之间的边缘有明显的"热点".
这是一个例子,不是来自我自己的渲染,而是展示完全相同的效果(请参见页面中间的黄金球):http: //pages.cpsc.ucalgary.ca/~slongay/pmwiki-2.2.1/pmwiki.php ?N = CPSC453W11.Lab12
维基百科说这是Gauraud阴影的一个问题.但正如我所理解的那样,通过插入法线并运行每个片段的光照计算,我使用的是Phong模型,而不是Gouraud.是对的吗?
如果我使用更精细的网格,我认为这些星暴会更不明显.但是添加更多三角形是解决这个问题的唯一方法吗?我认为有一种方法可以在没有爆炸效果的情况下进行平滑插值.(我确实在其他地方的粗糙网格物体上看到了非常平滑的阴影,例如在3D Studio Max中.但也许他们正在做一些比插入法线更复杂的东西.)