Files
wsg/docs/ARCHI_MESH_MATERIAL.md
T
2026-07-06 17:37:13 +02:00

2.2 KiB

ARCHI_MESH_MATERIAL.md

La nouvelle vision architecturale : L'Atelier de Rendu

Pour comprendre notre structure, imagine que tu veux peindre 10 tableaux différents.

Avant : Chaque tableau possédait sa propre cuisine et ses propres outils. C'était inefficace.

Après : Tu as un Atelier (Renderer) qui orchestre le dessin et possède les outils de base (Device, Queue, Format). Il utilise des Recettes (Material + PipelineCache) pour définir l'apparence et traite des Toiles (Mesh) pour la géométrie.


1. Le Mesh (La Géométrie)

Il est purement passif. Il ne sait pas comment il est affiché, il sait seulement ce qu'il est.

  • Contenu : vertex_buffer, optionnellement index_buffer, et les compteurs (num_vertices, num_indices).
  • Rôle : Fournir les données brutes au GPU.

2. Le Material & PipelineCache (Le Look & La Recette)

Le look est découplé de la géométrie via une gestion centralisée.

  • PipelineCache : Bibliothèque de recettes. Il charge les shaders (WGSL), compile les RenderPipeline, et les met en cache (via HashMap + Arc) pour éviter de dupliquer les ressources GPU.
  • Material : Instance légère qui pointe vers une recette compilée. Il contient un shader_id et une référence partagée (Arc) vers le RenderPipeline.
  • Rôle : Garantir la réutilisation. Si 100 objets partagent le même shader, ils pointent tous vers la même instance compilée.

3. Le Renderer (L'Orchestrateur propriétaire)

Le Renderer a été promu au rang de propriétaire des ressources matérielles.

  • Contenu : device, queue, format.
  • Rôle :
    1. Initialisation : Reçoit le Context au démarrage et s'approprie ses ressources.
    2. Exécution : Orchestre les appels GPU en utilisant ses ressources internes. Il expose une API simplifiée qui ne demande plus à l'utilisateur de manipuler le device ou la queue.
    3. Présentation : Possède la méthode present(frame) qui utilise sa queue interne pour afficher l'image.
// Exemple d'orchestration simplifiée dans main.rs
renderer.render(frame.view(), &mesh, &material);
renderer.present(frame); // Plus besoin de passer la queue !