opengl - 如何解释 GL_DEBUG_OUTPUT 消息?

标签 opengl logging

我已经安装了 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/

相关文章:

opengl - freeglut 和 glut 的主要区别是什么

opengl - GLEW 有什么作用,我为什么需要它?

OpenGL 相当于 OpenGL ES 2.0 的扩展 GL_EXT_shader_framebuffer_fetch

opengl - 使用 CMake 将 stb_image 包含到 OpenGL 项目中

python - 使用 Fabric 和 Python 进行日志记录

node.js - 附加到 winston 记录的最后一行

google-app-engine - GAE/J 请求日志格式分解

java - 我可以设置GLSL版本吗?

c++ - 如何使用 std::log 作为功能?

c# - 评估配置的日志提供者的日志级别