Skip to main content

Crate embassy_st7789v_sprite

Crate embassy_st7789v_sprite 

Source
Expand description

§embassy-st7789v-sprite

Moteur de sprites et d’animation style Piskel avec Framebuffer RAM pour l’écran ST7789V 240×320 via Embassy.

§Principe

Tout le dessin s’effectue dans un buffer RAM de 153 600 octets (SCREEN_W × SCREEN_H pixels codés en RGB565, soit 2 octets/pixel). Toutes les opérations de dessin (SpriteEngine::clear, SpriteEngine::draw_sprite, SpriteEngine::draw_pixel, SpriteEngine::fill_rect) sont synchrones et ne font que modifier le framebuffer en RAM, sans aucune communication SPI. Un seul appel SpriteEngine::flush (asynchrone) envoie ensuite la frame complète vers l’écran physique via SPI/DMA.

Ce découpage permet de composer une scène complète (fond, sprites, HUD…) sans scintillement, puis de l’envoyer d’un bloc — une technique de double-bufferisation logicielle adaptée aux contraintes mémoire de l’embarqué.

§Exemple minimal

use embassy_st7789v_sprite::{SpriteEngine, PiskelSprite, FB_SIZE};
use embassy_st7789v::Color;

static HERO_SPRITE: PiskelSprite = PiskelSprite {
    width: 32,
    height: 32,
    frame_count: 4,
    pixels: &HERO_PIXELS, // généré depuis un export Piskel (voir README)
};

// Le framebuffer doit vivre aussi longtemps que le moteur.
static mut FRAMEBUFFER: [u16; FB_SIZE] = [0u16; FB_SIZE];

let framebuffer = unsafe { &mut *core::ptr::addr_of_mut!(FRAMEBUFFER) };
let mut engine = SpriteEngine::new(display, framebuffer);

engine.clear(Color(0x0000));                    // fond noir
engine.draw_sprite(&HERO_SPRITE, 100, 200, 0);   // frame 0 du héros
engine.flush().await.unwrap();                   // envoi à l'écran

Structs§

PiskelSprite
Sprite statique ou planche d’animation exportée depuis Piskel.
SpriteEngine
Moteur de rendu par framebuffer pour le ST7789V.

Constants§

FB_SIZE
Nombre total de pixels du framebuffer (SCREEN_W × SCREEN_H).
SCREEN_H
Hauteur de l’écran ST7789V en pixels.
SCREEN_W
Largeur de l’écran ST7789V en pixels.
TRANSPARENT_KEY
Couleur-clé de transparence utilisée par SpriteEngine::draw_sprite.