OpenGL - 启用调试 - 运行时 System.AccessViolationException
Posted
技术标签:
【中文标题】OpenGL - 启用调试 - 运行时 System.AccessViolationException【英文标题】:OpenGl - enable debugging - runtime System.AccessViolationException 【发布时间】: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 下面尝试设置回调。谢谢! 【参考方案1】:glewInit();
必须在之前调用
if (get_debug_gl())
glEnable(GL_DEBUG_OUTPUT);
...
【讨论】:
以上是关于OpenGL - 启用调试 - 运行时 System.AccessViolationException的主要内容,如果未能解决你的问题,请参考以下文章
在哪里可以找到“启用非托管代码调试”以便能够在系统运行时编辑代码?