SDL 无法创建 OpenGL 窗口
Posted
技术标签:
【中文标题】SDL 无法创建 OpenGL 窗口【英文标题】:SDL can't create OpenGL windows 【发布时间】: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_RESIZABLE
或 SDL_WINDOW_FULLSCREEN
之类的东西时,它可以正常工作。当我使用SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN
时它也不起作用。有什么我能做的吗?
我在 Ubuntu 上使用 Kdevelop,如果这有什么不同的话。
更新:
所以我知道出了什么问题。事实证明,当您构建同时支持 GLX 和 EGL 的 SDL 时,它总是使用 EGL。我必须用--disable-video-opengles
编译它
【问题讨论】:
SDL_GetError()
说什么?
@TristanBrindle 它说“视频驱动程序不支持 OpenGL”...这很奇怪,因为我知道我的驱动程序支持它。
嗯,这给了你关于它为什么不工作的答案......我会检查你的视频驱动程序的安装,或者你的 SDL 库的编译标志
@TristanBrindle 好的,谢谢!
【参考方案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 你是怎么解决的?以上是关于SDL 无法创建 OpenGL 窗口的主要内容,如果未能解决你的问题,请参考以下文章