feat(examples): 3D MVP cube via standard shader, drop basic (Étape 5)

This commit is contained in:
Jérôme Bousquié
2026-09-17 10:40:43 +02:00
parent 43e8bfb40a
commit 0a85aff17b
15 changed files with 218 additions and 111 deletions
+9 -6
View File
@@ -1,7 +1,7 @@
//! Workflow bas-niveau : utilisation directe du `Context`, `Renderer`, `PipelineCache`, `Mesh` et
//! `Material`, contournant la façade `App`. Rendu d'un quad plat éclairé via la boucle winit 0.30
//! (`EventLoop::run_app` + `ApplicationHandler`). La fenêtre et le GPU sont créés dans `resumed()`,
//! comme l'exigent winit 0.30 et la migration faite dans `app.rs`.
//! `Material`, contournant la façade `App`. Rendu d'un quad plat (shader `standard` **unlit**) via la
//! boucle winit 0.30 (`EventLoop::run_app` + `ApplicationHandler`). La fenêtre et le GPU sont créés
//! dans `resumed()`, comme l'exigent winit 0.30 et la migration faite dans `app.rs`.
use std::sync::Arc;
use winit::application::ApplicationHandler;
use winit::dpi::LogicalSize;
@@ -59,13 +59,16 @@ impl ApplicationHandler for App {
let device = Arc::new(context.device.clone());
let mut cache = PipelineCache::new(device);
cache
.register_shader("basic", utils::BASIC_SHADER_PATH)
.register_shader("standard", utils::STANDARD_SHADER_PATH)
.unwrap();
let renderer = Renderer::new(&context, format);
// Rendu 2D plat : `standard` en mode unlit (les bind groups frame+object sont posés par
// draw_entity, la matrice frame par défaut est l'identité → positions NDC inchangées).
let mut renderer = Renderer::new(&context, format);
renderer.set_unlit(true);
// 3. Material : On utilise renderer.device() et renderer.format()
let material = Material::new(renderer.format(), "basic", &mut cache);
let material = Material::new(renderer.format(), "standard", &mut cache);
// Mesh : On utilise le device du renderer
let vertices = [