我正在通过使用发现着色器,并且遇到了一个奇怪的问题。
我的片段着色器需要ARB_robustness
扩展才能正常运行。 GLEW肯定我有这个扩展名:
assert(GLEW_ARB_robustness); // Passes
...但是当我在我的着色器中require
时...
#extension GL_ARB_robustness : require
...着色器编译器无法识别它。
0(3) : error C0202: extension ARB_robustness not supported
GLEW已正确初始化,只要我不尝试使用该扩展程序,一切正常。
这个问题可能是什么原因,我该如何解决?提前谢谢。
更新:我在朋友的帮助下嘲笑我,我按照他的建议运行glxinfo
,扩展的名称确实出现在输出中。
答案 0 :(得分:5)
GL_ARB_robustness
不是GLSL修改扩展。此扩展的目的是使得与OpenGL API的交互更加健壮,因为可以捕获对内存的越界访问。有点像sprintf
和snprintf
之间的区别。由于这不是着色器扩展,因此在着色器中声明使用它是没有意义的。
EDIT 除了实际具有健壮性支持外,还必须在启用健壮性属性的情况下创建OpenGL上下文:请参阅https://www.opengl.org/registry/specs/ARB/wgl_create_context_robustness.txt和https://www.opengl.org/registry/specs/ARB/glx_create_context_robustness.txt - 实际启用了健壮性在上下文中,着色器也可以通过。