@flighthq/render 0.3.0-next.906.07cea63 → 0.3.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.
Files changed (77) hide show
  1. package/dist/contract.d.ts +6 -1
  2. package/dist/contract.d.ts.map +1 -1
  3. package/dist/contract.js +6 -1
  4. package/dist/contract.js.map +1 -1
  5. package/dist/enableColorAdjustmentGuards.js +6 -6
  6. package/dist/enableColorAdjustmentGuards.js.map +1 -1
  7. package/dist/enableColorAdjustments.d.ts +4 -0
  8. package/dist/enableColorAdjustments.d.ts.map +1 -0
  9. package/dist/enableColorAdjustments.js +110 -0
  10. package/dist/enableColorAdjustments.js.map +1 -0
  11. package/dist/enableSceneRenderGuards.d.ts +22 -0
  12. package/dist/enableSceneRenderGuards.d.ts.map +1 -0
  13. package/dist/enableSceneRenderGuards.js +36 -0
  14. package/dist/enableSceneRenderGuards.js.map +1 -0
  15. package/dist/explainScene2DCoverage.d.ts +4 -0
  16. package/dist/explainScene2DCoverage.d.ts.map +1 -0
  17. package/dist/explainScene2DCoverage.js +57 -0
  18. package/dist/explainScene2DCoverage.js.map +1 -0
  19. package/dist/index.d.ts +2 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +2 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/renderProxy.d.ts.map +1 -1
  24. package/dist/renderProxy.js +34 -9
  25. package/dist/renderProxy.js.map +1 -1
  26. package/dist/renderRegistryGuards.d.ts +5 -0
  27. package/dist/renderRegistryGuards.d.ts.map +1 -0
  28. package/dist/renderRegistryGuards.js +87 -0
  29. package/dist/renderRegistryGuards.js.map +1 -0
  30. package/dist/renderRegistrySignals.d.ts +3 -0
  31. package/dist/renderRegistrySignals.d.ts.map +1 -0
  32. package/dist/renderRegistrySignals.js +19 -0
  33. package/dist/renderRegistrySignals.js.map +1 -0
  34. package/dist/renderState.d.ts +1 -0
  35. package/dist/renderState.d.ts.map +1 -1
  36. package/dist/renderState.js +26 -0
  37. package/dist/renderState.js.map +1 -1
  38. package/dist/renderTarget.d.ts +4 -2
  39. package/dist/renderTarget.d.ts.map +1 -1
  40. package/dist/renderTarget.js +52 -2
  41. package/dist/renderTarget.js.map +1 -1
  42. package/dist/renderTransform2d.d.ts.map +1 -1
  43. package/dist/renderTransform2d.js +4 -1
  44. package/dist/renderTransform2d.js.map +1 -1
  45. package/dist/renderer.d.ts +1 -0
  46. package/dist/renderer.d.ts.map +1 -1
  47. package/dist/renderer.js +16 -0
  48. package/dist/renderer.js.map +1 -1
  49. package/dist/scene2dWorkingColorSpace.d.ts +3 -0
  50. package/dist/scene2dWorkingColorSpace.d.ts.map +1 -0
  51. package/dist/scene2dWorkingColorSpace.js +19 -0
  52. package/dist/scene2dWorkingColorSpace.js.map +1 -0
  53. package/dist/sceneRender.d.ts +6 -2
  54. package/dist/sceneRender.d.ts.map +1 -1
  55. package/dist/sceneRender.js +47 -13
  56. package/dist/sceneRender.js.map +1 -1
  57. package/package.json +15 -12
  58. package/src/enableColorAdjustmentGuards.test.ts +6 -4
  59. package/src/enableColorAdjustments.test.ts +233 -0
  60. package/src/enableSceneRenderGuards.test.ts +96 -0
  61. package/src/explainScene2DCoverage.test.ts +113 -0
  62. package/src/renderProxy.test.ts +142 -11
  63. package/src/renderQueue.test.ts +1 -1
  64. package/src/renderRegistryGuards.test.ts +94 -0
  65. package/src/renderRegistrySignals.test.ts +15 -0
  66. package/src/renderState.test.ts +16 -1
  67. package/src/renderTarget.test.ts +113 -5
  68. package/src/renderTransform2d.test.ts +15 -1
  69. package/src/renderViewport.test.ts +1 -1
  70. package/src/renderer.test.ts +44 -1
  71. package/src/scene2dWorkingColorSpace.test.ts +11 -0
  72. package/src/sceneRender.test.ts +75 -2
  73. package/dist/renderColorScaleBias.d.ts +0 -3
  74. package/dist/renderColorScaleBias.d.ts.map +0 -1
  75. package/dist/renderColorScaleBias.js +0 -21
  76. package/dist/renderColorScaleBias.js.map +0 -1
  77. package/src/renderColorScaleBias.test.ts +0 -53
@@ -0,0 +1,87 @@
1
+ import { logOnce } from '@flighthq/log/contract';
2
+ import { connectSignal } from '@flighthq/signals/contract';
3
+ import { LogLevel, RenderRegistry } from '@flighthq/types/contract';
4
+ import { enableRenderRegistrySignals } from './renderRegistrySignals';
5
+ export function areRenderRegistryGuardsEnabled(state) {
6
+ return _stateIds.has(state);
7
+ }
8
+ export function enableRenderRegistryGuards(state) {
9
+ if (_stateIds.has(state))
10
+ return;
11
+ const stateId = ++_nextStateId;
12
+ _stateIds.set(state, stateId);
13
+ _stateMisses.set(state, []);
14
+ connectSignal(enableRenderRegistrySignals(state).onRegistryMiss, (registry, kind) => {
15
+ recordRenderRegistryMiss(state, stateId, registry, kind);
16
+ });
17
+ }
18
+ export function explainRenderRegistryMisses(state) {
19
+ const misses = _stateMisses.get(state) ?? [];
20
+ return {
21
+ misses: misses.map((miss) => ({ kind: miss.kind, registry: miss.registry })),
22
+ status: misses.length === 0 ? 'complete' : 'misses-recorded',
23
+ };
24
+ }
25
+ function getRenderRegistryMissMessage(state, registry) {
26
+ switch (registry) {
27
+ // GL composites through an explicit per-mode realization; Canvas and DOM express blend modes
28
+ // natively and never report this.
29
+ case RenderRegistry.BlendRealization:
30
+ return 'a blend mode this scene uses has no registered GL realization, so the node composites as Normal instead — call registerGlBlendMode(state, blendMode, realization)';
31
+ case RenderRegistry.EffectPaddingResolver:
32
+ return 'computeRenderEffectPadding: effect kind has no registered padding resolver — call registerRenderEffectPaddingResolver(state, kind, resolver)';
33
+ // Reported by the resource layer, not the frame path: a material kind with no lister has its
34
+ // texture slots invisible to anything that walks materials. Discovery no longer depends on this
35
+ // (it reads the resource back-edge), so the surviving cost is a mesh whose reveal never fires.
36
+ case RenderRegistry.MaterialTextureLister:
37
+ return 'a material kind in this scene has no registered texture lister, so a mesh waiting on its maps never reveals — call registerScene3DMaterialTextures(registry, kind, lister), or the named door for that family';
38
+ // Reported only by the GPU backends, where an unresolved material means the node does not draw at
39
+ // all. The Canvas renderer treats a missing material renderer as "draw normally", so the same
40
+ // absence there is the ordinary case rather than a defect.
41
+ case RenderRegistry.MaterialRenderer:
42
+ if ('device' in state)
43
+ return 'resolveWgpuMaterialRenderer: material kind has no registered renderer, so nodes using it do not draw — call registerWgpuMaterialRenderer(state, kind, renderer)';
44
+ return 'resolveGlMaterialRenderer: material kind has no registered renderer, so nodes using it do not draw — call registerGlMaterialRenderer(state, kind, renderer)';
45
+ // Reported by the proactive coverage checks (explainGlScene3DCoverage) rather than by a draw-time
46
+ // miss: the shaded compiler resolves a whole stack at once, so a missing snippet surfaces as a
47
+ // material that will not compile, not as one lookup returning null.
48
+ case RenderRegistry.ModifierSnippet:
49
+ if ('device' in state)
50
+ return 'a modifier on this material has no registered shader snippet — call registerWgpuModifierSnippet(state, snippet), or registerBuiltInWgpuModifierSnippets(state)';
51
+ return 'a modifier on this material has no registered shader snippet — call registerGlModifierSnippet(state, snippet), or registerBuiltInGlModifierSnippets(state)';
52
+ case RenderRegistry.NodeRenderer:
53
+ return 'createRenderProxy: node kind has no registered renderer — call registerRenderer(state, kind, renderer)';
54
+ case RenderRegistry.ShapeCommandHandler:
55
+ return 'renderCanvasShapeCommands: shape command key has no registered handler on this state — call registerCanvasShapeCommand(state, command)';
56
+ // The kind reported is the node kind that went undrawn, since nothing here is keyed by anything else.
57
+ case RenderRegistry.ShapeRasterizer:
58
+ if ('device' in state)
59
+ return 'drawWgpuShape: a fill this node uses has no tessellated form and no rasterizer is registered, so it does not draw — call registerWgpuShapeRasterizer(state, createCanvasShapeRasterizer(resolvers))';
60
+ if ('element' in state)
61
+ return 'drawDomShape: a fill this node uses has no tessellated form and no rasterizer is registered, so it does not draw — call registerDomShapeRasterizer(state, createCanvasShapeRasterizer(resolvers))';
62
+ return 'drawGlShape: a fill this node uses has no tessellated form and no rasterizer is registered, so it does not draw — call registerGlShapeRasterizer(state, createCanvasShapeRasterizer(resolvers))';
63
+ case RenderRegistry.TextureResolver:
64
+ if ('gl' in state)
65
+ return 'resolveGlTexture: texture source kind has no registered resolver — call registerGlTextureResolver(state, sourceKind, resolver), or copyGlRenderStateRegistrations(offscreenState, screenState) after a late screen registration';
66
+ if ('device' in state)
67
+ return 'resolveWgpuTexture: texture source kind has no registered resolver — call registerWgpuTextureResolver(state, sourceKind, resolver)';
68
+ if ('element' in state)
69
+ return 'resolveDomTexture: texture source kind has no registered resolver — call registerDomTextureResolver(state, sourceKind, resolver)';
70
+ return 'resolveCanvasTexture: texture source kind has no registered resolver — call registerCanvasTextureResolver(resolvers, sourceKind, resolver) on the set the caller resolves through';
71
+ }
72
+ }
73
+ function recordRenderRegistryMiss(state, stateId, registry, kind) {
74
+ const misses = _stateMisses.get(state);
75
+ if (misses === undefined || misses.some((miss) => miss.registry === registry && miss.kind === kind))
76
+ return;
77
+ misses.push({ kind, registry });
78
+ logOnce(`render:registry-miss:${stateId}:${registry}:${kind}`, LogLevel.Warn, {
79
+ kind,
80
+ message: getRenderRegistryMissMessage(state, registry),
81
+ registry,
82
+ }, 'render');
83
+ }
84
+ const _stateIds = new WeakMap();
85
+ const _stateMisses = new WeakMap();
86
+ let _nextStateId = 0;
87
+ //# sourceMappingURL=renderRegistryGuards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderRegistryGuards.js","sourceRoot":"","sources":["../src/renderRegistryGuards.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RenderRegistrySignals, RenderState } from '@flighthq/types/contract';
2
+ export declare function enableRenderRegistrySignals(state: RenderState): RenderRegistrySignals;
3
+ //# sourceMappingURL=renderRegistrySignals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderRegistrySignals.d.ts","sourceRoot":"","sources":["../src/renderRegistrySignals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAsB,MAAM,0BAA0B,CAAC;AASvG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,WAAW,GAAG,qBAAqB,CAWrF"}
@@ -0,0 +1,19 @@
1
+ import { clearSignal, createSignal, emitSignal } from '@flighthq/signals/contract';
2
+ import { getRenderStateRuntime } from './renderState';
3
+ // Allocates the single opt-in signal seam shared by kind-keyed render registries. Core dispatch owns
4
+ // only a nullable callback, so release bundles that do not import this diagnostics lane carry neither
5
+ // signal emission nor signal teardown machinery.
6
+ export function enableRenderRegistrySignals(state) {
7
+ const runtime = getRenderStateRuntime(state);
8
+ if (runtime.registryMiss !== null)
9
+ return runtime.registryMiss.signals;
10
+ const signals = { onRegistryMiss: createSignal() };
11
+ const emitter = ((registry, kind) => emitSignal(signals.onRegistryMiss, registry, kind));
12
+ Object.assign(emitter, {
13
+ clear: () => clearSignal(signals.onRegistryMiss),
14
+ signals,
15
+ });
16
+ runtime.registryMiss = emitter;
17
+ return signals;
18
+ }
19
+ //# sourceMappingURL=renderRegistrySignals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderRegistrySignals.js","sourceRoot":"","sources":["../src/renderRegistrySignals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAItD,qGAAqG;AACrG,sGAAsG;AACtG,iDAAiD;AACjD,MAAM,UAAU,2BAA2B,CAAC,KAAkB;IAC5D,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;IACvE,MAAM,OAAO,GAA0B,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,CAAC;IAC1E,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,CAA8B,CAAC;IACtH,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;QACrB,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC;QAChD,OAAO;KACR,CAAC,CAAC;IACH,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;IAC/B,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { RenderState, RenderStateRuntime } from '@flighthq/types/contract';
2
2
  export declare function createRenderState(obj?: Partial<RenderState>): RenderState;
3
3
  export declare function createRenderStateRuntime(): RenderStateRuntime;
4
+ export declare function destroyRenderState(state: RenderState): void;
4
5
  export declare function getRenderStateRuntime(state: RenderState): RenderStateRuntime;
5
6
  //# sourceMappingURL=renderState.d.ts.map
@@ -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,0BAA0B,CAAC;AAGhF,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"}
1
+ {"version":3,"file":"renderState.d.ts","sourceRoot":"","sources":["../src/renderState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,WAAW,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG5F,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAiBzE;AAOD,wBAAgB,wBAAwB,IAAI,kBAAkB,CAiB7D;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAO3D;AAID,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,kBAAkB,CAE5E"}
@@ -25,19 +25,45 @@ export function createRenderState(obj) {
25
25
  // intentionally mutable (not Readonly).
26
26
  export function createRenderStateRuntime() {
27
27
  const runtime = createEntityRuntime();
28
+ runtime.colorAdjustmentResolver = null;
28
29
  runtime.colorAdjustmentUnsupportedGuard = null;
29
30
  runtime.currentFrameId = 0;
30
31
  runtime.renderAdaptHook = null;
31
32
  runtime.renderProxyAdapterMap = new WeakMap();
32
33
  runtime.renderProxyMap = new WeakMap();
34
+ runtime.renderProxySources = new Set();
35
+ runtime.registryMiss = null;
36
+ runtime.renderEffectPaddingResolverRegistry = null;
37
+ runtime.renderRootGuard = null;
38
+ runtime.strokeTessellator = null;
33
39
  runtime.rendererMap = new Map();
34
40
  runtime.rendererMapId = 0;
35
41
  runtime.tempStack = [];
36
42
  return runtime;
37
43
  }
44
+ // Runs every live proxy's renderer teardown hook and clears the state-owned traversal bookkeeping.
45
+ // Backend destroy* functions call this before releasing their own state/context tiers.
46
+ export function destroyRenderState(state) {
47
+ const runtime = getRenderStateRuntime(state);
48
+ for (const source of [...runtime.renderProxySources])
49
+ disposeRenderProxyForShutdown(state, source);
50
+ runtime.registryMiss?.clear();
51
+ runtime.registryMiss = null;
52
+ runtime.renderEffectPaddingResolverRegistry = null;
53
+ runtime.tempStack.length = 0;
54
+ }
38
55
  // Resolves the package-private machinery runtime attached to a RenderState. Mutable by design: the
39
56
  // render path writes its fields every frame.
40
57
  export function getRenderStateRuntime(state) {
41
58
  return state[EntityRuntimeKey];
42
59
  }
60
+ function disposeRenderProxyForShutdown(state, source) {
61
+ const runtime = getRenderStateRuntime(state);
62
+ const proxy = runtime.renderProxyMap.get(source);
63
+ if (proxy?.rendererData !== null && proxy?.rendererData !== undefined) {
64
+ proxy.renderer?.destroyData?.(state, proxy.rendererData);
65
+ }
66
+ runtime.renderProxyMap.delete(source);
67
+ runtime.renderProxySources.delete(source);
68
+ }
43
69
  //# sourceMappingURL=renderState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderState.js","sourceRoot":"","sources":["../src/renderState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAE9E,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,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,+BAA+B,GAAG,IAAI,CAAC;IAC/C,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,2BAA2B,CAAC;AAE9E,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,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,uBAAuB,GAAG,IAAI,CAAC;IACvC,OAAO,CAAC,+BAA+B,GAAG,IAAI,CAAC;IAC/C,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,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;IACvC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,mCAAmC,GAAG,IAAI,CAAC;IACnD,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IACjC,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,uFAAuF;AACvF,MAAM,UAAU,kBAAkB,CAAC,KAAkB;IACnD,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAAE,6BAA6B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACnG,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;IAC9B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,mCAAmC,GAAG,IAAI,CAAC;IACnD,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,mGAAmG;AACnG,6CAA6C;AAC7C,MAAM,UAAU,qBAAqB,CAAC,KAAkB;IACtD,OAAO,KAAK,CAAC,gBAAgB,CAAuB,CAAC;AACvD,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAkB,EAAE,MAAkB;IAC3E,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,KAAK,EAAE,YAAY,KAAK,IAAI,IAAI,KAAK,EAAE,YAAY,KAAK,SAAS,EAAE,CAAC;QACtE,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC"}
@@ -1,10 +1,10 @@
1
- import type { Node2D, MatrixLike, RectangleLike } from '@flighthq/types/contract';
1
+ import type { MatrixLike, Node2D, RectangleLike, RenderEffectPadding, RenderTargetAxes, RenderTargetAxisDifference, RenderTargetDescriptor, ResolvedRenderTargetDescriptor } from '@flighthq/types/contract';
2
2
  /**
3
3
  * Writes into outCacheTransform the transform to pass to the cache resolver so the
4
4
  * cached image is placed back at the original scene position.
5
5
  */
6
6
  export declare function computeRenderCacheTransform(outCacheTransform: MatrixLike, bounds: Readonly<RectangleLike>, contentX?: number, contentY?: number): void;
7
- export declare function computeRenderTargetSize(bounds: Readonly<RectangleLike>, padding?: number, minWidth?: number, minHeight?: number): {
7
+ export declare function computeRenderTargetSize(bounds: Readonly<RectangleLike>, padding?: number | Readonly<RenderEffectPadding>, minWidth?: number, minHeight?: number): {
8
8
  width: number;
9
9
  height: number;
10
10
  };
@@ -14,4 +14,6 @@ export declare function computeRenderTargetSize(bounds: Readonly<RectangleLike>,
14
14
  * that the bounds origin lands at (contentX, contentY).
15
15
  */
16
16
  export declare function computeScene2DRenderTargetTransform(outRenderTransform: MatrixLike, source: Node2D, bounds: Readonly<RectangleLike>, contentX?: number, contentY?: number): void;
17
+ export declare function explainRenderTargetAxes(requested: Readonly<RenderTargetAxes>, effective: Readonly<RenderTargetAxes>): RenderTargetAxisDifference[];
18
+ export declare function resolveRenderTargetDescriptor(descriptor: Readonly<RenderTargetDescriptor>): ResolvedRenderTargetDescriptor;
17
19
  //# sourceMappingURL=renderTarget.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderTarget.d.ts","sourceRoot":"","sources":["../src/renderTarget.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAElF;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,iBAAiB,EAAE,UAAU,EAC7B,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,QAAQ,GAAE,MAAU,EACpB,QAAQ,GAAE,MAAU,GACnB,IAAI,CAON;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,OAAO,GAAE,MAAU,EACnB,QAAQ,GAAE,MAAU,EACpB,SAAS,GAAE,MAAU,GACpB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAKnC;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,kBAAkB,EAAE,UAAU,EAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,QAAQ,GAAE,MAAU,EACpB,QAAQ,GAAE,MAAU,GACnB,IAAI,CAUN"}
1
+ {"version":3,"file":"renderTarget.d.ts","sourceRoot":"","sources":["../src/renderTarget.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,0BAA0B,CAAC;AAElC;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,iBAAiB,EAAE,UAAU,EAC7B,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,QAAQ,GAAE,MAAU,EACpB,QAAQ,GAAE,MAAU,GACnB,IAAI,CAON;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,OAAO,GAAE,MAAM,GAAG,QAAQ,CAAC,mBAAmB,CAAK,EACnD,QAAQ,GAAE,MAAU,EACpB,SAAS,GAAE,MAAU,GACpB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAOnC;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,kBAAkB,EAAE,UAAU,EAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,QAAQ,GAAE,MAAU,EACpB,QAAQ,GAAE,MAAU,GACnB,IAAI,CAUN;AAID,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACrC,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACpC,0BAA0B,EAAE,CAa9B;AAKD,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAC3C,8BAA8B,CAsBhC"}
@@ -13,9 +13,11 @@ export function computeRenderCacheTransform(outCacheTransform, bounds, contentX
13
13
  outCacheTransform.ty = bounds.y - contentY;
14
14
  }
15
15
  export function computeRenderTargetSize(bounds, padding = 0, minWidth = 1, minHeight = 1) {
16
+ const horizontal = typeof padding === 'number' ? padding * 2 : padding.left + padding.right;
17
+ const vertical = typeof padding === 'number' ? padding * 2 : padding.top + padding.bottom;
16
18
  return {
17
- width: Math.max(minWidth, Math.ceil(bounds.width) + padding * 2),
18
- height: Math.max(minHeight, Math.ceil(bounds.height) + padding * 2),
19
+ width: Math.max(minWidth, Math.ceil(bounds.width) + horizontal),
20
+ height: Math.max(minHeight, Math.ceil(bounds.height) + vertical),
19
21
  };
20
22
  }
21
23
  /**
@@ -34,6 +36,54 @@ export function computeScene2DRenderTargetTransform(outRenderTransform, source,
34
36
  _tempTranslation.ty = contentY - bounds.y;
35
37
  multiplyMatrix(outRenderTransform, _tempTranslation, _tempInvLocal);
36
38
  }
39
+ // Returns plain-data axis differences in a stable order. Backends retain the requested and effective
40
+ // shapes, then use this common comparison so every explain* surface reports substitutions uniformly.
41
+ export function explainRenderTargetAxes(requested, effective) {
42
+ const differences = [];
43
+ for (const axis of _renderTargetAxisOrder) {
44
+ const requestedValue = requested[axis];
45
+ const effectiveValue = effective[axis];
46
+ const equal = Array.isArray(requestedValue) && Array.isArray(effectiveValue)
47
+ ? requestedValue.length === effectiveValue.length &&
48
+ requestedValue.every((value, index) => value === effectiveValue[index])
49
+ : requestedValue === effectiveValue;
50
+ if (!equal)
51
+ differences.push({ axis, effective: effectiveValue, requested: requestedValue });
52
+ }
53
+ return differences;
54
+ }
55
+ // Resolves every substrate-independent default and normalization once. Backend realizations start
56
+ // here and apply only device capability substitutions (for example GL MAX_SAMPLES or float-render
57
+ // support), so Canvas/GL/WGPU cannot independently reinterpret the descriptor's optional axes.
58
+ export function resolveRenderTargetDescriptor(descriptor) {
59
+ const width = Math.max(1, Math.ceil(descriptor.width));
60
+ const height = Math.max(1, Math.ceil(descriptor.height));
61
+ const colorAttachments = Math.max(1, Math.ceil(descriptor.colorAttachments ?? 1));
62
+ const defaultFormat = descriptor.format ?? 'rgba8';
63
+ const colorFormats = Array.from({ length: colorAttachments }, (_, index) => descriptor.colorFormats?.[index] ?? defaultFormat);
64
+ return {
65
+ width,
66
+ height,
67
+ format: colorFormats[0],
68
+ colorAttachments,
69
+ colorFormats,
70
+ sampleCount: Math.max(1, Math.ceil(descriptor.sampleCount ?? 1)),
71
+ depth: descriptor.depth ?? 'none',
72
+ colorSpace: descriptor.colorSpace ?? 'srgb',
73
+ clearColors: descriptor.clearColors ? [...descriptor.clearColors] : [],
74
+ clearDepth: descriptor.clearDepth ?? 1,
75
+ };
76
+ }
37
77
  const _tempInvLocal = createMatrix();
38
78
  const _tempTranslation = createMatrix();
79
+ const _renderTargetAxisOrder = [
80
+ 'width',
81
+ 'height',
82
+ 'format',
83
+ 'colorAttachments',
84
+ 'colorFormats',
85
+ 'sampleCount',
86
+ 'depth',
87
+ 'colorSpace',
88
+ ];
39
89
  //# sourceMappingURL=renderTarget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderTarget.js","sourceRoot":"","sources":["../src/renderTarget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,iBAA6B,EAC7B,MAA+B,EAC/B,WAAmB,CAAC,EACpB,WAAmB,CAAC;IAEpB,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC;IACxB,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC;IACxB,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC;IACxB,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC;IACxB,iBAAiB,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC;IAC3C,iBAAiB,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAA+B,EAC/B,UAAkB,CAAC,EACnB,WAAmB,CAAC,EACpB,YAAoB,CAAC;IAErB,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;QAChE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;KACpE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mCAAmC,CACjD,kBAA8B,EAC9B,MAAc,EACd,MAA+B,EAC/B,WAAmB,CAAC,EACpB,WAAmB,CAAC;IAEpB,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAClD,aAAa,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAC7C,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC;IACvB,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC;IACvB,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC;IACvB,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC;IACvB,gBAAgB,CAAC,EAAE,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC;IAC1C,cAAc,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,aAAa,GAAG,YAAY,EAAE,CAAC;AACrC,MAAM,gBAAgB,GAAG,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"renderTarget.js","sourceRoot":"","sources":["../src/renderTarget.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"renderTransform2d.d.ts","sourceRoot":"","sources":["../src/renderTransform2d.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAwB,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIjG,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,aAAa,EACnB,UAAU,CAAC,EAAE,aAAa,GACzB,OAAO,CAYT"}
1
+ {"version":3,"file":"renderTransform2d.d.ts","sourceRoot":"","sources":["../src/renderTransform2d.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAwB,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIjG,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,aAAa,EACnB,UAAU,CAAC,EAAE,aAAa,GACzB,OAAO,CAgBT"}
@@ -4,7 +4,10 @@ import { getRenderStateRuntime } from './renderState';
4
4
  export function updateRenderProxy2DTransform(state, data, parentData) {
5
5
  const localTransformId = getNodeLocalTransformRevision(data.source);
6
6
  const parentDirty = parentData !== undefined && parentData.transformFrameId === getRenderStateRuntime(state).currentFrameId;
7
- const localDirty = data.lastLocalTransformId !== localTransformId;
7
+ // The refresh policy deliberately re-reads every live transform each walk. That includes the
8
+ // root transform supplied by the render state: offscreen captures can change their projection
9
+ // while the source node's local transform revision remains unchanged.
10
+ const localDirty = state.sceneGraphSyncPolicy === 'refreshDerivedState' || data.lastLocalTransformId !== localTransformId;
8
11
  if (parentDirty || localDirty) {
9
12
  recalculateRenderTransform2D(state, data, parentData);
10
13
  data.lastLocalTransformId = localTransformId;
@@ -1 +1 @@
1
- {"version":3,"file":"renderTransform2d.js","sourceRoot":"","sources":["../src/renderTransform2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAG5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,UAAU,4BAA4B,CAC1C,KAAkB,EAClB,IAAmB,EACnB,UAA0B;IAE1B,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,IAAI,CAAC,MAAc,CAAC,CAAC;IAC5E,MAAM,WAAW,GACf,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,gBAAgB,KAAK,qBAAqB,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC;IAC1G,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,KAAK,gBAAgB,CAAC;IAElE,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;QAC9B,4BAA4B,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,oBAAoB,GAAG,gBAAgB,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAkB,EAAE,IAAmB,EAAE,UAA0B;IACvG,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAA+B,CAAC,CAAC;IAC7E,MAAM,iBAAiB,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACtG,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC/B,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"renderTransform2d.js","sourceRoot":"","sources":["../src/renderTransform2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAG5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,UAAU,4BAA4B,CAC1C,KAAkB,EAClB,IAAmB,EACnB,UAA0B;IAE1B,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,IAAI,CAAC,MAAc,CAAC,CAAC;IAC5E,MAAM,WAAW,GACf,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,gBAAgB,KAAK,qBAAqB,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC;IAC1G,6FAA6F;IAC7F,8FAA8F;IAC9F,sEAAsE;IACtE,MAAM,UAAU,GACd,KAAK,CAAC,oBAAoB,KAAK,qBAAqB,IAAI,IAAI,CAAC,oBAAoB,KAAK,gBAAgB,CAAC;IAEzG,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;QAC9B,4BAA4B,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,oBAAoB,GAAG,gBAAgB,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAkB,EAAE,IAAmB,EAAE,UAA0B;IACvG,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAA+B,CAAC,CAAC;IAC7E,MAAM,iBAAiB,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACtG,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC/B,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC;AACtE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { Kind, Renderable, Renderer, RendererData, RenderState } from '@flighthq/types/contract';
2
2
  export declare function copyAllRenderersFromRenderState(target: RenderState, source: RenderState): void;
3
3
  export declare function copyRenderersFromRenderState(target: RenderState, source: RenderState): void;
4
+ export declare function copyRenderStateRegistrations(target: RenderState, source: RenderState): void;
4
5
  export declare function noopRendererData(_state: RenderState, _source: Renderable): RendererData | null;
5
6
  export declare function registerRenderer(state: RenderState, kind: Kind, renderer: Renderer): void;
6
7
  export declare function registerRenderers(state: RenderState, entries: ReadonlyArray<readonly [Kind, Renderer]>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAMtG,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAG9F;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAI3F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CAE9F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAKzF;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAE7G"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAMtG,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAG9F;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAI3F;AAID,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAa3F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CAE9F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAKzF;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAE7G"}
package/dist/renderer.js CHANGED
@@ -11,6 +11,22 @@ export function copyRenderersFromRenderState(target, source) {
11
11
  registerRenderer(target, kind, renderer);
12
12
  });
13
13
  }
14
+ // Copies the backend-agnostic policy registries that participate in pipeline derivation. Maps are
15
+ // cloned, never aliased: derived states start with a snapshot and diverge until an explicit re-copy.
16
+ export function copyRenderStateRegistrations(target, source) {
17
+ const targetRuntime = getRenderStateRuntime(target);
18
+ const sourceRuntime = getRenderStateRuntime(source);
19
+ targetRuntime.colorAdjustmentResolver = sourceRuntime.colorAdjustmentResolver;
20
+ const sourcePaddingRegistry = sourceRuntime.renderEffectPaddingResolverRegistry;
21
+ targetRuntime.renderEffectPaddingResolverRegistry =
22
+ sourcePaddingRegistry === null || sourcePaddingRegistry === undefined ? null : new Map(sourcePaddingRegistry);
23
+ // The shape-command set is a base-runtime registry every backend replays through, so a pipeline
24
+ // that inherits the renderers must inherit the commands too. Without it an offscreen state resolves
25
+ // no handler for any command in a shape's stream and bakes an empty target.
26
+ const sourceShapeCommands = sourceRuntime.canvasShapeCommandRegistry;
27
+ targetRuntime.canvasShapeCommandRegistry =
28
+ sourceShapeCommands === null || sourceShapeCommands === undefined ? null : new Map(sourceShapeCommands);
29
+ }
14
30
  export function noopRendererData(_state, _source) {
15
31
  return null;
16
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,uGAAuG;AACvG,8FAA8F;AAC9F,MAAM,UAAU,+BAA+B,CAAC,MAAmB,EAAE,MAAmB;IACtF,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,sBAAsB,KAAK,IAAI;QAAE,MAAM,CAAC,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAmB,EAAE,MAAmB;IACnF,qBAAqB,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;QACnE,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAmB,EAAE,OAAmB;IACvE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAkB,EAAE,IAAU,EAAE,QAAkB;IACjF,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO;IACvD,OAAO,CAAC,aAAa,GAAG,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1D,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,oGAAoG;AACpG,qGAAqG;AACrG,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAAC,KAAkB,EAAE,OAAiD;IACrG,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,OAAO;QAAE,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAClF,CAAC"}
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,uGAAuG;AACvG,8FAA8F;AAC9F,MAAM,UAAU,+BAA+B,CAAC,MAAmB,EAAE,MAAmB;IACtF,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,sBAAsB,KAAK,IAAI;QAAE,MAAM,CAAC,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAmB,EAAE,MAAmB;IACnF,qBAAqB,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;QACnE,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kGAAkG;AAClG,qGAAqG;AACrG,MAAM,UAAU,4BAA4B,CAAC,MAAmB,EAAE,MAAmB;IACnF,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACpD,aAAa,CAAC,uBAAuB,GAAG,aAAa,CAAC,uBAAuB,CAAC;IAC9E,MAAM,qBAAqB,GAAG,aAAa,CAAC,mCAAmC,CAAC;IAChF,aAAa,CAAC,mCAAmC;QAC/C,qBAAqB,KAAK,IAAI,IAAI,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAChH,gGAAgG;IAChG,oGAAoG;IACpG,4EAA4E;IAC5E,MAAM,mBAAmB,GAAG,aAAa,CAAC,0BAA0B,CAAC;IACrE,aAAa,CAAC,0BAA0B;QACtC,mBAAmB,KAAK,IAAI,IAAI,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAmB,EAAE,OAAmB;IACvE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAkB,EAAE,IAAU,EAAE,QAAkB;IACjF,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO;IACvD,OAAO,CAAC,aAAa,GAAG,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1D,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,oGAAoG;AACpG,qGAAqG;AACrG,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAAC,KAAkB,EAAE,OAAiD;IACrG,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,OAAO;QAAE,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAClF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { RenderTargetColorSpace } from '@flighthq/types/contract';
2
+ export declare const SCENE2D_WORKING_COLOR_SPACE: RenderTargetColorSpace;
3
+ //# sourceMappingURL=scene2dWorkingColorSpace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene2dWorkingColorSpace.d.ts","sourceRoot":"","sources":["../src/scene2dWorkingColorSpace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAmBvE,eAAO,MAAM,2BAA2B,EAAE,sBAA+B,CAAC"}
@@ -0,0 +1,19 @@
1
+ // The colour space the 2D tower composites in, declared once for both backend leaf renderers.
2
+ //
3
+ // 2D works in the ENCODED domain: sprites are sRGB, they are sampled without a transfer function, they
4
+ // blend as sRGB values, and they reach an sRGB canvas unchanged. Byte-through end to end, which is both
5
+ // the fastest path (no decode, no encode, no offscreen) and the convention every 2D authoring tool the
6
+ // content came from — Flash, canvas 2D, Photoshop — composites in.
7
+ //
8
+ // This is a POLICY of the path, not a claim about any texture. It pairs with each texture's own
9
+ // `Texture.colorSpace` (what the content is) to decide whether a sample decodes; see
10
+ // shouldDecodeTextureOnSample. Declaring it here is what lets a 2D sprite honestly say it is sRGB while
11
+ // still being sampled raw — previously the renderers passed 'linear' as the texture's space to force the
12
+ // no-decode format, which was false about the data and made a genuinely-linear source indistinguishable
13
+ // from a byte-through one.
14
+ //
15
+ // Flipping this to 'linear' does NOT by itself give correct linear 2D: the premultiply would also have to
16
+ // move off the upload (see shouldPremultiplyTextureOnUpload) and the result would need an encode before
17
+ // present. It is a single seam rather than a scatter of callsites, which is the point.
18
+ export const SCENE2D_WORKING_COLOR_SPACE = 'srgb';
19
+ //# sourceMappingURL=scene2dWorkingColorSpace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene2dWorkingColorSpace.js","sourceRoot":"","sources":["../src/scene2dWorkingColorSpace.ts"],"names":[],"mappings":"AAEA,8FAA8F;AAC9F,EAAE;AACF,uGAAuG;AACvG,wGAAwG;AACxG,uGAAuG;AACvG,mEAAmE;AACnE,EAAE;AACF,gGAAgG;AAChG,qFAAqF;AACrF,wGAAwG;AACxG,yGAAyG;AACzG,wGAAwG;AACxG,2BAA2B;AAC3B,EAAE;AACF,0GAA0G;AAC1G,wGAAwG;AACxG,uFAAuF;AACvF,MAAM,CAAC,MAAM,2BAA2B,GAA2B,MAAM,CAAC"}
@@ -1,4 +1,8 @@
1
- import type { Camera3D, RenderState, Scene3DLightBlock, Scene3DLightsLike, Node3D, Scene3DRenderList } from '@flighthq/types/contract';
1
+ import type { Camera3D, Mesh, RenderState, Scene3DLightBlock, Scene3DLightsLike, Node3D, Scene3DRenderList } from '@flighthq/types/contract';
2
2
  export declare function packScene3DLightBlock(out: Scene3DLightBlock, lights: Readonly<Scene3DLightsLike>): void;
3
- export declare function prepareScene3DRender(state: RenderState, scene: Readonly<Node3D>, camera: Readonly<Camera3D>, lights: Readonly<Scene3DLightsLike>): Scene3DRenderList;
3
+ export declare function prepareScene3DRender(state: RenderState, scene: Readonly<Node3D>, camera: Readonly<Camera3D>, lights: Readonly<Scene3DLightsLike>, viewportAspect?: number): Scene3DRenderList;
4
+ /** Installs the skinned-bounds guard, or clears it with `null`. The seam exists so the message and the
5
+ * `@flighthq/log` dependency live in the separately-importable guard module rather than on the cull
6
+ * path; not importing that module costs production nothing. Called by `enableSceneRenderGuards`. */
7
+ export declare function setSkinnedMeshBoundsGuard(guard: ((mesh: Readonly<Mesh>) => void) | null): void;
4
8
  //# sourceMappingURL=sceneRender.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sceneRender.d.ts","sourceRoot":"","sources":["../src/sceneRender.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAGV,QAAQ,EAUR,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,EACN,iBAAiB,EAGlB,MAAM,0BAA0B,CAAC;AA2BlC,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAkEvG;AAuBD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC1B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAClC,iBAAiB,CAsBnB"}
1
+ {"version":3,"file":"sceneRender.d.ts","sourceRoot":"","sources":["../src/sceneRender.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAGV,QAAQ,EAMR,IAAI,EAIJ,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,EACN,iBAAiB,EAGlB,MAAM,0BAA0B,CAAC;AA2BlC,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAkEvG;AAuBD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC1B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACnC,cAAc,CAAC,EAAE,MAAM,GACtB,iBAAiB,CAyBnB;AA2PD;;qGAEqG;AACrG,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE9F"}
@@ -86,17 +86,16 @@ export function packScene3DLightBlock(out, lights) {
86
86
  // it sees the current-frame posed silhouette without any skinning code in this package. A rigid scene
87
87
  // calls neither and this pass is unchanged.
88
88
  //
89
- // `aspect` for a perspective camera is taken from the render state's pixel-space target (width /
90
- // height); a degenerate target falls back to 1. The returned list is reused scratch owned per render
91
- // state (so a gl state and a wgpu state prepare independently); a caller must not retain it past the
92
- // drawScene3D it feeds.
93
- export function prepareScene3DRender(state, scene, camera, lights) {
89
+ // `viewportAspect`, when supplied by a backend draw path, is authoritative for a perspective camera.
90
+ // Omitting it uses the projection's authored aspect for standalone/headless preparation. The returned
91
+ // list is reused scratch owned per render state (so a gl state and a wgpu state prepare independently);
92
+ // a caller must not retain it past the drawScene3D it feeds.
93
+ export function prepareScene3DRender(state, scene, camera, lights, viewportAspect) {
94
94
  const prepared = ensurePreparedScene3D(state);
95
95
  const list = prepared.list;
96
- // RenderState carries no canonical viewport size, so a perspective camera supplies its own aspect
97
- // through its projection; this neutral fallback keeps an orthographic frame and a pre-aspected
98
- // perspective frame correct. A backend that owns a sized target sets the projection aspect first.
99
- setScene3DViewProjectionMatrix4(prepared.viewProjection, camera, DEFAULT_VIEWPORT_ASPECT);
96
+ // RenderState carries no canonical viewport size. Backend draws pass their active viewport ratio;
97
+ // neutral callers fall back to the authored projection without mutating it.
98
+ setScene3DViewProjectionMatrix4(prepared.viewProjection, camera, resolveScene3DViewportAspect(camera, viewportAspect));
100
99
  setFrustumFromMatrix4(prepared.frustum, prepared.viewProjection);
101
100
  packScene3DLightBlock(list.lights, lights);
102
101
  prepared.meshes.length = 0;
@@ -186,6 +185,13 @@ function isMeshVisible(mesh, frustum, worldBounds) {
186
185
  // plain data — no skinning code reached from here. Fall back to the geometry's own ensured bounds
187
186
  // for rigid and morphed meshes (morph writes real vertices, so those bounds are already posed).
188
187
  const runtime = getNodeRuntime(mesh);
188
+ // A skinned mesh with no posed bounds means the deform pass this one documents as a precondition did
189
+ // not run. Culling then silently uses BIND POSE bounds and a swung limb disappears — a rendering
190
+ // failure with nothing pointing at the missing pass. The comment above stated that requirement to the
191
+ // caller; this is the seam that can actually tell them.
192
+ if (mesh.skin !== null && mesh.skin !== undefined && runtime.deformedLocalBounds == null) {
193
+ _skinnedBoundsGuard?.(mesh);
194
+ }
189
195
  const bounds = runtime.deformedLocalBounds ?? ensureMeshGeometryBounds(mesh.geometry);
190
196
  if (bounds === null) {
191
197
  // No bounds at all (empty geometry): cannot cull, so conservatively keep the mesh.
@@ -264,20 +270,41 @@ function packSpotLight(data, offset, spot) {
264
270
  data[offset + 13] = spot.outerConeCos;
265
271
  }
266
272
  // Composes the camera's view-projection (projection x view) into `out`. For a perspective camera the
267
- // projection's own aspect is used when set (non-zero), else the render state's `aspect` fallback;
268
- // near/far come from the camera. Reads camera fields through a scratch projection before the multiply,
269
- // so it is safe even if `out` aliases the camera's view.
273
+ // resolved draw-time `aspect` is authoritative; near/far come from the camera. Reads camera fields
274
+ // through a scratch projection before the multiply, so it is safe even if `out` aliases camera.view.
270
275
  function setScene3DViewProjectionMatrix4(out, camera, aspect) {
271
276
  const projection = camera.projection;
272
277
  if (projection.kind === 'perspective') {
273
278
  // Geometry's setPerspectiveMatrix4 takes the tangent of the half-FOV, not the full angle.
274
- setPerspectiveMatrix4(scratchProjection, Math.tan(projection.fovY * 0.5), projection.aspect !== 0 ? projection.aspect : aspect, camera.near, camera.far);
279
+ setPerspectiveMatrix4(scratchProjection, Math.tan(projection.fovY * 0.5), aspect, camera.near, camera.far);
275
280
  }
276
281
  else {
277
282
  setOrthographicMatrix4(scratchProjection, -projection.halfWidth, projection.halfWidth, -projection.halfHeight, projection.halfHeight, camera.near, camera.far);
278
283
  }
284
+ applyScene3DProjectionJitter(scratchProjection, camera.jitter.x, camera.jitter.y);
279
285
  multiplyMatrix4(out, scratchProjection, camera.view);
280
286
  }
287
+ function applyScene3DProjectionJitter(out, x, y) {
288
+ const m = out.m;
289
+ m[0] += x * m[3];
290
+ m[4] += x * m[7];
291
+ m[8] += x * m[11];
292
+ m[12] += x * m[15];
293
+ m[1] += y * m[3];
294
+ m[5] += y * m[7];
295
+ m[9] += y * m[11];
296
+ m[13] += y * m[15];
297
+ }
298
+ function resolveScene3DViewportAspect(camera, viewportAspect) {
299
+ if (viewportAspect !== undefined && Number.isFinite(viewportAspect) && viewportAspect > 0) {
300
+ return viewportAspect;
301
+ }
302
+ const projection = camera.projection;
303
+ if (projection.kind === 'perspective' && Number.isFinite(projection.aspect) && projection.aspect > 0) {
304
+ return projection.aspect;
305
+ }
306
+ return DEFAULT_VIEWPORT_ASPECT;
307
+ }
281
308
  // Neutral viewport aspect used when a perspective camera does not carry its own.
282
309
  const DEFAULT_VIEWPORT_ASPECT = 1;
283
310
  // Per-render-state prepared frames. Keyed by state so independent backends prepare without sharing
@@ -289,4 +316,11 @@ const scratchProjection = createMatrix4();
289
316
  // committed to `out.data` only when it differs, so an unchanged block never bumps `version`. Sized to
290
317
  // the full head + MAX_FORWARD_LIGHTS-per-type layout (SCENE_LIGHT_BLOCK_FLOATS).
291
318
  const scratchLightData = new Float32Array(SCENE_LIGHT_BLOCK_FLOATS);
319
+ /** Installs the skinned-bounds guard, or clears it with `null`. The seam exists so the message and the
320
+ * `@flighthq/log` dependency live in the separately-importable guard module rather than on the cull
321
+ * path; not importing that module costs production nothing. Called by `enableSceneRenderGuards`. */
322
+ export function setSkinnedMeshBoundsGuard(guard) {
323
+ _skinnedBoundsGuard = guard;
324
+ }
325
+ let _skinnedBoundsGuard = null;
292
326
  //# 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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"}