c++ - SDL 无法创建 OpenGL 窗口

标签 c++ opengl sdl

这是我的代码:

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_RESIZABLESDL_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/

相关文章:

OpenGL如何用顶点着色隐藏三角形之间的线?

opengl - Texture的内部格式

c - SDL 黑白转换中的预期标识符和未声明的标识符错误

c - C 中的 Printf 函数在 while 循环完成之前不打印

c++ - 为什么捕获 std::bad_cast 在 FreeBSD 9 上不起作用?

c++ - SQRT 对比 RSQRT 对比 SSE _mm_rsqrt_ps 基准

c++ - CMake Clang无法编译OpenGL Hello World

c++ - OpenGL 中的文本使用 SDL_TTF

C++ - 在派生类中静态初始化基类保护的成员变量

c++ - 如何将对象列表传递给函数