PDA

Ver la versión completa : Duda con SDL_RWFromMem



Eskema
02/11/2005, 00:26
Estoy haciendo una funcion para cargar las imagenes desde memoria y me da un warning al compilar.
El caso es q si cargo una imagen sin usar la funcion no se queja el compilador para nada,


void CargarImagen(tObjeto *imagen, tObjeto *tmp,unsigned char *nombre, int tamano)
{

tmp->tmp=IMG_Load_RW(SDL_RWFromMem(nombre,tamano),1);
imagen->imagen=SDL_DisplayFormat(tmp->tmp);
SDL_FreeSurface(tmp->tmp);
SDL_SetColorKey(imagen->imagen, SDL_SRCCOLORKEY, SDL_MapRGB(imagen->imagen->format, 192,192,192));

}
CargarImagen(&tJugador, &tJugador, &g_jugador, 992);
Y obtengo este warning passing arg 3 of `CargarImagen' from incompatible pointer type.

Si en vez de usar este cargar imagen lo hago con un simple
void CargarImagenes()
{

SDL_Surface *tmp;
tmp =IMG_Load_RW( SDL_RWFromMem(&tile1,2102),1);
tiles[0]=SDL_DisplayFormat(tmp);
SDL_FreeSurface(tmp);

SDL_Surface *tmp1;
tmp1 =IMG_Load_RW( SDL_RWFromMem(&tile8,1830),1);
tiles[1]=SDL_DisplayFormat(tmp1);
SDL_FreeSurface(tmp1);

}
El compilador no me da ningun aviso ni nada, ¿pq?

LTK666
02/11/2005, 01:07
Que compilador usas?

Eskema
02/11/2005, 01:11
el gcc del devkitpro, pero no creo q sea cosa del compilador si no de la funcion, pero no le veo el fallo

Puck2099
02/11/2005, 05:47
Prueba a quitar el & al tercer argumento, que creo que está ahí el fallo.

Eskema
02/11/2005, 06:04
Lo mas curioso es q si cargas los graficos a pelo, declarando surfaces tmp y demas va perfecto sin quejarse el compilador, si intento usar la funcion, (q es lo mismo, pq declaro 2 surfaces dentro del struct tobjeto tmp,imagen) es cuando me da el aviso, pq el caso es q funciona perfectamente. Y claro queda mejor tener una funcion q ir cargando los graficos a pelo en un simple bloque void cargar()

Puck2099
02/11/2005, 06:07
Lo mas curioso es q si cargas los graficos a pelo, declarando surfaces tmp y demas va perfecto sin quejarse el compilador, si intento usar la funcion, (q es lo mismo, pq declaro 2 surfaces dentro del struct tobjeto tmp,imagen) es cuando me da el aviso, pq el caso es q funciona perfectamente. Y claro queda mejor tener una funcion q ir cargando los graficos a pelo en un simple bloque void cargar()

Pero el warning no te lo da al cargar las imágenes, sino al llamar a la función porque el tipo del tercer argumento no es correcto.

¿Has probado a quitar el &?

Eskema
02/11/2005, 06:10
si lo he probado y me da otro warning, passing arg 3 of `CargarImagen' discards qualifiers from pointer target type.
Si te fijas en la forma de cargarlo a pelo, tb se incluye el & para referenciar el char del archivo.h q contiene la imagen y no se queja.

chui
02/11/2005, 20:02
Si no recuerdo mal, el segundo parametro de IMG_Load_RW es para que te libere la memoria que le das cuando termine de tratarla; a menos que el puntero que le proporciones sea reservado con c/mallocs, pon este segundo parametro a 0.

El warning te lo da porque no es del mismo tipo al 100% aunque funcione. Prueba a usar casting.

Mira los ejemplos de SDL4ALL (http://sdl-gp32.sourceforge.net).