【问题标题】:SDL can't create OpenGL windowsSDL 无法创建 OpenGL 窗口
【发布时间】:2016-03-18 09:58:13
【问题描述】:

这是我的代码:

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 时它也不起作用。有什么我能做的吗?

我在 Ubuntu 上使用 Kdevelop,如果这有什么不同的话。

更新:

所以我知道出了什么问题。事实证明,当您构建同时支持 GLX 和 EGL 的 SDL 时,它总是使用 EGL。我必须用--disable-video-opengles编译它

【问题讨论】:

  • SDL_GetError() 说什么?
  • @TristanBrindle 它说“视频驱动程序不支持 OpenGL”...这很奇怪,因为我知道我的驱动程序支持它。
  • 嗯,这给了你关于它为什么不工作的答案......我会检查你的视频驱动程序的安装,或者你的 SDL 库的编译标志
  • @TristanBrindle 好的,谢谢!

标签: c++ opengl sdl


【解决方案1】:

是的,您很可能确实支持 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);

确保在创建上下文或窗口之前执行此操作。

【讨论】:

  • 我确实尝试过。我知道我的显卡支持 OpenGL 3.5,但我认为问题出在 SDL。所有其他 3D 应用程序似乎都运行良好,包括 glxgear。
  • SDL_Init 应该是first SDL call in your program
  • @Kash OpenGL 没有这样的版本,OpenGL 3 中的最高版本是 3.3
  • @Nasser 实际上最高版本是 4.5。它在 OpenGL 的网站上说:OpenGL 4.5... 甚至我的显卡网站都说我的模型支持 OpenGL 4.5(我不小心输入了 3.5)
  • @Kash 我想你可能误解了我的评论,我说“OpenGL 3 的最高版本是 3.3”,我知道OpenGL 4.5。很抱歉造成混乱,也许我可以更清楚地表达出来。
【解决方案2】:

您是否有双显卡设置,例如英伟达擎天柱?程序无法正常启动的原因可能是您的驱动程序没有从集成的 Intel GPU 切换到专用的 AMD 或 NVidia GPU。

我在朋友的笔记本电脑上至少遇到过一次这个问题。

【讨论】:

  • 其实没有。我想到了。问题出在 SDL
  • @Kash 你是怎么解决的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
相关资源
最近更新 更多