lecodes-gl-lite
v2.0.3
Published
The lite 3D engine of LeCodes (the _creator contract in TypeScript): a GL-free scene core with two backends, WebGL2 over ogl in the browser and a recorder for the headless renderer. No wasm, no Filament
Readme
gl-lite
The lite 3D engine of LeCodes: the _creator contract (sdk/src/bridges/gl.d.ts) implemented in
TypeScript, next to engines/gl (the same contract in C++ over Filament). No wasm, no Filament.
src/core/ the GL-free scene core: entities, hierarchy, matrices, semantic materials / meshes / lights,
GLB structure, colliders, the animation / physics / particle twins (creator-anim,
creator-physics, creator-particles wasm under src/vendor), serialize (scene3d JSON), mapView
src/webgl/ the WebGL2 backend over ogl: programs, geometry, textures, shadows, IBL, batching, the
editor layer, the draco / ktx2 decoders — `createViewerLite(canvas)` is the engine object
src/core/headlessBridge.ts the recorder backend: the same core with no GL at all (lecodes-renderer)
src/gen/unsupported.gen.ts GENERATED (scripts/gen-bridges.ts): a warn-once stub per required contract
method; both backends spread it under their own methods and check the
result `satisfies typeof _creator`
src/vendor/ the engine twins (js + wasm) vendored by `bun run vendor:creator` — committed, one build eachTwo backends, one state: the pixels a browser shows (webgl) and the JSON lecodes render emits
(headless) come from the same core, so they cannot disagree. stubbedIn(bridge) lists the contract
methods a backend still answers with a stub — the engine's parity gap, derived from the code.
Consumers: runtime/headless (the recorder), Web Lite (hosts/web-lite, in its 3D phase — docs/plans/web-lite-plan.md), character-studio in
lecodes-tools (its viewport). Published as lecodes-gl-lite with the runtime set.
Checks: bun test (the core, Bun), bun run render:check (the WebGL backend in headless Chromium,
opt-in: npx playwright install chromium once), bun run typecheck.
