我目前正在使用SDL2和GLFW3来创建一些OpenGL游戏。初始化和使用GLFW3没有问题;我正在使用GLFW3创建OpenGL上下文,窗口,键输入等,SDL2用于将图像加载到SDLSurfaces然后将它们转换为OpenGL纹理,但与GLFW3不同,SDL2无法初始化。我的初始化代码如下所示:
if (!SDL_Init(SDL_INIT_EVERYTHING)) return -1;
它总是返回-1并退出main函数。有谁知道为什么会发生这种情况?
答案 0 :(得分:3)
问题不在于SDL
。 SDL
实际初始化完全正常。问题是如何检查初始化是否成功。看看documentation for SDL_Init()
成功时返回0或失败时返回负错误代码;呼叫 SDL_GetError()获取更多信息。
在您的代码中
if (!SDL_Init(SDL_INIT_EVERYTHING)) return -1;
在if
中,SDL_Init(SDL_INIT_EVERYTHING)
部分将返回0
,其评估为false
,但仍表示SDL已成功初始化。前面的!
表示整个if
评估为true,并且会返回-1
。
更好的解决方法是检查它是否等于0
,如果确实失败,则使用SDL_GetError()
来打印错误。
if ( SDL_Init(SDL_INIT_EVERYTHING) != 0 )
{
std::cout << "Error : " << SDL_GetError() << std::endl;
return -1;
}