SDL_ConvertSurface() вызывает разрыв
У меня есть следующий фрагмент кода, где среди множества других вещей (которые я не включил в эту тему) я пытаюсь запустить SDL, создать рендер и загрузить некоторые спрайты.
Все компилируется просто отлично, но когда я запускаю свое приложение, возникает перерыв: " Необработанное исключение в 0x681252D5 (SDL.dll) в Carribean World SDL.exe: 0xC0000005: Место чтения нарушения доступа 0x16161804"
Перерыв происходит и точка, где я использую функцию SDL_ConvertSurface()
Кто-нибудь может мне помочь, я не вижу, что не так
Declerations:
SDL_Texture* background = NULL;
SDL_Surface* tmp = NULL;
SDL_Surface* surface = NULL;
SDL_Window *window = SDL_CreateWindow("Carribean World",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
1360, 768,
SDL_WINDOW_RESIZABLE);
SDL_Surface* screen = SDL_GetWindowSurface(window);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);
SDL_PixelFormat* fmt = screen->format;
IN MAIN: инициализация всех подсистем SDL
if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
{
return 0;
}
Загрузка изображений на поверхности
if ((tmp = IMG_Load("images/water.jpg")) == NULL)
{
cout << "SDL_SetVideoMode() Failed: " << SDL_GetError() << endl;
return 0;
}
Прямо здесь происходит перерыв
if ((surface = SDL_ConvertSurface(tmp, fmt, 0)) == NULL)
{
cout << "SDL_ConvertSurface() Failed: " << SDL_GetError() << endl;
}
background = SDL_CreateTextureFromSurface(renderer, tmp);
1 ответ
Вы не проверили возвращаемое значение SDL_GetWindowSurface
, Но в любом случае, документация SDL для этой функции гласит: "Вы не можете комбинировать это с 3D или API рендеринга в этом окне". Так что либо вы используете исключительно SDL_Renderer API, либо используете SDL_BlitSurface
и так и после этого вызова SDL_UpdateWindowSurface
, но вы не можете использовать оба.