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'écranStructs§
- Piskel
Sprite - Sprite statique ou planche d’animation exportée depuis Piskel.
- Sprite
Engine - 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.