ludic/tools/x
Orkuncakilkaya a71279a7b9
All checks were successful
bootstrap / cfree-fixpoint (push) Successful in 18s
ci / build-and-test (push) Successful in 1m13s
commit-lint / conventional-commits (push) Successful in 5s
docs / build-and-deploy (push) Successful in 18s
feat(rendering): add Light.* — deterministic 2D light accumulation with hard shadows (#4)
A software light pass over the framebuffer, run in a render phase after drawing
the scene: Light.ambient multiplies the scene toward a tint (night/cave mood),
Light.point additively accumulates a radial glow with linear falloff clamped per
channel, and Light.occlude / Light.clear_occluders cast hard shadows by blocking
a light's rays against rectangular occluders. Integer + Q16.16 fixed throughout,
so a scene lights identically every run and in a headless render (diffable).

Engine in runtime/native/light.ludic, spliced on demand (g_uses_light) like the
regex/query runtimes; namespace wired in emit_call.ludic. Ships issue #4 tiers 1
(ambient + additive radial lights) and 2 (hard shadows). Normal-mapped sprites,
soft shadows, a day/night directional light, and auto-consuming Light2D/Occluder
components are follow-ups (the auto-system hook is tracked by #43).

- runtime/native/light.ludic: the light-accumulation engine (isqrt falloff,
  segment/occluder shadow test, ambient modulate)
- examples/library/lighting.ludic: 14 pixel-readback assertions
- docs/language/light/: Light.ambient/point/occlude/clear_occluders
- tools/x/test.ludic: lighting.ludic in the regression suite

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-31 14:07:19 +03:00
..
build.ludic chore(repo): DX cleanup — categorise examples, text-diffable golden, build/ output (#27 #28 #30) 2026-08-30 18:54:21 +03:00
checks.ludic feat(tooling): port the doc/lint/grammar checks to Ludic (no Python) 2026-08-31 01:06:38 +03:00
docgen.ludic feat(tooling): port the docgen site generator to Ludic (no Python) (#41) 2026-08-31 02:12:32 +03:00
docgen_check.ludic feat(tooling): port the docgen site generator to Ludic (no Python) (#41) 2026-08-31 02:12:32 +03:00
docgen_gen.ludic feat(tooling): port the docgen site generator to Ludic (no Python) (#41) 2026-08-31 02:12:32 +03:00
json.ludic feat(tooling): port the doc/lint/grammar checks to Ludic (no Python) 2026-08-31 01:06:38 +03:00
main.ludic feat(tooling): port the docgen site generator to Ludic (no Python) (#41) 2026-08-31 02:12:32 +03:00
prelude.ludic ci: add build + test + bootstrap-cfree workflows for the Forgejo runner 2026-08-30 23:23:23 +03:00
release.ludic feat(release): SemVer + ludicc --version, changesets, and x release 2026-08-30 23:46:59 +03:00
selfhost.ludic feat(stdlib): add Anim.* + Tween.* — deterministic 2D animation & tweening (#5) 2026-08-31 13:05:06 +03:00
selfhost_test.ludic ci: add build + test + bootstrap-cfree workflows for the Forgejo runner 2026-08-30 23:23:23 +03:00
test.ludic feat(rendering): add Light.* — deterministic 2D light accumulation with hard shadows (#4) 2026-08-31 14:07:19 +03:00
tools.ludic feat(lang): new Type { field: value } record initialisers 2026-08-31 01:20:06 +03:00