这是我的代码:
void Game::init()
{
SDL_Init(SDL_INIT_EVERYTHING);
_window = SDL_CreateWindow("Game Engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, _screenWidth, _screenHeight, SDL_WINDOW_OPENGL);
}
由于某些原因,这不起作用,但是当我将 SDL_WINDOW_OPENGL
替换为 SDL_WINDOW_RESIZABLE
或 SDL_WINDOW_FULLSCREEN
时,它工作正常。当我使用 SDL_WINDOW_OPENGL | 时它也不起作用SDL_WINDOW_FULLSCREEN
。有什么我可以做的吗?
我正在将 Kdevelop 与 Ubuntu 一起使用,如果这有什么不同的话。
更新:
所以我想出了问题所在。事实证明,当您构建同时支持 GLX 和 EGL 的 SDL 时,它总是使用 EGL。我必须用 --disable-video-opengles
最佳答案
是的,您很可能支持 OpenGL,但是是哪个版本?在 Ubuntu 上,您可以通过打开终端并键入 glxinfo | 来获取此信息。 grep OpenGL
,它应该为您提供支持的最高版本。之后,您需要在 SDL 中设置这些属性。例如,要创建 OpenGL 3.3 上下文:
SDL_Init(SDL_INIT_VIDEO);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
确保在创建上下文或窗口之前执行此操作。
关于c++ - SDL 无法创建 OpenGL 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36081319/