小编Pek*_*kka的帖子

ARB_DEBUG_OUTPUT访问冲突

我使用ARB_DEBUG_OUTPUT扩展来捕获OpenGL错误,但程序在调用我的错误记录功能后崩溃.

我使用此博客文章中的代码设置了扩展程序.这是我用来设置回调的确切代码:

glDebugMessageCallback((GLDEBUGPROC)debugCallbackARB, stderr);
glEnable(GL_DEBUG_OUTPUT);
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB);
Run Code Online (Sandbox Code Playgroud)

这里的 debugCallbackARB

void debugCallbackARB(GLenum source, GLenum type, GLuint id, GLenum severity,
                     GLsizei length, const GLchar *message, GLvoid *userParam)
{
    (void)length;
    FILE *outFile = (FILE*)userParam;
    char finalMessage[256];
    formatDebugOutputARB(finalMessage, 256, source, type, id, severity, message);
    logger->debug("%s", finalMessage);
}
Run Code Online (Sandbox Code Playgroud)

我使用glEnable无效参数来触发回调:

glEnable(GL_DEPTH);
Run Code Online (Sandbox Code Playgroud)

成功打印错误消息后,程序会触发未处理的异常 Access violation executing location 0x00000500.

我使用SDL2创建OpenGL 3.3核心配置文件调试上下文和GL Load来获取GL扩展指针.

glEnable如果禁用扩展,程序不会因无效调用而崩溃.

我怎样才能解决这个问题?

电脑规格:

  • NVIDIA GeForce GT 630
  • ForceWare 327.23
  • Windows 7 x64

编辑:我也尝试手动调用调试回调,但它不会触发异常.

c++ opengl visual-c++ glload

3
推荐指数
1
解决办法
751
查看次数

标签 统计

c++ ×1

glload ×1

opengl ×1

visual-c++ ×1