readmes
This commit is contained in:
+53
-36
@@ -1,6 +1,6 @@
|
||||
# WSG — Documentation détaillée
|
||||
# WSG — Detailed Documentation
|
||||
|
||||
> Contenu technique du README principal : status, architecture, API reference, workflows, roadmap.
|
||||
> Technical content from the main README: status, architecture, API reference, workflows, roadmap.
|
||||
|
||||
## Status
|
||||
|
||||
@@ -9,14 +9,19 @@
|
||||
| Manual workflow (`Context` + `Renderer` + `PipelineCache`) | ✅ Working (advanced — fine-grained control) |
|
||||
| `App` / `AppBuilder` / `AppHandler` event-loop facade | ✅ Working — window, events, frame presentation, automatic scene rendering |
|
||||
| `Scene` resource/entity registry | ✅ Working — auto-rendered in one batched pass (`App::render_scene`) |
|
||||
| GPU-driven two-pass pipeline (Compute → indirect draw) | ✅ Working (Phase 3) — `render_scene` + shadow pass 100 % indirect; opt-in frustum culling |
|
||||
| GPU-driven two-pass pipeline (Compute → indirect draw) | ✅ Working (Phase 3) — `render_scene` + shadow pass 100% indirect; opt-in frustum culling |
|
||||
| 3D infrastructure (uniform bind groups, MVP + camera) | ✅ Working — per-frame camera + per-entity world matrices in shared uniforms |
|
||||
| Shadows (shadow mapping) | ✅ Working — directional/spot, slope-scaled bias, PCF 3×3 |
|
||||
| HDR + Tone Mapping | ✅ Working (Étape 20) — offscreen Rgba16Float, ACES/Reinhard, opt-in |
|
||||
| LOD (Level of Detail) | ✅ Working (Étape 19) — quadric decimation, hysteresis, multi-level buffer |
|
||||
| Mesh module (primitives + import) | ✅ Working (Étape 21) — feature-gated primitives, OBJ parser |
|
||||
| HDR + Tone Mapping | ✅ Working — offscreen Rgba16Float, ACES/Reinhard, opt-in |
|
||||
| LOD (Level of Detail) | ✅ Working — quadric decimation, hysteresis, multi-level buffer |
|
||||
| Mesh module (primitives + import) | ✅ Working — feature-gated primitives, OBJ parser |
|
||||
| Bloom | ✅ Working — threshold + separable blur + composite, HDR required |
|
||||
| Fog | ✅ Working — 3 modes (linear, exp, exp²), runtime switchable |
|
||||
| MSAA | ✅ Working — 4× multisample, resolve pass |
|
||||
| DoF | ✅ Working — CoC + disc blur, focus presets |
|
||||
| PBR (metallic/roughness + normal maps) | ✅ Working — Cook-Torrance, GGX, IBL, derivative tangent |
|
||||
|
||||
Note: `standard_shader.wgsl` (Phong, with an explicit **unlit** mode) is the **single** shader the library ships. Flat 2D drawing is its unlit variant (`Renderer::set_unlit(true)`).
|
||||
Note: `standard_shader.wgsl` (Phong + PBR, with an explicit **unlit** mode) is the **single** shader the library ships. Flat 2D drawing is its unlit variant (`Renderer::set_unlit(true)`).
|
||||
|
||||
## Architecture
|
||||
|
||||
@@ -37,28 +42,31 @@ Spec: [docs/tech/ARCHI_CPU_GPU.md](docs/tech/ARCHI_CPU_GPU.md) · User guide: [d
|
||||
```
|
||||
lib/src/
|
||||
├── lib.rs # crate root, re-exports
|
||||
├── prelude.rs # glob re-exports (types quotidiens)
|
||||
├── prelude.rs # glob re-exports
|
||||
├── app.rs # App + AppBuilder
|
||||
├── handler.rs # AppHandler trait
|
||||
├── camera.rs # Camera, CameraController
|
||||
├── input.rs # InputState
|
||||
├── lights.rs # Lights, Light, LightType, directional_light, …
|
||||
├── core/
|
||||
│ ├── context.rs # GPU lifecycle (Instance/Surface/Adapter/Device/Queue)
|
||||
│ ├── renderer.rs # RenderPass execution, shadow pass, HDR/TM pass
|
||||
│ ├── frame.rs # Per-frame RAII (surface texture + view)
|
||||
│ ├── input.rs # Unified keyboard/mouse state
|
||||
│ ├── geometry.rs # Geometry (positions/normals/UVs/indices) + BBox
|
||||
│ ├── transform.rs # Transform (translation/rotation/scale)
|
||||
│ ├── frustum.rs # Frustum (6 planes, sphere/box culling)
|
||||
│ ├── lod.rs # LOD decimation (quadric edge collapse)
|
||||
│ ├── shadow.rs # ShadowConfig (map size, bias, PCF)
|
||||
│ └── hdr.rs # ToneMapper enum (Aces/Reinhard)
|
||||
│ ├── hdr.rs # ToneMapper enum (Aces/Reinhard)
|
||||
│ ├── bloom.rs # BloomConfig + BloomPipeline
|
||||
│ ├── msaa.rs # MsaaConfig
|
||||
│ ├── fog.rs # FogConfig + FogMode
|
||||
│ └── dof.rs # DoFConfig + DoFPipeline
|
||||
├── mesh/
|
||||
│ ├── mod.rs # Re-exports flat
|
||||
│ ├── primitives/ # 6 feature-gated generators
|
||||
│ └── import/ # OBJ parser + glTF stub
|
||||
├── pipeline/ # PipelineCache (shader → RenderPipeline)
|
||||
├── camera/ # Camera, CameraController
|
||||
├── lights/ # Lights, Light, LightType, directional_light, …
|
||||
├── input/ # InputState
|
||||
├── resources/ # Mesh, Material, Texture, Uniform, Vertex
|
||||
├── scene/ # Scene (registry), Entity
|
||||
└── utils/ # Conf constants, WsgError
|
||||
@@ -72,9 +80,9 @@ lib/src/
|
||||
| AppHandler | Trait | `setup()` / `update()` / `render()` callbacks |
|
||||
| Scene | Struct | Registry: shaders, materials, meshes, entities, lights, camera |
|
||||
| Context | Struct | GPU hardware (Instance, Surface, Adapter, Device, Queue) |
|
||||
| Renderer | Struct | RenderPass execution (scene, shadow, HDR/TM) |
|
||||
| Renderer | Struct | RenderPass execution (scene, shadow, HDR/TM, bloom, DoF) |
|
||||
| PipelineCache | Struct | Shader → compiled RenderPipeline cache |
|
||||
| Material | Struct | Shader ID + texture + pipeline |
|
||||
| Material | Struct | Shader ID + texture + pipeline + PBR params |
|
||||
| Geometry | Struct | CPU vertex data (positions/normals/UVs/colors/indices) |
|
||||
| Mesh / Vertex | Struct | GPU geometry / interleaved upload tuple |
|
||||
| Frame | Struct | Per-frame RAII (surface texture + view) |
|
||||
@@ -85,6 +93,10 @@ lib/src/
|
||||
| Lights / Light | Struct | Light list (directional/point/spot, MAX=8) + ambient |
|
||||
| ShadowConfig | Struct | Shadow map size, bias, PCF taps, scene radius |
|
||||
| ToneMapper | Enum | ACES Filmic / Reinhard |
|
||||
| BloomConfig | Struct | Threshold, intensity, H/V passes |
|
||||
| MsaaConfig | Struct | Sample count (1 = disabled) |
|
||||
| FogConfig | Struct | Mode, near/far, density, color |
|
||||
| DoFConfig | Struct | Focus distance, aperture, max blur |
|
||||
| BBox | Struct | Axis-aligned bounding box (min/max) |
|
||||
| Frustum | Struct | 6 planes, sphere/box culling |
|
||||
|
||||
@@ -95,14 +107,14 @@ use wsg_lib::prelude::*;
|
||||
use wsg_lib::app::AppBuilder;
|
||||
use wsg_lib::utils::WsgError;
|
||||
|
||||
struct MaScene;
|
||||
struct MyScene;
|
||||
|
||||
impl AppHandler for MaScene {
|
||||
impl AppHandler for MyScene {
|
||||
fn setup(&mut self, app: &mut wsg_lib::App) {
|
||||
app.scene
|
||||
.register_shader("standard", wsg_lib::utils::STANDARD_SHADER_PATH)
|
||||
.unwrap();
|
||||
app.scene.create_material("mat", "standard", None).unwrap();
|
||||
app.scene.add_material_shader("mat", "standard").unwrap();
|
||||
app.scene.create_mesh("cube", cube(1.0), Some("mat")).unwrap();
|
||||
app.scene.add_entity("my_cube", "cube").unwrap();
|
||||
}
|
||||
@@ -112,9 +124,10 @@ impl AppHandler for MaScene {
|
||||
// render() default: app.render_scene(frame.view()) — auto-draws everything
|
||||
}
|
||||
|
||||
fn main() -> Result<(), WsgError> {
|
||||
let app = AppBuilder::new().title("WSG").build()?;
|
||||
app.run(MaScene);
|
||||
#[pollster::main]
|
||||
async fn main() -> Result<(), WsgError> {
|
||||
let app = AppBuilder::new().title("WSG").build().await?;
|
||||
app.run(MyScene);
|
||||
Ok(())
|
||||
}
|
||||
```
|
||||
@@ -167,15 +180,15 @@ fn main() {
|
||||
|
||||
## Features
|
||||
|
||||
| Feature | Default | Fournit |
|
||||
|---------|---------|---------|
|
||||
| Feature | Default | Provides |
|
||||
|---------|---------|----------|
|
||||
| `prim-cube` | ✅ | `cube(size)` |
|
||||
| `prim-plane` | ✅ | `plane(w, d, seg_x, seg_z)` |
|
||||
| `prim-sphere` | ✅ | `uv_sphere(…)`, `icosphere(…)` |
|
||||
| `prim-cylinder` | ✅ | `cylinder(…)` |
|
||||
| `prim-cone` | ✅ | `cone(…)` |
|
||||
| `prim-torus` | ✅ | `torus(…)` |
|
||||
| `all-prims` | ✅ (default) | Les 6 primitives |
|
||||
| `all-prims` | ✅ (default) | All 6 primitives |
|
||||
| `import-obj` | ⬜ | `load_obj(path)`, `parse_obj(str)` |
|
||||
| `import-gltf` | ⬜ | `load_gltf(path)` (stub) |
|
||||
|
||||
@@ -185,6 +198,10 @@ fn main() {
|
||||
|---------|--------------|----------------|
|
||||
| Shadows | `scene.set_shadow_caster(Some(idx))` | No shadow map, no depth pass, no PCF |
|
||||
| HDR + TM | `AppBuilder::with_hdr(ToneMapper::Aces)` | No offscreen texture, no TM pass |
|
||||
| Bloom | `AppBuilder::with_bloom(BloomConfig::…)` | No bloom textures, no passes |
|
||||
| MSAA | `AppBuilder::with_msaa(MsaaConfig { sample_count: 4 })` | Single sample, no resolve |
|
||||
| Fog | `AppBuilder::with_fog(FogConfig::…)` | No fog uniforms |
|
||||
| DoF | `AppBuilder::with_dof(DoFConfig::…)` | No CoC/blur textures |
|
||||
| GPU-driven culling | `AppBuilder::with_gpu_driven(true)` | No compute pipeline, no indirect buffers |
|
||||
| LOD | `scene.create_mesh_with_lod(…, levels)` | Single-level mesh |
|
||||
| Primitives | Cargo feature `prim-*` | Not compiled |
|
||||
@@ -194,19 +211,19 @@ fn main() {
|
||||
|
||||
| Phase | Status |
|
||||
|-------|--------|
|
||||
| 1 — Fondations (window, render loop, Context) | ✅ |
|
||||
| 2 — Infrastructure 3D (Geometry, Mesh, Material, Pipeline) | ✅ |
|
||||
| 1 — Foundations (window, render loop, Context) | ✅ |
|
||||
| 2 — 3D infrastructure (Geometry, Mesh, Material, Pipeline) | ✅ |
|
||||
| 3 — GPU-driven (compute pass, indirect draws, culling) | ✅ |
|
||||
| 4 — Rendu avancé (shadows, HDR/TM, lights) | ✅ |
|
||||
| 5 — Polissage (LOD, camera controller, input, demo) | ✅ |
|
||||
| 6 — Post-MVP (bloom, PBR, cascaded shadows, SSAO, refactoring) | 🔄 |
|
||||
| 4 — Advanced rendering (shadows, HDR/TM, lights) | ✅ |
|
||||
| 5 — Polish (LOD, camera controller, input, demo) | ✅ |
|
||||
| 6 — Post-MVP (bloom, PBR, fog, DoF, MSAA, cascaded shadows, SSAO) | 🔄 |
|
||||
|
||||
## Documentation
|
||||
|
||||
| Où | Quoi |
|
||||
|----|------|
|
||||
| [docs/user/](docs/user/README.md) | Guide utilisateur (EN) |
|
||||
| [docs/tech/](docs/tech/ARCHI_APP.md) | Architecture interne (FR) |
|
||||
| [docs/ROADMAP.md](docs/ROADMAP.md) | Feuille de route |
|
||||
| [docs/PLAN.md](docs/PLAN.md) | Livre de recette (historique) |
|
||||
| `cargo doc -p wsg-lib --no-deps` | Référence API (rustdoc) |
|
||||
| Where | What |
|
||||
|-------|------|
|
||||
| [docs/user/](docs/user/README.md) | User guide |
|
||||
| [docs/tech/](docs/tech/ARCHI_APP.md) | Internal architecture |
|
||||
| [docs/ROADMAP.md](docs/ROADMAP.md) | Roadmap |
|
||||
| [docs/PLAN.md](docs/PLAN.md) | Recipe book (step history) |
|
||||
| `cargo doc -p wsg-lib --no-deps` | API reference (rustdoc) |
|
||||
|
||||
Reference in New Issue
Block a user