根据我所读到的,要在着色器中对模板纹理进行示例,我需要设置GL_DEPTH_STENCIL_TEXTURE_MODE
,所以我这样做了:
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, GL_STENCIL_COMPONENTS);
但我得到一个无效的枚举..。为什么会这样?
发布于 2015-07-16 15:18:06
根据手册页,这个调用的正确枚举值将是GL_STENCIL_COMPONENT
,而不是GL_STENCIL_COMPONENTS
(注意后面的S
)。
事实证明,手册页是错误的。不幸的是这并不罕见。如果您在规范中查找它(例如,OpenGL 4.5规范文档中第225页的表8.17 ),则DEPTH_STENCIL_TEXTURE_MODE
的有效值是GL_DEPTH_COMPONENT
和GL_STENCIL_INDEX
。
在此基础上,呼吁应:
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, GL_STENCIL_INDEX);
此特性要求OpenGL 4.3或更高版本。
GL_STENCIL_COMPONENTS
是glGetInternvalFormativ()
的有效参数,而不是glTexParameteri()
的有效参数。
发布于 2015-07-16 10:06:15
我假设您只从核心dll文件opengl32.dll中添加了不对称函数,并且只添加了gl.h或可能添加了glu.h头文件。这些标头不只是从外部直接链接库文件中从图形驱动程序加载函数。如果您遍历opengl32.dll中定义的函数,您可能找不到想要使用的所有函数,例如与顶点缓冲区相关的函数。然而,在gl.h中可能没有定义某些常量,例如GL_DEPTH_STENCIL_TEXTURE_MODE。这些函数可以根据操作系统通过适当的加载方法加载,在windows中您可以使用wglGetProcAddress
。有关更多信息,请阅读这文章。此外,这些常量也可以在其他地方定义。
幸运的是,已经为您完成了这项工作的是格鲁,如果您搜索GL_DEPTH_STENCIL_TEXTURE_MODE,您可能会找到分配给它的0x90EA。如果您只想使用不需要初始化GLEW的常量,但如果要使用,则至少必须调用glewInit
。
https://stackoverflow.com/questions/31449740
复制相似问题