我正在使用 SDL2 和 OpenGL 创建一个应用程序,它在 3 台不同的计算机上运行良好。但是在另一台计算机(更新的 Arch linux)上,它没有,并且它因以下错误而崩溃:
OpenGL context already created
所以我的问题是:如何检查是否已经创建了 OpenGL 上下文?然后,如果它已经创建,我如何获得它的句柄?
如果我不能这样做,我该如何绕过这个问题?
我正在使用 SDL2 和 OpenGL 创建一个应用程序,它在 3 台不同的计算机上运行良好。但是在另一台计算机(更新的 Arch linux)上,它没有,并且它因以下错误而崩溃:
OpenGL context already created
所以我的问题是:如何检查是否已经创建了 OpenGL 上下文?然后,如果它已经创建,我如何获得它的句柄?
如果我不能这样做,我该如何绕过这个问题?
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
}