Error de fragmentacion en funcion de SDL convirtiendo format

Tratamos sobre el manejo de APIs frecuentemente utilizadas en el desarrollo de videojuegos, como SDL, pygame o SFML.

Error de fragmentacion en funcion de SDL convirtiendo format

Notapor lacabra25 » Jue Feb 05, 2009 1:43 am

Hola, he echo una funcion que se encarga de cargar una imagen, convertir el formato de pixel al de la pantalla y poner el color FF00FF como transparente, el problema es que la funcion que realiza la conversion me da un error de fragmentacion, si pongo dicha funcion comentada (la conversion de formato se realzia cada vez que copie la imagen a la superficie de pantalla, consumiendo más recurso de procesamiento) no me da error de fragmentacion pero el color FF00FF aparece en la ventana en vez de no aparecer.

La funcion con la funcion de SDL comentada es:
Código: Seleccionar todo
SDL_Surface * cargar_imagen(const char *nombre_archivo){
   SDL_Surface *r, *t;
   t= IMG_Load(nombre_archivo);
   if(t != NULL){
      /*r= SDL_DisplayFormat(t);
      SDL_FreeSurface(t);*/
      SDL_SetColorKey(t, SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(t->format, 255, 0, 255));
      r= t;
   }else{
      r= NULL;
   }
   return r;
}


Y sin la funcion SDL comentada:
Código: Seleccionar todo
SDL_Surface * cargar_imagen(const char *nombre_archivo){
   SDL_Surface *r, *t;
   t= IMG_Load(nombre_archivo);
   if(t != NULL){
      r= SDL_DisplayFormat(t);
      SDL_FreeSurface(t);
      SDL_SetColorKey(r, SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(r->format, 255, 0, 255));
   }else{
      r= NULL;
   }
   return r;
}


Lo que me extraña es que esta funcion me funcionaba bien en un principio, fue cuando la use en otra funcion cuando me dio un error en otra funcion del programa que no tenia nada que ver con esta, y al solucionar el error en la otra funcion el error se paso a esta. Cuando esta funcion no la usaba en la que ahora la uso, no daba problemas al usarla. He estado pasando el debugger una y otra vez y no entiendo el motivo del fallo. y menos de como funciona y derepente deja de funcionar.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor hugoruscitti » Jue Feb 05, 2009 2:13 am

La función SDL_DisplayFormat se tiene que llamar luego
de iniciar el modo de video. ¿lo has hecho así?.

Es muy importante iniciar el modo de video antes de convertir
las superficies, si lo haces al revés SDL no sabrá cómo
optimizar la imagen y eso produce un segmentation fault
seguro.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor lacabra25 » Vie Feb 06, 2009 3:58 pm

si, era ese el problema; no veia el problema por estar en la funcion que menos esperaba que tuviera que ver con el problema y al usar el debuger no ponia un punto de ruptura en dicha funcion, sino los ponia en las funciones que veia más probable que estuvieran relacionadas con el error, solo cuando el punto de ruptura lo puse en main y ejecute todo con "step" paso a paso entrando en todas las funciones pude ver el problema.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron