PDA

Ver la versión completa : pantalla negra con SDL paeryn



schan
21/02/2006, 05:58
buenas,

resulta que tras formatear he instalado en linux el entrono de desarrollo GP2XDev, que incluya las SDL aceleradas, segun las instrucciones del wiki.

El problema es que al ejecutar cualquier programa, se me queda colgado y con la pantalla en negro en esta instruccion:
SDL_Surface *screen = SDL_SetVideoMode(320, 240, 0, SDL_SWSURFACE);

Me he comido la cabeza depurando hasta asegurarme de que el cuelgue está ahi, no llega a ejecutar nada más, si screen es NULL o mostrar la salida de SDL_GetError().


He probado un proyecto nuevo que estaba haciendo y en linux iba bien y al pasarlo a la gp2x me encontré con esto, y luego con uno antiguo que sí que funcionaba bien con el devkitGP2X, así que creo que el problema viene de cambiar de kit de desarrollo o más bien de SDL.

Estoy volviendome a descargar el devkitGP2X con el que no tenía problemas, pero si alguien me puede dar alguna idea lo agradecería mucho.

Un saludo

Puck2099
21/02/2006, 06:01
Prueba a especificar la profundidad de color, que con ese 0 que has puesto seguramente te muestre 0 colores (todo negro):

screen = SDL_SetVideoMode(320, 240, 16, SDL_SWSURFACE);

schan
21/02/2006, 06:13
pues lo he cambiado por 16 (tenía 0 por inercia, pq se supone que lo coge automaticamente y con las otras SDL iba bien) pero sigue igual.

miq01
21/02/2006, 06:43
pues lo he cambiado por 16 (tenía 0 por inercia, pq se supone que lo coge automaticamente y con las otras SDL iba bien) pero sigue igual.
¿Utilizas LockSurface y Unlock (como sea) y en medio pintas bitmaps? Yo lo hacía y se me quedaba en negro. Los quité, y perfecto.

schan
22/02/2006, 03:37
¿Utilizas LockSurface y Unlock (como sea) y en medio pintas bitmaps? Yo lo hacía y se me quedaba en negro. Los quité, y perfecto.

Lo utilizo aunque con un SDL_MUSTLOCK antes, así que se supone que solo lo hace si es necesario. De todas formas, donde se queda colgado al poner el modo de video. Con las otras SDL (las no aceleradas va bien) y con las acelaradas (precompiladas) me pasa esto. Probaré a compilarlas a ver, y si no, pues a seguir con las otras :S

Por si acaso pregunto, hace falta algun modo especial para inicializar? Me refiero a FULLSCREEN o no, SW_SURFACE o HS_SURFACE...

Bueno de todas formas gracias por las respuestas, un saludo

BuD
22/02/2006, 03:48
Por curiosidad, enlazas estaticamente? :)

schan
22/02/2006, 04:04
Si si, estaticamente

Waninkoko
22/02/2006, 04:15
Prueba a cambiar SDL_SWSURFACE por SDL_HWSURFACE | SDL_DOUBLEBUF

miq01
22/02/2006, 04:54
Lo utilizo aunque con un SDL_MUSTLOCK antes, así que se supone que solo lo hace si es necesario.
Yo utilizaba también SDL_MUSTLOCK y el mismo Paeryn me dijo que ni hablar. Mírate las dos o tres últimas páginas del hilo sobre estas SDL en GP32X y lo verás. Si no lo encuentras, luego te pongo el enlace, que ahora toca cenar.

schan
22/02/2006, 06:00
jo pues reduciendo me he quedado con esto:


#include "unistd.h"
#include "SDL/SDL.h"

int main(int argc, char *argv[])
{

SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK);

SDL_Surface *screen = SDL_SetVideoMode(320, 240, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);


chdir("/usr/gp2x");
execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
return 0;

}

Y en el SDL_SetVideoMode se queda muerto (comentando esa linea, se ejecuta el programa y vuelve al menu). Creo que no hay nada sospechoso ahí, igual se me escapa algo, no se...

Bueno, tratare de hacerlo desde windows o desde otro ordenador, a ver si es que lo tengo loco.

miq01
22/02/2006, 07:15
Schan, éste (http://www.gp32x.com/board/index.php?showtopic=23819&view=findpost&p=352498) es el enlace del que te hablaba.

Uncanny
22/02/2006, 08:14
Simplemente, por descartar, ¿has probado un toolchain + libs precompiladas de otros o todo lo has compilado tu mismo? Sea como sea, prueba a compilar y probar en tu GP2X el SDL Test de Guyfawkes que está en la zona de descargas de GP32Spain, si no te funciona es que es algo de tu toolchain, alguna herramienta o librería.

Miq lo de lock y unlock es normal que lo usaras indebidamente (en SDL, porque en teoría hacias lo correcto con superficies "bloquear -> trabajar -> desbloquar -> mostrar"), las operaciones de blit y fill que son propias de SDL (SDL_BlitSurface y SDL_FillRect) no se pueden hacer con las superficies bloqueadas (cosa que creo que solo se comenta en la doc de SDL en la función SDL_BlitSurface), otra cosa es que te curres tus propias funciones para bit-blitting o dibujado de pantalla, entonces si puedes necesitar bloquear las superficies para trabajar con ellas en el buffer correspondiente.