PDA

Ver la versión completa : Problemas con las Librerías Aceleradas de Paeryn



fjsantos
27/12/2007, 01:19
Buenas noches.

Intentando optimizar un poco algún código de por aquí, me he descargado las librerías aceleradas de Paeryn. He sustituido las librerías que incluía el SDL, por estas.
Según tengo entendido para usarlas, hay que establecer el modo gráfico de la siguiente forma:

SDL_SetVideoMode(SCREENWIDTH, SCREENHEIGHT, SCREENBPP, SDL_HWSURFACE | SDL_DOUBLEBUF);
Sin embargo, lo único que consigo es por un lado, no poder probar la aplicación al compilar en Windows (da un problema al intentar compilarla bajo windows), y por otro, consigo un pantallazo negro en la GP2X y el cuelge de la misma.
Alguien sabe a que se debe esto? Serán compatibles estas librerías con la GP2X F200?

Gracias por adelantado y un saludo.

titerote
27/12/2007, 02:19
Sospecho que el problema es por haber pedido una SDL_HWSURFACE. Cámbialo por SDL_SWSURFACE, que si no recuerdo mal es lo único que soportado en la GP2X

Eskema
27/12/2007, 07:18
Si pones SDL_DOUBLEBUF | SDL_HWSURFACE va bien, peeero da errores con algunos bliteos y si pones swsurface usas la version por soft y la velocidad no es la misma

fjsantos
27/12/2007, 13:28
Buenas.

El problema que tengo con esta librería, es que haga lo que haga, si pongo el citado modo de vídeo, se me queda colgado.
Estoy pensando si quizá hay algún tipo de incompatibilidad entre estas SDL y las que vengan preinstaladas en la F200.
También hay algunos juegos por ahí que no me funcionan (que sí funcionan en una f100).

Un saludo, fjsantos.

BuD
27/12/2007, 14:18
Buenas.

El problema que tengo con esta librería, es que haga lo que haga, si pongo el citado modo de vídeo, se me queda colgado.
Estoy pensando si quizá hay algún tipo de incompatibilidad entre estas SDL y las que vengan preinstaladas en la F200.
También hay algunos juegos por ahí que no me funcionan (que sí funcionan en una f100).

Un saludo, fjsantos.

No, no hay ningun tipo de problema con las preinstaladas siempre y cuando compiles y enlaces estaticamente y no dinamicamente. Acuerdate de ponerle "-static" como parametro a gcc y añadirle todas las librerias que uses y las dependendias de las librerias que uses. Esto te deberia bastar para que funcionara, si no funciona no es por parecer desagradable pero algo haces mal.

Puck2099
27/12/2007, 14:33
Si pones SDL_DOUBLEBUF | SDL_HWSURFACE va bien, peeero da errores con algunos bliteos y si pones swsurface usas la version por soft y la velocidad no es la misma

Eso no es cierto, pongas HW o SW las aceleradas usarán una HW si tienen memoria disponible...

Eskema
27/12/2007, 18:10
Pues o mi consola va rara entonces o no tengo las sdl de paeryn, pq si pongo HW el juego literalmente vuela, y debo modificar el delay para q vaya al ritmo que quiero, si pongo SW la velocidad cae en picado, de ahi que yo piense que se usa el modo soft

Puck2099
27/12/2007, 18:34
Pues o mi consola va rara entonces o no tengo las sdl de paeryn, pq si pongo HW el juego literalmente vuela, y debo modificar el delay para q vaya al ritmo que quiero, si pongo SW la velocidad cae en picado, de ahi que yo piense que se usa el modo soft

¿De cuándo es la versión de las bibliotecas que estás usando?

fjsantos
27/12/2007, 21:36
Buenas Tardes.

Despues de un par de horas navegando por foros y probando cosas, continúo igual.
Como datos os diré que uso DEV-C++.
BUD enlazo estáticamente, mi línea en el LINKER es -lSDL -lpthread -lm -ldl -static
Con respecto a las librerías, he copiado la libSDL.a en el directorio lib y algunos includes en ese mismo directorio.
Además según he observado, reducinedo código, tal y como intento inicializar el SDL, pantallazo negro y se cuelga. Sencillamente con el siguiente código ya se me cuelga.


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

//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;

}

Si comento el SDL_Init funciona correctamente.
Estoy seguro que algo debo de estar haciendo mal, pero la verdad que no tengo ni idea de lo que pueda ser.
Alguien me ofrece alguna pista?

Gracias y un saludo.

< - >
Buenas.

Al final he borrado y reinstalado todo, rutas, librer&#237;as, etc. (el kit de gamepark que viene con el dev-c++).
Al sustituir la librer&#237;a libSDL.a por la acelerada, ahora me da el siguiente error al compilar.
C:/fjsantos/GP2XSDK/Tools/arm-gp2x-linux/lib/libpthread.a(mutex.o) uses hardware FP, whereas TestPaerynLibs.gpe uses software FP
Este error me da demasiadas veces como para contarlas.
A ver si alguien se anima y me ayuda a usar correctamente las libs aceleradas.

Un saludo, fjsantos.

BuD
28/12/2007, 01:53
Buenas.

Al final he borrado y reinstalado todo, rutas, librerías, etc. (el kit de gamepark que viene con el dev-c++).
Al sustituir la librería libSDL.a por la acelerada, ahora me da el siguiente error al compilar.
C:/fjsantos/GP2XSDK/Tools/arm-gp2x-linux/lib/libpthread.a(mutex.o) uses hardware FP, whereas TestPaerynLibs.gpe uses software FP
Este error me da demasiadas veces como para contarlas.
A ver si alguien se anima y me ayuda a usar correctamente las libs aceleradas.

Un saludo, fjsantos.

Curioso, ese error me lo dio una vez cuando cogi una vez unas librerias ya compiladas para ARM-ELF de paquetes Debian e intente usarlas. Se ve que estaba compilado con instrucciones por hardware para proceso de coma flotante, y la GP2X no tiene tal hardware. Sin embargo, si se compila especificamente para la GP2X el compilador te mete codigo que emula el comportamiento de una unidad de coma flotante, pero las librerias ya estaban compiladas.

fjsantos
28/12/2007, 17:23
Buenas Tardes

Ya solucion&#233; el problema. Como t&#250; indicabas BUD, las librer&#237;as estaban compiladas de modo que hicieran uso de la coma flotante por hardware, mientras que las de paeryn, lo hacen por software.
Borr&#233; todo, recompil&#233; las librer&#237;as sin esta coma flotante y 'eureka'. Ya me funciona correctamente la aceleraci&#243;n por hardware, (es increible el trabajo de estas librer&#237;as y sus resultados).
Eso s&#237;, he notado, al realizar un SDL_Quit(), que la imagen en la pantalla se 'corrompe' un instante hasta que por fin sale al men&#250; de la gp2x. Es esto normal? (estoy haciendo uso de 8 bits de profundidad de color).

Un saludo, fjsantos.

Puck2099
28/12/2007, 18:28
Buenas Tardes

Ya solucioné el problema. Como tú indicabas BUD, las librerías estaban compiladas de modo que hicieran uso de la coma flotante por hardware, mientras que las de paeryn, lo hacen por software.
Borré todo, recompilé las librerías sin esta coma flotante y 'eureka'. Ya me funciona correctamente la aceleración por hardware, (es increible el trabajo de estas librerías y sus resultados).
Eso sí, he notado, al realizar un SDL_Quit(), que la imagen en la pantalla se 'corrompe' un instante hasta que por fin sale al menú de la gp2x. Es esto normal? (estoy haciendo uso de 8 bits de profundidad de color).

Un saludo, fjsantos.

Sí, es normal :)

fjsantos
28/12/2007, 18:38
Gracias Puck2099, cre&#237; que era problema de mi compilaci&#243;n, me quedo m&#225;s tranquilo sabiendo que es normal.
Por cierto tengo que destacar que me parece un trabajo realmente impresionante el port de 'ultimate fenix' para actualizarlo con las librer&#237;as 0.92a (es realmente una maravilla).

Un saludo, fjsantos.

Eskema
28/12/2007, 21:07
¿De cuándo es la versión de las bibliotecas que estás usando?

Uso el toolchain de uncanny y supongo q está la ultima version q saco paeryn en su dia

Puck2099
28/12/2007, 21:13
Uso el toolchain de uncanny y supongo q está la ultima version q saco paeryn en su dia

Claro, en su día, pero esa que usas está ya muuuuy anticuada, paeryn va sacando versiones nuevas cada pocas semanas...

Eskema
28/12/2007, 21:45
¿entonces necesito todo el lote de sdl completo (mixer,etc,etc), o solo es la principal la q se actualiza?

Puck2099
28/12/2007, 21:49
¿entonces necesito todo el lote de sdl completo (mixer,etc,etc), o solo es la principal la q se actualiza?

Solo lo que va en el paquete que prepara paeryn, es decir, la principal y unos includes con las funciones extra para la GP2X.

Eskema
29/12/2007, 10:31
Aprovechando el hilo, y despues de actualizar tengo el mismo problema con la aceleracion, algunos blits no se realizan correctamente.
Tengo la pantalla dibujada correctamente, asi q decido poner encima un sprite, pero no se dibuja, si uso la version por soft si lo hace correctamente. &#191;Puede ser que no se haga el cambio de buffers correctamente y por eso no se dibuja?
Inicio con 16, SDL_HWSURFACE | SDL_DOUBLEBUF

Me respondo yo mismo diciendo q el culpable es el doblebufer, lo q no se es como solucionarlo para q funcione, si desactivo el doblebufer se dibuja correctamente, pero se nota el refresco de la pantalla, y si uso el soft con el doblebufer todo va perfecto, pero la velocidad no es para tirar cohetes

fjsantos
29/12/2007, 13:39
Buenos d&#237;as.

Con respecto al tema del double buffer, el problema que me surgi&#243; a mi (te lo comento porque igual te est&#225; pasando lo mismo), es que al realizar el flip, lo que realmente ocurre es que el puntero de la memoria de video, apunta hacia el backbuffer, pasando este a convertirse en el buffer principal y el buffer principal en el backbuffer (con lo que este 'nuevo' backbuffer ser&#225; una pantalla en negro, mientras ahora el buffer principal mantendr&#225; tu imagen. Si realizas en este momento un flip, el backbuffer (que estar&#225; en negro, aparecer&#225; como buffer principal y tu imagen pasar&#225; a ser el secundario).
Esto es as&#237; usando el double buffer en la gp2x, mientras que otras t&#233;cnicas de double buffer que he utilizado, en vez de realiza un cambio de puntero, realmente lo que hacen es realizar una copia del backbuffer al frontbuffer.

Espero que me haya explicado correctamente.

Un saludo, fjsantos.

Eskema
29/12/2007, 14:24
mirando el readme de paeryn me ha quedado claro q el doble buffer tiene su miga y se necesita bloquear la surface para q se pinte correctamente pq no se cambian las surfaces, en pocas palabras q es una autentica porqueria