<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>glimmerptr</title><link href="https://glimmerptr.codeberg.page/" rel="alternate"/><link href="https://glimmerptr.codeberg.page/feeds/all-es.atom.xml" rel="self"/><id>https://glimmerptr.codeberg.page/</id><updated>2026-08-30T00:00:00+02:00</updated><entry><title>Portando un juego para anbernic con muos</title><link href="https://glimmerptr.codeberg.page/port-game-raylib-westonpack.html" rel="alternate"/><published>2026-08-30T00:00:00+02:00</published><updated>2026-08-30T00:00:00+02:00</updated><author><name>Oscar (glimmerptr) Triano</name></author><id>tag:glimmerptr.codeberg.page,2026-08-30:/port-game-raylib-westonpack.html</id><summary type="html">&lt;h1&gt;Portando un juego raylib para la anbernic con muos&lt;/h1&gt;
&lt;p&gt;Tengo una anbernic con muos como sistema. Yo he pensado en por qué no usar estas máquinas para algo mas que emulación, como hacer juegos para este tipo de máquinas con portmaster.
Todo esto lo he hecho en un Arch, Endeavour …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;Portando un juego raylib para la anbernic con muos&lt;/h1&gt;
&lt;p&gt;Tengo una anbernic con muos como sistema. Yo he pensado en por qué no usar estas máquinas para algo mas que emulación, como hacer juegos para este tipo de máquinas con portmaster.
Todo esto lo he hecho en un Arch, Endeavour OS, en un x86_64, así que tendrás que adaptar los pasos al sistema que tienes.&lt;/p&gt;
&lt;h2&gt;Portmaster&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://portmaster.games"&gt;Portmaster&lt;/a&gt; es una plataforma que facilita la instalación de juegos desde otras plataformas, ya sea con un entorno de ejecución u ofreciendo versiones nativas de estos juegos.&lt;/p&gt;
&lt;p&gt;Para este caso uso westonpack, mas que nada porque al parecer muos usa el framebuffer /dev/fb0 para dibujar en pantalla en vez DRM/KMS como usa raylib.
&lt;a href="https://github.com/binarycounter/Westonpack/wiki"&gt;Westonpack&lt;/a&gt; es un entorno de ejecución que emula una pila gráfica que se encuentra típicamente en un escritorio Linux y no en un linux pensado para empotrados.&lt;/p&gt;
&lt;h2&gt;Preparación del entorno de construcción&lt;/h2&gt;
&lt;p&gt;Leyendo esto &lt;a href="https://portmaster.games/porting.html"&gt;https://portmaster.games/porting.html&lt;/a&gt; puedes tener tu entorno para portar juegos con raylib. En este apartado voy a describir cómo monté el mío.&lt;/p&gt;
&lt;p&gt;Necesitas tener instalado en tu sistema &lt;strong&gt;debootstrap&lt;/strong&gt; y &lt;strong&gt;qemu-user-static-binfmt&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Adapto pasos que necesitamos de &lt;a href="https://wiki.debian.org/Debootstrap"&gt;https://wiki.debian.org/Debootstrap&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; mkdir debian-arm64
&amp;gt; sudo debootstrap --arch=arm64 stable debian-arm64 http://deb.debian.org/debian/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Una vez terminado hacemos chroot ahí&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;gt; sudo chroot debian-arm64/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Si está bien instalado qemu-user-static-binfmt en el host, en el chroot al hacer&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;gt; uname -m&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;debería salir&lt;/p&gt;
&lt;p&gt;&lt;code&gt;aarch64&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Instalación y configuración de paquetes&lt;/h3&gt;
&lt;p&gt;Haz esto en la terminal dentro de chroot.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;gt; apt install cmake-curses-gui build-essential libsdl2-dev&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Descarga el codigo fuente de la versión actual de raylib (por esta fecha) &lt;a href="https://github.com/raysan5/raylib/archive/refs/tags/6.0.tar.gz"&gt;https://github.com/raysan5/raylib/archive/refs/tags/6.0.tar.gz&lt;/a&gt; en el root, o en otra parte de tu entorno chroot.&lt;/p&gt;
&lt;p&gt;Personalmente para trabajar cómodamente en el root del chroot desde fuera doy todos los permisos de mi usuario y grupo al /root &lt;em&gt;del chroot&lt;/em&gt; (&lt;strong&gt;no&lt;/strong&gt; el /root del host).
Extrae el zip y entra en el directorio.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; tar -xzf raylib-6.0.tar.gz
&amp;gt; cd raylib-6.0
&amp;gt; ccmake .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Presiona la tecla C (Configure)&lt;/p&gt;
&lt;p&gt;Una vez terminada la configuración inicial&lt;/p&gt;
&lt;p&gt;Editamos estos campos hasta que queden así, &lt;strong&gt;no&lt;/strong&gt; borramos campos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BUILD_EXAMPLES    OFF&lt;/li&gt;
&lt;li&gt;OPENGL_VERSION    2.1&lt;/li&gt;
&lt;li&gt;PLATFORM                  SDL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Los campos editados se tienen que mostrar como en la lista de arriba" src="https://glimmerptr.codeberg.page/pgrw-1.png"&gt;&lt;/p&gt;
&lt;p&gt;De nuevo, configure, hasta que salga Generate (tecla G), y presiona G para generar. Sal y haz&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; make
&amp;gt; make install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Una vez listo, copia tu juego en una carpeta dentro del chroot y cuando compiles añades estas bibliotecas&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-ldrm -lgbm -lEGL -lGL&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Westonpack&lt;/h3&gt;
&lt;p&gt;Sigue las instrucciones indicadas en &lt;a href="https://github.com/binarycounter/Westonpack/wiki/SDL2-on-X11-Example#running-sdl2-games-that-require-x11"&gt;https://github.com/binarycounter/Westonpack/wiki/SDL2-on-X11-Example#running-sdl2-games-that-require-x11&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Y copia y adapta el script &lt;a href="https://github.com/binarycounter/Westonpack/wiki/SDL2-on-X11-Example#running-sdl2-games-that-require-x11"&gt;https://github.com/binarycounter/Westonpack/wiki/SDL2-on-X11-Example#example-script-opengl-2&lt;/a&gt; para tu port.&lt;/p&gt;
&lt;p&gt;Como mínimo con renombrar los nombres del port basta. Renombra el script al nombre de tu port.&lt;/p&gt;
&lt;h2&gt;Empaquetando para pruebas&lt;/h2&gt;
&lt;p&gt;La estrucutura del port al final quedaría&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;port
├── nombre-juego
│   ├── assets
│   │   ├── loquesea
│   │
│   ├── libs.aarch64    Mete todas las bibliotecas que usa tu juego aquí
│   │   └── libraylib.so.600    Esto si has compilado raylib como biblioteca dinámica
│   ├── nombre-juego.aarch64
│   └── x11sdllib
│       └── libSDL2-2.0.so.0
└── nombre-juego.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Subiendo a tu maquinita&lt;/h3&gt;
&lt;p&gt;Usa scp o sftp para subir el port a tu máquina para probarlo&lt;/p&gt;
&lt;p&gt;Copia &lt;em&gt;/port/nombre-juego&lt;/em&gt; a &lt;em&gt;ports/nombre-juego&lt;/em&gt;
Copia &lt;em&gt;/port/nombre-juego.sh&lt;/em&gt; a &lt;em&gt;ROMS/Ports/nombre-juego.sh&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Portmaster &lt;a href="https://portmaster.games/porting.html#how-do-we-compile-our-games-for-portmaster"&gt;aquí&lt;/a&gt; habla de matar la interfaz gráfica para probar el juego desde terminal,
con los pasos anteriores podemos mantener la interfaz y probar el juego como si fuera descargado de Portmaster.&lt;/p&gt;
&lt;p&gt;Esta estructura es para &lt;strong&gt;pruebas&lt;/strong&gt; nada más, para un empaquetamiento para portmaster &lt;strong&gt;&lt;a href="https://portmaster.games/packaging.html"&gt;faltan archivos de metadatos&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Esto es todo por el momento, para cualquier aclaración o detalle por favor contacta conmigo.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://glimmerptr.codeberg.page"&gt;glimmerptr&lt;/a&gt; © 2026 by &lt;a href="https://glimmerptr.codeberg.page"&gt;Oscar Triano (glimmerptr)&lt;/a&gt; is licensed under &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/"&gt;CC BY-SA 4.0&lt;/a&gt;&lt;img src="https://mirrors.creativecommons.org/presskit/icons/cc.svg" alt="" style="max-width: 1em;max-height:1em;margin-left: .2em;"&gt;&lt;img src="https://mirrors.creativecommons.org/presskit/icons/by.svg" alt="" style="max-width: 1em;max-height:1em;margin-left: .2em;"&gt;&lt;img src="https://mirrors.creativecommons.org/presskit/icons/sa.svg" alt="" style="max-width: 1em;max-height:1em;margin-left: .2em;"&gt;&lt;/p&gt;</content><category term="Tecnología"/><category term="programación"/><category term="empotrado"/></entry><entry><title>Los videojuegos modernos son absurdos.</title><link href="https://glimmerptr.codeberg.page/modern-gaming-absurdity.html" rel="alternate"/><published>2026-07-26T00:00:00+02:00</published><updated>2026-07-26T00:00:00+02:00</updated><author><name>Oscar (glimmerptr) Triano</name></author><id>tag:glimmerptr.codeberg.page,2026-07-26:/modern-gaming-absurdity.html</id><summary type="html">&lt;h1&gt;Los videojuegos modernos son absurdos, sobre todo en verano&lt;/h1&gt;
&lt;p&gt;Para jugar a los &lt;strong&gt;últimos videojuegos&lt;/strong&gt; estos &lt;strong&gt;piden requisitos altos para la máquina&lt;/strong&gt;.
Además de &lt;strong&gt;gastar mucha energía&lt;/strong&gt;, ya sea por estar &lt;strong&gt;mal optimizados&lt;/strong&gt; o pedir mucho a la máquina, generan &lt;strong&gt;mucho calor&lt;/strong&gt; como consencuencia de ese gasto.
Este calor &lt;strong&gt;en …&lt;/strong&gt;&lt;/p&gt;</summary><content type="html">&lt;h1&gt;Los videojuegos modernos son absurdos, sobre todo en verano&lt;/h1&gt;
&lt;p&gt;Para jugar a los &lt;strong&gt;últimos videojuegos&lt;/strong&gt; estos &lt;strong&gt;piden requisitos altos para la máquina&lt;/strong&gt;.
Además de &lt;strong&gt;gastar mucha energía&lt;/strong&gt;, ya sea por estar &lt;strong&gt;mal optimizados&lt;/strong&gt; o pedir mucho a la máquina, generan &lt;strong&gt;mucho calor&lt;/strong&gt; como consencuencia de ese gasto.
Este calor &lt;strong&gt;en verano es muy problemático&lt;/strong&gt; ya que se suma al calor del ambiente, sobre todo en las &lt;strong&gt;olas de calor&lt;/strong&gt;.
La olas de calor &lt;strong&gt;van en aumento&lt;/strong&gt; y
sin &lt;strong&gt;métodos de refrigeración eficientes&lt;/strong&gt; no todo el mundo se puede permitir
o pagar el aire acondicionado por cualquier circunstancia.&lt;/p&gt;
&lt;p&gt;Es normal que una máquina genere calor, sobre todo si hace una tarea intensiva como son los videojuegos en este caso.
También es normal el calor en verano, y te puedes aliviar estando a la sombra o refrescándote pero
no te puedes aliviar fácilmente en una ola de calor requiriendo de &lt;strong&gt;métodos costosos&lt;/strong&gt; para refrescar el ambiente.&lt;/p&gt;
&lt;p&gt;Una manera de &lt;strong&gt;mitigar&lt;/strong&gt; esto en los videojuegos es con la &lt;strong&gt;sincronización vertical&lt;/strong&gt;, que aumenta los tiempos de espera
dándo a la máquina un alivio, o &lt;strong&gt;limitando la tasa de FPS&lt;/strong&gt;, que tiene mas o menos el mismo efecto.
Otra manera de mitigar este impacto es tirando de la &lt;strong&gt;dirección artística y técnica&lt;/strong&gt; en vez de la fuerza bruta de los recursos de la máquina.
Un ejemplo de esta dirección serían los videojuegos de la era PS2, NGC y XBOX, yo echaría un vistazo al &lt;a href="https://www.youtube.com/watch?v=Fb56owOyMzw"&gt;Metroid Prime de NGC&lt;/a&gt;
que incluso a día de hoy comparándolo con su remaster reciente ha envejecido muy bien.
Combinando lo anterior creo que se puede crear videojuegos impactantes, asequibles en recursos y eficientes con la máquina.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://glimmerptr.codeberg.page"&gt;glimmerptr&lt;/a&gt; © 2026 by &lt;a href="https://glimmerptr.codeberg.page"&gt;Oscar Triano (glimmerptr)&lt;/a&gt; is licensed under &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/"&gt;CC BY-SA 4.0&lt;/a&gt;&lt;img src="https://mirrors.creativecommons.org/presskit/icons/cc.svg" alt="" style="max-width: 1em;max-height:1em;margin-left: .2em;"&gt;&lt;img src="https://mirrors.creativecommons.org/presskit/icons/by.svg" alt="" style="max-width: 1em;max-height:1em;margin-left: .2em;"&gt;&lt;img src="https://mirrors.creativecommons.org/presskit/icons/sa.svg" alt="" style="max-width: 1em;max-height:1em;margin-left: .2em;"&gt;&lt;/p&gt;</content><category term="Tecnología"/></entry><entry><title>Hello world</title><link href="https://glimmerptr.codeberg.page/hello-world.html" rel="alternate"/><published>2026-07-05T00:00:00+02:00</published><updated>2026-07-05T00:00:00+02:00</updated><author><name>Oscar (glimmerptr) Triano</name></author><id>tag:glimmerptr.codeberg.page,2026-07-05:/hello-world.html</id><content type="html">&lt;p&gt;Hello world en español.&lt;/p&gt;</content><category term="Misc"/></entry></feed>