2

目前我正在开发一个使用 GLEW 和 GLX(在 X11 上)的应用程序。

逻辑工作如下......

glewInit();  /* <- needed so 'GLXEW_ARB_create_context' is set! */
if (GLXEW_ARB_create_context) {
    /* opengl >= 3.0*/
    .. get fb_config ..
    context = glXCreateContextAttribsARB(...);
}
else {
    /* legacy context */
    context = glXCreateContext(...);
}

我遇到的问题GLXEW_ARB_create_context是由 glew 初始化,但初始化 glew 调用glGetString,如果它在之前调用(glXCreateContextAttribsARB/ glXCreateContext)会崩溃。

请注意,这只发生在 Mesa 的软件光栅化器(使用 swrast 编译的 libGL.so)中。所以它也可能是 Mesa 的问题。

4

1 回答 1

2

更正,这适用于 Mesa-SWRast 和 NVidia 的专有 OpenGL 驱动程序,但与英特尔的 OpenGL 有段错误。 尽管这可能是英特尔驱动程序中的一个错误。需要检查其他项目如何处理这个问题。

这种情况下的原因是 intelglXGetCurrentDisplay()在 glx 初始化之前返回 NULL(另一个 catch-22)。

所以现在,据我所知,最好在创建上下文glew之前避免glx,而是直接使用 glx ,例如:

    if (glXQueryExtension(m_display, NULL, NULL)) {
        const char *glx_ext = glXGetClientString(display, GLX_EXTENSIONS);
        if (... check_string_for_extension(glx_ext, "GLX_SOME_EXTENSION")) {
            printf("We have the extension!\n");
        }
    }

老答案...

找到了解决方案(回想起来似乎很明显!)

  • 第一次通话glxewInit()
  • 查看GLXEW_ARB_create_context
  • glXCreateContextAttribsARB用or创建上下文glXCreateContext
  • 称呼glewInit()
于 2015-10-12T04:03:41.313 回答