我正在使用SDL2&创建一个应用程序。 OpenGL,它在3台不同的计算机上运行良好。但是在另一台计算机(更新的arch linux)上,它没有,并且它崩溃了这个错误:
OpenGL context already created
所以我的问题是:如何检查是否已经创建了OpenGL上下文?然后,如果它已经创建,我该如何处理它呢?
如果我不能这样做,我该如何绕过这个问题?
答案 0 :(得分:3)
SDL2实际上不创建一个OpenGL上下文,而不需要创建一个。但是,如果你要求它在OpenGL完全不起作用时创建一个OpenGL上下文,SDL2会喜欢, erm ,自由式。 (实际原因是它在错误检查中做得不好,所以如果X无法创建OpenGL上下文,它会认为是因为已经创建了上下文)
因此,要回答第三个问题(“如何绕过此问题”),您必须在尝试使用OpenGL之前修复它。数字,对吧?
回答第一个和第二个,好吧,没有我知道的API调用......但是你可以采用稍微不同的方式:
SDL_Window* window = NULL;
SDL_GLContext* context = NULL; // NOTE: This is a pointer!
...
int main(int argc, char** argv) {
// Stuff here, initialize 'window'
*context = SDL_GL_CreateContext(window);
// More stuff here
if (context) {
// context is initialized!! yay!
}
return 2; // Just to confuse people a bit =P
}