8f246a1f3ea0eab0560fa07362dbf8b0d5521417
pbio: simple pixel buffer and I/O system
Pixelbuffer-basiertes Fenster mit Palette-Lookup-Renderer (GLFW + wgpu) und Maus/Tastatureingaben.
pbio nimmt einen Bytearray, interpretiert diesen als 8-Bit-Pixelbuffer und rendert ihn auf ein Fenster. Optional mit Letterbox für ein festes Seitenverhältnis
Integration
pbio ist nicht auf crates.io veröffentlicht. Das Crate kann direkt aus dem Git-Repository eingebunden werden:
[dependencies]
pbio = { git = "https://codeberg.org/irrlicht/rust-pbio.git" }
pbio benötigt eine funktionierende GLFW-Toolchain (CMake + C-Compiler) zum Bauen sowie aktuelle Grafiktreiber mit Vulkan-, Metal- oder DX12-Unterstützung für wgpu.
Verwendung
use pbio::{Event, Key, Platform, PlatformConfig};
fn main() {
let mut p = Platform::new(PlatformConfig {
title: "Demo".into(),
window_size: (1024, 768),
framebuffer_size: (320, 240),
..Default::default()
});
while !p.should_close() {
p.poll_events(None);
// drain_events() borrowt &mut self → close erst nach dem Loop setzen.
let mut close = false;
for ev in p.drain_events() {
if let Event::Key { key: Key::Escape, pressed: true, .. } = ev {
close = true;
}
}
if close { p.request_close(); }
let (w, _h) = p.framebuffer_size();
let fb = p.framebuffer_mut();
for (i, px) in fb.iter_mut().enumerate() {
*px = ((i as u32 % w) ^ (i as u32 / w)) as u8;
}
p.present();
}
}
API-Überblick
PlatformConfig– Titel, Fenster-/Framebuffer-Größe, optionalesaspect_ratio(Letterbox), Palette, VSync. Default = 800×600 Fenster, 320×240 Framebuffer, 4:3,palette::RGB332.Platform::new(cfg)– Fenster + GPU-Pipeline aufsetzen.poll_events(timeout)– GLFW-Events einlesen (None= blockierend).drain_events()– Iterator überEvent(Key,Char,MouseMove,MouseBtn,Resize,CloseRequested).framebuffer_mut()–&mut [u8]der Längew*h, je Pixel ein Paletten-Index.present()– Frame auf das Fenster bringen.should_close()/request_close().
Paletten
palette::RGB332 ist als Default eingebaut. Eigene Paletten sind ein
[[u8; 3]; 256] (RGB pro Index) und werden über PlatformConfig::palette
übergeben.
Description
Languages
Rust
95.3%
WGSL
3.7%
Python
1%