Resulta que, en la libreria grafica que estoy haceindo, hay algunos efectos para aplicar en los sprites, como rotacion, zoom, volteo, trasnparecia, etc.
La cosa, es que la funcion encargada de cada una de esas tareas, crea un superficie nueva, aplica el efecto a partir de la imagen original, y devuelve esa superficie (que luego es cargada en la imagen de pantalla)
por ejemplo:
- Código: Seleccionar todo
SDL_Surface *CSprite::set_angle(double angulo, int smooth){
SDL_Surface *rotado;
rotado = rotozoomSurface(sprite, angulo, 1, smooth);
return rotado;
}
que luego desde otra parte hace:
- Código: Seleccionar todo
sprite = set_angle(selfangle[0], int(selfangle[1]));
Luego de cada frame, la imagen en pantalla la trasnformo de nuevo en la imagen original antes de volver a aplicarle los efectos.
(Se que a simple vista parece una funcio que esta de mas, pero creanme que tiene logica lo que estoy haciendo XD)
El problema es que cada vez que roto una imagen (o le hago cualquiero otro efecto), se crea una superficie nueva, llegando al punto en que el programa me consume 1 GB memoeria tras haber creado quichicientas superficies..
Mi duda es, como hago para retornar la superficie, y luego liberarla, si la varaible no es global?
[/code]