2016-09-25 62 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

好的,這是有道理的。謝謝你的回答和你的時間。 –