v2.2.0
What's Changed
Changes since v2.1.0:
Features
- feat(render): enable metrics print on startup (52d3eb0)
- feat(shadow): add separate plane shadow test after BVH (f69fc4e)
- feat(render): add separate plane intersection for primary rays (97e1f63)
- feat(bvh): init and free plane_refs in BVH lifecycle (bdaab30)
- feat(bvh): separate planes from BVH tree construction (52847b5)
- feat(bvh): add t_plane_refs struct for plane BVH separation (12f5890)
- feat(bvh): add split_axis tracking for child ordering support (0c10a17)
- feat(render): add runtime flags for measurement overhead control (4bfae8a)
- feat(shadow): add shadow offset LUT for soft shadow optimization (P4) (e124e6f)
- feat(trace): remove BVH miss fallback in trace_ray (P0) (f79a5eb)
- feat(metrics): add metrics_print_summary for baseline benchmarking (137d9a2)
- feat(metrics): connect unused counters to hot paths (9fddf6f)
- feat(parser): add parser utilities (b94b998)
- feat(parser): add element dispatching (80dfbd6)
- feat(parser): add strict vector and color validation (5a8f033)
- feat(parser): add strict number parsing (c75fa2d)
- feat(parser): add token utilities (4389bb8)
- feat(parser): add buffered line reader (db9baa1)
- feat(parser): add error context handling (497af65)
- feat(parser): add parse result enum and data structures (fb0aaef)
- feat(keyguide): add Resize and Rotation key sections to key guide (73e741b)
- feat(window): add key dispatch, BVH lazy rebuild, and expose handler (62f79f2)
- feat(window): add object rotation via U/O/Y/P/LEFT/RIGHT keys (a1f24b7)
- feat(window): add object resize via J/K/N/M keys (bcfbe52)
- feat(parser): add .rt file extension validation (9116041)
- Merge branch '019-wiki-update': Update GitHub Wiki with v2.1.0 features (5bfdfd0)
Bug Fixes
- fix(parser): free unprocessed line on parse failure in process_lines (c53ad55)
- fix(parser): null-terminate line buffer before strlcpy in finalize_line (fc6b699)
- fix(shadow): regenerate offset LUT on sample count change (9a00a68)
- fix(parser): restrict FOV range to exclusive (0,180) (6b2482a)
- fix(bvh): add malloc guard and fix plane_refs leak in scene_build_bvh (7900955)
- fix(parser): Add vector range validation (Subject compliance) (670c0d3)
- fix(parser): initialize camera cache on scene load (74fff8e)
- perf(bvh): restore BVH pruning with t_max update (P0) (b4459ff)
- fix(bvh): restore null guard in bvh_node_intersect (609f4e6)
- fix(metrics): remove dead box_tests field and redundant output line (2b11178)
- fix(metrics): reset pixel timing at each frame start (991be27)
- fix(metrics): restore BVH skip counter and replace efficiency metric (2c5960e)
- fix(metrics): separate shadow intersect counter from primary (c4520df)
- fix(hud,window): remove stale declaration and redundant cleanup call (6dfb7c3)
- fix(window): release MLX resources on context init failure (53d851f)
- fix(bvh): initialize child hit distances before recursive traverse (166a9eb)
- fix(pixel): unify mlx/hud pixel byte handling across bpp and endian (226a5da)
- fix(window): release MLX resources on UI initialization failure (edcf6ad)
- fix(window): add pixel coordinate bounds checking to MLX image access (8979a29)
- fix(scene): guard object_list_grow against capacity overflow (3f6e010)
- fix(parser): detect integer overflow in parse_int_digits (828c961)
- fix(parser): distinguish read() I/O errors from EOF in line reader (df19f01)
- fix(lighting): use actual surface normal for shadow bias calculation (fb8233c)
- fix(render): use actual window size for progressive tile calculation (6b88c84)
- fix(render): prevent gimbal lock when camera faces vertical axis (4f65ddd)
- fix(spatial): prevent division by zero in AABB slab test (627d85e)
- fix(spatial): initialize temp_hit.distance in BVH leaf traversal (f580759)
- fix(render): add missing stdlib.h include (b3b56d9)
- fix(norm): split functions to comply with 42 Norm (9c33b6e)
- fix(norm): add u_ prefix to union type in objects.h (d7a705c)
- fix(norm): remove trailing empty line in render_flags_set.c (b352021)
- fix(window): restore HUD and keyguide overlay on expose event (f7b0175)
Documentation
- docs(spec): add 032-fix-review-issues design artifacts (93a031d)
- docs(spec): add Round 2 spec documents (e18fd76)
- docs(perf): add Round 4 benchmark results and analysis (ba3a569)
- docs(review): add code review and cleanup reports (4065878)
- docs(parser): add vector range validation documentation (9345672)
- docs(metrics): add optimization metrics and research reports (005ae4c)
- docs(perf): add performance optimization reports (0191f4b)
- docs(shadow): add shadow BVH optimization documentation (e9aab72)
- docs: update optimization-plan.md with implementation notes (24bd64d)
- docs: mark all P4 tasks complete in tasks.md (119d365)
- docs: mark all Phase A tasks complete in tasks.md (813b0cb)
- docs: mark all P0 tasks complete in tasks.md (6ef5357)
- docs(optimization-plan): fix review findings (8ec6570)
- docs: add unified optimization plan integrating all findings (d754778)
- docs: templatize benchmark-baseline with A/B comparison structure (af06a2c)
- docs: add baseline benchmark report with measurement data (7088eb1)
- docs(specs): add 025-dead-code-removal specification and planning artifacts (12d8b53)
- docs(specs): add 024-code-hardening specification and task artifacts (e019462)
- docs(spec): add parsing robustness tasks and checklists (e361794)
- docs(spec): add parsing robustness implementation plan (791597e)
- docs(spec): add parsing robustness feature specification (32b5728)
- docs: add detailed doxygen comments (93c9574)
- docs(codex): add speckit prompt templates (b58f7be)
- docs(cursor): add speckit command definitions (b524ec3)
- docs: add project markdown references (e7e46d0)
- docs(claude): add local claude commands and settings (f1710a5)
- docs(checklist): add spec quality and readiness checklist (a6d8f3d)
- docs(quickstart): add step-by-step implementation and verification guide (fbe99f0)
- docs(tasks): enumerate phased tasks for libft integration and replacements (0d8bb03)
- docs(research): record libft availability and replacement decisions (c92d4c3)
- docs(data-model): map forbidden functions to libft replacements and helper APIs (6382083)
- docs(plan): outline implementation phases and integration steps for libft (eb4119c)
- docs(spec): define requirements, scenarios, and success criteria for forbidden function replacement (a646157)
- docs(spec): add 021-fix-hud-keys-expose specification and design artifacts (7cc07a5)
- docs(spec): add 020-eval-compliance specification and design artifacts (2c75763)
- docs: move documentation files to docs/ directory (87d6601)
- docs(spec): Add complete specification documents for 019-wiki-update (2cff315)
- docs(wiki): Update wiki to v2.1.0 with BVH, debouncing, preview mode (fbc4235)
- docs: add CHANGELOG.md for v2.1.0 release (31df207)
Other Changes
- chore: update CLAUDE.md and add struct-map documentation (cd4f8c4)
- refactor(hud,keyguide): remove unused background image buffers (ca1331e)
- refactor(window,utils): replace cleanup_all wrapper with direct calls (cf2a5ec)
- refactor(parser): migrate in_range, remove legacy parser and print_error (f58581d)
- refactor(headers): remove dead declarations and legacy typedefs (9bebcfd)
- refactor(spatial,utils): remove dead utility files (e5792a1)
- refactor(render): remove orphaned render_state module (4d4005e)
- refactor(window): remove duplicate cleanup calls in close_window (8d6d54c)
- refactor(parser,render,spatial,lighting): move local prototypes to headers (b5910ca)
- refactor(scenes): reorganize fixtures and standardize naming (c6a0429)
- refactor(parser): update element parsers for parse result (6055379)
- chore(submodule): add minilibx linux and macos (c08dd37)
- chore(gitignore): ignore local codex sensitive files (9d261f6)
- refactor(error): replace strlen/snprintf with libft functions (777ae4d)
- refactor(bvh_vis): replace forbidden functions with libft (499f13d)
- refactor(hud): reimplement format helpers using libft (04bb8c9)
- refactor(window): replace memset with ft_bzero in mlx_context (2c1dd59)
- refactor(scene): replace libc memory functions with libft (567ef02)
- refactor(parser): replace snprintf with format_id for object IDs (fd6ee10)
- refactor(utils): remove duplicate functions and add format helpers (3cf2e0d)
- refactor(utils): move error messages array to function-local static (c542e9e)
- refactor(ray): move intersect_cylinder_new prototype to ray.h (c315909)
- refactor(spatial): fix Norm compliance in bounds.c (53f34cf)
- refactor(render): fix Norm compliance in metrics files (5eefeef)
- refactor(render): split debounce_update into helper functions for Norm compliance (dcc269f)
- refactor(hud): remove background blending and add dirty render on toggle (0c724c7)
- refactor: update HUD, parser, and lighting for unified object API (10268df)
- refactor: consolidate render state flags and simplify selection (fcf05d6)
- refactor: restructure scene lifecycle and extract MLX context (8133530)
- refactor: unify object representation with t_object struct and union (b0991e5)
Installation
Download the appropriate binary for your platform:
- Linux: miniRT-linux-x86_64
- macOS: miniRT-macos-arm64
Make it executable: chmod +x miniRT-*
Run with a scene file: ./miniRT-* scenes/test_scene.rt