我已经设法实现了OpenGL调试上下文(终于,太棒了!)而且大多数事情看起来都很好,但是我看到了一个性能警告,我找不到关于它的好信息。
[ 0.0330 - 388.6340] OpenGL Version: 4.2.0 Quadro 600/PCIe/SSE2 NVIDIA Corporation
[ 0.0000 - 549.1920] OpenGL: Program/shader state performance warning: Fragment Shader is going to be recompiled because the shader key based on GL state mismatches. [source=API type=PERFORMANCE severity=MEDIUM id=131218]
我确实理解这与自上次我编译着色器(S)以来OpenGL状态的改变有关。
我们有四个着色器,它们在上下文之间共享的纹理上运行,只有在创建新上下文后才会显示错误信息。因此,上下文创建可能会改变OpenGL状态机的状态。有没有可能不可能绕过它,因为每个上下文都从自己的“干净”状态机开始?
这可能不是什么大问题,因为它只在上下文创建时发生,但我们正在运行许多上下文(至少同时运行15个上下文),所以看看我是否能够修复警告并一劳永逸地摆脱它将是一件有趣的事情。
发布于 2012-11-02 18:27:37
在what little info I've been able to find中,NVIDIA希望着色器编译时的一些OpenGL状态与着色器绑定时的状态相匹配&用于渲染。
就我个人而言,在我们获得更多信息之前,我只是在我的调试回调函数中过滤掉了这条消息:
static void CALLBACK DebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, GLvoid *userParam)
{
// Suppress some useless warnings
switch(id)
{
case 131218: // NVIDIA: "shader will be recompiled due to GL state mismatches"
return;
default:
break;
}
// Print/handle message as usual
}
发布于 2013-02-26 00:51:42
在完成一些几何图形的绘制后,我通过调用glUseProgram(0)消除了该消息,否则下一次使用programId的glUseProgram()将触发该消息。
https://stackoverflow.com/questions/12004396
复制相似问题