Me he estado fijando en lo que habéis discutido en el hilo de la Pango, pero me falla algo. Cuando compruebo el mapa en bennu con "map_exists" me devuelve falso y obviamente en los frames no muestra nada.
Esto es lo que he puesto:
[code language="bennu"]
if(SDL_GetVideoSurface()->format->BitsPerPixel == 16) {
surface = SDL_CreateRGBSurface(0, iinfo.w,iinfo.h, 16, (((Uint32)0xff) >> 3) << 11, (((Uint32)0xff) >> 2) << 5 , ((Uint32)0xff) >> 3, 0);
} else if (SDL_GetVideoSurface()->format->BitsPerPixel == 32) {
surface = SDL_CreateRGBSurface(0, iinfo.w,iinfo.h, 32, (Uint32)(255 << (8*2)), (Uint32)(255 << (8*1)), (Uint32)(255 << 8*0), (Uint32)(255 << 8*3) );
}
SDL_BlitSurface(chipset,&rect, surface,0); // chipset es una imagen cargada con IMG_Load
SDL_SaveBMP(surface, "prueba.bmp");
GRAPH* gr1 = bitmap_new_ex(0, surface->w, surface->h, surface->format->BitsPerPixel, surface->pixels, surface->pitch);
GRAPH* gr = bitmap_clone(gr1);
bitmap_destroy(gr1);
gr->code = bitmap_next_code() ;
grlib_add_map( fpg, gr ) ; // fpg=0.
return (gr->code);
[/code]
El archivo 'prueba.bmp' me sale perfecto, lo que me hace pensar que el error es de lo que viene después. La surface la guardo en una pila, y le aplico SDL_FreeSurface después del return y de testear con map_exists. Eso es todo, gracias por adelantado.
Ahora si me detecta el mapa bien con map_exists pero no me saca la imagen por la pantalla de todas formas (me la saca negro).
He probado a hacer este paso al cargar el chipset:
[code language="bennu"]
SDL_Surface* sdl_surf, *chipset=IMG_Load("tiles.png");
if(SDL_GetVideoSurface()->format->BitsPerPixel == 16) {
sdl_surf = SDL_CreateRGBSurfaceFrom(chipset->pixels,0, chipset->w,chipset->h, 16, (((Uint32)0xff) >> 3) << 11, (((Uint32)0xff) >> 2) << 5 , ((Uint32)0xff) >> 3, 0);
} else if (SDL_GetVideoSurface()->format->BitsPerPixel == 32) {
sdl_surf = SDL_CreateRGBSurfaceFrom(chipset->pixels,0, chipset->w,chipset->h, 32, (Uint32)(255 << (8*2)), (Uint32)(255 << (8*1)), (Uint32)(255 << 8*0), (Uint32)(255 << 8*3) );
}
SDL_FreeSurface(chipset);
chipset=sdl_surf;
[/code]
Y creo que esto es lo que ha producido ese efecto, o igual no, que he tocado alguna cosa más...
En cualquier caso compruebo que como cabria de esperar gr->data tiene exactamente la misma info que surface->pixels. Se me hace raro que siendo así no me cargue nada por la pantalla.
EDIT: Pero ahora los .bmp obtenidos en SDL_SaveBMP salen mal. Totalmente negros... creo que el fallo tiene que estar en por ahí, en la creación de chipset o surface, y que tendrá que ver con las máscaras, pero no tengo idea...
ahora mismo no tengo ni 10 minutos, pero en estos dias tendre algo de tiempo y te dare una mano...
Ok, no problem. Cuando puedas :P
preguntas:
1) Version de Bennu?
2) Profundidad de colores de la pantalla?
3) Profundidad de colores de las surface?
La modificacion que posteaste que decis supones hace que funcione el map_exists, no puede ser... debes tener otro cambio... o seria bueno que pongas log e imprimas que te retorna cada funcion...