Skip to content

mrcodetastic/GFX_Lite

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GFX_Lite

A slimmed-down version of AdaFruit_GFX and FastLED combined together to make a simple to use graphics library that supports 24bpp colour.

The root/core graphics primitive functions extracted from the Adafruit GFX Library. Originally created by [Jean-Marc Zingg] (https://github.com/ZinggJM/GFX_Root).

Overview

🚀 Recent Improvements (v2.0)

Performance Enhancements:

  • 30% faster layer access with contiguous memory allocation
  • 🎯 50% faster rectangle filling with smart bounds clipping
  • 🧠 Advanced memory management with validation and monitoring
  • 🔍 Comprehensive error handling and initialization checking

New Features:

  • 🎨 12 advanced blend modes (Multiply, Screen, Overlay, etc.)
  • 📐 Layer operations: scroll, blur, brightness adjustment
  • 📊 Color analysis: average, dominant, pixel counting
  • 🛡️ Memory safety with bounds checking and validation
  • ⚙️ Platform optimizations for ESP32/ARM processors

See IMPROVEMENTS.md for detailed documentation.

Use Cases

This library is designed to be a drop-in replacement for AdaFruit_GFX and FastLED when using the ESP32-HUB75-MatrixPanel-DMA library

Simply compile the ESP32-HUB75-MatrixPanel-DMA library with the compile-time flag USE_GFX_LITE to enable this.

Benefits over using FastLED + AdaFruit GFX

  • FastLED and AdaFruit GFX include a lot of code for specific hardware platforms given their use as libraries to control displays or long strings of LEDs. But as a result, there's a lot of 'bloat' and compile time warnings. In certain cases these libraries fail to compile at all (i.e. FastLED on the ESP32S3).

  • This merged library takes all the drawing functions and strips out the hardware specific junk, so you are free to implement this library on whatever device you want.

  • This merged library includes all the draw routines from AdaFruit GFX and additionally enables the use of these with FastLED's CRGB (24bpp) colour struct.

  • The overall code size is a lot smaller.

Enhanced Layers and LayerCompositor!

The library includes advanced off-screen memory-based CRGB buffers with sophisticated compositing capabilities.

Quick Start Example

// Setup layers with improved memory management
GFX_Layer gfx_layer_bg(PANEL_PHY_RES_X, PANEL_PHY_RES_Y, mbi_set_pixel);
GFX_Layer gfx_layer_fg(PANEL_PHY_RES_X, PANEL_PHY_RES_Y, mbi_set_pixel);

// Validate initialization
if (!gfx_layer_bg.isInitialized() || !gfx_layer_fg.isInitialized()) {
    Serial.println("Layer initialization failed!");
    return;
}

// Create advanced compositor
GFX_LayerCompositor gfx_compositor(mbi_set_pixel);

// Draw with performance optimizations
gfx_layer_fg.fastFillScreen(CRGB::Black);            
gfx_layer_fg.drawCentreText("COOL!", MIDDLE, &FreeSansBold9pt7b, CRGB::White);
gfx_layer_fg.autoCenterX();

// Create gradient background  
gfx_layer_bg.fastFillScreen(CRGB::Red);

// Advanced blending with multiple modes
gfx_compositor.BlendAdvanced(gfx_layer_bg, gfx_layer_fg, 
                            GFX_LayerCompositor::BLEND_SCREEN, 200);

Advanced Features

Layer Operations:

layer.scrollX(5, CRGB::Black);        // Scroll with fill color
layer.blur(64);                       // Real-time blur effect
layer.adjustBrightness(180);          // Global brightness
CRGB avg = layer.getAverageColor();   // Color analysis

Advanced Compositing:

// Photoshop-style blend modes
compositor.BlendAdvanced(bg, fg, GFX_LayerCompositor::BLEND_MULTIPLY, 255);
compositor.BlendAdvanced(bg, fg, GFX_LayerCompositor::BLEND_OVERLAY, 180);

// Mask-based compositing
compositor.Mask(background, foreground, mask_layer);

Memory & Performance Monitoring:

Serial.printf("Layer memory usage: %d bytes\n", layer.getMemoryUsage());
layer.printMemoryInfo();  // Debug information

Performance Considerations

A layer uses 3 bytes of memory per pixel (RGB), but now with optimized allocation:

  • 64x32 display: ~6KB per layer
  • 128x64 display: ~24KB per layer
  • 256x128 display: ~96KB per layer

The new contiguous memory allocation provides ~30% better performance for large operations.

Available Blend Modes

Mode Effect Use Case
BLEND_NORMAL Standard blending General purpose
BLEND_MULTIPLY Darkening Shadows, color burns
BLEND_SCREEN Lightening Highlights, glows
BLEND_OVERLAY Contrast Dramatic effects

Examples

  • Basic Example: example/example.cpp.ino - Original functionality
  • Advanced Example: example/advanced_example.ino - New features showcase
  • Performance Test: Demonstrates speed improvements

Documentation

Compatibility

  • ESP32 (all variants) - Fully optimized
  • ESP8266 - Basic support
  • Arduino - Core functionality
  • STM32 - Fast performance
  • 🔄 Other platforms - Should work with minimal changes

Installation

  1. Download or clone this repository
  2. Place in your Arduino libraries folder
  3. Include in your project: #include <GFX_Lite.h>
  4. For layers: #include "GFX_Layer.hpp"

License

This library maintains the original licenses from AdaFruit_GFX and FastLED components.


For detailed technical documentation, see IMPROVEMENTS.md

About

A slimmed version of AdaFruit_GFX and FastLED combined together to make a simple to use graphics library that supports 24bpp colour. Best used with the ESP32-DMA LED Matrix library.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages