summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
13 hoursfix: Use placeholder technique to prevent syntax highlighting overlapskal
Replace comments/strings with placeholders, highlight rest, restore. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
13 hoursrefactor: Improve syntax highlighting to avoid overlapping matchesskal
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
13 hoursfeat: Add WGSL syntax highlightingskal
Overlay highlighting: keywords, types, attributes, functions, numbers, comments. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
13 hoursrefactor: Increase editor pane size by 20% (36% → 43%)skal
Preview: 57%, Editor: 43% Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
13 hoursfix: Remove resolutionSelect references after removing UI elementskal
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
13 hoursfeat: Remove resolution selector, enable autoplay on loadskal
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
14 hoursfix: Use 16:9 aspect ratio and object-fit contain for canvasskal
Default resolution: 1280x720 (16:9) Canvas uses object-fit: contain to preserve aspect ratio Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
14 hoursfix: Canvas fills available height instead of maintaining square aspectskal
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
14 hoursfix: Reference texture/sampler in default shader for bind group layoutskal
WebGPU auto layout requires all bindings to be used in shader. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
14 hoursfix: Use var instead of let for mutable uv in default shaderskal
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
14 hoursrefactor: Adjust shader editor layout and add default animationskal
- Editor pane: 30% → 36% (20% larger) - Preview pane: 70% → 64% - Default shader: animated gradient + pulsing circle (was plain color) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
14 hoursfeat: Add HTML WGSL shader editor toolskal
ShaderToy-like web tool for live WGSL shader editing with WebGPU preview. Features: - Live WebGPU preview with real-time shader updates - Shader composition: #include directive support - Animation controls: time, loop_time (0..1), audio_peak - File I/O: Load/save .wgsl files - CommonUniforms binding (resolution, time, beat, audio_intensity) - Keyboard shortcuts: Ctrl+S (save), Ctrl+O (load), Space (play/pause) Single-file HTML (no build step, no CORS issues). handoff(Claude): Implemented HTML WGSL shader editor per plan Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
15 hoursfix: Guard --headless flag with DEMO_HEADLESS defineskal
Prevents user confusion when DEMO_HEADLESS is not defined at compile time. The --headless and --duration flags are now only available when headless support is compiled in. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
18 hoursrefactor: Reorganize tests into subsystem subdirectoriesskal
Restructured test suite for better organization and targeted testing: **Structure:** - src/tests/audio/ - 15 audio system tests - src/tests/gpu/ - 12 GPU/shader tests - src/tests/3d/ - 6 3D rendering tests - src/tests/assets/ - 2 asset system tests - src/tests/util/ - 3 utility tests - src/tests/common/ - 3 shared test helpers - src/tests/scripts/ - 2 bash test scripts (moved conceptually, not physically) **CMake changes:** - Updated add_demo_test macro to accept LABEL parameter - Applied CTest labels to all 36 tests for subsystem filtering - Updated all test file paths in CMakeLists.txt - Fixed common helper paths (webgpu_test_fixture, etc.) - Added custom targets for subsystem testing: - run_audio_tests, run_gpu_tests, run_3d_tests - run_assets_tests, run_util_tests, run_all_tests **Include path updates:** - Fixed relative includes in GPU tests to reference ../common/ **Documentation:** - Updated doc/HOWTO.md with subsystem test commands - Updated doc/CONTRIBUTING.md with new test organization - Updated scripts/check_all.sh to reflect new structure **Verification:** - All 36 tests passing (100%) - ctest -L <subsystem> filters work correctly - make run_<subsystem>_tests targets functional - scripts/check_all.sh passes Backward compatible: make test and ctest continue to work unchanged. handoff(Gemini): Test reorganization complete. 36/36 tests passing.
18 hoursfix: Reduce default audio volumes to prevent clippingskal
Reduced tracker pattern volumes: - Kicks: 1.0 → 0.7 - Snares: 1.0/0.9 → 0.6 - Crash: 0.85 → 0.6 Multiple simultaneous voices were summing to excessive levels. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
18 hoursdocs: Streamline headless mode documentationskal
Summary: - HEADLESS_MODE.md: 58→32 lines (-45%) - HOWTO.md: Condensed to one-liner + reference - Removed implementation details (in code comments) - Simplified comparison table - Clearer use case description handoff(Claude): Documentation cleanup
19 hoursfeat: Add headless mode for testing without GPUskal
Implements DEMO_HEADLESS build option for fast iteration cycles: - Functional GPU/platform stubs (not pure no-ops like STRIP_EXTERNAL_LIBS) - Audio and timeline systems work normally - No rendering overhead - Useful for CI, audio development, timeline validation Files added: - doc/HEADLESS_MODE.md - Documentation - src/gpu/headless_gpu.cc - Validated GPU stubs - src/platform/headless_platform.cc - Time simulation (60Hz) - scripts/test_headless.sh - End-to-end test script Usage: cmake -B build_headless -DDEMO_HEADLESS=ON cmake --build build_headless -j4 ./build_headless/demo64k --headless --duration 30 Progress printed every 5s. Compatible with --dump_wav mode. handoff(Claude): Task #76 follow-up - headless mode complete
19 hoursdocs: Update references to workspace layoutskal
Update all doc references from old paths to workspace structure: - assets/demo.seq → workspaces/main/timeline.seq - assets/music.track → workspaces/main/music.track - assets/final/demo_assets.txt → workspaces/main/assets.txt - assets/test_demo.* → workspaces/test/* Files updated: - HOWTO.md: Add workspace selection, update paths - SEQUENCE.md: Update examples and integration - ASSET_SYSTEM.md: Workspace-aware workflow - CONTRIBUTING.md: Workspace timeline paths - ARCHITECTURE.md: Generic workspace reference Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
19 hoursdocs: Streamline top-level documentationskal
Condense README, PROJECT_CONTEXT, and TODO: - README: Remove verbose file listings, focus on quickstart - PROJECT_CONTEXT: Condense status, remove recent completions - TODO: Mark Task #77 complete, remove verbose details - WORKSPACE_SYSTEM: Mark as completed Details moved to individual doc/ files. Net: -76 lines Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
19 hoursfeat: Add workspace header comments to config filesskal
Add `# WORKSPACE: <name>` header to all workspace config files: - timeline.seq - music.track - assets.txt Format: First line contains workspace identifier. Editors must preserve this header comment. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
19 hoursfeat: Implement workspace system (Task #77)skal
Self-contained workspaces for parallel demo development. Structure: - workspaces/main,test - Demo-specific resources - assets/common - Shared resources - workspace.cfg - Configuration per workspace CMake integration: - DEMO_WORKSPACE option (defaults to main) - cmake/ParseWorkspace.cmake - Config parser - Workspace-relative asset/timeline/music paths Migration: - Main demo: demo.seq to workspaces/main/timeline.seq - Test demo: test_demo.seq to workspaces/test/timeline.seq - Common shaders: assets/common/shaders - Workspace shaders: workspaces/*/shaders Build: cmake -B build -DDEMO_WORKSPACE=main cmake -B build_test -DDEMO_WORKSPACE=test All tests passing (36/36). handoff(Claude): Task #77 workspace system complete. Both main and test workspaces build and pass all tests. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
19 hoursdocs: Condense HOWTO.md, move details to technical docsskal
- HOWTO.md: 184→97 lines (quick reference only) - BUILD.md: Add build modes, header organization, dependency tracking - ASSET_SYSTEM.md: Add developer workflow section - TRACKER.md: Add AudioEngine API documentation Net: -147 lines in HOWTO.md
20 hoursdocs: Update docs for Task #76 size measurementskal
- Add size measurement section to HOWTO.md - Move Task #76 to COMPLETED.md - Update TODO.md and PROJECT_CONTEXT.md - Document measurement results (Demo=4.4MB, External=2.0MB)
20 hoursfeat: Implement Task #76 external library size measurementskal
- Use ma_backend_null for audio (100-200KB savings) - Stub platform/gpu abstractions instead of external APIs - Add DEMO_STRIP_EXTERNAL_LIBS build mode - Create stub_types.h with minimal WebGPU opaque types - Add scripts/measure_size.sh for automated measurement Results: Demo=4.4MB, External=2.0MB (69% vs 31%) handoff(Claude): Task #76 complete. Binary compiles but doesn't run (size measurement only).
20 hoursdocs: Streamline top-level project filesskal
Move implementation details to design docs, keep TODO.md and PROJECT_CONTEXT.md concise and high-level. Improves readability. Changes: - TODO.md: Condensed from 162 to 52 lines - PROJECT_CONTEXT.md: Grouped design docs by category - Recently Completed: Date-grouped format Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
20 hoursfeat: Add Task #77 for workspace system architectureskal
Proposes self-contained workspace structure for parallel demo development. Each workspace includes timeline, music, assets, and shaders in one place. Enables clean separation and scalability for multiple demos. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
20 hoursdocs: Update documentation and clean up obsolete filesskal
- Add Task #76: External library size measurement - Update hot-reload documentation across README, HOWTO, PROJECT_CONTEXT - Update test count: 36/36 passing (100%) - Remove completed analysis files from root Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
21 hoursfeat: Add debug-only file change detection for rapid iterationskal
Enables --hot-reload flag to watch config files and notify on changes. Detects modifications to assets/sequences/music for rebuild workflow. Completely stripped from release builds (0 bytes overhead). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
23 hoursdocs: Condense essential context files (856→599 lines)skal
Extract detailed examples and untriaged tasks to on-demand docs. Created BACKLOG.md, ARCHITECTURE.md, CODING_STYLE.md, TOOLS_REFERENCE.md. Reduces always-loaded token budget by 30% while preserving all information. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
23 hoursdocs: Add sub-task for type-safe shader compositionskal
Low priority task to prevent recurrent error of forgetting to call ShaderComposer::Compose() by using strong typing (ComposedShader class). Would make it a compile-time error instead of runtime crash. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
23 hoursdocs: Add sub-task for splitting common_uniforms.wgslskal
Low priority task to split common_uniforms.wgsl (4 structs) into separate files for more granular #include directives. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
23 hoursfix: Add ShaderComposer to CircleMaskEffect pipelinesskal
CircleMaskEffect was creating shader modules directly without using ShaderComposer, causing #include directives to fail at runtime. Changes: - Add ShaderComposer.Compose() for compute and render shaders - Include shader_composer.h header Fixes demo64k crash on CircleMaskEffect initialization. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
23 hoursrefactor: Deduplicate CommonUniforms with #include in WGSL shadersskal
Replace redundant CommonUniforms struct definitions across 13 shaders with #include "common_uniforms" directive. Integrate ShaderComposer preprocessing into all shader creation pipelines. Changes: - Replace 9-line CommonUniforms definitions with single #include line - Add ShaderComposer.Compose() to create_post_process_pipeline() - Add ShaderComposer.Compose() to gpu_create_render_pass() - Add ShaderComposer.Compose() to gpu_create_compute_pass() - Add InitShaderComposer() calls to test_effect_base and test_demo_effects - Update test_shader_compilation to compose shaders before validation Net reduction: 83 lines of duplicate code eliminated All 35 tests passing (100%) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
23 hoursrefactor: Move .spec audio assets to assets/final/music subdirectoryskal
- Created assets/final/music/ directory for audio samples - Moved 14 .spec files from assets/final/ to assets/final/music/ - Updated demo_assets.txt and test_demo_assets.txt with music/ prefix - Updated gen_spectrograms.sh to output to new location - CMakeLists.txt unchanged (still uses assets/final/ as base) handoff(Claude): Music assets reorganized into subdirectory
23 hoursdemo.seq change.skal
23 hoursfix: Strip priority comments from effect args in .seq exportskal
Remove '# Priority: X' comments from effect arguments during timeline export to keep .seq files clean. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
24 hoursdocs: Purge outdated Phase 4 contentskal
Update to reflect actual implementation: - Simplified to essential API and usage - Removed speculative asset packer syntax (not implemented) - Removed future extension details (defer to future phases) - Focused on what's actually complete and tested
24 hoursrefactor: Generic sampler system for compositesskal
Replace hardcoded linear_sampler_ with configurable sampler map. - SamplerType enum (LinearClamp, LinearRepeat, NearestClamp, NearestRepeat) - get_or_create_sampler() for lazy sampler creation - Default to LinearClamp for backward compatibility Eliminates hardcoded assumptions, more flexible for future use cases.
24 hoursfeat: GPU procedural Phase 4 - texture compositionskal
Multi-input composite shaders with sampler support. - Dynamic bind group layouts (N input textures + 1 sampler) - dispatch_composite() for multi-input compute dispatch - create_gpu_composite_texture() API - gen_blend.wgsl and gen_mask.wgsl shaders Guarded with #if !defined(STRIP_GPU_COMPOSITE) for easy removal. Tests: - Blend two noise textures - Mask noise with grid - Multi-stage composite (composite of composites) Size: ~830 bytes (2 shaders + dispatch logic) handoff(Claude): GPU procedural Phase 4 complete
24 hourstest: Add variable-size texture support verificationskal
Phase 3 complete: - Verify 128x64 and 1024x512 textures work - Confirms GpuProceduralParams width/height respected docs: Add Phase 4 design (texture composition) - Multi-input compute shaders (samplers) - Composite generators (blend, mask, modulate) - Asset dependency ordering - ~830 bytes for 2 composite shaders
24 hourstest: Add pipeline caching and multi-generator testsskal
Comprehensive GPU procedural test coverage: - Pipeline caching (reuse for same generator) - All three generators (noise, perlin, grid) - Multiple pipelines coexisting
24 hoursrefactor: Unify TextureManager compute pipeline managementskal
Replace individual pipeline pointers with map-based system. - Changed from 3 pointers to std::map<string, ComputePipelineInfo> - Unified get_or_create_compute_pipeline() for lazy init - Unified dispatch_compute() for all shaders - Simplified create_gpu_*_texture() methods (~390 lines removed) handoff(Claude): GPU procedural texture refactoring complete
24 hoursfix(3d): VisualDebug uniform buffer size mismatchskal
Fixed validation error in test_3d_render: - Uniform buffer was 64 bytes (mat4) but bind group expected 176 bytes (GlobalUniforms) - Updated buffer creation to use sizeof(GlobalUniforms) - Updated bind group entry size to match - Updated update_buffers to write full GlobalUniforms struct Error was: Binding size 64 of Buffer with '' label is less than minimum 176 Root cause: VisualDebug uses same GlobalUniforms structure as main renderer but was only allocating/binding mat4 portion. Testing: - All 34 tests passing (100%) - test_3d_render runs without validation errors - GPU procedural textures working (noise, perlin, grid) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
24 hoursfeat(gpu): Phase 2 - Add gen_perlin and gen_grid GPU compute shadersskal
Complete Phase 2 implementation: - gen_perlin.wgsl: FBM with configurable octaves, amplitude decay - gen_grid.wgsl: Grid pattern with configurable spacing/thickness - TextureManager extensions: create_gpu_perlin_texture(), create_gpu_grid_texture() - Asset packer now validates gen_noise, gen_perlin, gen_grid for PROC_GPU() - 3 compute pipelines (lazy-init on first use) Shader parameters: - gen_perlin: seed, frequency, amplitude, amplitude_decay, octaves (32 bytes) - gen_grid: width, height, grid_size, thickness (16 bytes) test_3d_render migration: - Replaced CPU sky texture (gen_perlin) with GPU version - Replaced CPU noise texture (gen_noise) with GPU version - Added new GPU grid texture (256x256, 32px grid, 2px lines) Size impact: - gen_perlin.wgsl: ~200 bytes (compressed) - gen_grid.wgsl: ~100 bytes (compressed) - Total Phase 2 code: ~300 bytes - Cumulative (Phase 1+2): ~600 bytes Testing: - All 34 tests passing (100%) - test_gpu_procedural validates all generators - test_3d_render uses 3 GPU textures (noise, perlin, grid) Next: Phase 3 - Variable dimensions, async generation, pipeline caching Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
24 hoursfeat(gpu): Add GPU procedural texture generation systemskal
Phase 1 implementation complete: - GPU compute shader for noise generation (gen_noise.wgsl) - TextureManager extensions: create_gpu_noise_texture(), dispatch_noise_compute() - Asset packer PROC_GPU() syntax support with validation - ShaderComposer integration for #include resolution - Zero CPU memory overhead (GPU-only textures) - Init-time and on-demand generation modes Technical details: - 8×8 workgroup size for 256×256 textures - UniformBuffer for params (width, height, seed, frequency) - Storage texture binding (rgba8unorm, write-only) - Lazy pipeline compilation on first use - ~300 bytes code (Phase 1) Testing: - New test: test_gpu_procedural.cc (passes) - All 34 tests passing (100%) Future phases: - Phase 2: Add gen_perlin, gen_grid compute shaders - Phase 3: Variable dimensions, async generation Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
24 hoursdocs: Add RECIPE.md with runtime shader composition patternsskal
Quick reference for ShaderComposer usage, QuadEffect auxiliary textures, dynamic parameters, and uniform buffer alignment. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
25 hoursfix: Audio startup hiccup - use fill_audio_buffer for pre-fillskal
- Added target_fill parameter to audio_render_ahead() for explicit control - Pre-fill now uses fill_audio_buffer() (same logic as main loop) - Ensures consistent tempo scaling and time advancement - Reduced pre-fill from 400ms to 100ms (was blocking visuals) - All 33 tests passing handoff(Claude): Fixed audio startup silence/suspension issue
25 hoursdocs: Archive Feb 9 completed tasks and clarify build configsskal
- Move completed tasks (Uniform alignment, WGSL validation, test_demo fix) to COMPLETED.md - Clean up TODO.md and PROJECT_CONTEXT.md "Recently Completed" sections - Update HOWTO.md to clarify DEMO_ALL_OPTIONS enables STRIP_ALL - Note: test_demo PeakMeterEffect requires non-STRIP build Net: -26 lines (better context hygiene) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
26 hourstry to fix test_demoskal
26 hourscleanup: remove unused include from uniform_helper.hskal