summaryrefslogtreecommitdiff
path: root/TODO.md
diff options
context:
space:
mode:
Diffstat (limited to 'TODO.md')
-rw-r--r--TODO.md73
1 files changed, 41 insertions, 32 deletions
diff --git a/TODO.md b/TODO.md
index a9f5fa4..6a02db7 100644
--- a/TODO.md
+++ b/TODO.md
@@ -24,44 +24,53 @@ This file tracks prioritized tasks with detailed attack plans.
- [x] **Enhanced Procedural Noise:** Implemented a multi-octave Value Noise generator for higher-quality skybox textures.
- [x] **Scene Integrity:** Restored proper object indexing and removed redundant geometry, ensuring the floor grid and objects render correctly.
-## Recently Completed (February 3, 2026)
-- [x] **Task #20: Platform & Code Hygiene**:
- - [x] **Header Consolidation:** Moved all `#ifdef` logic for WebGPU headers and platform-specific shims into `src/platform.h`.
- - [x] **Refactor platform_init:** Changed `void platform_init(PlatformState* state, ...)` to `PlatformState platform_init(...)` for cleaner value-based initialization.
- - [x] **Unified Poll:** Incorporated `time` and `aspect_ratio` updates into `platform_poll()`, abstracting away direct GLFW calls from main loop.
- - [x] **Standard Container Removal (AssetManager):** Replaced `std::map`, `std::string`, and `std::vector` in `AssetManager` and `procedural` generators with C-style alternatives (static arrays, raw pointers, malloc/free).
-
-- [x] **Music System Bug Fixes & Rock Track Implementation**:
- - [x] **Fixed Critical Pool Exhaustion Bug**: Tracker pool slots were never freed, causing music to stop after 8 patterns. Implemented round-robin slot allocation with proper cleanup.
- - [x] **Fixed Note Name Parsing**: Added automatic note-name-to-frequency conversion (E2→82.4Hz, A4→440Hz, etc.) in `tracker_compiler.cc`. Bass and melody now play correctly.
- - [x] **Fixed Timing Mismatch**: Patterns are 4 beats (2 seconds at 120 BPM), but SCORE was triggering every 4 seconds. Updated to trigger every 2 seconds for continuous playback.
- - [x] **Implemented Dynamic Resource Sizing**: `tracker_compiler` now analyzes scores to determine optimal MAX_VOICES/MAX_SPECTROGRAMS values (max simultaneous patterns: 5, recommended: 10 each).
- - [x] **Created Rock Demo Track**: 11 patterns (drums, bass, melody, power chords) with 49 triggers over 25 seconds, using 14 drum samples + 10 procedural notes.
-
- **Known Issues**:
- - Audio playback quality could be improved (some artifacts/cuts remain)
- - Note synthesis parameters (duration, harmonics) use default values - need tuning for better sound
- - Pattern overlaps might cause voice exhaustion under heavy load
- - No dynamic volume/envelope control for melodic notes
-
-## Recently Completed (Previous)
-- [x] **Task #26: Shader Asset Testing & Validation**:
- - [x] **Attack Plan - `ShaderComposer` Unit Tests**: Add tests to `test_shader_composer.cc` to verify correct snippet registration, retrieval, and composition for various WGSL shader assets.
- - [x] **Attack Plan - Asset Content Validation**: Implement checks (e.g., in `test_assets.cc`) to ensure loaded WGSL shader assets are non-empty and contain expected entry points (`vs_main`, `fs_main`, `main` for compute shaders).
- - [x] **Attack Plan - Runtime Shader Validation**: Integrate basic validation steps into the rendering pipeline (e.g., in `gpu.cc`) to log warnings or errors if compiled shader modules are invalid, providing earlier feedback than WebGPU validation errors.
-- [x] **Asset Pipeline Improvement**: Automated audio asset conversion with a new `gen_spectrograms.sh` script and added 13 new samples to the asset list.
-- [x] **Build System Consolidation (Task #25)**: Modularized the build into subsystem libraries and implemented helper macros to simplify CMake maintenance.
-- [x] **Asset System Robustness**: Fixed static initialization order issues by wrapping the asset table in a singleton-style getter (`GetAssetRecordTable()`).
-- [x] **Shader Asset Integration (Task #24)**: Extracted hardcoded shaders to `.wgsl` assets, updated `asset_packer` for string safety, and refactored C++ code to use `GetAsset`.
-- [x] **WebGPU Stability & macOS Fixes**: Resolved surface creation failures by adding `GLFW_EXPOSE_NATIVE_COCOA` and fixed validation errors in surface configuration and render pass attachments.
-
## Priority 1: 3D System Enhancements (Task #18)
**Goal:** Establish a pipeline for importing complex 3D scenes to replace hardcoded geometry.
- [ ] **Task #36: Blender Exporter:** Create a Python script (`tools/blender_export.py`) to export meshes/cameras/lights to a binary asset format.
- [ ] **Task #37: Asset Ingestion:** Update `asset_packer` to handle the new 3D binary format.
- [ ] **Task #38: Runtime Loader:** Implement a minimal C++ parser to load the scene data into the ECS/Renderer.
-## Priority 2: Developer Tooling & CI
+## Priority 2: WGSL Modularization (Task #50)
+**Goal**: Refactor `ShaderComposer` and WGSL assets to support granular, reusable snippets and `#include` directives.
+
+- [ ] **Task #50.1: Recursive Composition Support**:
+ - [ ] Update `ShaderComposer::Compose` to parse `#include "snippet_name"` directives in shader code.
+ - [ ] Implement recursive resolution (with cycle detection) to assemble the final shader.
+ - [ ] Update `test_shader_composer.cc` to verify recursive includes.
+
+- [ ] **Task #50.2: Granular SDF Library**:
+ - [ ] Extract `sdSphere`, `sdBox`, `sdTorus`, `sdPlane` from `sdf_primitives.wgsl` into `math/sdf_shapes.wgsl`.
+ - [ ] Extract `get_normal_basic` into `math/sdf_utils.wgsl`.
+ - [ ] Extract `calc_shadow` into `render/shadows.wgsl`.
+
+- [ ] **Task #50.3: Scene & Material Refactor**:
+ - [ ] Extract `map_scene` and `get_dist` logic into `render/scene_query.wgsl`.
+ - [ ] Extract lighting and material logic from `fs_main` into `render/lighting_pbr.wgsl` (or similar).
+
+- [ ] **Task #50.4: Pipeline Update**:
+ - [ ] Update `Renderer3D` to use the new granular assets via `#include` in the main shader, reducing C++-side dependency lists.
+
+## Priority 3: Physics & Collision (Task #49)
+**Goal**: Implement a lightweight physics engine using SDFs and BVH acceleration. (See `doc/3D.md` for design).
+
+- [ ] **Task #49.1: CPU-Side SDF Library**:
+ - [ ] Create `src/3d/sdf_cpu.h` implementing `sdSphere`, `sdBox`, `sdTorus`, `sdPlane` using `mini_math.h`.
+ - [ ] Implement `calc_normal` (numerical gradient) for these SDFs.
+ - [ ] Add unit tests in `src/tests/test_physics.cc` to verify CPU SDFs match ground truth.
+
+- [ ] **Task #49.2: BVH Construction**:
+ - [ ] Define `BVHNode` struct in `src/3d/bvh.h` (shared/compatible with GPU layout).
+ - [ ] Implement `BVHBuilder::Build(const std::vector<Object3D>&)` in `src/3d/bvh.cc`.
+ - [ ] Implement `BVH::Query(AABB)` for broad-phase collision detection.
+ - [ ] Visualize BVH in `src/tests/test_3d_render.cc` (using `VisualDebug`).
+
+- [ ] **Task #49.3: Physics Loop**:
+ - [ ] Create `PhysicsSystem` class in `src/3d/physics.h`.
+ - [ ] Implement `Update(dt)`: Integration -> Broad Phase -> Narrow Phase (SDF Probe) -> Resolution.
+ - [ ] Add `velocity`, `mass`, `restitution` fields to `Object3D`.
+ - [ ] Integrate into `test_3d_render.cc` main loop.
+
+## Priority 4: Developer Tooling & CI
**Goal**: Improve developer workflows, code quality, and release processes.
*(No active tasks)*