diff --git a/docs/DRAFT.md b/docs/DRAFT.md index 54caf27..b82782b 100644 --- a/docs/DRAFT.md +++ b/docs/DRAFT.md @@ -23,23 +23,23 @@ Permettre de texturer un mesh : charger une image → `wgpu::Texture` (+ view + texture diffuse à un `Material`, échantillonner dans le shader, **sans casser** le pattern « un seul layout pour tous ». -## Décisions (à valider) +## Décisions (actées le 2026-09-18) -- **[ ] D1 (intégration bind group — « un seul layout pour tous »)** : on ajoute un **3ᵉ bind group** +- **[x] D1 (intégration bind group — « un seul layout pour tous »)** : on ajoute un **3ᵉ bind group** `@group(2)` (sampler + texture diffuse) posé sur **toutes** les pipelines, avec une **texture blanche 1×1 de secours (placeholder)** utilisée quand un `Material` n'a pas de texture. Cela préserve l'unicité du layout (aucune pipeline multiple), donc un seul flux de rendu. *(alternative écartée : bind group optionnel → casse l'unicité du layout, refactor de toutes les pipelines)*. -- **[ ] D2 (échantillonnage inconditionnel)** : le fragment shader échantillonne **toujours** la +- **[x] D2 (échantillonnage inconditionnel)** : le fragment shader échantillonne **toujours** la texture diffuse ; le placeholder blanc (texel = 1) reproduit exactement le comportement actuel d'un material sans texture. Donc pas de flag conditionnel → un seul flow de shader. En mode lit, le **texel remplace la couleur du vertex** (`texel.rgb * (ambient + diffuse)`) ; en unlit, le texel tel quel. Symétrique du pattern unlit existant. -- **[ ] D3 (chargement d'image & format)** : ajouter la dépendance `image` (décodage PNG/JPEG) à +- **[x] D3 (chargement d'image & format)** : ajouter la dépendance `image` (décodage PNG/JPEG) à `lib/Cargo.toml` ; upload en `TextureFormat::Rgba8UnormSrgb`, usage `TEXTURE_BINDING | COPY_DST`, dimension `D2`, `mip_level_count: 1` (**YAGNI** : pas de génération de mipmaps cette étape), sampler `filter: Linear`, `address_mode: Repeat`. -- **[ ] D4 (API et portage)** : nouveau type `Texture` (device + view + sampler). `Material` gagne +- **[x] D4 (API et portage)** : nouveau type `Texture` (device + view + sampler). `Material` gagne `texture: Option>` et détient son **bind group de texture (groupe 2)**, construit depuis le layout partagé ; sans texture il lie le placeholder. API `Scene` : `add_texture(id, tex)` et liaison d'une texture à un material. `draw_entity` bind `set_bind_group(2, ...)`. @@ -94,7 +94,7 @@ layout pour tous ». ## Point d'étape -- [ ] Valider D1–D4 avant implémentation. +- [x] Valider D1–D4 avant implémentation. *(actées le 2026-09-18)* - [ ] Caser 10.1–10.6, validation verte, exemples OK. - [ ] Deux commits séparés : `refactor(...)` (10.1–10.5) puis `docs(...)` (10.6) + README/DRAFT. - [ ] Rédiger le bilan et ouvrir la suite (Phase 4.2 Éclairage avancé).