[Image layering and Hardware Accelerated Rendering] Възможен SDL_Surface лийк в Тexture::createTextureFromSurface
В Тexture::createTextureFromSurface няма да извикаме freeSurface метода, ако SDL_CreateTextureFromSurface не успее да създаде текстурата.
Фикс:
int32_t Тexture::createTextureFromSurface(SDL_Surface*& inOutSurface, SDL_Texture*& outTexture) {
outTexture = SDL_CreateTextureFromSurface(gRenderer, inOutSurface);
freeSurface(inOutSurface); // <- add
if (!outTexture) {
logger::log("SDL_CreateTextureFromSurface() failed. Reason: ", SDL_GetError());
return EXIT_FAILURE;
}
//freeSurface(inOutSurface); <- delete
return EXIT_SUCCESS;
}
В имплементацията от лекциите SDL_Surface пойнтъра (inOutSurface) се създава и подава отвън на createTextureFromSurface, като се очаква да бъде освободен след като от него се създаде текстура.
SDL_CreateTextureFromSurface може да фейлне при създаването на SDL_Texture* (outTexture) и в този случай createTextureFromSurface ще върне EXIT_FAILURE преди да извика freeSurface, който от своя страна извиква SDL_FreeSurface.