我有一個用于學習 ogl 和 3d 圖形的 opengl 玩具代碼。我正在使用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);
? 它們對我來說似乎是資訊性的,按照這個速度,它們主要是噪音
uj5u.com熱心網友回復:
我的問題是為什么我沒有在 Windows 中收到這些訊息
除錯訊息完全是特定于實作的。在最壞的情況下,您根本無法收到任何訊息。不同驅動程式的詳細程度可能有很大差異,Linux 上的 mesa 開源驅動程式明顯處于更詳細的范圍。Nvidia Win/Linux 在這方面也相當不錯,但 Windows 上的 AMD 和 INtel 可能相當缺乏。
以及為什么即使我將回呼從 [...] 更改為
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH_AMD , 0, nullptr, GL_TRUE);
因為glDebugMessageControl(..., GL_DEBUG_SEVERITY_HIGH_AMD, ..., GL_TRUE)
只是啟用SEVERITY_HIGH
訊息(無論如何之前都已啟用),它不會禁用SEVERITY_NOTIFICATION
默認情況下仍啟用的訊息,如擴展GL_KHR_debug
規范中所述(除錯輸出擴展的其他變體,如 AMD 的類似):
可以啟用或禁用訊息。不會生成被禁用的訊息。所有訊息最初都是啟用的,除非它們分配的嚴重性是
DEBUG_SEVERITY_LOW
。可以使用命令更改訊息的啟用狀態DebugMessageControl
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/471120.html
上一篇:無法跟蹤堆疊跟蹤