我目前正在使用 SDL2 和 GLFW3 创建一些 OpenGL 游戏。初始化和使用GLFW3没问题;我正在使用 GLFW3 创建 OpenGL 上下文、窗口、键输入等,并使用 SDL2 将图像加载到 SDLSurfaces,然后将它们转换为 OpenGL 纹理,但是,与 GLFW3 不同,SDL2 无法初始化。我的初始化代码如下所示:
if (!SDL_Init(SDL_INIT_EVERYTHING)) 返回 -1;
它总是返回 -1 并退出 main 函数。有谁知道为什么会发生这种情况?
最佳答案
问题
问题不在于 SDL
。 SDL
实际上初始化完全没问题。问题是如何检查初始化是否成功。看看 documentation for SDL_Init()
Returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.
在你的code代码中
if (!SDL_Init(SDL_INIT_EVERYTHING)) return -1;
在 if
中,SDL_Init(SDL_INIT_EVERYTHING)
部分将返回 0
,其计算结果为 false
但它仍然意味着 SDL 已成功初始化。前面的!
,表示整个if
的计算结果为真,返回-1
。
解决方案
更好的解决方案是检查它是否等于 0
,如果它确实失败,则使用 SDL_GetError()
打印错误。
if ( SDL_Init(SDL_INIT_EVERYTHING) != 0 )
{
std::cout << "Error : " << SDL_GetError() << std::endl;
return -1;
}
关于c++ - SDL2 库初始化失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510926/