如何使用glDebugMessageControl

时间:2018-08-22 08:44:26

标签: opengl

这是基于https://www.khronos.org/opengl/wiki/Debug_Output中的调试回调示例,而某些情况是基于https://learnopengl.com/In-Practice/Debugging

设置回调:

void GLAPIENTRY
MessageCallback( GLenum source,
                 GLenum type,
                 GLuint id,
                 GLenum severity,
                 GLsizei length,
                 const GLchar* message,
                 const void* userParam )
{
  fprintf( stderr, "GL CALLBACK: %s type = 0x%x, severity = 0x%x, message = %s\n",
           ( type == GL_DEBUG_TYPE_ERROR ? "** GL ERROR **" : "" ),
            type, severity, message );
}

然后,在创建窗口等之后,将其注册:

glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
glEnable              ( GL_DEBUG_OUTPUT );    

if(glDebugMessageCallback){
    std::cout << "Register OpenGL debug callback " << std::endl;
    glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
    GLuint unusedIds = 0;
    //glDebugMessageCallback( MessageCallback, 0 ); also tried setting up the callback here
    glDebugMessageControl(GL_DONT_CARE,
                          GL_DONT_CARE,
                          GL_DONT_CARE,
                          0,
                          &unusedIds,
                          GL_TRUE);
    glDebugMessageCallback( MessageCallback, 0 );
}
else
    std::cout << "glDebugMessageCallback not available" << std::endl;

此后,我通过致电产生错误消息

glClear(GL_DEPTH);   

可正常使用。它的来源是GL_DEBUG_SOURCE_API。 但是,如果我设置

glDebugMessageControl(GL_DEBUG_SOURCE_APPLICATION,
                              GL_DONT_CARE,
                              GL_DONT_CARE,
                              0,
                              &unusedIds,
                              GL_TRUE);

该回调仍然发出,尽管据我所知,这不应该是由于GL_DEBUG_SOURCE_APPLICATION过滤器引起的。 其他过滤器组合也会发生这种情况,因此我假设对glDebugMessageControl的调用对我的实现无效。

有人知道我在这里缺少什么吗? 谢谢!

0 个答案:

没有答案