我已经设法实现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]
Run Code Online (Sandbox Code Playgroud)
我知道自从上次编译着色器以来,它与OpenGL状态有关.
我们拥有的是在上下文之间共享的纹理上运行的四个着色器,并且错误信息仅在创建新上下文后显示.因此,上下文创建可能会改变OpenGL状态机的状态.有可能甚至无法解决它,因为每个上下文都以它自己的"干净"状态机开始吗?
这可能不是什么大问题,因为它只发生在上下文创建时,但是我们运行了很多上下文(至少同时有15个上下文),所以看看我是否能够修复警告会很有趣并一劳永逸地摆脱它.
从我能找到的一些小信息来看,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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4356 次 |
| 最近记录: |