В настоящее время я работаю с SDL2 и GLFW3, чтобы создать игру OpenGL. Инициализация и использование GLFW3 не проблема; Я использую GLFW3 для создания контекста OpenGL, окна, ввода ключа и т.д. И SDL2 для загрузки изображений на SDLS-поверхности, а затем преобразования их в текстуры OpenGL, но, в отличие от GLFW3, SDL2 не инициализируется. Мой код инициализации выглядит следующим образом:
if (!SDL_Init(SDL_INIT_EVERYTHING)) return -1;
Он всегда возвращает -1 и завершает основную функцию. Кто-нибудь знает, почему это может произойти?
Проблема не в SDL
. SDL
фактически инициализирует полностью штраф. Проблема заключается в том, как вы проверяете, удалось ли выполнить инициализацию. Взгляните на документацию для SDL_Init()
Возвращает 0 при успешном завершении или отрицательный код ошибки при ошибке; вызовите SDL_GetError() для получения дополнительной информации.
В коде кода
if (!SDL_Init(SDL_INIT_EVERYTHING)) return -1;
В том if
, 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;
}