【发布时间】:2019-11-22 14:29:58
【问题描述】:
我已经阅读了多篇关于启用 glDebugMessageCallback 的文章,但我没有收到任何编译错误。但是,当我运行程序时,我在 glDebugMessageCallback 调用上得到了运行时 System.AccessViolationException。我在我的设置中使用 GLEW 和 GLFW。
当我运行 GlewInfo 时,我可以看到调试可用:
GL_ARB_debug_output: OK
--------------------
- glDebugMessageCallbackARB: OK
- glDebugMessageControlARB: OK
- glDebugMessageInsertARB: OK
- glGetDebugMessageLogARB: OK
GL_KHR_debug: OK
-------------
- glDebugMessageCallback: OK
- glDebugMessageControl: OK
- glDebugMessageInsert: OK
- glGetDebugMessageLog: OK
- GL_KHR_no_error: MISSING
在我的代码中,我在创建窗口之前设置了 glfw 窗口提示:
if (get_debug_gl())
{
glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
}
我尝试通过以下方式启用调试:
if (get_debug_gl())
{
glEnable(GL_DEBUG_OUTPUT);
if (GLEW_KHR_debug)
{
gl_log_debug("KHR_debug extension found\n");
GLDEBUGPROC p = &(debug_gl_callback);
///glDebugMessageCallback(p, NULL); /// @todo GRRRRR : this throws runtime System.AccessViolationException
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
gl_log_debug("debug callback enabled\n");
}
else if(GL_ARB_debug_output)
{
gl_log_debug("GL_ARB_debug_output extension found\n");
GLDEBUGPROC p = &(debug_gl_callback);
glDebugMessageCallbackARB(p, NULL); /// @todo GRRRRR : this throws runtime System.AccessViolationException
gl_log_debug("debug callback enabled\n");
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB);
}
else
{
gl_log_debug("KHR_debug extension NOT found\n");
}
}
观察:
- GLEW_KHR_debug 是假的,尽管 glewinfo 报告它应该是真的。如果我绕过它,我会收到运行时错误
- 如果我通过 glDebugMessageCallbackARB 调用运行代码,我会得到相同的运行时错误。
那里的任何人都可以给我一个关于我缺少什么的提示吗?编写没有消息的 OpenGL 就像开车带着眼罩。
【问题讨论】:
-
相对于上面的代码,你在哪里初始化 GLEW?您使用的是当前的 GLEW2 版本,还是仍使用核心配置文件中损坏的 GLEW1.x?
-
@derhass 你成功了。我有 glewInit(); call 下面尝试设置回调。谢谢!
标签: c++ opengl glfw glew opengl-4