@flighthq/render-gl 0.3.1-next.704.69286f6 → 0.3.1-next.780.12e6944

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.
@@ -1 +1 @@
1
- {"version":3,"file":"enableGlRenderStateGuards.d.ts","sourceRoot":"","sources":["../src/enableGlRenderStateGuards.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,0BAA0B,CAAC;AAKvF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAE3E;AAKD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAGpE"}
1
+ {"version":3,"file":"enableGlRenderStateGuards.d.ts","sourceRoot":"","sources":["../src/enableGlRenderStateGuards.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,0BAA0B,CAAC;AAKvF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAG3E;AAKD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAUpE"}
@@ -1,15 +1,24 @@
1
1
  import { logOnce } from '@flighthq/log/contract';
2
+ import { createSlotTable } from '@flighthq/registry/contract';
2
3
  import { getRenderStateRuntime } from '@flighthq/render/contract';
3
- import { LogLevel } from '@flighthq/types/contract';
4
+ import { LogLevel, RegistryEntryState } from '@flighthq/types/contract';
4
5
  import { getGlRenderStateRuntime } from './glRenderState';
5
6
  export function areGlRenderStateGuardsEnabled(state) {
6
- return getRenderStateRuntime(state).renderRootGuard === warnOnSecondRenderRoot;
7
+ const entry = getRenderStateRuntime(state).registries.renderRootGuard?.entry;
8
+ return entry?.state === RegistryEntryState.Bound && entry.value === warnOnSecondRenderRoot;
7
9
  }
8
10
  // Installs the GL pipeline-policy guard. A render state derives proxy transforms relative to one root;
9
11
  // preparing another root on that state can reuse stale relative transforms. Give each independently
10
12
  // rendered root its own createGlOffscreenRenderState-derived state.
11
13
  export function enableGlRenderStateGuards(state) {
12
- getRenderStateRuntime(state).renderRootGuard = warnOnSecondRenderRoot;
14
+ const runtime = getRenderStateRuntime(state);
15
+ const table = runtime.registries.renderRootGuard ?? createSlotTable('RenderRootGuard', 'Disabled');
16
+ if (table.entry?.state !== RegistryEntryState.Bound || table.entry.value !== warnOnSecondRenderRoot) {
17
+ runtime.registries.renderRootGuard = {
18
+ ...table,
19
+ entry: { state: RegistryEntryState.Bound, value: warnOnSecondRenderRoot },
20
+ };
21
+ }
13
22
  getGlRenderStateRuntime(state).bindingCacheGuard = warnOnForeignGlBinding;
14
23
  }
15
24
  // render-gl skips a redundant `useProgram` by trusting its cached binding slot, which is sound only
@@ -1 +1 @@
1
- {"version":3,"file":"enableGlRenderStateGuards.js","sourceRoot":"","sources":["../src/enableGlRenderStateGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,UAAU,6BAA6B,CAAC,KAAoB;IAChE,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC,eAAe,KAAK,sBAAsB,CAAC;AACjF,CAAC;AAED,uGAAuG;AACvG,oGAAoG;AACpG,oEAAoE;AACpE,MAAM,UAAU,yBAAyB,CAAC,KAAoB;IAC5D,qBAAqB,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,sBAAsB,CAAC;IACtE,uBAAuB,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,sBAAsB,CAAC;AAC5E,CAAC;AAED,oGAAoG;AACpG,qGAAqG;AACrG,wGAAwG;AACxG,mFAAmF;AACnF,EAAE;AACF,oGAAoG;AACpG,qGAAqG;AACrG,uGAAuG;AACvG,uDAAuD;AACvD,SAAS,sBAAsB,CAAC,KAAoB,EAAE,eAA6B;IACjF,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAwB,CAAC;IACtF,IAAI,MAAM,KAAK,eAAe;QAAE,OAAO;IACvC,OAAO,CACL,8BAA8B,EAC9B,QAAQ,CAAC,IAAI,EACb;QACE,OAAO,EACL,mGAAmG;YACnG,iGAAiG;YACjG,8FAA8F;QAChG,KAAK;KACN,EACD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAkB,EAAE,IAAgB;IAClE,MAAM,OAAO,GAAG,KAAsB,CAAC;IACvC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO;IAC9B,OAAO,CACL,oCAAoC,EACpC,QAAQ,CAAC,IAAI,EACb;QACE,SAAS,EAAE,QAAQ;QACnB,OAAO,EACL,kJAAkJ;QACpJ,IAAI;QACJ,KAAK;KACN,EACD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,OAAO,EAA6B,CAAC"}
1
+ {"version":3,"file":"enableGlRenderStateGuards.js","sourceRoot":"","sources":["../src/enableGlRenderStateGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAExE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,UAAU,6BAA6B,CAAC,KAAoB;IAChE,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC;IAC7E,OAAO,KAAK,EAAE,KAAK,KAAK,kBAAkB,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,sBAAsB,CAAC;AAC7F,CAAC;AAED,uGAAuG;AACvG,oGAAoG;AACpG,oEAAoE;AACpE,MAAM,UAAU,yBAAyB,CAAC,KAAoB;IAC5D,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,eAAe,IAAI,eAAe,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACnG,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,kBAAkB,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,sBAAsB,EAAE,CAAC;QACpG,OAAO,CAAC,UAAU,CAAC,eAAe,GAAG;YACnC,GAAG,KAAK;YACR,KAAK,EAAE,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE;SAC1E,CAAC;IACJ,CAAC;IACD,uBAAuB,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,sBAAsB,CAAC;AAC5E,CAAC;AAED,oGAAoG;AACpG,qGAAqG;AACrG,wGAAwG;AACxG,mFAAmF;AACnF,EAAE;AACF,oGAAoG;AACpG,qGAAqG;AACrG,uGAAuG;AACvG,uDAAuD;AACvD,SAAS,sBAAsB,CAAC,KAAoB,EAAE,eAA6B;IACjF,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAwB,CAAC;IACtF,IAAI,MAAM,KAAK,eAAe;QAAE,OAAO;IACvC,OAAO,CACL,8BAA8B,EAC9B,QAAQ,CAAC,IAAI,EACb;QACE,OAAO,EACL,mGAAmG;YACnG,iGAAiG;YACjG,8FAA8F;QAChG,KAAK;KACN,EACD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAkB,EAAE,IAAgB;IAClE,MAAM,OAAO,GAAG,KAAsB,CAAC;IACvC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO;IAC9B,OAAO,CACL,oCAAoC,EACpC,QAAQ,CAAC,IAAI,EACb;QACE,SAAS,EAAE,QAAQ;QACnB,OAAO,EACL,kJAAkJ;QACpJ,IAAI;QACJ,KAAK;KACN,EACD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,OAAO,EAA6B,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { GlRenderOptions, GlRenderState, GlRenderStateRuntime } from '@flighthq/types/contract';
1
+ import type { GlColorAdjustmentMaterialFeature, GlColorAdjustmentMaterialFeatureGuard, GlRenderOptions, GlRenderState, GlRenderStateRuntime } from '@flighthq/types/contract';
2
2
  export declare function copyGlRenderStateRegistrations(target: GlRenderState, source: GlRenderState): void;
3
3
  /**
4
4
  * Creates a second render pipeline over `screenState`'s WebGL context.
@@ -12,6 +12,8 @@ export declare function createGlOffscreenRenderState(screenState: GlRenderState)
12
12
  export declare function createGlRenderState(canvas: HTMLCanvasElement, options?: GlRenderOptions): GlRenderState;
13
13
  export declare function createGlRenderStateRuntime(sharedRuntime?: GlRenderStateRuntime): GlRenderStateRuntime;
14
14
  export declare function destroyGlRenderState(state: GlRenderState): void;
15
+ export declare function getGlColorAdjustmentMaterialFeature(state: GlRenderState): Readonly<GlColorAdjustmentMaterialFeature> | null;
16
+ export declare function getGlColorAdjustmentMaterialFeatureGuard(state: GlRenderState): GlColorAdjustmentMaterialFeatureGuard | null;
15
17
  export declare function getGlRenderStateRuntime(state: GlRenderState): GlRenderStateRuntime;
16
18
  export declare function invalidateGlRenderStateCache(state: GlRenderState): void;
17
19
  //# sourceMappingURL=glRenderState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glRenderState.d.ts","sourceRoot":"","sources":["../src/glRenderState.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAQrG,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA+BjG;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,aAAa,GAAG,aAAa,CAwBtF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAE,eAAoB,GAAG,aAAa,CAqF3G;AAMD,wBAAgB,0BAA0B,CAAC,aAAa,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,CAuCrG;AAeD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAgC/D;AAID,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,oBAAoB,CAElF;AAcD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAUvE"}
1
+ {"version":3,"file":"glRenderState.d.ts","sourceRoot":"","sources":["../src/glRenderState.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,gCAAgC,EAChC,qCAAqC,EACrC,eAAe,EACf,aAAa,EACb,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA+BjG;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,aAAa,GAAG,aAAa,CAwBtF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAE,eAAoB,GAAG,aAAa,CAqF3G;AAMD,wBAAgB,0BAA0B,CAAC,aAAa,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,CAuCrG;AAeD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAgC/D;AAED,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,aAAa,GACnB,QAAQ,CAAC,gCAAgC,CAAC,GAAG,IAAI,CAGnD;AAED,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,aAAa,GACnB,qCAAqC,GAAG,IAAI,CAG9C;AAID,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,oBAAoB,CAElF;AAcD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAUvE"}
@@ -1,7 +1,7 @@
1
1
  import { createMatrix } from '@flighthq/geometry/contract';
2
2
  import { createKeyedTable, createSlotTable } from '@flighthq/registry/contract';
3
3
  import { copyAllRenderersFromRenderState, copyRenderStateRegistrations, createRenderState as _createRenderState, createRenderStateRuntime, destroyRenderState, setRenderStateBackgroundColor, } from '@flighthq/render/contract';
4
- import { EntityRuntimeKey } from '@flighthq/types/contract';
4
+ import { EntityRuntimeKey, RegistryEntryState } from '@flighthq/types/contract';
5
5
  import { compileDefaultGlProgram, createDefaultGlBitmapShader } from './glShader';
6
6
  // Explicit snapshot re-copy. Mutable legacy maps are cloned; persistent tables may share immutable
7
7
  // snapshots through distinct aggregates. Either way, later replacements diverge between render states,
@@ -11,13 +11,13 @@ export function copyGlRenderStateRegistrations(target, source) {
11
11
  const sourceRuntime = getGlRenderStateRuntime(source);
12
12
  target.applyBlendMode = source.applyBlendMode;
13
13
  targetRuntime.defaultBitmapShader = sourceRuntime.defaultBitmapShader;
14
- targetRuntime.glColorAdjustmentMaterialFeature = sourceRuntime.glColorAdjustmentMaterialFeature;
15
- targetRuntime.glColorAdjustmentMaterialFeatureGuard = sourceRuntime.glColorAdjustmentMaterialFeatureGuard;
16
14
  targetRuntime.materialBitmapShaderMap =
17
15
  sourceRuntime.materialBitmapShaderMap === undefined ? undefined : new Map(sourceRuntime.materialBitmapShaderMap);
18
16
  targetRuntime.webglShaderBindingResolver = sourceRuntime.webglShaderBindingResolver;
19
17
  targetRuntime.registries = {
20
18
  blendRealizations: sourceRuntime.registries.blendRealizations,
19
+ colorAdjustmentFeature: sourceRuntime.registries.colorAdjustmentFeature,
20
+ colorAdjustmentFeatureGuard: sourceRuntime.registries.colorAdjustmentFeatureGuard,
21
21
  compressedTextureDecoder: sourceRuntime.registries.compressedTextureDecoder,
22
22
  compressedTextureUpload: sourceRuntime.registries.compressedTextureUpload,
23
23
  customEffectShaders: sourceRuntime.registries.customEffectShaders,
@@ -254,6 +254,14 @@ export function destroyGlRenderState(state) {
254
254
  if (runtime.quadBatchWriterColorScaleBiasBuffer)
255
255
  gl.deleteBuffer(runtime.quadBatchWriterColorScaleBiasBuffer);
256
256
  }
257
+ export function getGlColorAdjustmentMaterialFeature(state) {
258
+ const entry = getGlRenderStateRuntime(state).registries.colorAdjustmentFeature?.entry;
259
+ return entry?.state === RegistryEntryState.Bound ? entry.value : null;
260
+ }
261
+ export function getGlColorAdjustmentMaterialFeatureGuard(state) {
262
+ const entry = getGlRenderStateRuntime(state).registries.colorAdjustmentFeatureGuard?.entry;
263
+ return entry?.state === RegistryEntryState.Bound ? entry.value : null;
264
+ }
257
265
  // Resolves the package-private GPU runtime attached to a GlRenderState. Mutable by design: the
258
266
  // render path writes its fields every frame.
259
267
  export function getGlRenderStateRuntime(state) {
@@ -1 +1 @@
1
- {"version":3,"file":"glRenderState.js","sourceRoot":"","sources":["../src/glRenderState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glRenderState.js","sourceRoot":"","sources":["../src/glRenderState.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"glRenderStateBracket.d.ts","sourceRoot":"","sources":["../src/glRenderStateBracket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,0BAA0B,CAAC;AAyCpF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAsC3D;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAgD5D;AAKD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAO/E"}
1
+ {"version":3,"file":"glRenderStateBracket.d.ts","sourceRoot":"","sources":["../src/glRenderStateBracket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,0BAA0B,CAAC;AA6DpF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAmE3D;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAmE5D;AAKD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAO/E"}
@@ -13,6 +13,26 @@ export function popGlRenderState(state) {
13
13
  gl.depthFunc(saved.depthFunc);
14
14
  restoreGlCapability(gl, gl.CULL_FACE, saved.cullFace);
15
15
  gl.cullFace(saved.cullFaceMode);
16
+ // The 3D mesh path selects a front face per draw from the model determinant, so this is state
17
+ // Flight mutates and must hand back exactly as the host left it — a host context set to CW would
18
+ // otherwise get CCW returned.
19
+ gl.frontFace(saved.frontFace);
20
+ // The 2D clip system rasterizes stencil masks, and its own capture/restore inside glRenderPass is
21
+ // scoped to FLIGHT's mask nesting — it captures only when Flight already has a clip active, and its
22
+ // null path disables the test outright. That is correct for Flight's own nesting and says nothing
23
+ // about the host: a caller that had STENCIL_TEST enabled would otherwise get it switched off by any
24
+ // Flight render. This is the host-facing half.
25
+ //
26
+ // Restored per face, because the unsuffixed setters write FRONT_AND_BACK: restoring both faces from
27
+ // the front's saved values would silently overwrite the back face of a host using two-sided stencil,
28
+ // which is the case stencilOpSeparate exists for and the one Flight's own clip pass writes.
29
+ restoreGlCapability(gl, gl.STENCIL_TEST, saved.stencilTest);
30
+ gl.stencilMaskSeparate(gl.FRONT, saved.stencilWriteMask);
31
+ gl.stencilMaskSeparate(gl.BACK, saved.stencilBackWriteMask);
32
+ gl.stencilFuncSeparate(gl.FRONT, saved.stencilFunc, saved.stencilRef, saved.stencilValueMask);
33
+ gl.stencilFuncSeparate(gl.BACK, saved.stencilBackFunc, saved.stencilBackRef, saved.stencilBackValueMask);
34
+ gl.stencilOpSeparate(gl.FRONT, saved.stencilFail, saved.stencilPassDepthFail, saved.stencilPassDepthPass);
35
+ gl.stencilOpSeparate(gl.BACK, saved.stencilBackFail, saved.stencilBackPassDepthFail, saved.stencilBackPassDepthPass);
16
36
  restoreGlCapability(gl, gl.BLEND, saved.blend);
17
37
  gl.blendFuncSeparate(saved.blendSrcRgb, saved.blendDstRgb, saved.blendSrcAlpha, saved.blendDstAlpha);
18
38
  gl.blendEquationSeparate(saved.blendEquationRgb, saved.blendEquationAlpha);
@@ -24,6 +44,13 @@ export function popGlRenderState(state) {
24
44
  gl.bindTexture(gl.TEXTURE_2D, saved.texture2DByUnit[i]);
25
45
  }
26
46
  gl.activeTexture(saved.activeTexture);
47
+ // Pixel-write and upload state Flight sets and never puts back on its own: the 2D clip pass masks
48
+ // colour while it rasterizes coverage, the background/velocity passes set a clear colour, and every
49
+ // texture upload sets the premultiply flag. Each is context-wide, so a host that never called them
50
+ // would otherwise inherit Flight's last value.
51
+ gl.colorMask(saved.colorMask[0], saved.colorMask[1], saved.colorMask[2], saved.colorMask[3]);
52
+ gl.clearColor(saved.clearColor[0], saved.clearColor[1], saved.clearColor[2], saved.clearColor[3]);
53
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, saved.unpackPremultiplyAlpha);
27
54
  restoreGlCapability(gl, gl.SCISSOR_TEST, saved.scissorTest);
28
55
  gl.scissor(saved.scissorBox[0], saved.scissorBox[1], saved.scissorBox[2], saved.scissorBox[3]);
29
56
  gl.viewport(saved.viewport[0], saved.viewport[1], saved.viewport[2], saved.viewport[3]);
@@ -65,8 +92,26 @@ export function pushGlRenderState(state) {
65
92
  blendEquationRgb: gl.getParameter(gl.BLEND_EQUATION_RGB),
66
93
  blendSrcAlpha: gl.getParameter(gl.BLEND_SRC_ALPHA),
67
94
  blendSrcRgb: gl.getParameter(gl.BLEND_SRC_RGB),
95
+ clearColor: readGlBox(gl, gl.COLOR_CLEAR_VALUE),
96
+ colorMask: readGlBooleanQuad(gl, gl.COLOR_WRITEMASK),
68
97
  cullFace: gl.isEnabled(gl.CULL_FACE),
69
98
  cullFaceMode: gl.getParameter(gl.CULL_FACE_MODE),
99
+ frontFace: gl.getParameter(gl.FRONT_FACE),
100
+ stencilBackFail: gl.getParameter(gl.STENCIL_BACK_FAIL),
101
+ stencilBackFunc: gl.getParameter(gl.STENCIL_BACK_FUNC),
102
+ stencilBackPassDepthFail: gl.getParameter(gl.STENCIL_BACK_PASS_DEPTH_FAIL),
103
+ stencilBackPassDepthPass: gl.getParameter(gl.STENCIL_BACK_PASS_DEPTH_PASS),
104
+ stencilBackRef: gl.getParameter(gl.STENCIL_BACK_REF),
105
+ stencilBackValueMask: gl.getParameter(gl.STENCIL_BACK_VALUE_MASK),
106
+ stencilBackWriteMask: gl.getParameter(gl.STENCIL_BACK_WRITEMASK),
107
+ stencilFail: gl.getParameter(gl.STENCIL_FAIL),
108
+ stencilFunc: gl.getParameter(gl.STENCIL_FUNC),
109
+ stencilPassDepthFail: gl.getParameter(gl.STENCIL_PASS_DEPTH_FAIL),
110
+ stencilPassDepthPass: gl.getParameter(gl.STENCIL_PASS_DEPTH_PASS),
111
+ stencilRef: gl.getParameter(gl.STENCIL_REF),
112
+ stencilTest: gl.isEnabled(gl.STENCIL_TEST),
113
+ stencilValueMask: gl.getParameter(gl.STENCIL_VALUE_MASK),
114
+ stencilWriteMask: gl.getParameter(gl.STENCIL_WRITEMASK),
70
115
  currentFramebuffer: runtime.currentFramebuffer,
71
116
  currentBlendMode: runtime.currentBlendMode,
72
117
  currentRenderTarget: runtime.currentRenderTarget,
@@ -83,6 +128,7 @@ export function pushGlRenderState(state) {
83
128
  scissorBox: readGlBox(gl, gl.SCISSOR_BOX),
84
129
  scissorTest: gl.isEnabled(gl.SCISSOR_TEST),
85
130
  texture2DByUnit,
131
+ unpackPremultiplyAlpha: gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL),
86
132
  vertexArray: gl.getParameter(gl.VERTEX_ARRAY_BINDING),
87
133
  viewport: readGlBox(gl, gl.VIEWPORT),
88
134
  });
@@ -99,6 +145,14 @@ export function withGlRenderState(state, callback) {
99
145
  popGlRenderState(state);
100
146
  }
101
147
  }
148
+ function readGlBooleanQuad(gl, parameter) {
149
+ const value = gl.getParameter(parameter);
150
+ // As readGlBox: browsers always return four values for COLOR_WRITEMASK. All-enabled is the GL
151
+ // default and the conservative sentinel for a partial mock — it can never mask a host's writes off.
152
+ if (value === null || value === undefined)
153
+ return [true, true, true, true];
154
+ return [value[0], value[1], value[2], value[3]];
155
+ }
102
156
  function readGlBox(gl, parameter) {
103
157
  const value = gl.getParameter(parameter);
104
158
  // Lightweight test contexts may omit inert query state. Browsers always return four values for
@@ -1 +1 @@
1
- {"version":3,"file":"glRenderStateBracket.js","sourceRoot":"","sources":["../src/glRenderStateBracket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glRenderStateBracket.js","sourceRoot":"","sources":["../src/glRenderStateBracket.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAuD1D,oGAAoG;AACpG,qGAAqG;AACrG,uGAAuG;AACvG,oCAAoC;AACpC,MAAM,UAAU,gBAAgB,CAAC,KAAoB;IACnD,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IAClD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAEhC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACxD,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9B,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAE9B,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtD,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAChC,8FAA8F;IAC9F,iGAAiG;IACjG,8BAA8B;IAC9B,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAE9B,kGAAkG;IAClG,oGAAoG;IACpG,kGAAkG;IAClG,oGAAoG;IACpG,+CAA+C;IAC/C,EAAE;IACF,oGAAoG;IACpG,qGAAqG;IACrG,4FAA4F;IAC5F,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACzD,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC5D,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC9F,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACzG,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC1G,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAErH,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/C,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACrG,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAE3E,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAEtC,kGAAkG;IAClG,oGAAoG;IACpG,mGAAmG;IACnG,+CAA+C;IAC/C,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAClG,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,8BAA8B,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAEhF,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAExF,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;IACtD,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC9C,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;IACxD,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC9C,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IAClD,OAAO,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;IACtD,OAAO,CAAC,2BAA2B,GAAG,KAAK,CAAC,2BAA2B,CAAC;IACxE,OAAO,CAAC,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,CAAC;AAC5D,CAAC;AAED,mGAAmG;AACnG,sGAAsG;AACtG,2FAA2F;AAC3F,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IACpD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC;IAEnC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,cAAc,CAAW,CAAC;IACnE,MAAM,eAAe,GAA4B,EAAE,CAAC;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kCAAkC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5D,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,kBAAkB,CAAwB,CAAC,CAAC;IACtF,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAEhC,IAAI,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,GAAG,EAAE,CAAC;QACX,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC;QACT,aAAa;QACb,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC;QAC7B,aAAa,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,eAAe,CAAW;QAC5D,WAAW,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,aAAa,CAAW;QACxD,kBAAkB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,oBAAoB,CAAW;QACtE,gBAAgB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,kBAAkB,CAAW;QAClE,aAAa,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,eAAe,CAAW;QAC5D,WAAW,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,aAAa,CAAW;QACxD,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC;QAC/C,SAAS,EAAE,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC;QACpD,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC;QACpC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,cAAc,CAAW;QAC1D,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,CAAW;QACnD,eAAe,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,iBAAiB,CAAW;QAChE,eAAe,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,iBAAiB,CAAW;QAChE,wBAAwB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,4BAA4B,CAAW;QACpF,wBAAwB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,4BAA4B,CAAW;QACpF,cAAc,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,CAAW;QAC9D,oBAAoB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,uBAAuB,CAAW;QAC3E,oBAAoB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,sBAAsB,CAAW;QAC1E,WAAW,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAW;QACvD,WAAW,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAW;QACvD,oBAAoB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,uBAAuB,CAAW;QAC3E,oBAAoB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,uBAAuB,CAAW;QAC3E,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,WAAW,CAAW;QACrD,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC;QAC1C,gBAAgB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,kBAAkB,CAAW;QAClE,gBAAgB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,iBAAiB,CAAW;QACjE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,2BAA2B,EAAE,OAAO,CAAC,2BAA2B;QAChE,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,CAAW;QACnD,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,eAAe,CAAY;QACzD,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC;QACtC,WAAW,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,mBAAmB,CAA4B;QAC/E,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,eAAe,CAAwB;QACnE,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC;QACzC,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC;QAC1C,eAAe;QACf,sBAAsB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,8BAA8B,CAAY;QACrF,WAAW,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,oBAAoB,CAAkC;QACtF,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC;KACrC,CAAC,CAAC;AACL,CAAC;AAED,qGAAqG;AACrG,iGAAiG;AACjG,8FAA8F;AAC9F,MAAM,UAAU,iBAAiB,CAAI,KAAoB,EAAE,QAAiB;IAC1E,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,QAAQ,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,EAA0B,EAAE,SAAiB;IACtE,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAA0C,CAAC;IAClF,8FAA8F;IAC9F,oGAAoG;IACpG,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3E,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAC,EAA0B,EAAE,SAAiB;IAC9D,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAyC,CAAC;IACjF,+FAA+F;IAC/F,gGAAgG;IAChG,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,mBAAmB,CAAC,EAA0B,EAAE,UAAkB,EAAE,OAAgB;IAC3F,IAAI,OAAO,EAAE,CAAC;QACZ,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,iGAAiG;AACjG,sFAAsF;AACtF,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAuC,CAAC;AAC7E,yFAAyF;AACzF,MAAM,kCAAkC,GAAG,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/render-gl",
3
- "version": "0.3.1-next.704.69286f6",
3
+ "version": "0.3.1-next.780.12e6944",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,16 +38,16 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/color": "0.3.1-next.704.69286f6",
42
- "@flighthq/entity": "0.3.1-next.704.69286f6",
43
- "@flighthq/log": "0.3.1-next.704.69286f6",
44
- "@flighthq/scene2d": "0.3.1-next.704.69286f6",
45
- "@flighthq/geometry": "0.3.1-next.704.69286f6",
46
- "@flighthq/render": "0.3.1-next.704.69286f6",
47
- "@flighthq/registry": "0.3.1-next.704.69286f6",
48
- "@flighthq/signals": "0.3.1-next.704.69286f6",
49
- "@flighthq/texture": "0.3.1-next.704.69286f6",
50
- "@flighthq/types": "0.3.1-next.704.69286f6"
41
+ "@flighthq/color": "0.3.1-next.780.12e6944",
42
+ "@flighthq/entity": "0.3.1-next.780.12e6944",
43
+ "@flighthq/log": "0.3.1-next.780.12e6944",
44
+ "@flighthq/scene2d": "0.3.1-next.780.12e6944",
45
+ "@flighthq/geometry": "0.3.1-next.780.12e6944",
46
+ "@flighthq/render": "0.3.1-next.780.12e6944",
47
+ "@flighthq/registry": "0.3.1-next.780.12e6944",
48
+ "@flighthq/signals": "0.3.1-next.780.12e6944",
49
+ "@flighthq/texture": "0.3.1-next.780.12e6944",
50
+ "@flighthq/types": "0.3.1-next.780.12e6944"
51
51
  },
52
52
  "devDependencies": {
53
53
  "typescript": "^5.3.0"
@@ -1,5 +1,7 @@
1
1
  import { setLogSink } from '@flighthq/log/contract';
2
+ import { getRenderStateRuntime } from '@flighthq/render/contract';
2
3
  import type { LogEntry } from '@flighthq/types/contract';
4
+ import { RegistryEntryState } from '@flighthq/types/contract';
3
5
 
4
6
  import { areGlRenderStateGuardsEnabled, enableGlRenderStateGuards } from './enableGlRenderStateGuards';
5
7
  import { useGlProgram } from './glDraw';
@@ -25,8 +27,16 @@ describe('enableGlRenderStateGuards', () => {
25
27
  it('installs the state-local multiple-root guard idempotently', () => {
26
28
  const state = createState();
27
29
  enableGlRenderStateGuards(state);
30
+ const table = getRenderStateRuntime(state).registries.renderRootGuard;
31
+ expect(table).toMatchObject({
32
+ entry: { state: RegistryEntryState.Bound },
33
+ onMiss: 'Disabled',
34
+ registry: 'RenderRootGuard',
35
+ shape: 'slot',
36
+ });
28
37
  enableGlRenderStateGuards(state);
29
38
  expect(areGlRenderStateGuardsEnabled(state)).toBe(true);
39
+ expect(getRenderStateRuntime(state).registries.renderRootGuard).toBe(table);
30
40
  });
31
41
  });
32
42
 
@@ -7,15 +7,23 @@ import {
7
7
  } from '@flighthq/registry/contract';
8
8
  import {
9
9
  copyAllRenderersFromRenderState,
10
+ enableColorAdjustmentGuards,
11
+ enableColorAdjustments,
12
+ getColorAdjustmentUnsupportedGuard,
10
13
  getRenderStateRuntime,
11
14
  prepareScene2DRender,
12
15
  registerRenderer,
13
16
  } from '@flighthq/render/contract';
14
17
  import { createDisplayObject } from '@flighthq/scene2d/contract';
15
- import type { RenderEffectPaddingResolver, RenderState } from '@flighthq/types/contract';
18
+ import type {
19
+ GlColorAdjustmentMaterialFeature,
20
+ GlColorAdjustmentMaterialFeatureGuard,
21
+ RenderEffectPaddingResolver,
22
+ RenderState,
23
+ } from '@flighthq/types/contract';
16
24
  import { BlendMode, RegistryEntryState } from '@flighthq/types/contract';
17
25
 
18
- import { enableGlRenderStateGuards } from './enableGlRenderStateGuards';
26
+ import { areGlRenderStateGuardsEnabled, enableGlRenderStateGuards } from './enableGlRenderStateGuards';
19
27
  import { registerGlCompressedTextureDecoder, registerGlCompressedTextureUpload } from './glCompressedTexture';
20
28
  import { isBlendModeSupported, registerGlBlendMode } from './glDraw';
21
29
  import { registerGlMaterialRenderer } from './glMaterialRegistry';
@@ -25,6 +33,8 @@ import {
25
33
  createGlRenderState,
26
34
  createGlRenderStateRuntime,
27
35
  destroyGlRenderState,
36
+ getGlColorAdjustmentMaterialFeature,
37
+ getGlColorAdjustmentMaterialFeatureGuard,
28
38
  getGlRenderStateRuntime,
29
39
  invalidateGlRenderStateCache,
30
40
  } from './glRenderState';
@@ -137,15 +147,38 @@ describe('createGlOffscreenRenderState', () => {
137
147
  const paddingResolver = vi.fn(() => ({ bottom: 1, left: 1, right: 1, top: 1 }));
138
148
  const textureResolver = vi.fn(() => null);
139
149
  const effectRunner = vi.fn();
150
+ const colorAdjustmentFeature: GlColorAdjustmentMaterialFeature = {
151
+ drawShapeMeshes: vi.fn(),
152
+ flush: vi.fn(() => false),
153
+ fragmentShaderChunk: '',
154
+ matrixFragmentShaderChunk: '',
155
+ record: vi.fn(),
156
+ };
157
+ const colorAdjustmentFeatureGuard: GlColorAdjustmentMaterialFeatureGuard = vi.fn();
140
158
  registerRenderer(screen, 'acme.Node', renderer);
141
159
  registerGlMaterialRenderer(screen, 'acme.Material', materialRenderer);
142
160
  registerGlTextureResolver(screen, 'acme.Texture', textureResolver);
161
+ enableColorAdjustments(screen);
162
+ enableColorAdjustmentGuards(screen);
163
+ enableGlRenderStateGuards(screen);
143
164
  getGlRenderStateRuntime(screen).registries.renderEffects = withRegistryTableEntry(
144
165
  getGlRenderStateRuntime(screen).registries.renderEffects,
145
166
  'acme.Effect',
146
167
  { runner: effectRunner as never },
147
168
  );
148
169
  registerPaddingResolver(screen, 'acme.Effect', paddingResolver);
170
+ getGlRenderStateRuntime(screen).registries.colorAdjustmentFeature = {
171
+ entry: { state: RegistryEntryState.Bound, value: colorAdjustmentFeature },
172
+ onMiss: 'Disabled',
173
+ registry: 'GlColorAdjustmentFeature',
174
+ shape: 'slot',
175
+ };
176
+ getGlRenderStateRuntime(screen).registries.colorAdjustmentFeatureGuard = {
177
+ entry: { state: RegistryEntryState.Bound, value: colorAdjustmentFeatureGuard },
178
+ onMiss: 'Disabled',
179
+ registry: 'GlColorAdjustmentFeatureGuard',
180
+ shape: 'slot',
181
+ };
149
182
  getGlRenderStateRuntime(screen).glRenderTextureCache = new WeakMap();
150
183
 
151
184
  const offscreen = createGlOffscreenRenderState(screen);
@@ -163,6 +196,39 @@ describe('createGlOffscreenRenderState', () => {
163
196
  expect(offscreenRuntime.registries.renderers).toBe(screenRuntime.registries.renderers);
164
197
  expect(offscreenRuntime.registries).not.toBe(screenRuntime.registries);
165
198
  expect(offscreenRuntime.registries.blendRealizations).toBe(screenRuntime.registries.blendRealizations);
199
+ expect(offscreenRuntime.registries.colorAdjustmentFeature).toBe(screenRuntime.registries.colorAdjustmentFeature);
200
+ expect(getGlColorAdjustmentMaterialFeature(offscreen)).toBe(colorAdjustmentFeature);
201
+ expect(offscreenRuntime.registries.colorAdjustmentFeatureGuard).toBe(
202
+ screenRuntime.registries.colorAdjustmentFeatureGuard,
203
+ );
204
+ expect(getGlColorAdjustmentMaterialFeatureGuard(offscreen)).toBe(colorAdjustmentFeatureGuard);
205
+ const sharedColorFeatureGuard = offscreenRuntime.registries.colorAdjustmentFeatureGuard;
206
+ screenRuntime.registries.colorAdjustmentFeatureGuard = undefined;
207
+ expect(getGlColorAdjustmentMaterialFeatureGuard(screen)).toBeNull();
208
+ expect(offscreenRuntime.registries.colorAdjustmentFeatureGuard).toBe(sharedColorFeatureGuard);
209
+ expect(getGlColorAdjustmentMaterialFeatureGuard(offscreen)).toBe(colorAdjustmentFeatureGuard);
210
+ const sharedColorFeature = offscreenRuntime.registries.colorAdjustmentFeature;
211
+ screenRuntime.registries.colorAdjustmentFeature = undefined;
212
+ expect(getGlColorAdjustmentMaterialFeature(screen)).toBeNull();
213
+ expect(offscreenRuntime.registries.colorAdjustmentFeature).toBe(sharedColorFeature);
214
+ expect(getGlColorAdjustmentMaterialFeature(offscreen)).toBe(colorAdjustmentFeature);
215
+ expect(offscreenRuntime.registries.colorAdjustments).toBe(screenRuntime.registries.colorAdjustments);
216
+ expect(offscreenRuntime.registries.colorAdjustmentUnsupportedGuard).toBe(
217
+ screenRuntime.registries.colorAdjustmentUnsupportedGuard,
218
+ );
219
+ expect(getColorAdjustmentUnsupportedGuard(offscreen)).not.toBeNull();
220
+ const sharedUnsupportedGuard = offscreenRuntime.registries.colorAdjustmentUnsupportedGuard;
221
+ screenRuntime.registries.colorAdjustmentUnsupportedGuard = undefined;
222
+ expect(getColorAdjustmentUnsupportedGuard(screen)).toBeNull();
223
+ expect(offscreenRuntime.registries.colorAdjustmentUnsupportedGuard).toBe(sharedUnsupportedGuard);
224
+ expect(getColorAdjustmentUnsupportedGuard(offscreen)).not.toBeNull();
225
+ expect(offscreenRuntime.registries.renderRootGuard).toBe(screenRuntime.registries.renderRootGuard);
226
+ expect(areGlRenderStateGuardsEnabled(offscreen)).toBe(true);
227
+ const sharedRenderRootGuard = offscreenRuntime.registries.renderRootGuard;
228
+ screenRuntime.registries.renderRootGuard = undefined;
229
+ expect(screenRuntime.registries.renderRootGuard).toBeUndefined();
230
+ expect(offscreenRuntime.registries.renderRootGuard).toBe(sharedRenderRootGuard);
231
+ expect(areGlRenderStateGuardsEnabled(offscreen)).toBe(true);
166
232
  expect(offscreenRuntime.registries.compressedTextureDecoder).toBe(
167
233
  screenRuntime.registries.compressedTextureDecoder,
168
234
  );
@@ -398,6 +464,7 @@ describe('createGlRenderStateRuntime', () => {
398
464
  registry: 'GlCompressedTextureDecoder',
399
465
  shape: 'slot',
400
466
  });
467
+ expect(runtime.registries.colorAdjustments).toBeUndefined();
401
468
  expect(runtime.registries.compressedTextureUpload).toEqual({
402
469
  entry: null,
403
470
  onMiss: 'Unregistered',
@@ -465,6 +532,58 @@ describe('enableGlRenderStateGuards', () => {
465
532
  });
466
533
  });
467
534
 
535
+ describe('getGlColorAdjustmentMaterialFeature', () => {
536
+ it('resolves only a bound feature entry', () => {
537
+ const { canvas } = makeCanvas();
538
+ const state = createGlRenderState(canvas);
539
+ const feature: GlColorAdjustmentMaterialFeature = {
540
+ drawShapeMeshes: vi.fn(),
541
+ flush: vi.fn(() => false),
542
+ fragmentShaderChunk: '',
543
+ matrixFragmentShaderChunk: '',
544
+ record: vi.fn(),
545
+ };
546
+ const runtime = getGlRenderStateRuntime(state);
547
+
548
+ expect(getGlColorAdjustmentMaterialFeature(state)).toBeNull();
549
+ runtime.registries.colorAdjustmentFeature = {
550
+ entry: { state: RegistryEntryState.Bound, value: feature },
551
+ onMiss: 'Disabled',
552
+ registry: 'GlColorAdjustmentFeature',
553
+ shape: 'slot',
554
+ };
555
+ expect(getGlColorAdjustmentMaterialFeature(state)).toBe(feature);
556
+ runtime.registries.colorAdjustmentFeature = {
557
+ ...runtime.registries.colorAdjustmentFeature,
558
+ entry: { state: RegistryEntryState.Tombstoned },
559
+ };
560
+ expect(getGlColorAdjustmentMaterialFeature(state)).toBeNull();
561
+ });
562
+ });
563
+
564
+ describe('getGlColorAdjustmentMaterialFeatureGuard', () => {
565
+ it('resolves only a bound guard entry', () => {
566
+ const { canvas } = makeCanvas();
567
+ const state = createGlRenderState(canvas);
568
+ const guard: GlColorAdjustmentMaterialFeatureGuard = vi.fn();
569
+ const runtime = getGlRenderStateRuntime(state);
570
+
571
+ expect(getGlColorAdjustmentMaterialFeatureGuard(state)).toBeNull();
572
+ runtime.registries.colorAdjustmentFeatureGuard = {
573
+ entry: { state: RegistryEntryState.Bound, value: guard },
574
+ onMiss: 'Disabled',
575
+ registry: 'GlColorAdjustmentFeatureGuard',
576
+ shape: 'slot',
577
+ };
578
+ expect(getGlColorAdjustmentMaterialFeatureGuard(state)).toBe(guard);
579
+ runtime.registries.colorAdjustmentFeatureGuard = {
580
+ ...runtime.registries.colorAdjustmentFeatureGuard,
581
+ entry: { state: RegistryEntryState.Tombstoned },
582
+ };
583
+ expect(getGlColorAdjustmentMaterialFeatureGuard(state)).toBeNull();
584
+ });
585
+ });
586
+
468
587
  describe('getGlRenderStateRuntime', () => {
469
588
  it('returns the runtime attached by createGlRenderState', () => {
470
589
  const { canvas } = makeCanvas();
@@ -23,6 +23,9 @@ type TestGlState = {
23
23
  blendSrcRgb: number;
24
24
  cullFace: boolean;
25
25
  cullFaceMode: number;
26
+ frontFace: number;
27
+ stencilTest: boolean;
28
+ stencilWriteMask: number;
26
29
  currentRenderTarget: GlRenderTarget | null;
27
30
  depthFunc: number;
28
31
  depthMask: boolean;
@@ -58,6 +61,9 @@ const OUTER_STATE: TestGlState = {
58
61
  blendSrcRgb: 1,
59
62
  cullFace: false,
60
63
  cullFaceMode: 0x0405,
64
+ frontFace: 0x0900, // GL_CW — a host that does not use Flight's default
65
+ stencilTest: true, // enabled on purpose: a fixture that starts disabled cannot tell 'restored' from 'left off'
66
+ stencilWriteMask: 0x0f,
61
67
  currentRenderTarget: { name: 'outer-target' } as unknown as GlRenderTarget,
62
68
  depthFunc: 0x0203,
63
69
  depthMask: false,
@@ -86,6 +92,9 @@ const MIDDLE_STATE: TestGlState = {
86
92
  blendSrcRgb: 1,
87
93
  cullFace: true,
88
94
  cullFaceMode: 0x0404,
95
+ frontFace: 0x0901, // GL_CCW
96
+ stencilTest: false,
97
+ stencilWriteMask: 0xff,
89
98
  currentRenderTarget: { name: 'middle-target' } as unknown as GlRenderTarget,
90
99
  depthFunc: 0x0201,
91
100
  depthMask: true,
@@ -136,6 +145,57 @@ describe('popGlRenderState', () => {
136
145
  expectTestGlState(fixture, OUTER_STATE);
137
146
  });
138
147
 
148
+ it('restores a two-sided stencil configuration without collapsing the back face onto the front', () => {
149
+ const fixture = createStatefulGl();
150
+ const gl = fixture.gl;
151
+ applyTestGlState(fixture, OUTER_STATE);
152
+ // A host driving two-sided stencil — the case stencilOpSeparate exists for. Every back-face value
153
+ // differs from its front counterpart, so a restore that writes both faces from the front's saved
154
+ // values cannot pass by coincidence: it would report the front correct and the back overwritten.
155
+ gl.stencilOpSeparate(gl.FRONT, 0x1e00, 0x1e00, 0x1e01); // KEEP, KEEP, REPLACE
156
+ gl.stencilOpSeparate(gl.BACK, 0x1e02, 0x1e03, 0x150a); // INCR, DECR, INVERT
157
+ gl.stencilFuncSeparate(gl.FRONT, 0x0201, 1, 0xf0); // LESS
158
+ gl.stencilFuncSeparate(gl.BACK, 0x0204, 2, 0x0f); // GREATER
159
+ gl.stencilMaskSeparate(gl.FRONT, 0xaa);
160
+ gl.stencilMaskSeparate(gl.BACK, 0x55);
161
+ const host = new Map(fixture.parameters);
162
+ pushGlRenderState(fixture.state);
163
+
164
+ // What Flight's own 2D clip pass writes: separate wrap ops per face, then a symmetric gate.
165
+ gl.stencilOpSeparate(gl.FRONT, 0x1e00, 0x1e00, 0x8507); // INCR_WRAP
166
+ gl.stencilOpSeparate(gl.BACK, 0x1e00, 0x1e00, 0x8508); // DECR_WRAP
167
+ gl.stencilFunc(0x0207, 0, 0xff); // ALWAYS, both faces
168
+ gl.stencilMask(0xff);
169
+ popGlRenderState(fixture.state);
170
+
171
+ for (const parameter of TWO_SIDED_STENCIL_PARAMETERS) {
172
+ expect([parameter, fixture.parameters.get(gl[parameter])]).toEqual([parameter, host.get(gl[parameter])]);
173
+ }
174
+ });
175
+
176
+ it('restores colour-write, clear-colour, and upload-premultiply state Flight leaves behind', () => {
177
+ const fixture = createStatefulGl();
178
+ const gl = fixture.gl;
179
+ applyTestGlState(fixture, OUTER_STATE);
180
+ // A host whose own settings all differ from both the GL defaults and from what Flight will set,
181
+ // so neither 'never restored' nor 'reset to the default' can pass as restoration.
182
+ gl.colorMask(true, false, true, false);
183
+ gl.clearColor(0.25, 0.5, 0.75, 1);
184
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
185
+ pushGlRenderState(fixture.state);
186
+
187
+ // What Flight's own passes do: mask colour off while rasterizing clip coverage, clear a target,
188
+ // and premultiply a texture upload. None of these puts the previous value back.
189
+ gl.colorMask(false, false, false, false);
190
+ gl.clearColor(0, 0, 0, 0);
191
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
192
+ popGlRenderState(fixture.state);
193
+
194
+ expect(fixture.parameters.get(gl.COLOR_WRITEMASK)).toEqual([true, false, true, false]);
195
+ expect(fixture.parameters.get(gl.COLOR_CLEAR_VALUE)).toEqual([0.25, 0.5, 0.75, 1]);
196
+ expect(fixture.parameters.get(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL)).toBe(false);
197
+ });
198
+
139
199
  it('restores a non-active texture unit binding', () => {
140
200
  const fixture = createStatefulGl();
141
201
  applyTestGlState(fixture, OUTER_STATE);
@@ -207,6 +267,9 @@ function applyTestGlState(fixture: StatefulGl, values: Readonly<TestGlState>): v
207
267
  gl.depthFunc(values.depthFunc);
208
268
  setCapability(gl, gl.CULL_FACE, values.cullFace);
209
269
  gl.cullFace(values.cullFaceMode);
270
+ gl.frontFace(values.frontFace);
271
+ setCapability(gl, gl.STENCIL_TEST, values.stencilTest);
272
+ gl.stencilMask(values.stencilWriteMask);
210
273
  setCapability(gl, gl.BLEND, values.blend);
211
274
  gl.blendFuncSeparate(values.blendSrcRgb, values.blendDstRgb, values.blendSrcAlpha, values.blendDstAlpha);
212
275
  gl.blendEquationSeparate(values.blendEquationRgb, values.blendEquationAlpha);
@@ -244,6 +307,27 @@ function createStatefulGl(): StatefulGl & ReturnType<typeof createGlState> {
244
307
  DEPTH_FUNC: 0x0b74,
245
308
  DEPTH_WRITEMASK: 0x0b72,
246
309
  FRAMEBUFFER_BINDING: 0x8ca6,
310
+ FRONT_FACE: 0x0b46,
311
+ BACK: 0x0405,
312
+ COLOR_CLEAR_VALUE: 0x0c22,
313
+ COLOR_WRITEMASK: 0x0c23,
314
+ UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241,
315
+ FRONT: 0x0404,
316
+ STENCIL_BACK_FAIL: 0x8801,
317
+ STENCIL_BACK_FUNC: 0x8800,
318
+ STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802,
319
+ STENCIL_BACK_PASS_DEPTH_PASS: 0x8803,
320
+ STENCIL_BACK_REF: 0x8ca3,
321
+ STENCIL_BACK_VALUE_MASK: 0x8ca4,
322
+ STENCIL_BACK_WRITEMASK: 0x8ca5,
323
+ STENCIL_FAIL: 0x0b94,
324
+ STENCIL_FUNC: 0x0b92,
325
+ STENCIL_PASS_DEPTH_FAIL: 0x0b95,
326
+ STENCIL_PASS_DEPTH_PASS: 0x0b96,
327
+ STENCIL_REF: 0x0b97,
328
+ STENCIL_TEST: 0x0b90,
329
+ STENCIL_VALUE_MASK: 0x0b93,
330
+ STENCIL_WRITEMASK: 0x0b98,
247
331
  SCISSOR_BOX: 0x0c10,
248
332
  TEXTURE_BINDING_2D: 0x8069,
249
333
  VERTEX_ARRAY_BINDING: 0x85b5,
@@ -271,6 +355,65 @@ function createStatefulGl(): StatefulGl & ReturnType<typeof createGlState> {
271
355
  (gl.cullFace as ReturnType<typeof vi.fn>).mockImplementation((value: number) =>
272
356
  parameters.set(gl.CULL_FACE_MODE, value),
273
357
  );
358
+ (gl.frontFace as ReturnType<typeof vi.fn>).mockImplementation((value: number) =>
359
+ parameters.set(gl.FRONT_FACE, value),
360
+ );
361
+ (gl.colorMask as ReturnType<typeof vi.fn>).mockImplementation((r: boolean, g: boolean, b: boolean, a: boolean) =>
362
+ parameters.set(gl.COLOR_WRITEMASK, [r, g, b, a]),
363
+ );
364
+ (gl.clearColor as ReturnType<typeof vi.fn>).mockImplementation((r: number, g: number, b: number, a: number) =>
365
+ parameters.set(gl.COLOR_CLEAR_VALUE, [r, g, b, a]),
366
+ );
367
+ (gl.pixelStorei as ReturnType<typeof vi.fn>).mockImplementation((parameter: number, value: unknown) =>
368
+ parameters.set(parameter, value),
369
+ );
370
+ // Stencil is two-faced state: the unsuffixed setters write FRONT_AND_BACK while the Separate ones
371
+ // write only the named face. That rule was measured against a real WebGL2 context rather than assumed
372
+ // here — a fake cannot be the oracle for the API it fakes. `null` is the unsuffixed, both-faces form.
373
+ const writeStencilMask = (face: number | null, value: number): void => {
374
+ if (face !== gl.BACK) parameters.set(gl.STENCIL_WRITEMASK, value);
375
+ if (face !== gl.FRONT) parameters.set(gl.STENCIL_BACK_WRITEMASK, value);
376
+ };
377
+ const writeStencilFunc = (face: number | null, func: number, ref: number, mask: number): void => {
378
+ if (face !== gl.BACK) {
379
+ parameters.set(gl.STENCIL_FUNC, func);
380
+ parameters.set(gl.STENCIL_REF, ref);
381
+ parameters.set(gl.STENCIL_VALUE_MASK, mask);
382
+ }
383
+ if (face !== gl.FRONT) {
384
+ parameters.set(gl.STENCIL_BACK_FUNC, func);
385
+ parameters.set(gl.STENCIL_BACK_REF, ref);
386
+ parameters.set(gl.STENCIL_BACK_VALUE_MASK, mask);
387
+ }
388
+ };
389
+ const writeStencilOp = (face: number | null, fail: number, depthFail: number, depthPass: number): void => {
390
+ if (face !== gl.BACK) {
391
+ parameters.set(gl.STENCIL_FAIL, fail);
392
+ parameters.set(gl.STENCIL_PASS_DEPTH_FAIL, depthFail);
393
+ parameters.set(gl.STENCIL_PASS_DEPTH_PASS, depthPass);
394
+ }
395
+ if (face !== gl.FRONT) {
396
+ parameters.set(gl.STENCIL_BACK_FAIL, fail);
397
+ parameters.set(gl.STENCIL_BACK_PASS_DEPTH_FAIL, depthFail);
398
+ parameters.set(gl.STENCIL_BACK_PASS_DEPTH_PASS, depthPass);
399
+ }
400
+ };
401
+ (gl.stencilMask as ReturnType<typeof vi.fn>).mockImplementation((value: number) => writeStencilMask(null, value));
402
+ (gl.stencilMaskSeparate as ReturnType<typeof vi.fn>).mockImplementation((face: number, value: number) =>
403
+ writeStencilMask(face, value),
404
+ );
405
+ (gl.stencilFunc as ReturnType<typeof vi.fn>).mockImplementation((func: number, ref: number, mask: number) =>
406
+ writeStencilFunc(null, func, ref, mask),
407
+ );
408
+ (gl.stencilFuncSeparate as ReturnType<typeof vi.fn>).mockImplementation(
409
+ (face: number, func: number, ref: number, mask: number) => writeStencilFunc(face, func, ref, mask),
410
+ );
411
+ (gl.stencilOp as ReturnType<typeof vi.fn>).mockImplementation((fail: number, dFail: number, dPass: number) =>
412
+ writeStencilOp(null, fail, dFail, dPass),
413
+ );
414
+ (gl.stencilOpSeparate as ReturnType<typeof vi.fn>).mockImplementation(
415
+ (face: number, fail: number, dFail: number, dPass: number) => writeStencilOp(face, fail, dFail, dPass),
416
+ );
274
417
  (gl.blendFuncSeparate as ReturnType<typeof vi.fn>).mockImplementation(
275
418
  (srcRgb: number, dstRgb: number, srcAlpha: number, dstAlpha: number) => {
276
419
  parameters.set(gl.BLEND_SRC_RGB, srcRgb);
@@ -315,6 +458,14 @@ function expectTestGlState(fixture: StatefulGl, expected: Readonly<TestGlState>)
315
458
  expect(parameters.get(gl.DEPTH_FUNC)).toBe(expected.depthFunc);
316
459
  expect(gl.isEnabled(gl.CULL_FACE)).toBe(expected.cullFace);
317
460
  expect(parameters.get(gl.CULL_FACE_MODE)).toBe(expected.cullFaceMode);
461
+ // The 3D mesh path picks a front face per draw from the model determinant, so this is state Flight
462
+ // mutates and must hand back untouched — a host set to CW must not get CCW returned.
463
+ expect(parameters.get(gl.FRONT_FACE)).toBe(expected.frontFace);
464
+ // Flight's 2D clip system rasterizes stencil masks; its internal restore is scoped to Flight's own
465
+ // nesting and disables the test outright when Flight had no clip, so the host-facing preservation
466
+ // has to happen here. The outer fixture starts ENABLED so 'restored' is distinguishable from 'left off'.
467
+ expect(gl.isEnabled(gl.STENCIL_TEST)).toBe(expected.stencilTest);
468
+ expect(parameters.get(gl.STENCIL_WRITEMASK)).toBe(expected.stencilWriteMask);
318
469
  expect(gl.isEnabled(gl.BLEND)).toBe(expected.blend);
319
470
  expect(parameters.get(gl.BLEND_SRC_RGB)).toBe(expected.blendSrcRgb);
320
471
  expect(parameters.get(gl.BLEND_DST_RGB)).toBe(expected.blendDstRgb);
@@ -347,3 +498,22 @@ function setCapability(gl: WebGL2RenderingContext, capability: number, enabled:
347
498
  gl.disable(capability);
348
499
  }
349
500
  }
501
+
502
+ // Both faces of every stencil parameter the bracket saves. Naming them here rather than asserting a
503
+ // handful keeps the list checkable against the saved-state fields by eye.
504
+ const TWO_SIDED_STENCIL_PARAMETERS = [
505
+ 'STENCIL_FAIL',
506
+ 'STENCIL_BACK_FAIL',
507
+ 'STENCIL_PASS_DEPTH_FAIL',
508
+ 'STENCIL_BACK_PASS_DEPTH_FAIL',
509
+ 'STENCIL_PASS_DEPTH_PASS',
510
+ 'STENCIL_BACK_PASS_DEPTH_PASS',
511
+ 'STENCIL_FUNC',
512
+ 'STENCIL_BACK_FUNC',
513
+ 'STENCIL_REF',
514
+ 'STENCIL_BACK_REF',
515
+ 'STENCIL_VALUE_MASK',
516
+ 'STENCIL_BACK_VALUE_MASK',
517
+ 'STENCIL_WRITEMASK',
518
+ 'STENCIL_BACK_WRITEMASK',
519
+ ] as const;