Acerbaturix
17/08/2006, 05:30
Hace ya un tiempecito que me hice con una GP2X, mas que para jugar para trastear, el caso es que por una cosa u otra la he tenido muy apartada hasta hace unos días... bien, desde el primer día que la probé, eché en falta una cosa, y es la incapacidad del 'menu' para permitirte tener multiples aplicaciones en ejecución al mismo tiempo, puediendo "maximizar/minizar" y cambiar de una otra, etc.
En definitiva, echaba en falta un "gestor de ventanas" (por llamarlo de alguna manera), algo al estilo de la gui de Symbian OS.
Eso es muy interesante para aplicaciones tipo PDA (no tanto para juegos). Por ejemplo, cojes pones un poco de musica en el reproducir de mp3, lo minizimas y te vas al lector de documentos a leer un ratillo ;).
Estuve ojeando un poco los proyectos de menus que hay por ahí adelante, pero no vi absolutamente nada referido a este tema, asique me puse a pensar como hacerlo.
El problema está en que las librerias gráficas para la GP2X, como SDL escriben directamente sobre el framebuffer del dispositivo, es decir, cada programa mediante las SDL escribe directamente en pantalla, lo cual es un modelo diferente al tipico de un PC, por ejemplo con X Windows, en las que las librerias gráficas utilizan por debajo xlib para comunicarse con el servidor X, y este último es el encargado de escribir en pantalla, gestionando así el acceso a la misma. De esta forma puede controlar que ventana esta delante, detras, y dibujar la pantalla a su antojo.
Eso es algo que con las SDL de la GP2X (por ejemplo), a pelo, no se puede conseguir, por que si hay varios pogramas en ejecución, y estan escribiendo en pantalla, se van a pisar las pantallas uno a otro... asique el objetivo principal era desarrollar un programa que "controlase" el acceso al framerbuffer, de forma que solo escriba en pantalla el proceso que esta en "primer plano".
La primera idea que se me ocurrió fue hacerlo a lo grande, podemos a hacer una especie de miniservidor X para SDL... obviamente es la mejor solución, los programas en vez de escribir directamente en pantalla lo harían a través de este servidor, y asi el control seria totalmente transparente al programa, pero claro, es una cosa un poco complicada :D.
Asique pensé en buscar alguna forma más rapida y "chapucera" de conseguir algo similar.
Pues bien, he estado un par de tardes programando un pequeña versión superalpha, a modo de prueba de concepto de mis ideas, y ahora mismo tengo un menu que es capaz de lanzar procesos, quedarse en segundo plano y cuando se pulsa una determinada tecla, manda una señal de STOP al proceso que está en primer plano, se carga el menu de nuevo en la pantalla (sin lanzar otro proceso, como lo hace el gp2xmenu) y te permite acceder a una pequeña barra de tareas para resumir la ejecución del proceso que estaba minimizado.
Esta implementación de momento tiene varios problemas y limitaciones. Para empezar, los procesos cuando se minimizan, se paran a nivel de sistema operativo, asique no valdría para lo que decía de escuchar musica en segundo plano. Pero ya tengo pensando como arreglar eso, aunque por desgracia, requerirá de cierta ayuda por parte de los programas (a diferencia de la solucion del "servidor X", que sería transparente). Además como mínimo existe un problema, y es que si el programa minimizado utiliza un modo de video diferente al de la GUI, se producen ciertros problemillas a la hora de mostrar cosas por pantalla...
Os quería poner un pequeño video del sistemilla en funcionamiento, pero como tengo tan pocos mensajes, no me deja :(. Si vais a YouTube y buscais los videos de acerbaturix, lo encontrareis.
El objetivo final es hacer esa especie de "servidor X" que permita tener un entorno gráfico propio en la GP2X, algo similar a qTopia, pero mas orientado a dispositivos sin raton y pantalla tactil, y hecho con SDL. Con su barra de tareas para reanudar aplicaciones, teclado en pantalla, barra de sitema con información de batería, cobertura wifi, etc. Y por supuesto con sus aplicaciones asociadas para configurar la consola, utilidades varias...
Me gustaría que me comentaseis que os parece la posibildiad de tener un entorno gráfico de este estilo en la GP2X, y por supuesto críticas e ideas al respecto :).
PDT: Siento el ladrillazo ;)
En definitiva, echaba en falta un "gestor de ventanas" (por llamarlo de alguna manera), algo al estilo de la gui de Symbian OS.
Eso es muy interesante para aplicaciones tipo PDA (no tanto para juegos). Por ejemplo, cojes pones un poco de musica en el reproducir de mp3, lo minizimas y te vas al lector de documentos a leer un ratillo ;).
Estuve ojeando un poco los proyectos de menus que hay por ahí adelante, pero no vi absolutamente nada referido a este tema, asique me puse a pensar como hacerlo.
El problema está en que las librerias gráficas para la GP2X, como SDL escriben directamente sobre el framebuffer del dispositivo, es decir, cada programa mediante las SDL escribe directamente en pantalla, lo cual es un modelo diferente al tipico de un PC, por ejemplo con X Windows, en las que las librerias gráficas utilizan por debajo xlib para comunicarse con el servidor X, y este último es el encargado de escribir en pantalla, gestionando así el acceso a la misma. De esta forma puede controlar que ventana esta delante, detras, y dibujar la pantalla a su antojo.
Eso es algo que con las SDL de la GP2X (por ejemplo), a pelo, no se puede conseguir, por que si hay varios pogramas en ejecución, y estan escribiendo en pantalla, se van a pisar las pantallas uno a otro... asique el objetivo principal era desarrollar un programa que "controlase" el acceso al framerbuffer, de forma que solo escriba en pantalla el proceso que esta en "primer plano".
La primera idea que se me ocurrió fue hacerlo a lo grande, podemos a hacer una especie de miniservidor X para SDL... obviamente es la mejor solución, los programas en vez de escribir directamente en pantalla lo harían a través de este servidor, y asi el control seria totalmente transparente al programa, pero claro, es una cosa un poco complicada :D.
Asique pensé en buscar alguna forma más rapida y "chapucera" de conseguir algo similar.
Pues bien, he estado un par de tardes programando un pequeña versión superalpha, a modo de prueba de concepto de mis ideas, y ahora mismo tengo un menu que es capaz de lanzar procesos, quedarse en segundo plano y cuando se pulsa una determinada tecla, manda una señal de STOP al proceso que está en primer plano, se carga el menu de nuevo en la pantalla (sin lanzar otro proceso, como lo hace el gp2xmenu) y te permite acceder a una pequeña barra de tareas para resumir la ejecución del proceso que estaba minimizado.
Esta implementación de momento tiene varios problemas y limitaciones. Para empezar, los procesos cuando se minimizan, se paran a nivel de sistema operativo, asique no valdría para lo que decía de escuchar musica en segundo plano. Pero ya tengo pensando como arreglar eso, aunque por desgracia, requerirá de cierta ayuda por parte de los programas (a diferencia de la solucion del "servidor X", que sería transparente). Además como mínimo existe un problema, y es que si el programa minimizado utiliza un modo de video diferente al de la GUI, se producen ciertros problemillas a la hora de mostrar cosas por pantalla...
Os quería poner un pequeño video del sistemilla en funcionamiento, pero como tengo tan pocos mensajes, no me deja :(. Si vais a YouTube y buscais los videos de acerbaturix, lo encontrareis.
El objetivo final es hacer esa especie de "servidor X" que permita tener un entorno gráfico propio en la GP2X, algo similar a qTopia, pero mas orientado a dispositivos sin raton y pantalla tactil, y hecho con SDL. Con su barra de tareas para reanudar aplicaciones, teclado en pantalla, barra de sitema con información de batería, cobertura wifi, etc. Y por supuesto con sus aplicaciones asociadas para configurar la consola, utilidades varias...
Me gustaría que me comentaseis que os parece la posibildiad de tener un entorno gráfico de este estilo en la GP2X, y por supuesto críticas e ideas al respecto :).
PDT: Siento el ladrillazo ;)