use wsg_lib::app::{App, AppHandler}; use wsg_lib::resources::{Material, Mesh, Vertex}; use wsg_lib::utils; // 1. On définit notre "Jeu" qui implémente le comportement struct MonQuad { mesh: Mesh, material: Material, } impl AppHandler for MonQuad { fn render(&mut self, app: &mut App) { // Le rendu devient simple : on accède aux outils via &mut app if let Some(frame) = app.context.get_next_frame() { app.renderer .render(frame.view(), &self.mesh, &self.material); app.renderer.present(frame); } } } #[pollster::main] async fn main() -> Result<(), wsg_lib::utils::WsgError> { // 2. Initialisation via le Builder let mut app = App::builder() .title("Exemple Simple") .size(800, 600) .build() .await?; // 3. Setup des ressources (déclaration) app.cache .register_shader("basic", utils::BASIC_SHADER_PATH) .unwrap(); let vertices: [Vertex; 4] = [ Vertex { position: [-0.5, 0.5, 0.0], normal: [0.0, 0.0, 1.0], uv: [0.0, 0.0], color: [1.0, 0.0, 0.0, 1.0], }, Vertex { position: [0.5, 0.5, 0.0], normal: [0.0, 0.0, 1.0], uv: [1.0, 0.0], color: [0.0, 1.0, 0.0, 1.0], }, Vertex { position: [0.5, -0.5, 0.0], normal: [0.0, 0.0, 1.0], uv: [1.0, 1.0], color: [0.0, 0.0, 1.0, 1.0], }, Vertex { position: [-0.5, -0.5, 0.0], normal: [0.0, 0.0, 1.0], uv: [0.0, 1.0], color: [1.0, 1.0, 0.0, 1.0], }, ]; let indices: [u16; 6] = [0, 1, 2, 0, 2, 3]; let mesh = Mesh::new(app.context.device(), &vertices, Some(&indices)); let material = Material::new(app.renderer.format(), "basic", &mut app.cache); // 4. Lancement de la boucle (la magie opère ici) let handler = MonQuad { mesh, material }; app.run(handler) }