这是基于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
的调用对我的实现无效。
有人知道我在这里缺少什么吗? 谢谢!