目前我正在开发一个使用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)中。所以它也可能是梅萨的一个问题。
答案 0 :(得分:2)
更正,这适用于Mesa-SWRast和NVidia的固有OpenGL驱动程序,但是使用英特尔OpenGL的段错误。 虽然可能这是英特尔驱动程序中的错误。需要检查其他项目如何处理这个问题。
在这种情况下的原因是intel glXGetCurrentDisplay()
在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
或glXCreateContext
。- 致电
glewInit()