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, но вы не можете использовать оба.

Другие вопросы по тегам