TGX 1.1.1
A tiny 2D/3D graphics library optimized for 32 bits microcontrollers.
Loading...
Searching...
No Matches
TGX
TGX logo

About the library

TGX is a tiny but full-featured C++ library for drawing 2D and 3D graphics onto a memory framebuffer. The library runs on both microprocessors and microcontrollers but specifically targets 'powerful' 32 bits MCUs such as ESP32, RP2040/RP2350, Teensy 3/4...

Features

  • Hardware agnostic: the library simply draws on a memory framebuffer.
  • Optimized RAM usage and no dynamic allocation.
  • No external dependency (and no C++ STL dependency): just include the .h and .cpp files into your project and you are set!
  • Library in Arduino-friendly format.
  • Multiple color formats supported: RGB565, RGB24, RGB32, RGB64, RGBf, HSV
  • Image class that encapsulates a memory buffer and allows the creation of sub-images for clipping any drawing operations.
  • Extensive 2D API:
    • Methods for converting, blitting, copying and resizing sprites with high quality (bilinear filtering, sub-pixel precision).
    • Methods for drawing lines, polylines, polygons, triangles, rectangles, rounded rectangles, quads, circles, arcs, ellipses, Bezier curves and splines.
    • Methods for drawing text with support for multiple font formats with anti-aliasing
    • Alpha-blending supported for all drawing operations.
    • Several drawing methods come in two flavours: 'fast' methods and 'high quality' methods which are slower but draw using anti-aliasing and/or sub-pixel precision.
    • Easy interfacing with other libraries for
  • Extensive 3D API:
    • Optimized 'pixel perfect' triangle rasterizer with adjustable sub-pixel precision.
    • Depth buffer testing (selectable 16 bits or 32 bits precision).
    • Multiple drawing modes: fast wireframe, antialiased wireframe and solid rendering with shaders.
    • Unlit, flat and Gouraud shading.
    • Phong lighting model with separate ambient/diffuse/specular color components.
    • Per object material properties.
    • Perspective-correct texture mapping with selectable point sampling/bilinear filtering and multiple wrapping modes.
    • Perspective and orthographic projections.
    • Optional backface culling.
    • Tile rasterization: it is possible to render the viewport in multiple passes to save RAM.
    • Template classes for all the needed maths: Vec2, Vec3, Vec4 (vectors), Mat4 (4x4 matrix) and Box2, Box3 (boxes).
    • Legacy Mesh3D and compact meshlet-based Mesh3Dv2 model formats. Meshes and textures can be read directly from flash memory to save RAM.
  • Graphical tools with matching command-line versions:
    • tgx_image.py to convert common image files to TGX image headers.
    • tgx_mesh.py to convert Wavefront .obj files or existing TGX meshes to Mesh3D or Mesh3Dv2.
    • tgx_font.py to convert TrueType/OpenType fonts to TGX-compatible font headers.
    • tgx_info.py to inspect generated TGX image, mesh and font files.

Getting started

  1. Installation
  2. Basic concepts
  3. The 2D API.
  4. The 3D API.
  5. TGX tools.
Note
Do not forget to have a look at the examples located in \examples subfolder of the library.

References

Basic classes (2D graphics)

Main image object tgx::Image
Color types tgx::RGB565,tgx::RGB32,tgx::RGB24,tgx::RGBf,tgx::RGB64,tgx::HSV
2D vectors tgx::Vec2
2D box tgx::Box2

Additional classes specific to drawing 3D graphics

Main class for drawing a 3D scene tgx::Renderer3D
Legacy 3D model class tgx::Mesh3D
Compact meshlet model class tgx::Mesh3Dv2
3D Box tgx::Box3
3D and 4D vectors tgx::Vec3, tgx::Vec4
4x4 matrix for 3D (quaternions) tgx::Mat4