ajout material et pipeline_cache
This commit is contained in:
+37
-30
@@ -1,42 +1,49 @@
|
||||
# Technical Architecture Summary
|
||||
# Three-Layer Structure
|
||||
|
||||
## Three-Layer Structure
|
||||
## Manager Layer (Context)
|
||||
|
||||
### Manager Layer (`Context`)
|
||||
**Responsabilité :** Propriétaire du cycle de vie des ressources matérielles (`Device`, `Queue`, `Surface`).
|
||||
|
||||
- **Responsibility:** Owner of hardware resource lifecycles (`Device`, `Queue`, `Surface`, `SurfaceConfiguration`).
|
||||
- **Role:** Encapsulates windowing system and swapchain complexity. Exposes high-level methods such as `begin_frame()` and `end_frame()` to orchestrate GPU transactions.
|
||||
|
||||
### Specialist Layer (`Renderer`)
|
||||
|
||||
- **Responsibility:** Owner of rendering logic (`RenderPipeline`, `Shaders`, `Buffers`).
|
||||
- **Role:** Executes actual drawing. Does not own hardware resources — uses references (`&Device`, `&TextureView`) provided at call time.
|
||||
|
||||
### Orchestrator Layer (`main.rs`)
|
||||
|
||||
- **Responsibility:** Business logic and execution loop.
|
||||
- **Role:** Calls `Context` methods to obtain the target texture, passes that target to the `Renderer`, then triggers presentation.
|
||||
**Rôle :** Encapsule la complexité du système de fenêtrage et du swapchain. Orchestre les transactions GPU via `begin_frame()` et `end_frame()`.
|
||||
|
||||
---
|
||||
|
||||
## Benefits Analysis
|
||||
## Specialist Layer (Renderer & PipelineCache)
|
||||
|
||||
### 1. Independence & Modularity
|
||||
**PipelineCache (La Bibliothèque) :** Propriétaire de la compilation et du stockage des RenderPipeline. Garantit qu'un shader n'est compilé qu'une seule fois.
|
||||
|
||||
- **Runtime Agnosticism:** By avoiding any async calls or dependencies on runtimes like Tokio within the library, we ensure the code is portable and can be integrated into any kind of project (game, visualization tool, UI).
|
||||
- **Decoupling:** The `Renderer` does not know about the existence of the windowing system (Winit). It could just as well draw onto an off-screen texture for headless rendering.
|
||||
|
||||
### 2. Performance & Efficiency
|
||||
|
||||
- **CPU/GPU Parallelism:** Using the `begin_frame` / `end_frame` pattern with a per-frame `CommandEncoder`, we maximize GPU utilization: the CPU prepares commands for one frame while the GPU executes those from the previous frame.
|
||||
- **Persistent Resource Management:** The `Renderer` retains heavy objects (`RenderPipeline`) compiled only once. Conversely, ephemeral objects (`CommandEncoder`, `TextureView`) are created and freed quickly, minimizing long-term memory footprint.
|
||||
|
||||
### 3. Robustness (Safety & Errors)
|
||||
|
||||
- **Explicit Error Handling:** Use of `Result` types and safe methods such as `.first()` (instead of manual indexing) prevents panics during initialization or resizing, protecting the application against graphics driver instabilities.
|
||||
**Renderer (L'Exécuteur) :** Orchestre l'appel au dessin. Il est désormais agnostique : il ne possède plus les pipelines en dur, mais reçoit dynamiquement les Mesh et les Material à dessiner.
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
## Orchestrator Layer (main.rs)
|
||||
|
||||
This structure transforms what is often called "spaghetti" graphics code — a mix of window management and shader computation — into a clean, predictable pipeline. The `Context` prepares the ground, the `Renderer` performs the drawing, and the orchestrator maintains the rhythm.
|
||||
**Responsabilité :** Logique métier et boucle d'exécution.
|
||||
|
||||
**Rôle :** Coordonne le Context, le PipelineCache pour créer les Material, et enfin passe le tout au Renderer pour produire l'image.
|
||||
|
||||
---
|
||||
|
||||
# Updated Benefits Analysis
|
||||
|
||||
## Modularité Totale (Decoupling)
|
||||
|
||||
Le Renderer est totalement découplé du contenu graphique. Il ne connaît pas les shaders, il sait juste "lier" un Material à un Mesh. Cela permet un rendu multi-objets très simple.
|
||||
|
||||
## Efficacité Mémoire (Resource Sharing)
|
||||
|
||||
Grâce au PipelineCache et à l'utilisation de `Arc<wgpu::RenderPipeline>`, plusieurs Material partagent la même recette compilée sur le GPU. On évite la duplication coûteuse de ressources.
|
||||
|
||||
## Performance de Rendu
|
||||
|
||||
En séparant la "préparation des recettes" (PipelineCache) de "l'exécution du dessin" (Renderer), on élimine tout risque de compilation/allocation lourde pendant la boucle de rendu (60 FPS).
|
||||
|
||||
## Flexibilité
|
||||
|
||||
Le passage à un modèle (Mesh + Material) permet de combiner n'importe quelle géométrie avec n'importe quel effet visuel à la volée.
|
||||
|
||||
---
|
||||
|
||||
# Summary
|
||||
|
||||
Cette structure transforme une architecture rigide en un atelier de rendu dynamique. Le Context prépare le terrain, le PipelineCache fournit les outils (shaders), le Material définit le style, le Mesh apporte la forme, et le Renderer orchestre l'assemblage final. Le système est désormais prêt à gérer des scènes complexes avec de multiples objets et des effets variés.
|
||||
|
||||
Reference in New Issue
Block a user