Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SDL2-检查是否创建了OpenGL上下文_C++_Linux_Opengl_Sdl 2_Openglcontext - Fatal编程技术网

C++ SDL2-检查是否创建了OpenGL上下文

C++ SDL2-检查是否创建了OpenGL上下文,c++,linux,opengl,sdl-2,openglcontext,C++,Linux,Opengl,Sdl 2,Openglcontext,我正在使用SDL2和OpenGL创建一个应用程序,它在3台不同的计算机上运行良好。但在另一台计算机(更新的arch linux)上,它没有这样做,它会因以下错误而崩溃: OpenGL context already created 所以我的问题是:如何检查OpenGL上下文是否已经创建?然后,如果它已经被创建了,我如何获得它的句柄 如果我做不到这一点,我如何绕过这个问题?SDL2确实创建了一个OpenGL上下文,而您没有要求创建一个。然而,如果你要求它在OpenGL根本不工作的时候创建一个Op

我正在使用SDL2和OpenGL创建一个应用程序,它在3台不同的计算机上运行良好。但在另一台计算机(更新的arch linux)上,它没有这样做,它会因以下错误而崩溃:

OpenGL context already created
所以我的问题是:如何检查OpenGL上下文是否已经创建?然后,如果它已经被创建了,我如何获得它的句柄


如果我做不到这一点,我如何绕过这个问题?

SDL2确实创建了一个OpenGL上下文,而您没有要求创建一个。然而,如果你要求它在OpenGL根本不工作的时候创建一个OpenGL上下文,那么SDL2就有点喜欢自由风格。(实际原因是它在错误检查方面做得不好,因此如果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
}