我有一个opengl玩具代码,我用它来学习ogl和3d图形。我用glDebugMessageCallback
和glDebugMessageControl
来检查OGL错误,在windows上我没有任何消息。我现在在linux上测试我的代码,我得到了很多这样的消息:
Debug message (1): Shader Stats: SGPRS: 16 VGPRS: 12 Code Size: 88 LDS: 0 Scratch: 0 Max Waves: 8 Spilled SGPRs: 0 Spilled VGPRs: 0 PrivMem VGPRs: 0 DivergentLoop: 0, InlineUniforms: 0, ParamExports: 2, (VS, W64)
Source: Shader Compiler
Type: Other
Severity: notification
以下是有关我的环境的更多信息
[OpenGL] OpenGL version loaded: 4.6
[OpenGL] Vendor: AMD
[OpenGL] Renderer: AMD Radeon RX 570 Series (polaris10, LLVM 13.0.1, DRM 3.44, 5.17.3-302.fc36.x86_64)
[OpenGL] Version: 4.6 (Compatibility Profile) Mesa 22.0.1
[OpenGL] Version GLSL: 4.60
我的问题是为什么我在windows中没有得到这些消息,为什么即使我将回调从
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE , 0, nullptr, GL_TRUE);
至
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH_AMD , 0, nullptr, GL_TRUE);
?它们对我来说似乎是信息性的,以这种速度它们主要是噪音
1条答案
按热度按时间1l5u6lss1#
我的问题是为什么我在windows中没有收到这些消息
调试消息完全是特定于实现的。在最坏的情况下,你可能根本得不到任何消息。不同驱动程序的冗长程度可能有很大差异,Linux上的梅萨开源驱动程序显然是在更冗长的一端。Nvidia Win/Linux在这方面也很好,但Windows上的AMD和INtel可能相当缺乏。
为什么我一直得到他们,即使我改变我的回调从[...]到
因为
glDebugMessageControl(..., GL_DEBUG_SEVERITY_HIGH_AMD, ..., GL_TRUE)
只是 * 启用 *SEVERITY_HIGH
消息(之前已经启用),所以它不会禁用SEVERITY_NOTIFICATION
,SEVERITY_NOTIFICATION
在默认情况下仍然是启用的,如GL_KHR_debug
extension specification中所述(调试输出扩展的其他变体,如AMD扩展是类似的):可以启用或禁用消息。将不会生成禁用的消息。所有消息最初都是启用的,除非为其分配的严重性为
DEBUG_SEVERITY_LOW
。可以使用命令DebugMessageControl
更改消息的启用状态。