I recently needed to add SLAM visualization to QGroundControl. The plan: render a map using a simple graphics library, then encode the output via H.265. That’s how I stumbled into writing TinyGPU—and it quickly became my new favorite tool for lightweight embedded graphics.

TinyGPU is a lightweight, header-only C++ library for Arduino that handles RGB565 graphics, sprites, and even basic 3D wireframes on small screens.

What Makes TinyGPU Different?

Most Arduino graphics libraries try to do everything—drive displays, manage fonts, handle touch input. TinyGPU takes a smarter, more modular approach: it’s an in-memory rendering layer.

Here’s the flow:

  1. You render graphics, text, or sprites into an RGB565 memory buffer.
  2. You forward that finished pixel data to your own hardware-specific output code.

That’s it. TinyGPU never argues with your display driver—it just works. You keep full control over how final pixels are pushed to your screen.

Feature Highlights

1. Multiple Color Spaces (Not Just RGB565)

RGB565 is the star—compact 16-bit color balancing quality and memory usage—but TinyGPU also supports RGB666, RGB888, and Monochrome. That level of flexibility is rare and very welcome.

2. 2D Primitives Done Right

Lines, rectangles, circles, plus bitmap font rendering with wrapped line printing. For a lightweight library, the typography support feels surprisingly robust.

3. Sprite Superpowers

You can add, move, scale, and rotate sprites, complete with sprite-aware framebuffer management. For UI work or simple game animations, it’s a joy to use.

4. Basic 3D Wireframe Rendering

Yes, you read that correctly. TinyGPU includes:

  • 3D transforms
  • Camera and view matrix
  • Perspective and orthographic projection
  • Minimal depth-buffered line rendering

I didn’t expect to render a spinning 3D cube on an ESP32 with a tiny TFT—but here we are. It’s obviously not a full 3D engine, but for visualizations, demos, or just impressing friends, it’s remarkably fun.

5. BMP File Support

Load and save BMP data directly. If you’re working with offline assets or want to capture screenshots from your device, this feature is a lifesaver.


Further Information

Check out the project on GitHub!


Categories: Arduino

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *