我已经安装了 OpenGL 调试回调并启用了 GL_DEBUG_OUTPUT
.回调看起来像这样:
void glMsgCallback( GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar* message,
const void* userParam )
{
std::ostringstream os;
os << "GL LOG: type = " << type << ", severity = " << severity << ", message = " << message;
log(os.str());
}
这就是我在日志文件中得到的:GL LOG: type = 33361, severity = 33387, message = type: 1, local: 0, shared: 0, gpr: 6, inst: 18, bytes: 192
我如何解释这些数据?有什么方法可以发现是哪个 OpenGL 函数或特性导致了该消息?我发现类型 33361 对应于 GL_DEBUG_TYPE_OTHER
, 严重性 33387 代表 GL_DEBUG_SEVERITY_NOTIFICATION
,但我忘记了其余的。
最佳答案
Is there any way to discover which OpenGL function or feature is causing the message?
可以同步或异步调用调试回调。见 Debug Output - Getting messages启用同步调试输出:
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
因此,您可以在调试消息的回调中设置断点,并在调用堆栈上查看哪个函数导致了问题。此外,可以过滤输出。见 How to use glDebugMessageControl .例如,将输出限制为错误消息:
glDebugMessageControl(
GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_ERROR, GL_DONT_CARE, 0, NULL, GL_TRUE);
关于opengl - 如何解释 GL_DEBUG_OUTPUT 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65123385/