2016-09-25 6 views
0

Я новичок в SDL, и в этой части моей программы я хотел бы иметь возможность изменить изображение существующей поверхности. Мой вопрос: автоматически ли выгрузит предыдущее изображение или мне придется использовать SDL_FreeSurface(), а затем полностью перезагрузить поверхность? Я не хочу в итоге загружать большое количество загружаемых изображений, которые не нужно загружать. Визуальное объяснение:Загружает ли изображение на той же поверхности старое изображение?

string path = "Image.png"; 
SDL_Surface* loadedSurface = IMG_Load((path.c_str()); 

Если я снова использовать loadedSurface с другим изображением, будет оригинал один разгружаться?

path = "NewImage.png"; 
loadedSurface = IMG_Load(path.c_str()); 

Или я должен сделать что-то вроде этого каждый раз, когда я загрузить новое изображение:

SDL_FreeSurface(loadedSurface); 
path = "NewImage.png"; 
SDL_Surface* loadedSurface = IMG_Load(path.c_str()); 

Это может быть хорошо, я просто не уверен, что создание новой поверхности каждый цикл будет быть более интенсивным, чем другой, более простой способ. Спасибо!

ответ

1

Прежде чем загружать новую поверхность и перезаписывать старый указатель, необходимо позвонить SDL_FreeSurface.

Подумайте об этом: в момент, когда вы вызываете IMG_Load во второй раз, SDL просто загружает изображение и не знает, что вы собираетесь делать с возвращаемым указателем. Поэтому он не может освободить любую из уже загруженных поверхностей. Вы должны сделать это сами.

+0

Хорошо, это имеет смысл. Спасибо за ваш ответ и ваше время. –

 Смежные вопросы

  • Нет связанных вопросов^_^