【发布时间】:2019-08-12 02:01:02
【问题描述】:
我正在使用 GL_ARB_debug_output 扩展。司机给了我这个警告:
程序/着色器状态性能警告:程序 16 中的顶点着色器正在根据 GL 状态重新编译。
所以,我尝试在编译着色器之前设置各种 GL 状态,包括:
GL_BLEND, GL_CULL_FACE, GL_DEPTH_TEST, 多边形偏移, 和 blendfunc。
但它仍然会在第一次绘制时重新编译。
可能导致驱动程序重新编译顶点着色器的典型状态有哪些?
【问题讨论】:
-
"但它仍然会在第一次绘制时重新编译。" 你是什么意思“在第一次绘制时”?这是您第一次使用该着色器进行渲染吗? “我在编译我的着色器之前尝试设置各种 GL 状态” 没有着色器编译器/链接器会假设编译/链接时的 OpenGL 状态准确地反映了将出现的 OpenGL 状态使用时间。所以真的没关系。
-
是的,第一次渲染。我想避免当时重新编译。如果编译时的状态与渲染时的状态相同,我希望驱动程序不会重新编译。
-
"如果编译时的状态与渲染时的状态相同,我希望驱动程序不会重新编译。" 你不应该这样。驱动程序编写者当然不会期望它,所以你也不应该。
-
@NicolBolas 不过,那些相同的“驱动程序编写者”也发出了性能警告。如果无法避免重新编译,则警告毫无意义。
标签: opengl glsl vertex-shader