Juegos Linux en ODROID: Juegos en ODROID-N2 - Escritorio y gl4es

El ODROID-N2 todavía es muy reciente, aunque ya tiene un par de meses. A muchos les gusta porque tiene un procesador y una GPU bastante rápidos, además cuenta con más memoria RAM que los anteriores modelos ODROID. Aun así, debido a que no contamos con drivers X11 para el sistema, las posibilidades del ODROID-N2 están un tanto limitadas por ahora. Quiero analizar de lo que es capaz actualmente, y hasta donde podemos llegar a la hora de ejecutar juegos en el ODROID-N2 desde un escritorio.

Situación actual

Ya hemos visto que existen imágenes de juegos por ahí, y usar Retroarch con una interfaz como EmulationStation no es gran cosa ni es nada nuevo. Lo hemos hecho antes, y no lo voy a tratar en este artículo. PPSSPP también parece funcionar bien, aunque estas son aplicaciones que se ejecutan en modo de aplicación individual, lo que significa que son las únicas aplicaciones que se ejecutan y no se pueden usar desde un escritorio (aunque se inician desde un escritorio y, por lo tanto, pueden usarse igualmente). Sin embargo, muchos usuarios quieren usar el N2 como un ordenador de escritorio, con la esperanza de tener una experiencia fluida tanto en el propio escritorio como en las aplicaciones, pero dado que el ODROID-N2 no tiene drivers de video X11, las opciones se reducen notablemente.

Figure 1 - ODROID-N2 MATE desktop with compositing allows for transparent terminal window
Figura 1: El escritorio MATE del ODROID-N2 con “superposición” permite ventanas de terminal transparentes

El N2 es bastante bueno como para sustituir a ordenador de escritorio, y su rápida CPU permite la superposición del escritorio, lo cual permite disponer de ventanas transparentes, dando al N2 la apariencia de un ordenador de escritorio más rápido. La falta de aceleración por hardware supone una notable desventaja, especialmente en el navegador web.

Aunque Chromium es muy lento, especialmente cuando reproducimos videos de YouTube, Firefox funciona ligeramente mejor, aunque ambos no tienen aceleración por hardware, de modo que no hay soporte para WebGL o desplazamiento acelerado por hardware. Aun así, con la ayuda de gl4es de @ptitSeb (un contenedor OpenGL para OpenGL ES), muchos programas se pueden ejecutar con aceleración OpenGL en modo "Pantalla completa". Esto nos permite ejecutar varios juegos que ya he compilado y configurado para los ODROIDs, incluido el ODROID-N2.

Configurando el entorno

Después de instalar el escritorio MATE con los drivers de la GPU, necesitaba instalar gl4es desde mi repositorio, aunque también instalé monolibs-odroid ya que ofrece una versión libSDL2 que admite OpenGL, que por defecto está desactivado en las versiones libSDL2 para ODROID, que normalmente usan OpenGL ES. Aún lo necesitamos para que todo funcione, así que instalaremos ambos:

$ apt install -t stretch libgl-odroid monolibs-odroid
La mayoría de las aplicaciones no se inician directamente desde el menú y deben arrancarse desde la línea de comandos, de lo contrario utilizarán el Software OpenGL de MESA o la versión SDL2 incorrecta. Por lo tanto, configuro mi entorno definiendo las siguientes variables:
export LIBGL_FB=1
export LIBGL_GL=21
export LD_LIBRARY_PATH=/usr/local/lib/monolibs
Algunos de los juegos que hemos probamos ya estaban diseñados para usar OpenGL y gl4es en primer lugar, de modo que la única diferencia para estas aplicaciones es la opción "LIBGL_FB=1", así que merece la pena poner esta variable en /etc/environment, de lo contrario quedará activada para todas las aplicaciones (requiere reiniciar). No todos los programas se pueden ejecutar con las otras dos opciones del archivo de entorno, de modo que debes omitirlas. Con esto pude iniciar la mayoría de las aplicaciones directamente desde el terminal. En muy contadas ocasiones, tuve que hacer algo más, aunque lo detallaré cuando llegue el momento.

Una cosa que observé es que todos los juegos parecen ejecutarse a unos 45 FPS. No creo que esto se deba al bajo rendimiento, probablemente esté relacionado con algún tipo de limitación de los drivers X11. Ahora, con nuestra configuración completada, veamos qué juegos podemos ejecutar.

Cendric

Cendric es un juego de rol con un ligero estilo retro. Muchos de los gráficos parecen estar dibujados a mano o por el ordenador, aunque el juego en sí no está nada mal. Utiliza X11 y OpenGL directamente, de modo que podría iniciarse prácticamente por sí sólo. Aunque la variable LIBGL_FB=1 está definida, puedes ejecutar el juego desde la línea de comandos o incluso desde el menú. El juego presenta algunos problemas gráficos con otros ODROID, aunque me he encontrado con el problema de que cuando cambias desde la vista de mapa del mundo a la vista de las mazmorras, la pantalla no se actualiza y aparece la última imagen que viste del nivel. Salte del juego con ALT + F4, reiniciar el juego y reanudarlo, y aparecerás en la nueva área a la que querías acceder. Por lo general, el juego funciona bien con los drivers, aunque el error al cambiar la vista del mundo es un poco molesto.

Figure 2 - Cendric on the ODROID-N2 started directly from the start menu (with environment variable)
Figura 2 - Cendric en el ODROID-N2 se inicia directamente desde el menú de inicio (con la variable de entorno)

Dune Legacy

Este es uno de mis juegos favoritos de todos los tiempos. Dune 2, el abuelo de todos los RTS modernos (juegos de estrategia en tiempo real), Dune Legacy es una versión mejorada y optimizada del juego con mejor interfaz y opciones de control que el original.

Figure 3 - Dune Legacy on the ODROID-N2 - one of the early levels
Figura 3 - Dune Legacy en el ODROID-N2: uno de los primeros niveles

Dune Legacy depende de SDL2 como driver gráfico, que en mi imagen ARM64 normalmente usa OpenGL ES por defecto, pero como no tenemos OpenGL ES con soporte de X11, necesitamos una versión que admita OpenGL y use gl4es. Éste funciona siempre que ejecutemos el juego con "LD_LIBRARY_PATH =/usr/local/lib/monolibs", lo que significa que es mejor iniciarlo desde la línea de comandos.

Esto, junto con la opción LIBGL_FB = 1, es suficiente para ejecutar el juego. Aparte de algunos errores de transparencia, no he observado ningún problema con el juego. Todos los menús funcionan, el juego se ejecute bien y es fluido. Es completamente jugable y se puede disfrutar bastante sobre el ODROID-N2.

EasyRPG Player

EasyRPG Player es un intérprete para juegos RPG Maker 2000 y 2003 que también requiere SDL2, de modo que debes iniciarlo desde la línea de comandos. Por lo que sé, no utiliza ningún shader, así que la aceleración por hardware realmente no es necesaria, aunque si es un requisito para iniciar el intérprete.

Figure 4 - Blue Skies running on EasyRPG Player
Figura 4 - Blue Skies ejecutándose en EasyRPG Player

No hay mucho que decir al respecto, excepto que funciona bien. No he observado ningún problema que ya no estuviese presente en cualquier otro ODROID.

Friking Shark

Este juego es un remake del clásico juego de arcade Flying Shark (también conocido como Sky Shark), que fue adaptado para muchas y diferentes plataformas, como Amiga, C64 o NES. Este remake 3D utiliza OpenGL 2.0 y shaders, por lo que no es tan simple como otros juegos y tenía algunos problemas en el pasado con gl4es. Actualmente, se ejecuta magníficamente en el ODROID-N2 con gl4es y LIBGL_FB=1. Como solo se ejecuta sobre OpenGL y no necesita SDL2, se puede iniciar directamente desde el menú si configuras la variable de entorno.

Figure 5 - Friking Shark on the ODROID-N2
Figura 5 - Friking Shark en el ODROID-N2

Frogatto (and friends)

Este juego de plataformas resultó ser uno de los juegos más complicados de ejecutar. Creé una versión que fuera capaz de ejecutarse directamente bajo OpenGL ES/EGL/X11, pero no funcionaba en el ODROID-N2 al no contar con drivers X11 OpenGL ES.

Esta versión no se puede usar con gl4es porque fue reescrita para utilizar OpenGL ES/EGL/X11, así que recurrí a la versión de Debian. Solo necesita SDL 1.2 así como OpenGL, y debe iniciarse con LIBGL_FB y LD_LIBRARY_PATH. Aunque este método funciona, saca a la luz otro problema que solucioné con mi propia versión del juego: sólo se inicia con una resolución de 800x600 y esto no se puede configurar. Por lo tanto, la pantalla se ve bastante mal a menos que también cambies la resolución de tu ODROID a 800x600. Aun así, el juego funciona bien a pesar de estos problemas gráficos.

Figure 6 - Frogatto and Friends runs only in 800x600 - the rest will be blanked out
Figura 6: Frogatto and Friends solo se ejecuta en 800x600; el resto aparece en blanco

Gigalomania

Este remake de MegaLoMania es un juego de estrategia que me encantaba en Amiga, utiliza SDL2 para renderizar sus gráficos, por lo que también necesita LIBGL_FB y LD_LIBRARY_PATH. El juego no hace nada sofisticado con los gráficos, así que debería funcionar bien.

Figure 7 - Gigalomania on the ODROID-N2
Figura 7 - Gigalomania en el ODROID-N2

GZDoom

GZDoom es un motor que te permite ejecutar juegos basados en el motor Doom. Hay toneladas de juegos que incluso se publican hoy en día que llevan el motor Doom a sus límites y más allá. Esta versión en particular usa OpenGL para optimizar gráficos y añade más efectos de iluminación, niebla, etc. Todo debe compilarse, de modo que tan pronto como tengas LIBGL_FB configurado, podrás iniciarlo desde el menú o desde el terminal que desee.

Figure 8 - Castlevania: Simon's Destiny for GZDoom
Figura 8 - Castlevania: Simon's Destiny para GZDoom

Figure 9 - Classic Doom running on ODROID-N2 with GZDoom
Figura 9 - Classic Doom ejecutándose en ODROID-N2 con GZDoom

Hedgewars

Hedgewars fue uno de los primeros juegos que probé con este método y llego a funcionar bastante bien. Este clon de Worms es muy divertido y debería funcionar perfectamente en tu ODROID-N2 con gl4es. Pero requiere tanto LIBGL_FB como LD_LIBRARY_PATH. Asegúrate de configurar el juego para usar el modo de pantalla completa.

(Figura 10: Hedgewars en el ODROID-N2 funciona bastante bien incluso con muchos elementos en pantalla como son las hojas caídas y las explosiones)

Naev

Este fue un poco complicado, ya que el juego se inicia sin un archivo de configuración y en modo ventana, aunque debe controlarse con el ratón y el teclado, lo que hace que sea muy difícil de interactuar al principio.

“Afortunadamente” la ventana del juego empezó a parpadear de fondo cuando inicié el juego por primera vez, de modo que pude mover el marco de la ventana a la esquina inferior izquierda donde se muestra la imagen del juego. Después de hacer eso, el menú se volvió más amigable y pude configurar la pantalla para usar el modo de pantalla completa en 1080p, tras lo cual el juego funcionó perfectamente.

El juego solo usa SDL 1.2 y OpenGL que ya estaba vinculado correctamente, de modo que debería poder ejecutarse directamente con solo LIBGL_FB desde el menú.

Figura 11 - Menú principal de Naev

Figura 12: Una captura de pantalla del juego en la que se observa que todo funcionaba bien y no hay problemas

Neverball / Neverputt

Ambos juegos del repositorio de Debian funcionan bien, aunque requieren LIBGL_FB y LD_LIBRARY_PATH, ya que utilizan SDL2 y OpenGL para el renderizado, por lo que es más fácil iniciarlos desde la línea de comandos. Después de ello los juegos debería funcionar sin problemas.

Figura 13 - Neverball en el ODROID-N2, con bonitos efectos de iluminación sobre el balón de Lava

OpenXCom

Este es uno de mis juegos favoritos de todos los tiempos. Un juego táctico basado en turnos con gestión de recursos y estrategia. Tiene un montón de opciones y es compatible con el original UFO Enemy Unknown y Terror de los juegos Deep. El juego utiliza SDL 1.2 y OpenGL, que ya está vinculado correctamente, por lo que debería funcionar simplemente iniciándolo desde el menú una vez que configures LIBGL_FB.

Figura 14: OpenXCom en el ODROID-N2 no es muy exigente gráficamente, se mantiene a 60 FPS constantemente.

Este juego es un poco confuso: aunque es el único que se ejecuta a 60 FPS, en este caso utiliza el renderizado por software. Si activo OpenGL para el renderizado, el juego se bloquea, de modo que los sombreadores no funciona, aunque funcionan en cierta medida en otras plataformas. Aun así, el juego es completamente jugable a pesar de que solo tira de software aportando una experiencia nostálgica, aunque moderna.

RVGL (ReVolt)

Este fue un poco más complicado de ponerlo a trabajar. Tiene diferentes backends que permiten cambiar entre OpenGL y OpenGL ES, además de configurar si quieres usar shaders o no. Puede definir esto en un archivo de configuración, pero el archivo de configuración solo se crea si cambias algo, lo que significa que debes poder iniciar el juego para se cree el archivo de configuración, pero no puedes iniciar el juego a menos que tenga la configuración correcta, lo que cual complica las cosas bastante. Yo copié la configuración de mi ODROID XU3 y cambié /home/odroid/.rvgl/profiles/rvgl.ini:

GLProfile = 1
Shaders = 0
ScreenWidth = 1920
ScreenHight = 1080
Este juego también requiere que utilicemos, además de LIBGL_FB y LD_LIBRARY_PATH, la opción LIBGL_GL=21, que fija gl4es en modo de compatibilidad OpenGL 2.1, de lo contrario, el juego se bloqueará tras aparecer el primer logotipo. Después de todos estos cambios, el juego funciona estupendamente.

Figura 15: RVGL, una de las aplicaciones OpenGL con un estupendo aspecto para los ODROIDs

SuperTux 2

Esta versión de Mario para Linux, si se instala desde mi repositorio tal y como se describe en https://forum.odroid.com/viewtopic.php?t=5908, debería aparecer vinculada a las librerías correctas, de modo que sólo es necesario LIBGL_FB para iniciar el juego. Es posible que quieras editar /home/odroid/.local/share/supertux2/config y activar la pantalla completa #t y configurar las dimensiones correctas de la pantalla.

Figura 16 - Super Tux 2 en el ODROID-N2

SuperTuxKart

Este clon de Mario Kart de Linux no fue fácil de ejecutar y presenta algunos problemas aquí y allá. En primer lugar, la versión de mi repositorio fue creada para OpenGL ES y no funciona con el ODROID-N2, pero la versión de Debian Stretch funciona ya fue diseñada para OpenGL. Requiere LIBGL_FB y LD_LIBRARY_PATH para funcionar, aunque normalmente necesitaría OpenGL 3.1 o superior, que no es compatible con gl4es. Por lo tanto, nos encontramos ante un modo heredado alternativo, que se ejecuta en OpenGL 1.x sin sombreadores. Tiene gráficos muy reducidos, sin transparencia ni reflejos, y creo que algunos elementos ni siquiera se muestran para nada. Aún así, el juego funciona y es bastante rápido.

Figura 17 - Super Tux Kart en el ODROID-N2, no es perfecto, pero es divertido

VICE

VICE es el Versatile Commodore Emulator. Dado que utiliza SDL2, requiere tanto LIBGL_FB como LD_LIBRARY_PATH. Una vez iniciado el emulador, puedes abrir la pantalla de opciones con F12 y activar el modo de pantalla completa, tras lo cual la imagen debería verse normal y podrás ejecutar tus juegos favoritos de Commodore.

Figura 18 - Giana Sisters para C64 ejecutándose bajo VICE en el ODROID-N2

Podría ejecutar incluso más juegos como Witchblast o Yquake 2 (remake de Quake 2 OpenGL), que funcionan bien, pero presentas algunos problemas (Yquake funcionó bastante bien, pero es más lento de lo esperado), y hay algunos juegos que no he tenido tiempo de probar aún.

Conclusión

Por supuesto, no todos los juegos que he probado ha llegado a funcionar, hubo algunos que no pude iniciar. CGMadness, por ejemplo, se bloqueó cuando empecé a jugar, a pesar de que el menú principal funcionaba. CorsixTH (Theme Hospital) no actualizaba la pantalla correctamente pudiendo leer cualquier item en pantalla. OpenClaw no se inició para nada, no logré entender por qué. Algunos juegos funcionaban, pero tenían problemas gráficos, como Witchblast, pero por lo general me sorprendió la cantidad de juegos que realmente llegaron a ejecutarse. Algunos de estos juegos podrían incluso ponerse en segundo plano simplemente presionando alt + tab para volver al escritorio, que funciona bien en algunos juegos que admitían esta opción. Todo esto ha sido posible gracias al impresionante driver gl4es de @ptitSeb, que nos permite ejecutar estas aplicaciones desde un escritorio. Puede que no sea capaz de ejecutar todo lo que queramos desde un escritorio, pero recurriendo a algunos trucos, una gran cantidad de aplicaciones parecen poder ejecutarse en el N2, muchas de las cuales no están disponibles bajo fbdev y requieren un entorno X11 funcional.

Be the first to comment

Leave a Reply