2.9 KiB
ARCHI_MESH_MATERIAL.md (Version corrigée)
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, son propre chef (le pipeline), et son propre matériel. C'était inefficace et lourd.
Après : Tu as un Atelier (Renderer) qui orchestre le dessin. Il utilise des Recettes (Material + PipelineCache) pour définir l'apparence et traite des Toiles (Mesh) pour la géométrie. Tu peux utiliser la même recette pour 50 toiles différentes sans effort.
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 :
vertexBuffer, optionnellementindexBuffer, et les compteurs associés (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ésormais découplé de la géométrie via une gestion centralisée.
PipelineCache : C'est la 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 : C'est une 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 en mémoire.
3. Le Renderer (L'Orchestrateur)
Il est devenu ultra-léger et généraliste. Il ne possède plus aucun buffer ni pipeline en dur.
- Contenu : Aucun état lourd.
- Rôle : Il fait la liaison au moment de l'appel :
// Schématiquement
render_pass.set_pipeline(&material.pipeline); // On change de recette
render_pass.set_vertex_buffer(0, mesh.vertex_buffer.slice(..)); // On pose la toile
// Puis dessin indexé ou simple...
Pourquoi cette structure est-elle meilleure ?
- Performance : Les shaders sont compilés une seule fois. La mémoire GPU est optimisée grâce au partage des RenderPipeline via
Arc. - Modularité : Tu peux combiner n'importe quel Mesh avec n'importe quel Material.
- Propreté : Ton Renderer est désormais un orchestrateur pur. Il ne connaît plus le détail des shaders ou des layouts de sommets : il se contente d'exécuter la commande de dessin.
Quelques notes techniques pour ta doc
- Découplage : Le Material demande au PipelineCache de lui fournir un pipeline au moment de sa création.
- Sécurité : Le PipelineCache utilise un
HashMappour retrouver instantanément un pipeline existant par sonshader_id, évitant les compilations inutiles. - Flexibilité : Le Mesh gère lui-même ses indices, permettant de passer facilement du rendu simple au rendu indexé optimisé.