summaryrefslogtreecommitdiff
path: root/src/3d/renderer_draw.cc
AgeCommit message (Collapse)Author
9 daysstyle: apply clang-formatHEADmainskal
9 daysfix: code review cleanup — bugs, dead code, factorization, simplificationskal
Bugs: - B1: fix dead tempo debug (prev_tempo captured after assignment) - B2: fix ReloadAssetsFromFile leak for disk-loaded assets; simplify DropAsset - B3: fix get_free_pool_slot leak (unregister synth + free data on reuse) - B4: volatile -> std::atomic with acquire/release in miniaudio_backend, synth - B5: fix unaligned reads in scene_loader (memcpy-based read_f32/read_u32) - B6: fix shader module + BGL + pipeline layout leaks in gpu.cc, pipeline_builder Dead code: - D1: remove unused particle_defs.h - D3: remove create_post_process_pipeline_simple (zero callers) - D4: remove empty gpu_draw() - D5: remove write-only Hybrid3D::initialized_ - D6: remove legacy pending buffer path in audio.cc Factorization: - F1: Effect::run_fullscreen_pass() replaces boilerplate in 5 effects - F2: particle_common.wgsl snippet, #include in 3 WGSL shaders - F3: gpu_create_shader_module() helper, used in 3 call sites - F5: get_world_aabb() shared between bvh.cc and physics.cc - F6: samples_to_seconds() replaces 6 inline expressions - F7: gpu_create_linear/nearest_sampler use SamplerCache; add nearest() preset Simplification: - S9+S1: WgslSamplerType param; Scene2Effect collapsed to thin wrapper - S4: FFT heap allocs -> stack arrays (zero allocs on hot path) - S5: ObjectType::CUBE documented as legacy alias for BOX; default changed - S6: bind group dirty-flag in Renderer3D; remove duplicate pipeline set - S7: create_gpu_procedural() helper in texture_manager (~80 lines removed) 37/37 tests passing. handoff(Claude): code review batch — all items verified, no regressions.
2026-03-29fix(3d): restore correct orientation in test_3d_render (direct-to-surface)skal
Add Renderer3D::set_direct_render(bool) flag (must be set before init()). When true, uses standard CCW winding and un-negates perspective Y, restoring the pre-ba7ea27 orientation for direct-to-surface rendering where the post-process Y-flip is absent. handoff(Gemini): set_direct_render() is the escape hatch for any future renderer usage that bypasses the post-process chain.
2026-03-08fix: transpose matrices on GPU upload (row-major → column-major)skal
mini_math mat4 is row-major; WGSL mat4x4f is column-major. Matrices uploaded without transposing were interpreted as their own transpose on the GPU, causing RotatingCube and Renderer3D to render upside-down. - Add gpu_upload_mat4() to post_process_helper for standalone uploads - Add Uniforms::make() to RotatingCube::Uniforms (handles transpose) - Add GlobalUniforms::make() and ObjectData::make() to renderer.h - Update renderer_draw.cc and visual_debug.cc to use make() handoff(Gemini): matrix layout bug fixed across all rasterized effects. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05style: run clang-format to adhere to coding styleskal
2026-02-17style: replace C++ casts with C-style castsskal
Converts all static_cast<>, reinterpret_cast<> to C-style casts per CODING_STYLE.md guidelines. - Modified 12 files across gpu, 3d, util, tests, and tools - All builds passing, 34/34 tests passing - No functional changes, pure style cleanup Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08fix(3d): Handle user_data meshes in visual debug wireframe renderingskal
- Check user_data before calling GetMeshAsset() in renderer_draw.cc - Prevents crash when rendering manually loaded OBJ meshes with --debug - Remove duplicate wireframe call in test_mesh.cc (now handled by renderer) - Keep add_mesh_normals() call (not auto-handled by renderer) Fixes: Bus error when running 'test_mesh house.obj --debug' Root cause: GetMeshAsset(0) on non-asset meshes Test: All 32 tests pass, test_mesh works with --debug flag
2026-02-08fix: Make PlaneData struct visible to renderer_draw.ccskal
2026-02-08feat: Integrate plane_distance into renderer and scene loaderskal
This commit integrates the plane_distance functionality by: - Adding shared_user_data to Object3D for storing type-specific data. - Modifying SceneLoader to read and store plane_distance in shared_user_data for PLANE objects. - Updating ObjectData struct in renderer.h to use params.x for object type and params.y for plane_distance. - Modifying Renderer3D::update_uniforms to populate ObjectData::params.y with plane_distance for PLANE objects. - Adjusting blender_export.py to correctly export plane_distance and reorder quaternion components. A manual step is required to update WGSL shaders to utilize ObjectData.params.y for plane distance calculations.
2026-02-08refactor(3d): Split Renderer3D into modular files and fix compilation.skal