Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 是什么导致GLSL基于状态重新编译顶点着色器?_Opengl_Glsl_Vertex Shader - Fatal编程技术网

Opengl 是什么导致GLSL基于状态重新编译顶点着色器?

Opengl 是什么导致GLSL基于状态重新编译顶点着色器?,opengl,glsl,vertex-shader,Opengl,Glsl,Vertex Shader,我使用的是GL\u ARB\u debug\u输出扩展。司机警告我: 程序/着色器状态性能警告:正在根据GL状态重新编译程序16中的顶点着色器。 因此,在编译着色器之前,我尝试设置各种GL状态,包括: GL_混合物, GL_CULL_面, GL\U深度测试, 多边形偏移, 还有blendfunc 但它仍然在第一次绘制时重新编译 哪些典型的状态会导致驱动程序重新编译顶点着色器?我最近遇到了这个问题。取消绑定顶点阵列对象时,会出现此警告。删除带有glBindVertexArray(0)的行后,警告消

我使用的是GL\u ARB\u debug\u输出扩展。司机警告我:

程序/着色器状态性能警告:正在根据GL状态重新编译程序16中的顶点着色器。

因此,在编译着色器之前,我尝试设置各种GL状态,包括:

GL_混合物GL_CULL_面GL\U深度测试, 多边形偏移, 还有blendfunc

但它仍然在第一次绘制时重新编译


哪些典型的状态会导致驱动程序重新编译顶点着色器?

我最近遇到了这个问题。取消绑定顶点阵列对象时,会出现此警告。删除带有
glBindVertexArray(0)
的行后,警告消息消失。

“但它在第一次绘制时仍会重新编译。“第一次绘制时”是什么意思?”?这是您第一次使用该着色器进行渲染吗?“我尝试在编译着色器之前设置各种GL状态”没有着色器编译器/链接器会假设编译/链接时的OpenGL状态准确反映使用时将出现的OpenGL状态。所以这真的不重要。是的,首先渲染。我想避免在那个时候重新编译。如果编译时的状态与渲染时的状态相同,我希望驱动程序不会重新编译。“如果编译时的状态与渲染时的状态相同,我希望驱动程序不会重新编译。”你不应该这么想。驱动程序编写者当然不希望这样,所以你也不应该这样做。@NicolBolas那些同样的“驱动程序编写者”也在性能警告中加入了。如果无法避免重新编译,则警告毫无意义。为什么要修复错误?我在根据Cherno的教程重构着色器代码后遇到了它。该错误是从OpenGL 4.3的调试消息回调系统触发的。此外,如果在绘图之前调用
glUseProgram(0)
,则错误也会消失,因此不需要使用
glBindVertexArray(0)
删除该行。