根据我的阅读,要在着色器中对模板纹理进行采样,我需要设置GL_DEPTH_STENCIL_TEXTURE_MODE
,所以我这样做了:
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, GL_STENCIL_COMPONENTS);
但是我的枚举无效......为什么会这样?
答案 0 :(得分:4)
根据man page,此调用的正确枚举值为GL_STENCIL_COMPONENTS
,而不是S
(请注意尾随DEPTH_STENCIL_TEXTURE_MODE
)。
事实证明,手册页错了。不幸的是,这并不罕见。如果您在规范中查找(例如,OpenGL 4.5规范文档中的第225页的表8.17),GL_DEPTH_COMPONENT
的有效值为GL_STENCIL_INDEX
和glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, GL_STENCIL_INDEX);
。
基于此,呼叫应该是:
GL_STENCIL_COMPONENTS
此功能需要OpenGL 4.3或更高版本。
glGetInternvalFormativ()
是glTexParameteri()
的有效参数,但不适用于a {
background-image:url('myimage.jpg');
}
a:hover {
background-image:url('myotherimage.jpg');
}
。
答案 1 :(得分:0)
我假设您只从核心dll文件opengl32.dll中初始化函数,并且只添加了gl.h或者可能是glu.h标头。这些标头不仅从外部直接链接库文件加载图形驱动程序中的函数。如果您浏览opengl32.dll中定义的函数,则可能找不到您可能想要使用的所有函数,例如与顶点缓冲区相关的函数。然而,在您可能引用的gl.h中可能没有定义某些常量,例如GL_DEPTH_STENCIL_TEXTURE_MODE。这些函数可以根据操作系统通过适当的加载方法加载,在Windows中可以使用wglGetProcAddress
。有关详细信息,请阅读this文章。这些常量也可以在其他地方定义。
幸运的是,已经有GLEW已经完成了这项工作,如果你在glew.h中搜索GL_DEPTH_STENCIL_TEXTURE_MODE,你可能会发现分配给它的0x90EA。如果你只想使用你不必初始化GLEW的常数,但是如果你这样做,你至少要打电话给glewInit
。