Jugando con el framebuffer de Linux en Raspberry PI

Posted by

Hace una semana llegó (después de 4 meses), la pantalla 7″ touch que pedí al Papa Noel chino 🙂

IMG-20150817-WA0009

Docenas de ideas se me ocurrieron para usar esta pantalla con el Rasperry Pi del la visita anterior de Papa Noel: Desde un on-board display para el carro, hasta un reloj mono para mi alcoba. Pero cualquier cosa que haga tiene un pequeño reto: El hardware es bastante limitado: 700 MHz de velocidad de procesador, 512MB de RAM, entre otras cosas. Pero eso es excelente: con pocos recursos, necesitas ser creativo 🙂

El primer problema es cómo dibujar una interfase gráfica para lo que vaya a hacer. Lo más sencillo hubiera sido quizás usar Gambas, pero el overhead sería demasiado. Así que comencé a bajar de nivel, pensando en Python + OpenGL, C++ + OpenGL, pero todo me pareció muy complicado y/o con demasiado overhead. Al final, después de indagar un poco, llegué a viejo Framebuffer de Linux. Y es perfecto: No requiere ninguna dependencia (ya viene todo en Linux), funciona en cualquier Linux, y es bastante sencillo de usar: Como en los viejos tiempos, accedes a la memoria de vídeo directo para dibujar los pixeles. Mi lado oldschool demoscener se emocionó B-)

Y qué mejor forma de probarlo, que implementar un viejo efecto de fuego 😀

Este código está hecho en C, y tuvo varias iteraciones. Primero lo empecé probando en Dorothy, que su framebuffer sólo trabaja a 1024×768 y 32bpp. Pero era demasiado lento en el RPI. Al final quedó trabajando a 8 bpp (como en la VGA de antaño, so retro!!1ONE 😀 ), usando lookup tables para evitar ejecutar rand() en el bucle principal (lento), y convirtiendo las funciones para leer y escribir pixeles en macros.

El código fuente está en github.

Mi c-foo está muy oxidado… aun hay espacio para optimar más ese código. Aún así, fue una semana excelente, acabando con un perfecto #viernesretro 😀

2 comments

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *