我已经安装了 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
,但我忘记了其余的。
有什么方法可以发现哪个 OpenGL 函数或特性导致了该消息?
调试回调可以同步或异步调用。请参阅调试输出 - 获取消息启用同步调试输出:
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
因此,您可以在调试消息的回调中设置断点,并在调用堆栈上查看哪个函数导致了问题。
此外,可以对输出进行过滤。请参阅如何使用 glDebugMessageControl。例如,将输出限制为错误消息:
glDebugMessageControl(
GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_ERROR, GL_DONT_CARE, 0, NULL, GL_TRUE);