La librería UnifiedGFX permite desarrollar tus proyectos de forma independiente al hardware empleado.
Existen muchos tipos de MCU y pantallas, y muchas y muy buenas librerías para gestionarlas. Pero yo no quiero que mi proyecto dependa de un tipo determinado hardware, si no que quiero que funcione en cualquiera de ellos.
Idealmente, el objetivo es que la mayor parte de mi proyecto funcione lo mismo en un M5Stick con TFT, en un ESP8266 con una pantalla OLED, incluso en una matriz led RGB o WS2812b.
Sin embargo, esta capacidad de portabilidad viene con un (pequeño) coste de rendimiento. Si estás buscando el máximo rendimiento, probablemente esta librería no es para ti.
Personalmente, en la mayoría de ocasiones no me importa tener 30.48 fps o 29.83, comparado con la ventaja de ser independiente del hardware
Como usar UGFX
UnifiedGFX incorpora clases abstractas como IBitmap
Por otro lado, la clase Graphic
De esta forma en tu proyecto, por ejemplo, tu función de dibujo quedaría así,
void draw(UGFX::IGraphic<uint16_t>& screen, uint16_t background, uint16_t color)
{
//
}
Adaptando a tu hardware
Por diseño, UnfiedGFX no sabe nada sobre hardware y drivers, es una capa superior de abstracción. Para usarla en el hardware específico de tu proyecto puedes hacer dos cosas,
- Usar un patrón adaptador
- Modificar las librerías gráficas de tu hardware para implementar IGraphic
Un ejemplo de cómo implementar en tus clases Graphic
Por otro lado, se proporcionan adaptadores y ejemplo de su uso para las librerías AdagruitGFX, eTFT y LGVX.
Rendimiento
Las funciones en los adaptadores están decoradas con el atributo ‘always_inline’, así que el rendimiento debería ser similar a usarlas la directamente.
El rendimiento será incluso superior si modificas las librerías de tu hardware para implementar las clases abstractas de UnifiedGFX
Por otro lado, el rendimiento real obtenido dependerá de lo bien que el adaptador aproveche las características del hardware.
Lo mínimo necesario para que UnifiedGFX funcione son las funciones de IBitmap
Si el adaptador overrides más funciones de Graphic
Esto es especialmente importante en funciones que realizan operaciones en bloque, que son mucho más rápidas que realizar la operación pixel por pixel. Normalmente estas funciones suelen ser drawHorizontalLine, drawVerticalLine o fillRect.
Descarga el código
Todo el código está disponible para su descarga en Github en este enlace https://github.com/luisllamasbinaburo/UnifiedGFX