@flighthq/render 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ import type { RenderState } from '@flighthq/types';
2
+ export declare function areColorAdjustmentGuardsEnabled(state: RenderState): boolean;
3
+ export declare function enableColorAdjustmentGuards(state: RenderState): void;
4
+ //# sourceMappingURL=enableColorAdjustmentGuards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableColorAdjustmentGuards.d.ts","sourceRoot":"","sources":["../src/enableColorAdjustmentGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAMnD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE3E;AAQD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAEpE"}
@@ -0,0 +1,22 @@
1
+ import { logOnce } from '@flighthq/log';
2
+ import { LogLevel } from '@flighthq/types';
3
+ import { getRenderStateRuntime } from './renderState';
4
+ // Returns whether the color-adjustment deferral guard is installed on `state`.
5
+ export function areColorAdjustmentGuardsEnabled(state) {
6
+ return getRenderStateRuntime(state).colorAdjustmentChannelMixingGuard != null;
7
+ }
8
+ // Installs the shakeable color-adjustment guard on `state`: when a node's color-adjustment stack contains
9
+ // an off-diagonal channel-mixing adjustment (saturation/hue/sepia/channelMixer) that the affine inline
10
+ // fold cannot represent yet, the render walk reaches this guard through its nullable runtime slot and
11
+ // warns once (only the affine part of the tint is applied — the non-affine part is skipped, never a
12
+ // throw). Not calling this — the production default — costs the render walk nothing, since the message
13
+ // and @flighthq/log dependency live only in this separately-imported module. Idempotent.
14
+ export function enableColorAdjustmentGuards(state) {
15
+ getRenderStateRuntime(state).colorAdjustmentChannelMixingGuard = warnColorAdjustmentChannelMixingNotInlineable;
16
+ }
17
+ function warnColorAdjustmentChannelMixingNotInlineable() {
18
+ logOnce('render:color-adjustment-channel-mixing-not-inlineable', LogLevel.Warn, {
19
+ message: 'updateRenderProxyColorTransform: per-object channel-mixing color adjustment (saturation/hue/sepia/channelMixer) is not inline-able yet — the 4×5 fold is deferred, so only the affine part of the stack was applied. Use an Effect pass for the channel-mixing op.',
20
+ }, 'render');
21
+ }
22
+ //# sourceMappingURL=enableColorAdjustmentGuards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableColorAdjustmentGuards.js","sourceRoot":"","sources":["../src/enableColorAdjustmentGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,+EAA+E;AAC/E,MAAM,UAAU,+BAA+B,CAAC,KAAkB;IAChE,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC,iCAAiC,IAAI,IAAI,CAAC;AAChF,CAAC;AAED,0GAA0G;AAC1G,uGAAuG;AACvG,sGAAsG;AACtG,oGAAoG;AACpG,uGAAuG;AACvG,yFAAyF;AACzF,MAAM,UAAU,2BAA2B,CAAC,KAAkB;IAC5D,qBAAqB,CAAC,KAAK,CAAC,CAAC,iCAAiC,GAAG,6CAA6C,CAAC;AACjH,CAAC;AAED,SAAS,6CAA6C;IACpD,OAAO,CACL,uDAAuD,EACvD,QAAQ,CAAC,IAAI,EACb;QACE,OAAO,EACL,oQAAoQ;KACvQ,EACD,QAAQ,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Kind, Renderable, RenderState } from '@flighthq/types';
2
+ export interface DisplayObjectRenderExplanation {
3
+ readonly kind: Kind;
4
+ readonly hasRenderer: boolean;
5
+ readonly prepared: boolean;
6
+ readonly visible: boolean;
7
+ readonly effectiveAlpha: number;
8
+ readonly reason: DisplayObjectRenderBlankReason;
9
+ }
10
+ export type DisplayObjectRenderBlankReason = 'no-renderer' | 'not-prepared' | 'not-visible' | 'zero-alpha' | 'ok';
11
+ export declare function explainDisplayObjectRender(state: RenderState, source: Renderable): DisplayObjectRenderExplanation;
12
+ //# sourceMappingURL=explainDisplayObjectRender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainDisplayObjectRender.d.ts","sourceRoot":"","sources":["../src/explainDisplayObjectRender.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AASpF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAIpB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAG9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAQ3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAC;CACjD;AAKD,MAAM,MAAM,8BAA8B,GAAG,aAAa,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,IAAI,CAAC;AAkBlH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,8BAA8B,CAmBjH"}
@@ -0,0 +1,40 @@
1
+ import { getRenderProxy2D } from './renderProxy';
2
+ import { getRenderStateRuntime } from './renderState';
3
+ // Recomputes why `source` would or would not draw against `state`, and returns it as plain data. Pure:
4
+ // reads only, allocates only the returned record, never mutates state (in particular never creates a
5
+ // proxy — it uses getRenderProxy2D, not getOrCreate), never throws even on a bare node, and retains
6
+ // nothing. Import it to debug a blank frame; it sheds from production when unimported.
7
+ //
8
+ // The reason is root-cause prioritized rather than following buildRenderQueue's literal check order
9
+ // (which drops on proxy===undefined, then !proxy.visible, then renderer===null). no-renderer is
10
+ // surfaced first because it is a static setup error — the "forgot registerRenderer for this kind"
11
+ // bug — that keeps the node blank no matter how the transient visible/alpha gates are fixed, and it is
12
+ // re-derivable from `kind` alone even before the node is prepared. not-prepared outranks the
13
+ // appearance gates for the same reason: nothing downstream matters until a proxy exists.
14
+ //
15
+ // Colocated with the render functions whose blank frame it explains — registerRenderer (renderer.ts),
16
+ // prepareDisplayObjectRender (renderProxy.ts), and buildRenderQueue (renderQueue.ts). This is the
17
+ // maintenance seam: a pull query duplicates the draw path's drop conditions, so if the draw path grows
18
+ // a new blank-reason gate, this function must gain the matching check or it silently goes stale.
19
+ export function explainDisplayObjectRender(state, source) {
20
+ const kind = source.kind;
21
+ const hasRenderer = getRenderStateRuntime(state).rendererMap.get(kind) !== undefined;
22
+ const proxy = getRenderProxy2D(state, source);
23
+ const prepared = proxy !== undefined;
24
+ const appearance = source;
25
+ const visible = proxy !== undefined ? proxy.visible : appearance.visible;
26
+ const effectiveAlpha = proxy !== undefined ? proxy.alpha : appearance.alpha;
27
+ let reason;
28
+ if (!hasRenderer)
29
+ reason = 'no-renderer';
30
+ else if (!prepared)
31
+ reason = 'not-prepared';
32
+ else if (!visible)
33
+ reason = 'not-visible';
34
+ else if (effectiveAlpha <= 0)
35
+ reason = 'zero-alpha';
36
+ else
37
+ reason = 'ok';
38
+ return { kind, hasRenderer, prepared, visible, effectiveAlpha, reason };
39
+ }
40
+ //# sourceMappingURL=explainDisplayObjectRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainDisplayObjectRender.js","sourceRoot":"","sources":["../src/explainDisplayObjectRender.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAgCtD,uGAAuG;AACvG,qGAAqG;AACrG,oGAAoG;AACpG,uFAAuF;AACvF,EAAE;AACF,oGAAoG;AACpG,gGAAgG;AAChG,kGAAkG;AAClG,uGAAuG;AACvG,6FAA6F;AAC7F,yFAAyF;AACzF,EAAE;AACF,sGAAsG;AACtG,kGAAkG;AAClG,uGAAuG;AACvG,iGAAiG;AACjG,MAAM,UAAU,0BAA0B,CAAC,KAAkB,EAAE,MAAkB;IAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;IAErF,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,CAAC;IAErC,MAAM,UAAU,GAAG,MAAkC,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;IACzE,MAAM,cAAc,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;IAE5E,IAAI,MAAsC,CAAC;IAC3C,IAAI,CAAC,WAAW;QAAE,MAAM,GAAG,aAAa,CAAC;SACpC,IAAI,CAAC,QAAQ;QAAE,MAAM,GAAG,cAAc,CAAC;SACvC,IAAI,CAAC,OAAO;QAAE,MAAM,GAAG,aAAa,CAAC;SACrC,IAAI,cAAc,IAAI,CAAC;QAAE,MAAM,GAAG,YAAY,CAAC;;QAC/C,MAAM,GAAG,IAAI,CAAC;IAEnB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AAC1E,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
+ export * from './enableColorAdjustmentGuards';
2
+ export * from './explainDisplayObjectRender';
1
3
  export * from './renderAppearance';
2
4
  export * from './renderCache';
3
5
  export * from './renderColor';
6
+ export * from './renderColorTransform';
4
7
  export * from './renderer';
5
8
  export * from './renderMaterial';
6
9
  export * from './renderProxy';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,9 @@
1
+ export * from './enableColorAdjustmentGuards';
2
+ export * from './explainDisplayObjectRender';
1
3
  export * from './renderAppearance';
2
4
  export * from './renderCache';
3
5
  export * from './renderColor';
6
+ export * from './renderColorTransform';
4
7
  export * from './renderer';
5
8
  export * from './renderMaterial';
6
9
  export * from './renderProxy';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { RenderProxy, RenderState } from '@flighthq/types';
2
+ export declare function updateRenderProxyColorTransform(state: RenderState, data: RenderProxy, _parentData?: RenderProxy): void;
3
+ //# sourceMappingURL=renderColorTransform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderColorTransform.d.ts","sourceRoot":"","sources":["../src/renderColorTransform.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAelF,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,WAAW,EACjB,WAAW,CAAC,EAAE,WAAW,GACxB,IAAI,CAMN"}
@@ -0,0 +1,21 @@
1
+ import { getNodeRuntime } from '@flighthq/node';
2
+ import { getRenderStateRuntime } from './renderState';
3
+ // Hands the node's resolved color transform to the render node. A node's color-adjustment stack
4
+ // (NodeRuntime.colorAdjustments) is fused once into the affine `resolvedColorTransform` cache by the
5
+ // set-accessors on change — never per frame — so this hot-path visitor is a single field read, identical
6
+ // in cost to reading the old `.colorTransform`. Non-inheriting: a node uses its own resolved value (or
7
+ // none → null). The value is the Adjustment-tier fold input; it is not a material and does not key the
8
+ // batch.
9
+ //
10
+ // When the fused stack carries off-diagonal channel-mixing terms the 8-float inline fold cannot represent
11
+ // yet (the 4×5 path is deferred), the node is flagged `colorAdjustmentsChannelMixing`: only the affine
12
+ // part is applied, and the render state's shakeable guard (enableColorAdjustmentGuards) is invoked so the
13
+ // deferral is reported rather than silent.
14
+ export function updateRenderProxyColorTransform(state, data, _parentData) {
15
+ const runtime = getNodeRuntime(data.source);
16
+ data.colorTransform = runtime.resolvedColorTransform ?? null;
17
+ if (runtime.colorAdjustmentsChannelMixing) {
18
+ getRenderStateRuntime(state).colorAdjustmentChannelMixingGuard?.(state, data.source);
19
+ }
20
+ }
21
+ //# sourceMappingURL=renderColorTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderColorTransform.js","sourceRoot":"","sources":["../src/renderColorTransform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,gGAAgG;AAChG,qGAAqG;AACrG,yGAAyG;AACzG,uGAAuG;AACvG,uGAAuG;AACvG,SAAS;AACT,EAAE;AACF,0GAA0G;AAC1G,uGAAuG;AACvG,0GAA0G;AAC1G,2CAA2C;AAC3C,MAAM,UAAU,+BAA+B,CAC7C,KAAkB,EAClB,IAAiB,EACjB,WAAyB;IAEzB,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,MAAc,CAAC,CAAC;IACpD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,sBAAsB,IAAI,IAAI,CAAC;IAC7D,IAAI,OAAO,CAAC,6BAA6B,EAAE,CAAC;QAC1C,qBAAqB,CAAC,KAAK,CAAC,CAAC,iCAAiC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,MAAoB,CAAC,CAAC;IACrG,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"renderProxy.d.ts","sourceRoot":"","sources":["../src/renderProxy.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,kBAAkB,EAClB,cAAc,EAEd,UAAU,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAQzB,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;AAIvF,MAAM,MAAM,kBAAkB,GAAG,CAC/B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,aAAa,GAAG,SAAS,KAClC,IAAI,CAAC;AAEV,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,WAAW,CAuBrF;AAKD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,UAAU,GAAG,cAAc,GAAG,kBAAkB,GACvD,aAAa,CAMf;AASD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAErF;AAMD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAM/E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,aAAa,CAY9F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAElG;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAE9E;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,WAAW,EACjB,UAAU,CAAC,EAAE,WAAW,GACvB,OAAO,CAWT;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAEjE;AAOD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAE1F;AAMD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,aAAa,GAAG,SAAS,GACpC,IAAI,CAGN;AAID,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,aAAa,GAAG,SAAS,GACpC,IAAI,CAQN;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAWrF;AAMD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CA+CjG"}
1
+ {"version":3,"file":"renderProxy.d.ts","sourceRoot":"","sources":["../src/renderProxy.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,kBAAkB,EAClB,cAAc,EAEd,UAAU,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACZ,MAAM,iBAAiB,CAAC;AASzB,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;AAIvF,MAAM,MAAM,kBAAkB,GAAG,CAC/B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,aAAa,GAAG,SAAS,KAClC,IAAI,CAAC;AAEV,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,WAAW,CAwBrF;AAKD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,UAAU,GAAG,cAAc,GAAG,kBAAkB,GACvD,aAAa,CAMf;AASD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAErF;AAMD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAM/E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,aAAa,CAY9F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAElG;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAE9E;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,WAAW,EACjB,UAAU,CAAC,EAAE,WAAW,GACvB,OAAO,CAWT;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAEjE;AAOD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAE1F;AAMD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,aAAa,GAAG,SAAS,GACpC,IAAI,CAGN;AAID,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,aAAa,GAAG,SAAS,GACpC,IAAI,CASN;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAWrF;AAMD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CA+CjG"}
@@ -3,6 +3,7 @@ import { createMatrix } from '@flighthq/geometry';
3
3
  import { getNodeAppearanceRevision, getNodeLocalContentRevision, getNodeLocalTransformRevision, getNodeParent, getNodeRuntime, } from '@flighthq/node';
4
4
  import { BlendMode } from '@flighthq/types';
5
5
  import { updateRenderProxyAppearance } from './renderAppearance';
6
+ import { updateRenderProxyColorTransform } from './renderColorTransform';
6
7
  import { updateRenderProxyMaterial } from './renderMaterial';
7
8
  import { getRenderStateRuntime } from './renderState';
8
9
  import { updateRenderProxy2DTransform } from './renderTransform2d';
@@ -16,6 +17,7 @@ export function createRenderProxy(state, source) {
16
17
  alpha: 1,
17
18
  appearanceFrameId: -1,
18
19
  blendMode: BlendMode.Normal,
20
+ colorTransform: null,
19
21
  material: null,
20
22
  materialData: null,
21
23
  lastAppearanceId: -1,
@@ -111,12 +113,13 @@ export function updateNodeClip(_state, source, data, parentData) {
111
113
  const parentDepth = parentData !== undefined ? parentData.clipDepth : 0;
112
114
  data.clipDepth = parentDepth + (source.clip != null ? 1 : 0);
113
115
  }
114
- // The one per-node update step for the 2D walk: appearance, transform, material, then the clip nesting
115
- // depth. Sprites and display objects share this single visitor.
116
+ // The one per-node update step for the 2D walk: appearance, transform, material, color transform,
117
+ // then the clip nesting depth. Sprites and display objects share this single visitor.
116
118
  export function updateRenderProxy2D(state, source, data, parentData) {
117
119
  updateRenderProxyAppearance(state, data, parentData);
118
120
  updateRenderProxy2DTransform(state, data, parentData);
119
121
  updateRenderProxyMaterial(state, data, parentData);
122
+ updateRenderProxyColorTransform(state, data, parentData);
120
123
  updateNodeClip(state, source, data, parentData);
121
124
  // Record the content revision we synced at, so a later content-only change re-dirties the node.
122
125
  data.lastLocalContentId = getNodeLocalContentRevision(source);
@@ -1 +1 @@
1
- {"version":3,"file":"renderProxy.js","sourceRoot":"","sources":["../src/renderProxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderProxy.js","sourceRoot":"","sources":["../src/renderProxy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"renderState.d.ts","sourceRoot":"","sources":["../src/renderState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGvE,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAiBzE;AAOD,wBAAgB,wBAAwB,IAAI,kBAAkB,CAU7D;AAID,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,kBAAkB,CAE5E"}
1
+ {"version":3,"file":"renderState.d.ts","sourceRoot":"","sources":["../src/renderState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGvE,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAiBzE;AAOD,wBAAgB,wBAAwB,IAAI,kBAAkB,CAW7D;AAID,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,kBAAkB,CAE5E"}
@@ -25,6 +25,7 @@ export function createRenderState(obj) {
25
25
  // intentionally mutable (not Readonly).
26
26
  export function createRenderStateRuntime() {
27
27
  const runtime = createEntityRuntime();
28
+ runtime.colorAdjustmentChannelMixingGuard = null;
28
29
  runtime.currentFrameId = 0;
29
30
  runtime.renderAdaptHook = null;
30
31
  runtime.renderProxyAdapterMap = new WeakMap();
@@ -1 +1 @@
1
- {"version":3,"file":"renderState.js","sourceRoot":"","sources":["../src/renderState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE9D,MAAM,UAAU,iBAAiB,CAAC,GAA0B;IAC1D,MAAM,KAAK,GAAG,YAAY,CAAC;QACzB,cAAc,EAAE,GAAG,EAAE,cAAc,IAAI,IAAI;QAC3C,eAAe,EAAE,GAAG,EAAE,eAAe,IAAI,CAAC;QAC1C,mBAAmB,EAAE,GAAG,EAAE,mBAAmB,IAAI,EAAE;QACnD,qBAAqB,EAAE,GAAG,EAAE,qBAAqB,IAAI,EAAE;QACvD,gBAAgB,EAAE,GAAG,EAAE,gBAAgB,IAAI,CAAC;QAC5C,sBAAsB,EAAE,GAAG,EAAE,sBAAsB,IAAI,IAAI;QAC3D,UAAU,EAAE,GAAG,EAAE,UAAU,IAAI,CAAC;QAChC,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,CAAC;QAClC,eAAe,EAAE,GAAG,EAAE,eAAe,IAAI,SAAS,CAAC,MAAM;QACzD,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,IAAI,IAAI;QACjD,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,KAAK;QACtC,oBAAoB,EAAE,GAAG,EAAE,oBAAoB,IAAI,qBAAqB;KACzE,CAAgB,CAAC;IAClB,KAAK,CAAC,gBAAgB,CAAC,GAAG,wBAAwB,EAAE,CAAC;IACrD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oGAAoG;AACpG,0FAA0F;AAC1F,sGAAsG;AACtG,2FAA2F;AAC3F,wCAAwC;AACxC,MAAM,UAAU,wBAAwB;IACtC,MAAM,OAAO,GAAG,mBAAmB,EAAwB,CAAC;IAC5D,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,qBAAqB,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9C,OAAO,CAAC,cAAc,GAAG,IAAI,OAAO,EAAE,CAAC;IACvC,OAAO,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;IAChC,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mGAAmG;AACnG,6CAA6C;AAC7C,MAAM,UAAU,qBAAqB,CAAC,KAAkB;IACtD,OAAO,KAAK,CAAC,gBAAgB,CAAuB,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"renderState.js","sourceRoot":"","sources":["../src/renderState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE9D,MAAM,UAAU,iBAAiB,CAAC,GAA0B;IAC1D,MAAM,KAAK,GAAG,YAAY,CAAC;QACzB,cAAc,EAAE,GAAG,EAAE,cAAc,IAAI,IAAI;QAC3C,eAAe,EAAE,GAAG,EAAE,eAAe,IAAI,CAAC;QAC1C,mBAAmB,EAAE,GAAG,EAAE,mBAAmB,IAAI,EAAE;QACnD,qBAAqB,EAAE,GAAG,EAAE,qBAAqB,IAAI,EAAE;QACvD,gBAAgB,EAAE,GAAG,EAAE,gBAAgB,IAAI,CAAC;QAC5C,sBAAsB,EAAE,GAAG,EAAE,sBAAsB,IAAI,IAAI;QAC3D,UAAU,EAAE,GAAG,EAAE,UAAU,IAAI,CAAC;QAChC,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,CAAC;QAClC,eAAe,EAAE,GAAG,EAAE,eAAe,IAAI,SAAS,CAAC,MAAM;QACzD,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,IAAI,IAAI;QACjD,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,KAAK;QACtC,oBAAoB,EAAE,GAAG,EAAE,oBAAoB,IAAI,qBAAqB;KACzE,CAAgB,CAAC;IAClB,KAAK,CAAC,gBAAgB,CAAC,GAAG,wBAAwB,EAAE,CAAC;IACrD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oGAAoG;AACpG,0FAA0F;AAC1F,sGAAsG;AACtG,2FAA2F;AAC3F,wCAAwC;AACxC,MAAM,UAAU,wBAAwB;IACtC,MAAM,OAAO,GAAG,mBAAmB,EAAwB,CAAC;IAC5D,OAAO,CAAC,iCAAiC,GAAG,IAAI,CAAC;IACjD,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,qBAAqB,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9C,OAAO,CAAC,cAAc,GAAG,IAAI,OAAO,EAAE,CAAC;IACvC,OAAO,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;IAChC,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mGAAmG;AACnG,6CAA6C;AAC7C,MAAM,UAAU,qBAAqB,CAAC,KAAkB;IACtD,OAAO,KAAK,CAAC,gBAAgB,CAAuB,CAAC;AACvD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sceneRender.d.ts","sourceRoot":"","sources":["../src/sceneRender.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAGV,MAAM,EAMN,WAAW,EACX,eAAe,EACf,WAAW,EACX,SAAS,EACT,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAazB,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CA6B7F;AAcD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,eAAe,CAiBjB"}
1
+ {"version":3,"file":"sceneRender.d.ts","sourceRoot":"","sources":["../src/sceneRender.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAGV,MAAM,EAQN,WAAW,EACX,eAAe,EACf,WAAW,EACX,SAAS,EACT,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AA2BzB,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAkE7F;AAcD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,eAAe,CAiBjB"}
@@ -1,11 +1,13 @@
1
1
  import { createAabb, createFrustum, createMatrix4, isFrustumIntersectingAabb, multiplyMatrix4, setFrustumFromMatrix4, setOrthographicMatrix4, setPerspectiveMatrix4, transformAabbByMatrix4, } from '@flighthq/geometry';
2
2
  import { unpackColorToLinear } from '@flighthq/materials';
3
3
  import { getNodeRuntime, getNodeWorldTransformMatrix4 } from '@flighthq/node';
4
- // Packs the directional + ambient draw-arg lights into `out` (the GPU-ready light block), converting
5
- // each packed sRgb color to linear, premultiplied radiance (unpackColorToLinear(color) * intensity)
6
- // so the shader never sees sRgb. Sets the presence counts (0 or 1 each). The float layout matches the
7
- // shader's std140 light block: directional { direction.xyz, _pad, radiance.rgb, _pad } then ambient
8
- // { radiance.rgb, _pad }. An absent term leaves its slots zeroed.
4
+ import { MAX_FORWARD_LIGHTS, SCENE_LIGHT_AMBIENT_RADIANCE_OFFSET, SCENE_LIGHT_BLOCK_FLOATS, SCENE_LIGHT_DIRECTIONAL_DIRECTION_OFFSET, SCENE_LIGHT_DIRECTIONAL_RADIANCE_OFFSET, SCENE_LIGHT_HEMISPHERE_OFFSET, SCENE_LIGHT_HEMISPHERE_STRIDE, SCENE_LIGHT_POINT_OFFSET, SCENE_LIGHT_POINT_STRIDE, SCENE_LIGHT_SPOT_OFFSET, SCENE_LIGHT_SPOT_STRIDE, } from '@flighthq/types';
5
+ // Packs the directional + ambient + punctual (point/spot/hemisphere) draw-arg lights into `out` (the
6
+ // GPU-ready light block), converting each packed sRgb color to linear, premultiplied radiance
7
+ // (unpackColorToLinear(color) * intensity) so the shader never sees sRgb. Sets every presence count
8
+ // (directional/ambient 0..1, point/spot/hemisphere 0..MAX_FORWARD_LIGHTS). The float layout matches
9
+ // the shader's std140 light block exactly (SCENE_LIGHT_* offsets/strides in @flighthq/types); absent
10
+ // terms and unused array slots stay zeroed. Punctual arrays beyond MAX_FORWARD_LIGHTS are dropped.
9
11
  //
10
12
  // `version` bumps only when the packed data or counts actually change from the previous pack — a
11
13
  // no-op re-pack of identical lights leaves it untouched. This is the SceneLightBlock contract a
@@ -26,14 +28,44 @@ export function packSceneLightBlock(out, lights) {
26
28
  packAmbientLight(scratchLightData, ambient);
27
29
  ambientCount = 1;
28
30
  }
31
+ let pointCount = 0;
32
+ const point = lights.point;
33
+ if (point !== undefined) {
34
+ pointCount = Math.min(point.length, MAX_FORWARD_LIGHTS);
35
+ for (let i = 0; i < pointCount; i++) {
36
+ packPointLight(scratchLightData, SCENE_LIGHT_POINT_OFFSET + i * SCENE_LIGHT_POINT_STRIDE, point[i]);
37
+ }
38
+ }
39
+ let spotCount = 0;
40
+ const spot = lights.spot;
41
+ if (spot !== undefined) {
42
+ spotCount = Math.min(spot.length, MAX_FORWARD_LIGHTS);
43
+ for (let i = 0; i < spotCount; i++) {
44
+ packSpotLight(scratchLightData, SCENE_LIGHT_SPOT_OFFSET + i * SCENE_LIGHT_SPOT_STRIDE, spot[i]);
45
+ }
46
+ }
47
+ let hemisphereCount = 0;
48
+ const hemisphere = lights.hemisphere;
49
+ if (hemisphere !== undefined) {
50
+ hemisphereCount = Math.min(hemisphere.length, MAX_FORWARD_LIGHTS);
51
+ for (let i = 0; i < hemisphereCount; i++) {
52
+ packHemisphereLight(scratchLightData, SCENE_LIGHT_HEMISPHERE_OFFSET + i * SCENE_LIGHT_HEMISPHERE_STRIDE, hemisphere[i]);
53
+ }
54
+ }
29
55
  if (out.directionalCount === directionalCount &&
30
56
  out.ambientCount === ambientCount &&
57
+ out.pointCount === pointCount &&
58
+ out.spotCount === spotCount &&
59
+ out.hemisphereCount === hemisphereCount &&
31
60
  isFloat32ArrayEqual(out.data, scratchLightData)) {
32
61
  return;
33
62
  }
34
63
  out.data.set(scratchLightData);
35
64
  out.directionalCount = directionalCount;
36
65
  out.ambientCount = ambientCount;
66
+ out.pointCount = pointCount;
67
+ out.spotCount = spotCount;
68
+ out.hemisphereCount = hemisphereCount;
37
69
  out.version++;
38
70
  }
39
71
  // The per-frame preparation pass for a 3D scene, the 3D analog of prepareDisplayObjectRender. It is
@@ -87,7 +119,7 @@ function ensurePreparedScene(state) {
87
119
  const list = {
88
120
  lights: {
89
121
  ambientCount: 0,
90
- data: new Float32Array(LIGHT_BLOCK_FLOATS),
122
+ data: new Float32Array(SCENE_LIGHT_BLOCK_FLOATS),
91
123
  directionalCount: 0,
92
124
  hemisphereCount: 0,
93
125
  pointCount: 0,
@@ -130,19 +162,71 @@ function isMeshVisible(mesh, frustum, worldBounds) {
130
162
  function packAmbientLight(data, ambient) {
131
163
  unpackColorToLinear(scratchColor, ambient.color);
132
164
  const intensity = ambient.intensity;
133
- data[8] = scratchColor[0] * intensity;
134
- data[9] = scratchColor[1] * intensity;
135
- data[10] = scratchColor[2] * intensity;
165
+ data[SCENE_LIGHT_AMBIENT_RADIANCE_OFFSET + 0] = scratchColor[0] * intensity;
166
+ data[SCENE_LIGHT_AMBIENT_RADIANCE_OFFSET + 1] = scratchColor[1] * intensity;
167
+ data[SCENE_LIGHT_AMBIENT_RADIANCE_OFFSET + 2] = scratchColor[2] * intensity;
136
168
  }
137
169
  function packDirectionalLight(data, directional) {
138
- data[0] = directional.direction.x;
139
- data[1] = directional.direction.y;
140
- data[2] = directional.direction.z;
170
+ data[SCENE_LIGHT_DIRECTIONAL_DIRECTION_OFFSET + 0] = directional.direction.x;
171
+ data[SCENE_LIGHT_DIRECTIONAL_DIRECTION_OFFSET + 1] = directional.direction.y;
172
+ data[SCENE_LIGHT_DIRECTIONAL_DIRECTION_OFFSET + 2] = directional.direction.z;
141
173
  unpackColorToLinear(scratchColor, directional.color);
142
174
  const intensity = directional.intensity;
143
- data[4] = scratchColor[0] * intensity;
144
- data[5] = scratchColor[1] * intensity;
145
- data[6] = scratchColor[2] * intensity;
175
+ data[SCENE_LIGHT_DIRECTIONAL_RADIANCE_OFFSET + 0] = scratchColor[0] * intensity;
176
+ data[SCENE_LIGHT_DIRECTIONAL_RADIANCE_OFFSET + 1] = scratchColor[1] * intensity;
177
+ data[SCENE_LIGHT_DIRECTIONAL_RADIANCE_OFFSET + 2] = scratchColor[2] * intensity;
178
+ }
179
+ // Gradient ambient: sky radiance @+0, ground radiance @+4, world-up @+8. Both colors are premultiplied
180
+ // by the shared intensity. `up` is packed as world +Y so the shader blends sky/ground by dot(N, up)
181
+ // without the HemisphereLight type needing to carry an orientation.
182
+ function packHemisphereLight(data, offset, hemisphere) {
183
+ const intensity = hemisphere.intensity;
184
+ unpackColorToLinear(scratchColor, hemisphere.skyColor);
185
+ data[offset + 0] = scratchColor[0] * intensity;
186
+ data[offset + 1] = scratchColor[1] * intensity;
187
+ data[offset + 2] = scratchColor[2] * intensity;
188
+ unpackColorToLinear(scratchColor, hemisphere.groundColor);
189
+ data[offset + 4] = scratchColor[0] * intensity;
190
+ data[offset + 5] = scratchColor[1] * intensity;
191
+ data[offset + 6] = scratchColor[2] * intensity;
192
+ data[offset + 8] = 0;
193
+ data[offset + 9] = 1;
194
+ data[offset + 10] = 0;
195
+ }
196
+ // Point light: position.xyz + range @+0, radiance.rgb + invSqrRange @+4. `invSqrRange` is 1/range^2
197
+ // (0 for infinite range, range <= 0), the smooth inverse-square windowing factor the shader applies.
198
+ function packPointLight(data, offset, point) {
199
+ const range = point.range;
200
+ data[offset + 0] = point.position.x;
201
+ data[offset + 1] = point.position.y;
202
+ data[offset + 2] = point.position.z;
203
+ data[offset + 3] = range;
204
+ unpackColorToLinear(scratchColor, point.color);
205
+ const intensity = point.intensity;
206
+ data[offset + 4] = scratchColor[0] * intensity;
207
+ data[offset + 5] = scratchColor[1] * intensity;
208
+ data[offset + 6] = scratchColor[2] * intensity;
209
+ data[offset + 7] = range > 0 ? 1 / (range * range) : 0;
210
+ }
211
+ // Spot light: point's position+range @+0 and radiance+invSqrRange @+4, then direction.xyz @+8 and the
212
+ // precomputed cone cosines (inner @+12, outer @+13) the shader smoothsteps between for cone falloff.
213
+ function packSpotLight(data, offset, spot) {
214
+ const range = spot.range;
215
+ data[offset + 0] = spot.position.x;
216
+ data[offset + 1] = spot.position.y;
217
+ data[offset + 2] = spot.position.z;
218
+ data[offset + 3] = range;
219
+ unpackColorToLinear(scratchColor, spot.color);
220
+ const intensity = spot.intensity;
221
+ data[offset + 4] = scratchColor[0] * intensity;
222
+ data[offset + 5] = scratchColor[1] * intensity;
223
+ data[offset + 6] = scratchColor[2] * intensity;
224
+ data[offset + 7] = range > 0 ? 1 / (range * range) : 0;
225
+ data[offset + 8] = spot.direction.x;
226
+ data[offset + 9] = spot.direction.y;
227
+ data[offset + 10] = spot.direction.z;
228
+ data[offset + 12] = spot.innerConeCos;
229
+ data[offset + 13] = spot.outerConeCos;
146
230
  }
147
231
  // Composes the camera's view-projection (projection x view) into `out`. For a perspective camera the
148
232
  // projection's own aspect is used when set (non-zero), else the render state's `aspect` fallback;
@@ -161,15 +245,13 @@ function setSceneViewProjectionMatrix4(out, camera, aspect) {
161
245
  }
162
246
  // Neutral viewport aspect used when a perspective camera does not carry its own.
163
247
  const DEFAULT_VIEWPORT_ASPECT = 1;
164
- // One directional ({ direction.xyz, _pad, radiance.rgb, _pad }) + one ambient ({ radiance.rgb,
165
- // _pad }) = 12 floats, std140-aligned (vec4 boundaries).
166
- const LIGHT_BLOCK_FLOATS = 12;
167
248
  // Per-render-state prepared frames. Keyed by state so independent backends prepare without sharing
168
249
  // scratch; a state's entry is freed when the state is GC'd.
169
250
  const preparedScenes = new WeakMap();
170
251
  const scratchColor = [0, 0, 0, 0];
171
252
  const scratchProjection = createMatrix4();
172
253
  // Reused staging buffer for packSceneLightBlock's pack-then-compare: the new block is packed here and
173
- // committed to `out.data` only when it differs, so an unchanged block never bumps `version`.
174
- const scratchLightData = new Float32Array(LIGHT_BLOCK_FLOATS);
254
+ // committed to `out.data` only when it differs, so an unchanged block never bumps `version`. Sized to
255
+ // the full head + MAX_FORWARD_LIGHTS-per-type layout (SCENE_LIGHT_BLOCK_FLOATS).
256
+ const scratchLightData = new Float32Array(SCENE_LIGHT_BLOCK_FLOATS);
175
257
  //# sourceMappingURL=sceneRender.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sceneRender.js","sourceRoot":"","sources":["../src/sceneRender.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sceneRender.js","sourceRoot":"","sources":["../src/sceneRender.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "@flighthq/render",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/flighthq/flight.git",
7
+ "directory": "packages/render"
8
+ },
4
9
  "type": "module",
5
10
  "main": "dist/index.js",
6
11
  "types": "dist/index.d.ts",
@@ -27,14 +32,16 @@
27
32
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
28
33
  },
29
34
  "dependencies": {
30
- "@flighthq/entity": "0.1.0",
31
- "@flighthq/geometry": "0.1.0",
32
- "@flighthq/materials": "0.1.0",
33
- "@flighthq/node": "0.1.0",
34
- "@flighthq/signals": "0.1.0",
35
- "@flighthq/types": "0.1.0"
35
+ "@flighthq/entity": "0.2.0",
36
+ "@flighthq/geometry": "0.2.0",
37
+ "@flighthq/log": "0.2.0",
38
+ "@flighthq/materials": "0.2.0",
39
+ "@flighthq/node": "0.2.0",
40
+ "@flighthq/signals": "0.2.0",
41
+ "@flighthq/types": "0.2.0"
36
42
  },
37
43
  "devDependencies": {
44
+ "@flighthq/adjustments": "*",
38
45
  "@flighthq/camera": "*",
39
46
  "@flighthq/displayobject": "*",
40
47
  "@flighthq/lighting": "*",
@@ -0,0 +1,58 @@
1
+ import { createColorTransformAdjustment, createSaturationColorMatrix } from '@flighthq/adjustments';
2
+ import { createDisplayObject, setDisplayObjectColorAdjustments } from '@flighthq/displayobject';
3
+ import { addLogSink, createMemoryLogSink, getMemoryLogSinkEntries, removeLogSink } from '@flighthq/log';
4
+ import { createColorTransform } from '@flighthq/materials';
5
+ import type { Adjustment, Renderable } from '@flighthq/types';
6
+
7
+ import { areColorAdjustmentGuardsEnabled, enableColorAdjustmentGuards } from './enableColorAdjustmentGuards';
8
+ import { updateRenderProxyColorTransform } from './renderColorTransform';
9
+ import { createRenderProxy } from './renderProxy';
10
+ import { createRenderState } from './renderState';
11
+
12
+ describe('areColorAdjustmentGuardsEnabled', () => {
13
+ it('reports false until guards are installed, then true', () => {
14
+ const state = createRenderState();
15
+ expect(areColorAdjustmentGuardsEnabled(state)).toBe(false);
16
+ enableColorAdjustmentGuards(state);
17
+ expect(areColorAdjustmentGuardsEnabled(state)).toBe(true);
18
+ });
19
+ });
20
+
21
+ describe('enableColorAdjustmentGuards', () => {
22
+ it('warns once when a node carries a non-inline-able channel-mixing adjustment', () => {
23
+ const state = createRenderState();
24
+ enableColorAdjustmentGuards(state);
25
+ const node = createDisplayObject();
26
+ const saturation: Adjustment = { kind: 'Saturation', colorMatrix: createSaturationColorMatrix(0) } as Adjustment;
27
+ setDisplayObjectColorAdjustments(node, [saturation]);
28
+ const data = createRenderProxy(state, node as unknown as Renderable);
29
+ const sink = createMemoryLogSink(8);
30
+ addLogSink(sink.sink);
31
+ try {
32
+ updateRenderProxyColorTransform(state, data);
33
+ const entries = getMemoryLogSinkEntries(sink);
34
+ expect(entries.length).toBe(1);
35
+ expect(String((entries[0].data as Record<string, unknown>).message)).toContain('channel-mixing');
36
+ } finally {
37
+ removeLogSink(sink.sink);
38
+ }
39
+ });
40
+
41
+ it('stays silent for an affine (inline-able) color-adjustment stack', () => {
42
+ const state = createRenderState();
43
+ enableColorAdjustmentGuards(state);
44
+ const node = createDisplayObject();
45
+ setDisplayObjectColorAdjustments(node, [
46
+ createColorTransformAdjustment(createColorTransform({ redMultiplier: 0.5 })),
47
+ ]);
48
+ const data = createRenderProxy(state, node as unknown as Renderable);
49
+ const sink = createMemoryLogSink(8);
50
+ addLogSink(sink.sink);
51
+ try {
52
+ updateRenderProxyColorTransform(state, data);
53
+ expect(getMemoryLogSinkEntries(sink).length).toBe(0);
54
+ } finally {
55
+ removeLogSink(sink.sink);
56
+ }
57
+ });
58
+ });
@@ -0,0 +1,130 @@
1
+ import { createDisplayObject } from '@flighthq/displayobject';
2
+ import { addNodeChild } from '@flighthq/node';
3
+
4
+ import { explainDisplayObjectRender } from './explainDisplayObjectRender';
5
+ import { registerRenderer } from './renderer';
6
+ import { getRenderProxy2D, prepareDisplayObjectRender } from './renderProxy';
7
+ import { createRenderState, getRenderStateRuntime } from './renderState';
8
+
9
+ function makeRenderer() {
10
+ return { createData: () => ({ tag: 'data' }), submit: vi.fn() } as any;
11
+ }
12
+
13
+ describe('explainDisplayObjectRender', () => {
14
+ it('reports no-renderer for a node whose kind has no registered renderer', () => {
15
+ const state = createRenderState();
16
+ const source = createDisplayObject();
17
+ prepareDisplayObjectRender(state, source);
18
+
19
+ const explanation = explainDisplayObjectRender(state, source);
20
+
21
+ expect(explanation.hasRenderer).toBe(false);
22
+ expect(explanation.reason).toBe('no-renderer');
23
+ expect(explanation.kind).toBe(source.kind);
24
+ });
25
+
26
+ it('reports not-prepared for a registered node that was never prepared', () => {
27
+ const state = createRenderState();
28
+ const source = createDisplayObject();
29
+ registerRenderer(state, source.kind, makeRenderer());
30
+
31
+ const explanation = explainDisplayObjectRender(state, source);
32
+
33
+ expect(explanation.hasRenderer).toBe(true);
34
+ expect(explanation.prepared).toBe(false);
35
+ expect(explanation.reason).toBe('not-prepared');
36
+ });
37
+
38
+ it('reports ok for a prepared, visible, opaque node with a renderer', () => {
39
+ const state = createRenderState();
40
+ const source = createDisplayObject();
41
+ registerRenderer(state, source.kind, makeRenderer());
42
+ prepareDisplayObjectRender(state, source);
43
+
44
+ const explanation = explainDisplayObjectRender(state, source);
45
+
46
+ expect(explanation.prepared).toBe(true);
47
+ expect(explanation.visible).toBe(true);
48
+ expect(explanation.effectiveAlpha).toBe(1);
49
+ expect(explanation.reason).toBe('ok');
50
+ });
51
+
52
+ it('reports not-visible for a hidden node', () => {
53
+ const state = createRenderState();
54
+ const source = createDisplayObject();
55
+ source.visible = false;
56
+ registerRenderer(state, source.kind, makeRenderer());
57
+ prepareDisplayObjectRender(state, source);
58
+
59
+ const explanation = explainDisplayObjectRender(state, source);
60
+
61
+ expect(explanation.visible).toBe(false);
62
+ expect(explanation.reason).toBe('not-visible');
63
+ });
64
+
65
+ it('reports zero-alpha for a visible node whose effective alpha is zero', () => {
66
+ const state = createRenderState();
67
+ const source = createDisplayObject();
68
+ source.alpha = 0;
69
+ registerRenderer(state, source.kind, makeRenderer());
70
+ prepareDisplayObjectRender(state, source);
71
+
72
+ const explanation = explainDisplayObjectRender(state, source);
73
+
74
+ expect(explanation.visible).toBe(true);
75
+ expect(explanation.effectiveAlpha).toBe(0);
76
+ expect(explanation.reason).toBe('zero-alpha');
77
+ });
78
+
79
+ it('reports not-prepared for a descendant of a hidden ancestor, since the prepare walk stops there', () => {
80
+ const state = createRenderState();
81
+ const parent = createDisplayObject();
82
+ const child = createDisplayObject();
83
+ parent.visible = false;
84
+ addNodeChild(parent, child);
85
+ registerRenderer(state, child.kind, makeRenderer());
86
+ prepareDisplayObjectRender(state, parent);
87
+
88
+ const explanation = explainDisplayObjectRender(state, child);
89
+
90
+ expect(explanation.prepared).toBe(false);
91
+ expect(explanation.reason).toBe('not-prepared');
92
+ });
93
+
94
+ it('folds a reached ancestor alpha into the child effective alpha', () => {
95
+ const state = createRenderState();
96
+ const parent = createDisplayObject();
97
+ const child = createDisplayObject();
98
+ parent.alpha = 0.5;
99
+ child.alpha = 0.5;
100
+ addNodeChild(parent, child);
101
+ registerRenderer(state, child.kind, makeRenderer());
102
+ prepareDisplayObjectRender(state, parent);
103
+
104
+ const explanation = explainDisplayObjectRender(state, child);
105
+
106
+ expect(explanation.effectiveAlpha).toBeCloseTo(0.25);
107
+ expect(explanation.reason).toBe('ok');
108
+ });
109
+
110
+ it('does not throw or mutate state, and never creates a proxy', () => {
111
+ const state = createRenderState();
112
+ const source = createDisplayObject();
113
+ registerRenderer(state, source.kind, makeRenderer());
114
+
115
+ expect(() => explainDisplayObjectRender(state, source)).not.toThrow();
116
+ // Two calls agree and neither materialized a proxy — the query is a pure read.
117
+ const first = explainDisplayObjectRender(state, source);
118
+ const second = explainDisplayObjectRender(state, source);
119
+ expect(second).toEqual(first);
120
+ expect(getRenderProxy2D(state, source)).toBeUndefined();
121
+ expect(getRenderStateRuntime(state).renderProxyMap.get(source)).toBeUndefined();
122
+ });
123
+
124
+ it('never throws on a bare edge node with no appearance fields', () => {
125
+ const state = createRenderState();
126
+ const bare = { kind: 'DisplayObject' } as any;
127
+
128
+ expect(() => explainDisplayObjectRender(state, bare)).not.toThrow();
129
+ });
130
+ });
@@ -0,0 +1,51 @@
1
+ import { createColorTransformAdjustment } from '@flighthq/adjustments';
2
+ import {
3
+ createDisplayObject,
4
+ getDisplayObjectRuntime,
5
+ setDisplayObjectColorAdjustments,
6
+ } from '@flighthq/displayobject';
7
+ import { createColorTransform } from '@flighthq/materials';
8
+ import type { Renderable } from '@flighthq/types';
9
+
10
+ import { updateRenderProxyColorTransform } from './renderColorTransform';
11
+ import { createRenderProxy } from './renderProxy';
12
+ import { createRenderState } from './renderState';
13
+
14
+ describe('updateRenderProxyColorTransform', () => {
15
+ it('resolves a node color-adjustment stack onto the render node as an affine ColorTransform', () => {
16
+ const state = createRenderState();
17
+ const node = createDisplayObject();
18
+ setDisplayObjectColorAdjustments(node, [
19
+ createColorTransformAdjustment(createColorTransform({ redMultiplier: 0.5, greenMultiplier: 0 })),
20
+ ]);
21
+ const data = createRenderProxy(state, node as unknown as Renderable);
22
+ updateRenderProxyColorTransform(state, data);
23
+ expect(data.colorTransform).not.toBeNull();
24
+ expect(data.colorTransform!.redMultiplier).toBe(0.5);
25
+ expect(data.colorTransform!.greenMultiplier).toBe(0);
26
+ });
27
+
28
+ it('resolves to null when the node carries no adjustments', () => {
29
+ const state = createRenderState();
30
+ const node = createDisplayObject();
31
+ const data = createRenderProxy(state, node as unknown as Renderable);
32
+ updateRenderProxyColorTransform(state, data);
33
+ expect(data.colorTransform).toBeNull();
34
+ });
35
+
36
+ it('reads the cache the accessor fused once (the walk never re-fuses)', () => {
37
+ const state = createRenderState();
38
+ const node = createDisplayObject();
39
+ setDisplayObjectColorAdjustments(node, [
40
+ createColorTransformAdjustment(createColorTransform({ redMultiplier: 0.25 })),
41
+ ]);
42
+ // The set-accessor fused the stack once; the runtime already holds the cached resolved value.
43
+ const cached = getDisplayObjectRuntime(node).resolvedColorTransform;
44
+ expect(cached).not.toBeNull();
45
+ const data = createRenderProxy(state, node as unknown as Renderable);
46
+ updateRenderProxyColorTransform(state, data);
47
+ expect(data.colorTransform).toBe(cached);
48
+ updateRenderProxyColorTransform(state, data);
49
+ expect(data.colorTransform).toBe(cached);
50
+ });
51
+ });
@@ -1,11 +1,23 @@
1
1
  import { createCamera, createPerspectiveProjection, setCameraViewMatrix4FromLookAt } from '@flighthq/camera';
2
2
  import { createAabb } from '@flighthq/geometry';
3
- import { createAmbientLight, createDirectionalLight } from '@flighthq/lighting';
3
+ import {
4
+ createAmbientLight,
5
+ createDirectionalLight,
6
+ createHemisphereLight,
7
+ createPointLight,
8
+ createSpotLight,
9
+ } from '@flighthq/lighting';
4
10
  import { unpackColorToLinear } from '@flighthq/materials';
5
11
  import { computeMeshGeometryBounds, createBoxMeshGeometry } from '@flighthq/mesh';
6
12
  import { addNodeChild, invalidateNodeLocalTransform } from '@flighthq/node';
7
13
  import { createMesh, createScene } from '@flighthq/scene';
8
14
  import type { Camera, Material, MeshGeometry, SceneLightBlock, SceneLights } from '@flighthq/types';
15
+ import {
16
+ SCENE_LIGHT_BLOCK_FLOATS,
17
+ SCENE_LIGHT_HEMISPHERE_OFFSET,
18
+ SCENE_LIGHT_POINT_OFFSET,
19
+ SCENE_LIGHT_SPOT_OFFSET,
20
+ } from '@flighthq/types';
9
21
  import { describe, expect, it } from 'vitest';
10
22
 
11
23
  import { createRenderState } from './renderState';
@@ -36,7 +48,7 @@ function emptyLights(): SceneLights {
36
48
  function newLightBlock(): SceneLightBlock {
37
49
  return {
38
50
  ambientCount: 0,
39
- data: new Float32Array(12),
51
+ data: new Float32Array(SCENE_LIGHT_BLOCK_FLOATS),
40
52
  directionalCount: 0,
41
53
  hemisphereCount: 0,
42
54
  pointCount: 0,
@@ -107,6 +119,89 @@ describe('packSceneLightBlock', () => {
107
119
  expect(block.data[8]).toBeLessThan(0x80 / 0xff);
108
120
  expect(block.data[8]).toBeGreaterThan(0);
109
121
  });
122
+
123
+ it('packs point lights: position + range, and linear radiance + inverse-square range', () => {
124
+ const block = newLightBlock();
125
+ const point = createPointLight({ color: 0xffffffff, intensity: 3, position: { x: 1, y: 2, z: 3 }, range: 10 });
126
+ packSceneLightBlock(block, { ambient: null, directional: null, point: [point] });
127
+ expect(block.pointCount).toBe(1);
128
+ const o = SCENE_LIGHT_POINT_OFFSET;
129
+ expect(block.data[o + 0]).toBeCloseTo(1);
130
+ expect(block.data[o + 1]).toBeCloseTo(2);
131
+ expect(block.data[o + 2]).toBeCloseTo(3);
132
+ expect(block.data[o + 3]).toBeCloseTo(10);
133
+ const expected = unpackColorToLinear([0, 0, 0, 0], 0xffffffff);
134
+ expect(block.data[o + 4]).toBeCloseTo(expected[0] * 3);
135
+ expect(block.data[o + 7]).toBeCloseTo(1 / (10 * 10));
136
+ });
137
+
138
+ it('packs an infinite-range point light with invSqrRange 0 (no cutoff)', () => {
139
+ const block = newLightBlock();
140
+ const point = createPointLight({ range: -1 });
141
+ packSceneLightBlock(block, { ambient: null, directional: null, point: [point] });
142
+ expect(block.data[SCENE_LIGHT_POINT_OFFSET + 3]).toBeCloseTo(-1);
143
+ expect(block.data[SCENE_LIGHT_POINT_OFFSET + 7]).toBe(0);
144
+ });
145
+
146
+ it('packs spot lights: point record plus direction and the precomputed cone cosines', () => {
147
+ const block = newLightBlock();
148
+ const spot = createSpotLight({
149
+ direction: { x: 0, y: -1, z: 0 },
150
+ innerConeDegrees: 10,
151
+ outerConeDegrees: 30,
152
+ position: { x: 4, y: 5, z: 6 },
153
+ });
154
+ packSceneLightBlock(block, { ambient: null, directional: null, spot: [spot] });
155
+ expect(block.spotCount).toBe(1);
156
+ const o = SCENE_LIGHT_SPOT_OFFSET;
157
+ expect(block.data[o + 0]).toBeCloseTo(4);
158
+ expect(block.data[o + 8]).toBeCloseTo(0);
159
+ expect(block.data[o + 9]).toBeCloseTo(-1);
160
+ expect(block.data[o + 10]).toBeCloseTo(0);
161
+ expect(block.data[o + 12]).toBeCloseTo(spot.innerConeCos);
162
+ expect(block.data[o + 13]).toBeCloseTo(spot.outerConeCos);
163
+ // Inner cone (smaller angle) has the larger cosine.
164
+ expect(block.data[o + 12]).toBeGreaterThan(block.data[o + 13]);
165
+ });
166
+
167
+ it('packs hemisphere lights: sky, ground, and packed world-up', () => {
168
+ const block = newLightBlock();
169
+ const hemisphere = createHemisphereLight({ groundColor: 0x000000ff, intensity: 2, skyColor: 0xffffffff });
170
+ packSceneLightBlock(block, { ambient: null, directional: null, hemisphere: [hemisphere] });
171
+ expect(block.hemisphereCount).toBe(1);
172
+ const o = SCENE_LIGHT_HEMISPHERE_OFFSET;
173
+ const sky = unpackColorToLinear([0, 0, 0, 0], 0xffffffff);
174
+ expect(block.data[o + 0]).toBeCloseTo(sky[0] * 2);
175
+ expect(block.data[o + 4]).toBeCloseTo(0);
176
+ // Packed world-up (0, 1, 0).
177
+ expect(block.data[o + 8]).toBeCloseTo(0);
178
+ expect(block.data[o + 9]).toBeCloseTo(1);
179
+ expect(block.data[o + 10]).toBeCloseTo(0);
180
+ });
181
+
182
+ it('caps each punctual array at MAX_FORWARD_LIGHTS', () => {
183
+ const block = newLightBlock();
184
+ const many = Array.from({ length: 9 }, () => createPointLight());
185
+ packSceneLightBlock(block, { ambient: null, directional: null, point: many });
186
+ expect(block.pointCount).toBe(4);
187
+ });
188
+
189
+ it('reports zero counts for empty punctual arrays', () => {
190
+ const block = newLightBlock();
191
+ packSceneLightBlock(block, { ambient: null, directional: null, hemisphere: [], point: [], spot: [] });
192
+ expect(block.pointCount).toBe(0);
193
+ expect(block.spotCount).toBe(0);
194
+ expect(block.hemisphereCount).toBe(0);
195
+ });
196
+
197
+ it('does not bump version when re-packed with identical punctual lights', () => {
198
+ const block = newLightBlock();
199
+ const lights = { ambient: null, directional: null, point: [createPointLight({ range: 5 })] };
200
+ packSceneLightBlock(block, lights);
201
+ const v = block.version;
202
+ packSceneLightBlock(block, lights);
203
+ expect(block.version).toBe(v);
204
+ });
110
205
  });
111
206
 
112
207
  describe('prepareSceneRender', () => {