docs: move DRAFT.md into docs/ and confirm step decisions

DRAFT.md now lives in docs/. Confirmed the pending design decisions:
render() auto-renders the scene by default (Option A, alternative B removed),
and simple.rs uses app.renderer.device()/format() via the library API
without importing wgpu.
This commit is contained in:
Jérôme Bousquié
2026-09-16 10:23:42 +02:00
parent 3b0db5fa12
commit 628c125925
+16 -26
View File
@@ -1,8 +1,8 @@
# DRAFT — Brouillon d'implémentation # DRAFT — Brouillon d'implémentation
> **Usage.** Ce fichier sert de brouillon pour noter les idées et le plan détaillé de l'étape en cours. > **Usage.** Ce fichier (dans `docs/`) sert de brouillon pour noter les idées et le plan détaillé de l'étape
> **Son contenu est effacé au début de chaque nouvelle étape.** La source de vérité de l'état est > en cours. **Son contenu est effacé au début de chaque nouvelle étape.** La source de vérité de l'état est
> le code + README.md ; les docs `docs/*` restent stables. > le code + README.md ; les autres docs `docs/*` restent stables.
--- ---
@@ -82,8 +82,7 @@ pub fn render_scene(&self, view: &wgpu::TextureView, scene: &Scene) {
``` ```
- **Batching** : un seul pass pour toutes les entités (aligné sur le principe « batching par matériau » - **Batching** : un seul pass pour toutes les entités (aligné sur le principe « batching par matériau »
évoqué dans renderer.rs / README Phase 4.3). On évite N submits/encoder alloués à la volée. évoqué dans renderer.rs / README Phase 4.3). On évite N submits/encoder alloués à la volée.
- Conserver `render(view, mesh, material)` (API bas-niveau utilisée par `manual.rs`). Le battle placer du code - Conserver `render(view, mesh, material)` (API bas-niveau utilisée par `manual.rs`). Le battle placer du code commun (layout pass / draw d'un mesh) dans un petit helper privé pour éviter la duplication.
commun (layout pass / draw d'un mesh) dans un petit helper privé pour éviter la duplication.
- Import `crate::scene::Scene`. - Import `crate::scene::Scene`.
- Documenter selon `docs/DOCUMENTATION.md`. - Documenter selon `docs/DOCUMENTATION.md`.
@@ -97,21 +96,14 @@ pub fn render_scene(&self, view: &wgpu::TextureView) {
self.renderer.render_scene(view, &self.scene); self.renderer.render_scene(view, &self.scene);
} }
``` ```
Puis décider où placer l'appel automatique (question de design à trancher à l'implémentation) : Le rendu automatique est branché par **défaut** dans le trait (**Option A, décidée**) :
```rust
- **Option A (recommandée)** : rendre `render` du trait **par défaut** en auto-rendu : fn render(&mut self, app: &mut App, frame: &Frame) {
```rust app.render_scene(frame.view());
fn render(&mut self, app: &mut App, frame: &Frame) { }
app.render_scene(frame.view()); ```
} → `simple.rs` **n'implémente même pas `render`** : la scène se rend toute seule, exactement l'esprit
``` « scene auto-render ». L'utilisateur avancé peut surcharger `render` pour contrôler le dessin.
→ `simple.rs` **n'implémente même pas `render`** : la scène se rend toute seule, exactement l'esprit
« scene auto-render ». L'utilisateur avancé peut surcharger `render` pour contrôler le dessin.
- Option B : garder `render` obligatoire mais vide par défaut + appel manuel de `app.render_scene` dans
`simple.rs`. Moins « magique », garde ~15 lignes quand même.
> Décision à valider : **Option A** (le README attend le rendu automatique de la scène ; `render()` par
> défaut vide + auto-render est la solution la plus simple pour `simple.rs`).
### Étape 3.4 — Remplir `simple.rs` ### Étape 3.4 — Remplir `simple.rs`
@@ -127,11 +119,9 @@ Puis décider où placer l'appel automatique (question de design à trancher à
- Tout ce remplissage se fait dans `AppHandler::update()` (ou dans `run()` avant `app.run(...)` — à voir - Tout ce remplissage se fait dans `AppHandler::update()` (ou dans `run()` avant `app.run(...)` — à voir
selon où `app` est constructible ; le plus simple : dans `update(&mut self, app)` une fois). selon où `app` est constructible ; le plus simple : dans `update(&mut self, app)` une fois).
> ⚠️ Les vertex passent par `Mesh::new(device, ...)` qui exige `wgpu::Device`. Pour rester « sans wgpu » > ⚠️ Les vertex passent par `Mesh::new(device, ...)` qui exige `wgpu::Device`. **Décision prise** : pour
> dans `simple.rs`, il faut soit exposer un helper de haut niveau (`app.scene.add_quad(...)`, futur), > l'étape 1, utiliser `app.renderer.device()`/`app.renderer.format()` (accès bibliothèque — l'utilisateur
> soit accepter `app.renderer.device()` (accès bibliothèque, pas wgpu importé par l'utilisateur). > n'importe pas wgpu). Un helper haut niveau `Scene::add_quad_entity` pourra être ajouté plus tard.
> **Décision à valider** : pour l'étape 1, utiliser `app.renderer.device()`/`app.renderer.format()`
> (l'utilisateur n'importe pas wgpu). Un helper `Scene::add_quad_entity` pourra être ajouté plus tard.
### Étape 3.5 — Validation ### Étape 3.5 — Validation
@@ -145,7 +135,7 @@ cargo fmt --all
- Vérifier docs (`docs/DOCUMENTATION.md`) : zéro warning, backticks, chaque item public documenté. - Vérifier docs (`docs/DOCUMENTATION.md`) : zéro warning, backticks, chaque item public documenté.
- Committer proprement (conventional commits, ex. `feat(app): expose frame view and auto-render scene`). - Committer proprement (conventional commits, ex. `feat(app): expose frame view and auto-render scene`).
## 4. Décisions prises / à trancher ## 4. Décisions (actées)
| Sujet | Décision | | Sujet | Décision |
|-------|----------| |-------|----------|