@flighthq/effects-wgpu 0.5.1-next.685.f72fc7f → 0.5.1-next.704.19c91ec

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.
package/README.md CHANGED
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/effects-wgpu`. The `
13
13
  This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
14
14
 
15
15
  - [Flight project](https://github.com/flighthq/flight)
16
- - [Source for @flighthq/effects-wgpu@0.5.1-next.685.f72fc7f](https://github.com/flighthq/flight/tree/f72fc7feaa9653d950f39c7d2fe6365f48e82e51/packages/effects-wgpu)
17
- - [License](https://github.com/flighthq/flight/blob/f72fc7feaa9653d950f39c7d2fe6365f48e82e51/LICENSE.md)
16
+ - [Source for @flighthq/effects-wgpu@0.5.1-next.704.19c91ec](https://github.com/flighthq/flight/tree/19c91ec3e569d6b3b471682726465a79fba9f8cb/packages/effects-wgpu)
17
+ - [License](https://github.com/flighthq/flight/blob/19c91ec3e569d6b3b471682726465a79fba9f8cb/LICENSE.md)
@@ -4,6 +4,7 @@ export * from './wgpuCompositeEffect';
4
4
  export * from './wgpuContactShadowsEffect';
5
5
  export * from './wgpuBlendEffect';
6
6
  export * from './wgpuBevelEffect';
7
+ export * from './wgpuBitmapDisplacementEffect';
7
8
  export * from './wgpuBloomEffect';
8
9
  export * from './wgpuBlurEffect';
9
10
  export * from './wgpuCameraMotionBlurEffect';
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
package/dist/contract.js CHANGED
@@ -4,6 +4,7 @@ export * from './wgpuCompositeEffect';
4
4
  export * from './wgpuContactShadowsEffect';
5
5
  export * from './wgpuBlendEffect';
6
6
  export * from './wgpuBevelEffect';
7
+ export * from './wgpuBitmapDisplacementEffect';
7
8
  export * from './wgpuBloomEffect';
8
9
  export * from './wgpuBlurEffect';
9
10
  export * from './wgpuCameraMotionBlurEffect';
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"enableWgpuRenderEffectGuards.d.ts","sourceRoot":"","sources":["../src/enableWgpuRenderEffectGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA0C,eAAe,EAAE,MAAM,0BAA0B,CAAC;AASxG,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAEhF;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAK1E;AAWD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAKzE"}
1
+ {"version":3,"file":"enableWgpuRenderEffectGuards.d.ts","sourceRoot":"","sources":["../src/enableWgpuRenderEffectGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA0C,eAAe,EAAE,MAAM,0BAA0B,CAAC;AASxG,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAEhF;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAK1E;AAUD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAKzE"}
@@ -16,10 +16,9 @@ export function disableWgpuRenderEffectGuards(state) {
16
16
  // whatever was last in it, and a partially registered chain succeeds while silently dropping the effects
17
17
  // it could not run. Both are correct by contract and neither surfaces anywhere.
18
18
  //
19
- // The WGPU sibling of enableGlRenderEffectGuards, and deliberately narrower: GL additionally guards
20
- // per-instance resolvability and re-registered custom-shader source, and WGPU has neither a resolver half
21
- // to registration nor a custom-shader effect. Guarding what this backend cannot observe would be a
22
- // warning that can never fire, so the absence is the honest shape rather than an oversight.
19
+ // The WGPU sibling of enableGlRenderEffectGuards. WGPU now observes per-instance resolution for effects
20
+ // that name external resources (BitmapDisplacementEffect); GL alone additionally guards custom-shader
21
+ // source re-registration because WGPU has no custom-shader effect.
23
22
  export function enableWgpuRenderEffectGuards(state) {
24
23
  setWgpuRenderEffectApplicationGuard(state, warnWgpuRenderEffectApplication);
25
24
  setWgpuRenderEffectPipelineSampleCountGuard(state, warnWgpuRenderEffectPipelineSampleCount);
@@ -42,8 +41,12 @@ function getWgpuRenderEffectApplicationMessage(explanation) {
42
41
  return `applyWgpuRenderEffectsToRenderTexture: ${explanation.unregisteredKinds.length} of ${explanation.requestedCount} effect kinds have no registered runner and were SKIPPED — the destination was written without them; call registerWgpuRenderEffect(state, kind, runner) for ${explanation.unregisteredKinds.join(', ')}`;
43
42
  case 'source-unavailable':
44
43
  return 'applyWgpuRenderEffectsToRenderTexture: the source render Texture has no realized WGPU target, so the call returned false and the destination was NOT written — render into the source before applying effects';
44
+ case 'partial-resolution':
45
+ return `applyWgpuRenderEffectsToRenderTexture: ${explanation.unresolvedIndexes.length} of ${explanation.requestedCount} effects have a runner but no resolved external resource, so those stages COPIED THE INPUT THROUGH UNCHANGED; chain position(s) ${explanation.unresolvedIndexes.join(', ')}`;
45
46
  case 'stale-destination':
46
47
  return 'applyWgpuRenderEffectsToRenderTexture: the call returned false before replacing the destination, so its previously published pixels are a STALE DESTINATION — handle the false return before sampling dest, and make the source and runners available before retrying';
48
+ case 'unresolved-effects':
49
+ return `applyWgpuRenderEffectsToRenderTexture: every registered effect was unresolved and COPIED THE INPUT THROUGH UNCHANGED; chain position(s) ${explanation.unresolvedIndexes.join(', ')}`;
47
50
  default:
48
51
  return `applyWgpuRenderEffectsToRenderTexture: no registered runner for any of ${explanation.unregisteredKinds.join(', ')}, so the call returned false and the destination was NEVER WRITTEN — anything sampling it reads a stale or empty texture; call registerWgpuRenderEffect(state, kind, runner)`;
49
52
  }
@@ -51,12 +54,13 @@ function getWgpuRenderEffectApplicationMessage(explanation) {
51
54
  function warnWgpuRenderEffectApplication(_state, explanation) {
52
55
  // Keyed by status plus the kinds involved: a chain missing a different effect is a different
53
56
  // observation worth reporting, while the same miss every frame is not.
54
- logOnce(`effects-wgpu:effect-application:${explanation.status}:${explanation.unregisteredKinds.join(',')}`, LogLevel.Warn, {
57
+ logOnce(`effects-wgpu:effect-application:${explanation.status}:${explanation.unregisteredKinds.join(',')}:${explanation.unresolvedIndexes.join(',')}`, LogLevel.Warn, {
55
58
  message: getWgpuRenderEffectApplicationMessage(explanation),
56
59
  registeredCount: explanation.registeredCount,
57
60
  requestedCount: explanation.requestedCount,
58
61
  status: explanation.status,
59
62
  unregisteredKinds: explanation.unregisteredKinds,
63
+ unresolvedIndexes: explanation.unresolvedIndexes,
60
64
  }, 'effects-wgpu');
61
65
  }
62
66
  // A pipeline pass drops an effect whose kind has no runner with a bare `continue`: no draw, no error, no
@@ -1 +1 @@
1
- {"version":3,"file":"enableWgpuRenderEffectGuards.js","sourceRoot":"","sources":["../src/enableWgpuRenderEffectGuards.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enableWgpuRenderEffectGuards.js","sourceRoot":"","sources":["../src/enableWgpuRenderEffectGuards.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { applyWgpuRenderEffectsToRenderTexture, beginWgpuRenderEffectPipeline, createWgpuRenderEffectPipeline, disableWgpuRenderEffectGuards, enableWgpuRenderEffectGuards, defaultWgpuBevelEffectRunner, defaultWgpuBlendEffectRunner, defaultWgpuBloomEffectRunner, defaultWgpuBlurEffectRunner, defaultWgpuCameraMotionBlurEffectRunner, defaultWgpuChromaticAberrationEffectRunner, defaultWgpuCompositeEffectRunner, defaultWgpuContactShadowsEffectRunner, defaultWgpuConvolutionEffectRunner, defaultWgpuCrtEffectRunner, defaultWgpuDirectionalBlurEffectRunner, defaultWgpuDisplacementEffectRunner, defaultWgpuDitherEffectRunner, defaultWgpuDropShadowEffectRunner, defaultWgpuFilmGrainEffectRunner, defaultWgpuFxaaEffectRunner, defaultWgpuGlitchEffectRunner, defaultWgpuGodRaysEffectRunner, defaultWgpuGradientBevelEffectRunner, defaultWgpuGradientGlowEffectRunner, defaultWgpuHalftoneEffectRunner, defaultWgpuInnerGlowEffectRunner, defaultWgpuInnerShadowEffectRunner, defaultWgpuKuwaharaEffectRunner, defaultWgpuLensDirtEffectRunner, defaultWgpuLensDistortionEffectRunner, defaultWgpuLensFlareEffectRunner, defaultWgpuMedianEffectRunner, defaultWgpuMotionBlurEffectRunner, defaultWgpuOuterGlowEffectRunner, defaultWgpuOutlineEffectRunner, defaultWgpuPixelateEffectRunner, defaultWgpuPosterizeEffectRunner, defaultWgpuRadialBlurEffectRunner, defaultWgpuScanlinesEffectRunner, defaultWgpuScreenSpaceFogEffectRunner, defaultWgpuSharpenEffectRunner, defaultWgpuSketchEffectRunner, defaultWgpuSmaaEffectRunner, defaultWgpuSsaoEffectRunner, defaultWgpuTiltShiftEffectRunner, defaultWgpuToneMapEffectRunner, defaultWgpuVignetteEffectRunner, defaultWgpuWhiteBalanceEffectRunner, endWgpuRenderEffectPipeline, registerWgpuBlendEffectBackdrop, registerWgpuBevelEffect, registerWgpuBlurEffect, registerWgpuContactShadowsEffect, registerWgpuDropShadowEffect, registerWgpuGradientBevelEffect, registerWgpuGradientGlowEffect, registerWgpuInnerGlowEffect, registerWgpuInnerShadowEffect, registerWgpuOuterGlowEffect, registerWgpuBlendEffect, registerWgpuBloomEffect, registerWgpuCameraMotionBlurEffect, registerWgpuChromaticAberrationEffect, registerWgpuCompositeEffect, registerWgpuConvolutionEffect, registerWgpuCrtEffect, registerWgpuDirectionalBlurEffect, registerWgpuDisplacementEffect, registerWgpuDitherEffect, registerWgpuFilmGrainEffect, registerWgpuFxaaEffect, registerWgpuGlitchEffect, registerWgpuGodRaysEffect, registerWgpuHalftoneEffect, registerWgpuKuwaharaEffect, registerWgpuLensDirtEffect, registerWgpuLensDistortionEffect, registerWgpuLensFlareEffect, registerWgpuMedianEffect, registerWgpuMotionBlurEffect, registerWgpuOutlineEffect, registerWgpuPixelateEffect, registerWgpuPosterizeEffect, registerWgpuRadialBlurEffect, registerWgpuScanlinesEffect, registerWgpuScreenSpaceFogEffect, registerWgpuSharpenEffect, registerWgpuSketchEffect, registerWgpuSmaaEffect, registerWgpuSsaoEffect, registerWgpuTiltShiftEffect, registerWgpuToneMapEffect, registerWgpuVignetteEffect, registerWgpuWhiteBalanceEffect, registerWgpuRenderEffect, setWgpuRenderEffectVelocityTexture, } from './contract';
1
+ export { applyWgpuRenderEffectsToRenderTexture, beginWgpuRenderEffectPipeline, createWgpuRenderEffectPipeline, disableWgpuRenderEffectGuards, enableWgpuRenderEffectGuards, defaultWgpuBevelEffectRunner, defaultWgpuBitmapDisplacementEffectRunner, defaultWgpuBlendEffectRunner, defaultWgpuBloomEffectRunner, defaultWgpuBlurEffectRunner, defaultWgpuCameraMotionBlurEffectRunner, defaultWgpuChromaticAberrationEffectRunner, defaultWgpuCompositeEffectRunner, defaultWgpuContactShadowsEffectRunner, defaultWgpuConvolutionEffectRunner, defaultWgpuCrtEffectRunner, defaultWgpuDirectionalBlurEffectRunner, defaultWgpuDisplacementEffectRunner, defaultWgpuDitherEffectRunner, defaultWgpuDropShadowEffectRunner, defaultWgpuFilmGrainEffectRunner, defaultWgpuFxaaEffectRunner, defaultWgpuGlitchEffectRunner, defaultWgpuGodRaysEffectRunner, defaultWgpuGradientBevelEffectRunner, defaultWgpuGradientGlowEffectRunner, defaultWgpuHalftoneEffectRunner, defaultWgpuInnerGlowEffectRunner, defaultWgpuInnerShadowEffectRunner, defaultWgpuKuwaharaEffectRunner, defaultWgpuLensDirtEffectRunner, defaultWgpuLensDistortionEffectRunner, defaultWgpuLensFlareEffectRunner, defaultWgpuMedianEffectRunner, defaultWgpuMotionBlurEffectRunner, defaultWgpuOuterGlowEffectRunner, defaultWgpuOutlineEffectRunner, defaultWgpuPixelateEffectRunner, defaultWgpuPosterizeEffectRunner, defaultWgpuRadialBlurEffectRunner, defaultWgpuScanlinesEffectRunner, defaultWgpuScreenSpaceFogEffectRunner, defaultWgpuSharpenEffectRunner, defaultWgpuSketchEffectRunner, defaultWgpuSmaaEffectRunner, defaultWgpuSsaoEffectRunner, defaultWgpuTiltShiftEffectRunner, defaultWgpuToneMapEffectRunner, defaultWgpuVignetteEffectRunner, defaultWgpuWhiteBalanceEffectRunner, endWgpuRenderEffectPipeline, registerWgpuBlendEffectBackdrop, registerWgpuBevelEffect, registerWgpuBitmapDisplacementEffect, registerWgpuBlurEffect, registerWgpuContactShadowsEffect, registerWgpuDropShadowEffect, registerWgpuGradientBevelEffect, registerWgpuGradientGlowEffect, registerWgpuInnerGlowEffect, registerWgpuInnerShadowEffect, registerWgpuOuterGlowEffect, registerWgpuBlendEffect, registerWgpuBloomEffect, registerWgpuCameraMotionBlurEffect, registerWgpuChromaticAberrationEffect, registerWgpuCompositeEffect, registerWgpuConvolutionEffect, registerWgpuCrtEffect, registerWgpuDirectionalBlurEffect, registerWgpuDisplacementEffect, registerWgpuDitherEffect, registerWgpuFilmGrainEffect, registerWgpuFxaaEffect, registerWgpuGlitchEffect, registerWgpuGodRaysEffect, registerWgpuHalftoneEffect, registerWgpuKuwaharaEffect, registerWgpuLensDirtEffect, registerWgpuLensDistortionEffect, registerWgpuLensFlareEffect, registerWgpuMedianEffect, registerWgpuMotionBlurEffect, registerWgpuOutlineEffect, registerWgpuPixelateEffect, registerWgpuPosterizeEffect, registerWgpuRadialBlurEffect, registerWgpuScanlinesEffect, registerWgpuScreenSpaceFogEffect, registerWgpuSharpenEffect, registerWgpuSketchEffect, registerWgpuSmaaEffect, registerWgpuSsaoEffect, registerWgpuTiltShiftEffect, registerWgpuToneMapEffect, registerWgpuVignetteEffect, registerWgpuWhiteBalanceEffect, registerWgpuRenderEffect, setWgpuRenderEffectVelocityTexture, } from './contract';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qCAAqC,EACrC,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,EAC3B,uCAAuC,EACvC,0CAA0C,EAC1C,gCAAgC,EAChC,qCAAqC,EACrC,kCAAkC,EAClC,0BAA0B,EAC1B,sCAAsC,EACtC,mCAAmC,EACnC,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,EAC9B,oCAAoC,EACpC,mCAAmC,EACnC,+BAA+B,EAC/B,gCAAgC,EAChC,kCAAkC,EAClC,+BAA+B,EAC/B,+BAA+B,EAC/B,qCAAqC,EACrC,gCAAgC,EAChC,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,8BAA8B,EAC9B,+BAA+B,EAC/B,gCAAgC,EAChC,iCAAiC,EACjC,gCAAgC,EAChC,qCAAqC,EACrC,8BAA8B,EAC9B,6BAA6B,EAC7B,2BAA2B,EAC3B,2BAA2B,EAC3B,gCAAgC,EAChC,8BAA8B,EAC9B,+BAA+B,EAC/B,mCAAmC,EACnC,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,EACvB,sBAAsB,EACtB,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,8BAA8B,EAC9B,2BAA2B,EAC3B,6BAA6B,EAC7B,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,kCAAkC,EAClC,qCAAqC,EACrC,2BAA2B,EAC3B,6BAA6B,EAC7B,qBAAqB,EACrB,iCAAiC,EACjC,8BAA8B,EAC9B,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,gCAAgC,EAChC,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,gCAAgC,EAChC,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,wBAAwB,EACxB,kCAAkC,GACnC,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qCAAqC,EACrC,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,yCAAyC,EACzC,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,EAC3B,uCAAuC,EACvC,0CAA0C,EAC1C,gCAAgC,EAChC,qCAAqC,EACrC,kCAAkC,EAClC,0BAA0B,EAC1B,sCAAsC,EACtC,mCAAmC,EACnC,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,EAC9B,oCAAoC,EACpC,mCAAmC,EACnC,+BAA+B,EAC/B,gCAAgC,EAChC,kCAAkC,EAClC,+BAA+B,EAC/B,+BAA+B,EAC/B,qCAAqC,EACrC,gCAAgC,EAChC,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,8BAA8B,EAC9B,+BAA+B,EAC/B,gCAAgC,EAChC,iCAAiC,EACjC,gCAAgC,EAChC,qCAAqC,EACrC,8BAA8B,EAC9B,6BAA6B,EAC7B,2BAA2B,EAC3B,2BAA2B,EAC3B,gCAAgC,EAChC,8BAA8B,EAC9B,+BAA+B,EAC/B,mCAAmC,EACnC,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,EACvB,oCAAoC,EACpC,sBAAsB,EACtB,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,8BAA8B,EAC9B,2BAA2B,EAC3B,6BAA6B,EAC7B,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,kCAAkC,EAClC,qCAAqC,EACrC,2BAA2B,EAC3B,6BAA6B,EAC7B,qBAAqB,EACrB,iCAAiC,EACjC,8BAA8B,EAC9B,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,gCAAgC,EAChC,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,gCAAgC,EAChC,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,wBAAwB,EACxB,kCAAkC,GACnC,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { applyWgpuRenderEffectsToRenderTexture, beginWgpuRenderEffectPipeline, createWgpuRenderEffectPipeline, disableWgpuRenderEffectGuards, enableWgpuRenderEffectGuards, defaultWgpuBevelEffectRunner, defaultWgpuBlendEffectRunner, defaultWgpuBloomEffectRunner, defaultWgpuBlurEffectRunner, defaultWgpuCameraMotionBlurEffectRunner, defaultWgpuChromaticAberrationEffectRunner, defaultWgpuCompositeEffectRunner, defaultWgpuContactShadowsEffectRunner, defaultWgpuConvolutionEffectRunner, defaultWgpuCrtEffectRunner, defaultWgpuDirectionalBlurEffectRunner, defaultWgpuDisplacementEffectRunner, defaultWgpuDitherEffectRunner, defaultWgpuDropShadowEffectRunner, defaultWgpuFilmGrainEffectRunner, defaultWgpuFxaaEffectRunner, defaultWgpuGlitchEffectRunner, defaultWgpuGodRaysEffectRunner, defaultWgpuGradientBevelEffectRunner, defaultWgpuGradientGlowEffectRunner, defaultWgpuHalftoneEffectRunner, defaultWgpuInnerGlowEffectRunner, defaultWgpuInnerShadowEffectRunner, defaultWgpuKuwaharaEffectRunner, defaultWgpuLensDirtEffectRunner, defaultWgpuLensDistortionEffectRunner, defaultWgpuLensFlareEffectRunner, defaultWgpuMedianEffectRunner, defaultWgpuMotionBlurEffectRunner, defaultWgpuOuterGlowEffectRunner, defaultWgpuOutlineEffectRunner, defaultWgpuPixelateEffectRunner, defaultWgpuPosterizeEffectRunner, defaultWgpuRadialBlurEffectRunner, defaultWgpuScanlinesEffectRunner, defaultWgpuScreenSpaceFogEffectRunner, defaultWgpuSharpenEffectRunner, defaultWgpuSketchEffectRunner, defaultWgpuSmaaEffectRunner, defaultWgpuSsaoEffectRunner, defaultWgpuTiltShiftEffectRunner, defaultWgpuToneMapEffectRunner, defaultWgpuVignetteEffectRunner, defaultWgpuWhiteBalanceEffectRunner, endWgpuRenderEffectPipeline, registerWgpuBlendEffectBackdrop, registerWgpuBevelEffect, registerWgpuBlurEffect, registerWgpuContactShadowsEffect, registerWgpuDropShadowEffect, registerWgpuGradientBevelEffect, registerWgpuGradientGlowEffect, registerWgpuInnerGlowEffect, registerWgpuInnerShadowEffect, registerWgpuOuterGlowEffect, registerWgpuBlendEffect, registerWgpuBloomEffect, registerWgpuCameraMotionBlurEffect, registerWgpuChromaticAberrationEffect, registerWgpuCompositeEffect, registerWgpuConvolutionEffect, registerWgpuCrtEffect, registerWgpuDirectionalBlurEffect, registerWgpuDisplacementEffect, registerWgpuDitherEffect, registerWgpuFilmGrainEffect, registerWgpuFxaaEffect, registerWgpuGlitchEffect, registerWgpuGodRaysEffect, registerWgpuHalftoneEffect, registerWgpuKuwaharaEffect, registerWgpuLensDirtEffect, registerWgpuLensDistortionEffect, registerWgpuLensFlareEffect, registerWgpuMedianEffect, registerWgpuMotionBlurEffect, registerWgpuOutlineEffect, registerWgpuPixelateEffect, registerWgpuPosterizeEffect, registerWgpuRadialBlurEffect, registerWgpuScanlinesEffect, registerWgpuScreenSpaceFogEffect, registerWgpuSharpenEffect, registerWgpuSketchEffect, registerWgpuSmaaEffect, registerWgpuSsaoEffect, registerWgpuTiltShiftEffect, registerWgpuToneMapEffect, registerWgpuVignetteEffect, registerWgpuWhiteBalanceEffect, registerWgpuRenderEffect, setWgpuRenderEffectVelocityTexture, } from './contract';
1
+ export { applyWgpuRenderEffectsToRenderTexture, beginWgpuRenderEffectPipeline, createWgpuRenderEffectPipeline, disableWgpuRenderEffectGuards, enableWgpuRenderEffectGuards, defaultWgpuBevelEffectRunner, defaultWgpuBitmapDisplacementEffectRunner, defaultWgpuBlendEffectRunner, defaultWgpuBloomEffectRunner, defaultWgpuBlurEffectRunner, defaultWgpuCameraMotionBlurEffectRunner, defaultWgpuChromaticAberrationEffectRunner, defaultWgpuCompositeEffectRunner, defaultWgpuContactShadowsEffectRunner, defaultWgpuConvolutionEffectRunner, defaultWgpuCrtEffectRunner, defaultWgpuDirectionalBlurEffectRunner, defaultWgpuDisplacementEffectRunner, defaultWgpuDitherEffectRunner, defaultWgpuDropShadowEffectRunner, defaultWgpuFilmGrainEffectRunner, defaultWgpuFxaaEffectRunner, defaultWgpuGlitchEffectRunner, defaultWgpuGodRaysEffectRunner, defaultWgpuGradientBevelEffectRunner, defaultWgpuGradientGlowEffectRunner, defaultWgpuHalftoneEffectRunner, defaultWgpuInnerGlowEffectRunner, defaultWgpuInnerShadowEffectRunner, defaultWgpuKuwaharaEffectRunner, defaultWgpuLensDirtEffectRunner, defaultWgpuLensDistortionEffectRunner, defaultWgpuLensFlareEffectRunner, defaultWgpuMedianEffectRunner, defaultWgpuMotionBlurEffectRunner, defaultWgpuOuterGlowEffectRunner, defaultWgpuOutlineEffectRunner, defaultWgpuPixelateEffectRunner, defaultWgpuPosterizeEffectRunner, defaultWgpuRadialBlurEffectRunner, defaultWgpuScanlinesEffectRunner, defaultWgpuScreenSpaceFogEffectRunner, defaultWgpuSharpenEffectRunner, defaultWgpuSketchEffectRunner, defaultWgpuSmaaEffectRunner, defaultWgpuSsaoEffectRunner, defaultWgpuTiltShiftEffectRunner, defaultWgpuToneMapEffectRunner, defaultWgpuVignetteEffectRunner, defaultWgpuWhiteBalanceEffectRunner, endWgpuRenderEffectPipeline, registerWgpuBlendEffectBackdrop, registerWgpuBevelEffect, registerWgpuBitmapDisplacementEffect, registerWgpuBlurEffect, registerWgpuContactShadowsEffect, registerWgpuDropShadowEffect, registerWgpuGradientBevelEffect, registerWgpuGradientGlowEffect, registerWgpuInnerGlowEffect, registerWgpuInnerShadowEffect, registerWgpuOuterGlowEffect, registerWgpuBlendEffect, registerWgpuBloomEffect, registerWgpuCameraMotionBlurEffect, registerWgpuChromaticAberrationEffect, registerWgpuCompositeEffect, registerWgpuConvolutionEffect, registerWgpuCrtEffect, registerWgpuDirectionalBlurEffect, registerWgpuDisplacementEffect, registerWgpuDitherEffect, registerWgpuFilmGrainEffect, registerWgpuFxaaEffect, registerWgpuGlitchEffect, registerWgpuGodRaysEffect, registerWgpuHalftoneEffect, registerWgpuKuwaharaEffect, registerWgpuLensDirtEffect, registerWgpuLensDistortionEffect, registerWgpuLensFlareEffect, registerWgpuMedianEffect, registerWgpuMotionBlurEffect, registerWgpuOutlineEffect, registerWgpuPixelateEffect, registerWgpuPosterizeEffect, registerWgpuRadialBlurEffect, registerWgpuScanlinesEffect, registerWgpuScreenSpaceFogEffect, registerWgpuSharpenEffect, registerWgpuSketchEffect, registerWgpuSmaaEffect, registerWgpuSsaoEffect, registerWgpuTiltShiftEffect, registerWgpuToneMapEffect, registerWgpuVignetteEffect, registerWgpuWhiteBalanceEffect, registerWgpuRenderEffect, setWgpuRenderEffectVelocityTexture, } from './contract';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qCAAqC,EACrC,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,EAC3B,uCAAuC,EACvC,0CAA0C,EAC1C,gCAAgC,EAChC,qCAAqC,EACrC,kCAAkC,EAClC,0BAA0B,EAC1B,sCAAsC,EACtC,mCAAmC,EACnC,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,EAC9B,oCAAoC,EACpC,mCAAmC,EACnC,+BAA+B,EAC/B,gCAAgC,EAChC,kCAAkC,EAClC,+BAA+B,EAC/B,+BAA+B,EAC/B,qCAAqC,EACrC,gCAAgC,EAChC,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,8BAA8B,EAC9B,+BAA+B,EAC/B,gCAAgC,EAChC,iCAAiC,EACjC,gCAAgC,EAChC,qCAAqC,EACrC,8BAA8B,EAC9B,6BAA6B,EAC7B,2BAA2B,EAC3B,2BAA2B,EAC3B,gCAAgC,EAChC,8BAA8B,EAC9B,+BAA+B,EAC/B,mCAAmC,EACnC,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,EACvB,sBAAsB,EACtB,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,8BAA8B,EAC9B,2BAA2B,EAC3B,6BAA6B,EAC7B,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,kCAAkC,EAClC,qCAAqC,EACrC,2BAA2B,EAC3B,6BAA6B,EAC7B,qBAAqB,EACrB,iCAAiC,EACjC,8BAA8B,EAC9B,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,gCAAgC,EAChC,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,gCAAgC,EAChC,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,wBAAwB,EACxB,kCAAkC,GACnC,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qCAAqC,EACrC,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,yCAAyC,EACzC,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,EAC3B,uCAAuC,EACvC,0CAA0C,EAC1C,gCAAgC,EAChC,qCAAqC,EACrC,kCAAkC,EAClC,0BAA0B,EAC1B,sCAAsC,EACtC,mCAAmC,EACnC,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,EAC9B,oCAAoC,EACpC,mCAAmC,EACnC,+BAA+B,EAC/B,gCAAgC,EAChC,kCAAkC,EAClC,+BAA+B,EAC/B,+BAA+B,EAC/B,qCAAqC,EACrC,gCAAgC,EAChC,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,8BAA8B,EAC9B,+BAA+B,EAC/B,gCAAgC,EAChC,iCAAiC,EACjC,gCAAgC,EAChC,qCAAqC,EACrC,8BAA8B,EAC9B,6BAA6B,EAC7B,2BAA2B,EAC3B,2BAA2B,EAC3B,gCAAgC,EAChC,8BAA8B,EAC9B,+BAA+B,EAC/B,mCAAmC,EACnC,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,EACvB,oCAAoC,EACpC,sBAAsB,EACtB,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,8BAA8B,EAC9B,2BAA2B,EAC3B,6BAA6B,EAC7B,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,kCAAkC,EAClC,qCAAqC,EACrC,2BAA2B,EAC3B,6BAA6B,EAC7B,qBAAqB,EACrB,iCAAiC,EACjC,8BAA8B,EAC9B,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,gCAAgC,EAChC,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,gCAAgC,EAChC,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,wBAAwB,EACxB,kCAAkC,GACnC,MAAM,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { BitmapDisplacementEffect, RenderEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types/contract';
2
+ export declare function applyBitmapDisplacementEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, effect: Readonly<BitmapDisplacementEffect>): void;
3
+ export declare const defaultWgpuBitmapDisplacementEffectRunner: WgpuRenderEffectRunner;
4
+ export declare function isWgpuBitmapDisplacementEffectResolvable(state: WgpuRenderState, effect: Readonly<RenderEffect>): boolean;
5
+ export declare function registerWgpuBitmapDisplacementEffect(state: WgpuRenderState): void;
6
+ export declare const BITMAP_DISPLACEMENT_FRAGMENT_WGSL = "\nstruct Uniforms {\n scale : vec2f,\n resolution : vec2f,\n componentX : i32,\n componentY : i32,\n edgeMode : i32,\n _pad0 : i32,\n}\n@group(0) @binding(0) var<uniform> uni : Uniforms;\n@group(1) @binding(0) var sourceTexture : texture_2d<f32>;\n@group(1) @binding(1) var sourceSampler : sampler;\n@group(2) @binding(0) var mapTexture : texture_2d<f32>;\n@group(2) @binding(1) var mapSampler : sampler;\n\nfn sampleChannel(value : vec4f, component : i32) -> f32 {\n if (component == 0) { return value.r; }\n if (component == 1) { return value.g; }\n if (component == 2) { return value.b; }\n return value.a;\n}\n\n@fragment\nfn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {\n let mapSample = textureSampleLevel(mapTexture, mapSampler, uv, 0.0);\n let mapped = vec2f(\n sampleChannel(mapSample, uni.componentX),\n sampleChannel(mapSample, uni.componentY),\n );\n let displacementPixels = (mapped - vec2f(0.5)) * uni.scale;\n let displacement = displacementPixels / uni.resolution;\n let displaced = vec2f(uv.x + displacement.x, uv.y + displacement.y);\n let sourceUv = select(\n clamp(displaced, vec2f(0.0), vec2f(1.0)),\n fract(displaced),\n uni.edgeMode == 1,\n );\n return textureSampleLevel(sourceTexture, sourceSampler, sourceUv, 0.0);\n}";
7
+ //# sourceMappingURL=wgpuBitmapDisplacementEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuBitmapDisplacementEffect.d.ts","sourceRoot":"","sources":["../src/wgpuBitmapDisplacementEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,wBAAwB,EACxB,YAAY,EAIZ,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAOlC,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,wBAAwB,CAAC,GACzC,IAAI,CAsDN;AAED,eAAO,MAAM,yCAAyC,EAAE,sBAEvD,CAAC;AAEF,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC7B,OAAO,CAKT;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAOjF;AAyDD,eAAO,MAAM,iCAAiC,8wCAsC5C,CAAC"}
@@ -0,0 +1,156 @@
1
+ import { getWgpuSampler, resolveWgpuTexture } from '@flighthq/render-wgpu/contract';
2
+ import { ImageChannel } from '@flighthq/types/contract';
3
+ import { drawWgpuEffectPass, EFFECT_VERTEX_WGSL, getWgpuEffectPassState } from './wgpuEffectPass';
4
+ import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
5
+ import { registerWgpuRenderEffect } from './wgpuRenderEffectRegistry';
6
+ export function applyBitmapDisplacementEffectToWgpu(state, source, dest, effect) {
7
+ const map = effect.map;
8
+ const mapEntry = map === null ? null : resolveWgpuTexture(state, map, false, source.colorSpace);
9
+ if (mapEntry === null) {
10
+ drawWgpuEffectPass(state, source, dest, getWgpuEffectPipeline(state, 'spatial.bitmapDisplacement.passthrough', BITMAP_DISPLACEMENT_PASSTHROUGH_FRAGMENT_WGSL, 'replace'), NO_UNIFORMS);
11
+ return;
12
+ }
13
+ const resolvedMap = map;
14
+ const fs = getWgpuEffectPassState(state);
15
+ const sourceBindGroup = state.device.createBindGroup({
16
+ layout: fs.textureBGLayout,
17
+ entries: [
18
+ { binding: 0, resource: source.view },
19
+ { binding: 1, resource: fs.sampler },
20
+ ],
21
+ });
22
+ const mapBindGroup = state.device.createBindGroup({
23
+ layout: fs.textureBGLayout,
24
+ entries: [
25
+ { binding: 0, resource: mapEntry.view },
26
+ { binding: 1, resource: mapEntry.sampler ?? getBitmapDisplacementMapSampler(state, resolvedMap.sampler) },
27
+ ],
28
+ });
29
+ const slotOffset = fs.acquireSlot();
30
+ fs.writeSlot(slotOffset, (f32, i32) => {
31
+ f32[0] = effect.scaleX ?? 0;
32
+ f32[1] = effect.scaleY ?? 0;
33
+ f32[2] = source.width;
34
+ f32[3] = source.height;
35
+ i32[4] = effect.componentX ?? ImageChannel.Red;
36
+ i32[5] = effect.componentY ?? ImageChannel.Green;
37
+ i32[6] = effect.edgeMode === 'clamp' ? 0 : 1;
38
+ });
39
+ const pass = fs.beginPass(dest, 'load');
40
+ pass.setPipeline(getBitmapDisplacementPipeline(state, dest.format).pipeline);
41
+ pass.setBindGroup(0, fs.uniformBG, [slotOffset]);
42
+ pass.setBindGroup(1, sourceBindGroup);
43
+ pass.setBindGroup(2, mapBindGroup);
44
+ pass.draw(6);
45
+ pass.end();
46
+ }
47
+ export const defaultWgpuBitmapDisplacementEffectRunner = (ctx, effect) => {
48
+ applyBitmapDisplacementEffectToWgpu(ctx.state, ctx.source, ctx.dest, effect);
49
+ };
50
+ export function isWgpuBitmapDisplacementEffectResolvable(state, effect) {
51
+ const map = effect.map;
52
+ return (map !== null && resolveWgpuTexture(state, map, false, map.colorSpace === 'linear' ? 'linear' : 'srgb') !== null);
53
+ }
54
+ export function registerWgpuBitmapDisplacementEffect(state) {
55
+ registerWgpuRenderEffect(state, 'BitmapDisplacementEffect', defaultWgpuBitmapDisplacementEffectRunner, isWgpuBitmapDisplacementEffectResolvable);
56
+ }
57
+ function getBitmapDisplacementMapSampler(state, sampler) {
58
+ const mipmapFilter = getMipmapFilter(sampler.minFilter, sampler.mipmaps);
59
+ return getWgpuSampler(state, getFilter(sampler.minFilter), getFilter(sampler.magFilter), sampler.wrapU, sampler.wrapV, mipmapFilter, sampler.anisotropy);
60
+ }
61
+ function getFilter(filter) {
62
+ return filter.startsWith('nearest') ? 'nearest' : 'linear';
63
+ }
64
+ function getMipmapFilter(filter, mipmaps) {
65
+ if (!mipmaps || !filter.includes('mipmap'))
66
+ return undefined;
67
+ return filter.endsWith('nearest') ? 'nearest' : 'linear';
68
+ }
69
+ function getBitmapDisplacementPipeline(state, format) {
70
+ let byFormat = _pipelines.get(state);
71
+ if (byFormat === undefined) {
72
+ byFormat = new Map();
73
+ _pipelines.set(state, byFormat);
74
+ }
75
+ let pipeline = byFormat.get(format);
76
+ if (pipeline !== undefined)
77
+ return pipeline;
78
+ const fs = getWgpuEffectPassState(state);
79
+ const shaderModule = state.device.createShaderModule({
80
+ code: EFFECT_VERTEX_WGSL + BITMAP_DISPLACEMENT_FRAGMENT_WGSL,
81
+ });
82
+ const layout = state.device.createPipelineLayout({
83
+ bindGroupLayouts: [fs.uniformBGLayout, fs.textureBGLayout, fs.textureBGLayout],
84
+ });
85
+ pipeline = {
86
+ blendMode: 'replace',
87
+ pipeline: state.device.createRenderPipeline({
88
+ layout,
89
+ vertex: { module: shaderModule, entryPoint: 'vs_main' },
90
+ fragment: {
91
+ module: shaderModule,
92
+ entryPoint: 'fs_main',
93
+ targets: [{ format, blend: REPLACE_BLEND }],
94
+ },
95
+ primitive: { topology: 'triangle-list' },
96
+ }),
97
+ };
98
+ byFormat.set(format, pipeline);
99
+ return pipeline;
100
+ }
101
+ export const BITMAP_DISPLACEMENT_FRAGMENT_WGSL = /* wgsl */ `
102
+ struct Uniforms {
103
+ scale : vec2f,
104
+ resolution : vec2f,
105
+ componentX : i32,
106
+ componentY : i32,
107
+ edgeMode : i32,
108
+ _pad0 : i32,
109
+ }
110
+ @group(0) @binding(0) var<uniform> uni : Uniforms;
111
+ @group(1) @binding(0) var sourceTexture : texture_2d<f32>;
112
+ @group(1) @binding(1) var sourceSampler : sampler;
113
+ @group(2) @binding(0) var mapTexture : texture_2d<f32>;
114
+ @group(2) @binding(1) var mapSampler : sampler;
115
+
116
+ fn sampleChannel(value : vec4f, component : i32) -> f32 {
117
+ if (component == 0) { return value.r; }
118
+ if (component == 1) { return value.g; }
119
+ if (component == 2) { return value.b; }
120
+ return value.a;
121
+ }
122
+
123
+ @fragment
124
+ fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {
125
+ let mapSample = textureSampleLevel(mapTexture, mapSampler, uv, 0.0);
126
+ let mapped = vec2f(
127
+ sampleChannel(mapSample, uni.componentX),
128
+ sampleChannel(mapSample, uni.componentY),
129
+ );
130
+ let displacementPixels = (mapped - vec2f(0.5)) * uni.scale;
131
+ let displacement = displacementPixels / uni.resolution;
132
+ let displaced = vec2f(uv.x + displacement.x, uv.y + displacement.y);
133
+ let sourceUv = select(
134
+ clamp(displaced, vec2f(0.0), vec2f(1.0)),
135
+ fract(displaced),
136
+ uni.edgeMode == 1,
137
+ );
138
+ return textureSampleLevel(sourceTexture, sourceSampler, sourceUv, 0.0);
139
+ }`;
140
+ const BITMAP_DISPLACEMENT_PASSTHROUGH_FRAGMENT_WGSL = /* wgsl */ `
141
+ struct Uniforms { _pad0 : f32, _pad1 : f32, _pad2 : f32, _pad3 : f32, }
142
+ @group(0) @binding(0) var<uniform> uni : Uniforms;
143
+ @group(1) @binding(0) var sourceTexture : texture_2d<f32>;
144
+ @group(1) @binding(1) var sourceSampler : sampler;
145
+
146
+ @fragment
147
+ fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {
148
+ return textureSampleLevel(sourceTexture, sourceSampler, uv, 0.0);
149
+ }`;
150
+ const NO_UNIFORMS = () => { };
151
+ const REPLACE_BLEND = {
152
+ color: { srcFactor: 'one', dstFactor: 'zero', operation: 'add' },
153
+ alpha: { srcFactor: 'one', dstFactor: 'zero', operation: 'add' },
154
+ };
155
+ const _pipelines = new WeakMap();
156
+ //# sourceMappingURL=wgpuBitmapDisplacementEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuBitmapDisplacementEffect.js","sourceRoot":"","sources":["../src/wgpuBitmapDisplacementEffect.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import type { WgpuRenderEffectRunner, WgpuRenderState } from '@flighthq/types/contract';
1
+ import type { RenderEffect, WgpuRenderEffectResolver, WgpuRenderEffectRunner, WgpuRenderState } from '@flighthq/types/contract';
2
2
  export declare function getWgpuRenderEffectRunner(state: WgpuRenderState, kind: string): WgpuRenderEffectRunner | null;
3
3
  export declare function hasWgpuRenderEffectRunner(state: WgpuRenderState, kind: string): boolean;
4
- export declare function registerWgpuRenderEffect(state: WgpuRenderState, kind: string, runner: WgpuRenderEffectRunner): void;
4
+ export declare function isWgpuRenderEffectResolvable(state: WgpuRenderState, effect: Readonly<RenderEffect>): boolean;
5
+ export declare function registerWgpuRenderEffect(state: WgpuRenderState, kind: string, runner: WgpuRenderEffectRunner, isResolvable?: WgpuRenderEffectResolver): void;
5
6
  //# sourceMappingURL=wgpuRenderEffectRegistry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wgpuRenderEffectRegistry.d.ts","sourceRoot":"","sources":["../src/wgpuRenderEffectRegistry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAWxF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAG7G;AAMD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAIvF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAGnH"}
1
+ {"version":3,"file":"wgpuRenderEffectRegistry.d.ts","sourceRoot":"","sources":["../src/wgpuRenderEffectRegistry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAWlC,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAG7G;AAMD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAIvF;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,OAAO,CAI5G;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,sBAAsB,EAC9B,YAAY,CAAC,EAAE,wBAAwB,GACtC,IAAI,CAMN"}
@@ -10,7 +10,7 @@ import { RegistryEntryState } from '@flighthq/types/contract';
10
10
  // literal kind and public default runner, and installs no padding, shader-source, or backdrop companions.
11
11
  export function getWgpuRenderEffectRunner(state, kind) {
12
12
  const entry = getWgpuRenderStateRuntime(state).registries.renderEffects.entries.get(kind);
13
- return entry?.state === RegistryEntryState.Bound ? entry.value : null;
13
+ return entry?.state === RegistryEntryState.Bound ? entry.value.runner : null;
14
14
  }
15
15
  // Returns true if a runner is registered for the given kind in this state. Symmetric with
16
16
  // hasGlRenderEffectRunner. Use to validate an effect chain before dispatching — the pipeline
@@ -19,8 +19,17 @@ export function getWgpuRenderEffectRunner(state, kind) {
19
19
  export function hasWgpuRenderEffectRunner(state, kind) {
20
20
  return (getWgpuRenderStateRuntime(state).registries.renderEffects.entries.get(kind)?.state === RegistryEntryState.Bound);
21
21
  }
22
- export function registerWgpuRenderEffect(state, kind, runner) {
22
+ export function isWgpuRenderEffectResolvable(state, effect) {
23
+ const entry = getWgpuRenderStateRuntime(state).registries.renderEffects.entries.get(effect.kind);
24
+ if (entry?.state !== RegistryEntryState.Bound)
25
+ return false;
26
+ return entry.value.isResolvable === undefined || entry.value.isResolvable(state, effect);
27
+ }
28
+ export function registerWgpuRenderEffect(state, kind, runner, isResolvable) {
23
29
  const runtime = getWgpuRenderStateRuntime(state);
24
- runtime.registries.renderEffects = withRegistryTableEntry(runtime.registries.renderEffects, kind, runner);
30
+ runtime.registries.renderEffects = withRegistryTableEntry(runtime.registries.renderEffects, kind, {
31
+ isResolvable,
32
+ runner,
33
+ });
25
34
  }
26
35
  //# sourceMappingURL=wgpuRenderEffectRegistry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wgpuRenderEffectRegistry.js","sourceRoot":"","sources":["../src/wgpuRenderEffectRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,gGAAgG;AAChG,sGAAsG;AACtG,sGAAsG;AACtG,8FAA8F;AAC9F,yGAAyG;AACzG,kGAAkG;AAClG,0GAA0G;AAE1G,MAAM,UAAU,yBAAyB,CAAC,KAAsB,EAAE,IAAY;IAC5E,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1F,OAAO,KAAK,EAAE,KAAK,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACxE,CAAC;AAED,0FAA0F;AAC1F,6FAA6F;AAC7F,4FAA4F;AAC5F,wCAAwC;AACxC,MAAM,UAAU,yBAAyB,CAAC,KAAsB,EAAE,IAAY;IAC5E,OAAO,CACL,yBAAyB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,kBAAkB,CAAC,KAAK,CAChH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAsB,EAAE,IAAY,EAAE,MAA8B;IAC3G,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACjD,OAAO,CAAC,UAAU,CAAC,aAAa,GAAG,sBAAsB,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5G,CAAC"}
1
+ {"version":3,"file":"wgpuRenderEffectRegistry.js","sourceRoot":"","sources":["../src/wgpuRenderEffectRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAO3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,gGAAgG;AAChG,sGAAsG;AACtG,sGAAsG;AACtG,8FAA8F;AAC9F,yGAAyG;AACzG,kGAAkG;AAClG,0GAA0G;AAE1G,MAAM,UAAU,yBAAyB,CAAC,KAAsB,EAAE,IAAY;IAC5E,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1F,OAAO,KAAK,EAAE,KAAK,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/E,CAAC;AAED,0FAA0F;AAC1F,6FAA6F;AAC7F,4FAA4F;AAC5F,wCAAwC;AACxC,MAAM,UAAU,yBAAyB,CAAC,KAAsB,EAAE,IAAY;IAC5E,OAAO,CACL,yBAAyB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,kBAAkB,CAAC,KAAK,CAChH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAAsB,EAAE,MAA8B;IACjG,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjG,IAAI,KAAK,EAAE,KAAK,KAAK,kBAAkB,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAAsB,EACtB,IAAY,EACZ,MAA8B,EAC9B,YAAuC;IAEvC,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACjD,OAAO,CAAC,UAAU,CAAC,aAAa,GAAG,sBAAsB,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE;QAChG,YAAY;QACZ,MAAM;KACP,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wgpuRenderTextureEffect.d.ts","sourceRoot":"","sources":["../src/wgpuRenderTextureEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,sCAAsC,EACtC,gCAAgC,EAEhC,eAAe,EACf,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAOlC,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAC7C,OAAO,CAoDT;AAED,mFAAmF;AACnF,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC7B,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAC7C,sCAAsC,CAgBxC;AAID,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,gCAAgC,GAAG,IAAI,GAC7C,IAAI,CAGN"}
1
+ {"version":3,"file":"wgpuRenderTextureEffect.d.ts","sourceRoot":"","sources":["../src/wgpuRenderTextureEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,sCAAsC,EACtC,gCAAgC,EAEhC,eAAe,EACf,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAOlC,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAC7C,OAAO,CAwDT;AAED,mFAAmF;AACnF,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC7B,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAC7C,sCAAsC,CAsBxC;AAID,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,gCAAgC,GAAG,IAAI,GAC7C,IAAI,CAGN"}
@@ -1,5 +1,5 @@
1
1
  import { getWgpuRenderTextureTarget, writeWgpuRenderTextureTarget } from '@flighthq/render-wgpu/contract';
2
- import { getWgpuRenderEffectRunner } from './wgpuRenderEffectRegistry';
2
+ import { getWgpuRenderEffectRunner, isWgpuRenderEffectResolvable } from './wgpuRenderEffectRegistry';
3
3
  // Encodes the registered members of a chain from one completed RenderTexture into another. The
4
4
  // caller owns an active command encoder and supplies one distinct scratch lease. Parity chooses the
5
5
  // first destination so the final registered operation always publishes `dest`.
@@ -9,12 +9,15 @@ export function applyWgpuRenderEffectsToRenderTexture(state, pool, source, dest,
9
9
  }
10
10
  const sourceTarget = getWgpuRenderTextureTarget(state, source);
11
11
  const unregisteredKinds = [];
12
- const operations = effects.flatMap((effect) => {
12
+ const unresolvedIndexes = [];
13
+ const operations = effects.flatMap((effect, index) => {
13
14
  const runner = getWgpuRenderEffectRunner(state, effect.kind);
14
15
  if (runner === null) {
15
16
  unregisteredKinds.push(effect.kind);
16
17
  return [];
17
18
  }
19
+ if (!isWgpuRenderEffectResolvable(state, effect))
20
+ unresolvedIndexes.push(index);
18
21
  return [{ effect, runner }];
19
22
  });
20
23
  // Reported BEFORE either early return, because both of them are the silent cases: a false return that
@@ -23,8 +26,9 @@ export function applyWgpuRenderEffectsToRenderTexture(state, pool, source, dest,
23
26
  reportWgpuRenderEffectApplication(state, {
24
27
  registeredCount: operations.length,
25
28
  requestedCount: effects.length,
26
- status: getWgpuRenderEffectApplicationStatus(effects.length, operations.length, sourceTarget !== null, getWgpuRenderTextureTarget(state, dest) !== null),
29
+ status: getWgpuRenderEffectApplicationStatus(effects.length, operations.length, unresolvedIndexes.length, sourceTarget !== null, getWgpuRenderTextureTarget(state, dest) !== null),
27
30
  unregisteredKinds,
31
+ unresolvedIndexes,
28
32
  });
29
33
  if (sourceTarget === null)
30
34
  return false;
@@ -51,15 +55,22 @@ export function applyWgpuRenderEffectsToRenderTexture(state, pool, source, dest,
51
55
  }
52
56
  /** Explains why an application did not do what the caller asked, as plain data. */
53
57
  export function explainWgpuRenderEffectApplication(state, source, dest, effects) {
54
- const unregisteredKinds = effects
55
- .filter((effect) => getWgpuRenderEffectRunner(state, effect.kind) === null)
56
- .map((effect) => effect.kind);
58
+ const unregisteredKinds = [];
59
+ const unresolvedIndexes = [];
60
+ for (let index = 0; index < effects.length; index++) {
61
+ const effect = effects[index];
62
+ if (getWgpuRenderEffectRunner(state, effect.kind) === null)
63
+ unregisteredKinds.push(effect.kind);
64
+ else if (!isWgpuRenderEffectResolvable(state, effect))
65
+ unresolvedIndexes.push(index);
66
+ }
57
67
  const registeredCount = effects.length - unregisteredKinds.length;
58
68
  return {
59
69
  registeredCount,
60
70
  requestedCount: effects.length,
61
- status: getWgpuRenderEffectApplicationStatus(effects.length, registeredCount, getWgpuRenderTextureTarget(state, source) !== null, getWgpuRenderTextureTarget(state, dest) !== null),
71
+ status: getWgpuRenderEffectApplicationStatus(effects.length, registeredCount, unresolvedIndexes.length, getWgpuRenderTextureTarget(state, source) !== null, getWgpuRenderTextureTarget(state, dest) !== null),
62
72
  unregisteredKinds,
73
+ unresolvedIndexes,
63
74
  };
64
75
  }
65
76
  // The diagnostics seam. Core stays message-free; enableWgpuRenderEffectGuards installs the reporter that
@@ -70,7 +81,7 @@ export function setWgpuRenderEffectApplicationGuard(state, guard) {
70
81
  else
71
82
  _guards.set(state, guard);
72
83
  }
73
- function getWgpuRenderEffectApplicationStatus(requestedCount, registeredCount, sourceAvailable, destinationAvailable) {
84
+ function getWgpuRenderEffectApplicationStatus(requestedCount, registeredCount, unresolvedCount, sourceAvailable, destinationAvailable) {
74
85
  // An empty chain is a no-op the caller asked for, NOT a miss — reporting it would train readers to
75
86
  // ignore the crumb. A ready destination is the highest-cost failed-call outcome, because consumers
76
87
  // keep sampling plausible pixels from an older application instead of an empty texture.
@@ -84,7 +95,9 @@ function getWgpuRenderEffectApplicationStatus(requestedCount, registeredCount, s
84
95
  return 'unregistered-effects';
85
96
  if (registeredCount < requestedCount)
86
97
  return 'partial-registration';
87
- return 'complete';
98
+ if (unresolvedCount === 0)
99
+ return 'complete';
100
+ return unresolvedCount === registeredCount ? 'unresolved-effects' : 'partial-resolution';
88
101
  }
89
102
  function reportWgpuRenderEffectApplication(state, explanation) {
90
103
  if (explanation.status === 'complete' || explanation.status === 'no-effects')
@@ -1 +1 @@
1
- {"version":3,"file":"wgpuRenderTextureEffect.js","sourceRoot":"","sources":["../src/wgpuRenderTextureEffect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wgpuRenderTextureEffect.js","sourceRoot":"","sources":["../src/wgpuRenderTextureEffect.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/effects-wgpu",
3
- "version": "0.5.1-next.685.f72fc7f",
3
+ "version": "0.5.1-next.704.19c91ec",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,14 +38,14 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/adjustments": "0.5.1-next.685.f72fc7f",
42
- "@flighthq/color": "0.5.1-next.685.f72fc7f",
43
- "@flighthq/effects": "0.5.1-next.685.f72fc7f",
44
- "@flighthq/geometry": "0.5.1-next.685.f72fc7f",
45
- "@flighthq/log": "0.5.1-next.685.f72fc7f",
46
- "@flighthq/render-wgpu": "0.5.1-next.685.f72fc7f",
47
- "@flighthq/registry": "0.5.1-next.685.f72fc7f",
48
- "@flighthq/types": "0.5.1-next.685.f72fc7f"
41
+ "@flighthq/adjustments": "0.5.1-next.704.19c91ec",
42
+ "@flighthq/color": "0.5.1-next.704.19c91ec",
43
+ "@flighthq/effects": "0.5.1-next.704.19c91ec",
44
+ "@flighthq/geometry": "0.5.1-next.704.19c91ec",
45
+ "@flighthq/log": "0.5.1-next.704.19c91ec",
46
+ "@flighthq/render-wgpu": "0.5.1-next.704.19c91ec",
47
+ "@flighthq/registry": "0.5.1-next.704.19c91ec",
48
+ "@flighthq/types": "0.5.1-next.704.19c91ec"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "@webgpu/types": "^0.1.70"
@@ -0,0 +1,173 @@
1
+ import * as renderWgpuContract from '@flighthq/render-wgpu/contract';
2
+ import { createWgpuRenderStateForTest, installWgpuMock } from '@flighthq/render-wgpu/contract';
3
+ import type { BitmapDisplacementEffect, Texture2D, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types/contract';
4
+ import { ImageChannel } from '@flighthq/types/contract';
5
+
6
+ import {
7
+ applyBitmapDisplacementEffectToWgpu,
8
+ BITMAP_DISPLACEMENT_FRAGMENT_WGSL,
9
+ defaultWgpuBitmapDisplacementEffectRunner,
10
+ isWgpuBitmapDisplacementEffectResolvable,
11
+ registerWgpuBitmapDisplacementEffect,
12
+ } from './wgpuBitmapDisplacementEffect';
13
+ import * as wgpuEffectPass from './wgpuEffectPass';
14
+ import * as wgpuEffectProgramCache from './wgpuEffectProgramCache';
15
+ import { getWgpuRenderEffectRunner, isWgpuRenderEffectResolvable } from './wgpuRenderEffectRegistry';
16
+
17
+ const sourceView = {} as GPUTextureView;
18
+ const mapView = {} as GPUTextureView;
19
+ const source = {
20
+ colorSpace: 'srgb',
21
+ format: 'rgba8unorm',
22
+ height: 64,
23
+ view: sourceView,
24
+ width: 128,
25
+ } as WgpuRenderTarget;
26
+ const dest = { ...source, view: {} as GPUTextureView } as WgpuRenderTarget;
27
+ const map = {
28
+ colorSpace: 'linear',
29
+ dimension: '2d',
30
+ sampler: {
31
+ anisotropy: 1,
32
+ magFilter: 'linear',
33
+ minFilter: 'linear',
34
+ mipmaps: false,
35
+ wrapU: 'clamp-to-edge',
36
+ wrapV: 'clamp-to-edge',
37
+ },
38
+ source: {},
39
+ } as unknown as Texture2D;
40
+ const mapSampler = {} as GPUSampler;
41
+ const sourceBindGroup = { id: 'source' } as unknown as GPUBindGroup;
42
+ const mapBindGroup = { id: 'map' } as unknown as GPUBindGroup;
43
+ const pass = {
44
+ draw: vi.fn(),
45
+ end: vi.fn(),
46
+ setBindGroup: vi.fn(),
47
+ setPipeline: vi.fn(),
48
+ };
49
+ const fs = {
50
+ acquireSlot: vi.fn(() => 256),
51
+ beginPass: vi.fn(() => pass),
52
+ sampler: {} as GPUSampler,
53
+ textureBGLayout: {} as GPUBindGroupLayout,
54
+ uniformBG: {} as GPUBindGroup,
55
+ uniformBGLayout: {} as GPUBindGroupLayout,
56
+ writeSlot: vi.fn((_offset: number, callback: (f32: Float32Array, i32: Int32Array) => void) => {
57
+ const f32 = new Float32Array(16);
58
+ callback(f32, new Int32Array(f32.buffer));
59
+ writtenUniforms = f32;
60
+ }),
61
+ };
62
+ const device = {
63
+ createBindGroup: vi.fn(({ entries }: GPUBindGroupDescriptor) =>
64
+ Array.from(entries)[0]?.resource === sourceView ? sourceBindGroup : mapBindGroup,
65
+ ),
66
+ createPipelineLayout: vi.fn(() => ({})),
67
+ createRenderPipeline: vi.fn(() => ({ id: 'pipeline' })),
68
+ createShaderModule: vi.fn(() => ({})),
69
+ };
70
+ const state = { device, format: 'rgba8unorm' } as unknown as WgpuRenderState;
71
+ let writtenUniforms = new Float32Array();
72
+
73
+ beforeAll(() => installWgpuMock());
74
+
75
+ beforeEach(() => {
76
+ writtenUniforms = new Float32Array();
77
+ vi.clearAllMocks();
78
+ vi.spyOn(renderWgpuContract, 'resolveWgpuTexture').mockReturnValue({ view: mapView } as never);
79
+ vi.spyOn(renderWgpuContract, 'getWgpuSampler').mockReturnValue(mapSampler);
80
+ vi.spyOn(wgpuEffectPass, 'getWgpuEffectPassState').mockReturnValue(fs as never);
81
+ vi.spyOn(wgpuEffectPass, 'drawWgpuEffectPass').mockImplementation((() => {}) as never);
82
+ vi.spyOn(wgpuEffectProgramCache, 'getWgpuEffectPipeline').mockReturnValue({ pipeline: {} } as never);
83
+ });
84
+
85
+ afterEach(() => vi.restoreAllMocks());
86
+
87
+ function effect(overrides: Readonly<Partial<BitmapDisplacementEffect>> = {}): BitmapDisplacementEffect {
88
+ return { kind: 'BitmapDisplacementEffect', map, ...overrides } as BitmapDisplacementEffect;
89
+ }
90
+
91
+ describe('applyBitmapDisplacementEffectToWgpu', () => {
92
+ it('binds source and resolved map views in one pass', () => {
93
+ applyBitmapDisplacementEffectToWgpu(state, source, dest, effect());
94
+
95
+ expect(renderWgpuContract.resolveWgpuTexture).toHaveBeenCalledWith(state, map, false, source.colorSpace);
96
+ expect(pass.setBindGroup).toHaveBeenNthCalledWith(2, 1, sourceBindGroup);
97
+ expect(pass.setBindGroup).toHaveBeenNthCalledWith(3, 2, mapBindGroup);
98
+ expect(pass.draw).toHaveBeenCalledWith(6);
99
+ expect(pass.end).toHaveBeenCalledOnce();
100
+ });
101
+
102
+ it('maps channels, signed scales, dimensions, and edge modes into uniforms', () => {
103
+ applyBitmapDisplacementEffectToWgpu(
104
+ state,
105
+ source,
106
+ dest,
107
+ effect({
108
+ componentX: ImageChannel.Alpha,
109
+ componentY: ImageChannel.Blue,
110
+ edgeMode: 'clamp',
111
+ scaleX: -14,
112
+ scaleY: 9,
113
+ }),
114
+ );
115
+ const i32 = new Int32Array(writtenUniforms.buffer);
116
+
117
+ expect([...writtenUniforms.slice(0, 4)]).toEqual([-14, 9, source.width, source.height]);
118
+ expect([...i32.slice(4, 7)]).toEqual([ImageChannel.Alpha, ImageChannel.Blue, 0]);
119
+
120
+ applyBitmapDisplacementEffectToWgpu(state, source, dest, effect({ edgeMode: 'wrap' }));
121
+ expect(new Int32Array(writtenUniforms.buffer)[6]).toBe(1);
122
+ });
123
+
124
+ it('ships channel mapping, centred offset, wrap, clamp, and top-left vertical displacement', () => {
125
+ applyBitmapDisplacementEffectToWgpu(state, source, dest, effect());
126
+
127
+ expect(BITMAP_DISPLACEMENT_FRAGMENT_WGSL).toContain('sampleChannel(mapSample, uni.componentX)');
128
+ expect(BITMAP_DISPLACEMENT_FRAGMENT_WGSL).toContain('sampleChannel(mapSample, uni.componentY)');
129
+ expect(BITMAP_DISPLACEMENT_FRAGMENT_WGSL).toContain('(mapped - vec2f(0.5)) * uni.scale');
130
+ expect(BITMAP_DISPLACEMENT_FRAGMENT_WGSL).toContain('fract(displaced)');
131
+ expect(BITMAP_DISPLACEMENT_FRAGMENT_WGSL).toContain('clamp(displaced, vec2f(0.0), vec2f(1.0))');
132
+ expect(BITMAP_DISPLACEMENT_FRAGMENT_WGSL).toContain('uv.y + displacement.y');
133
+ });
134
+
135
+ it('copies through when the map is absent or unresolved', () => {
136
+ vi.mocked(renderWgpuContract.resolveWgpuTexture).mockReturnValue(null);
137
+ applyBitmapDisplacementEffectToWgpu(state, source, dest, effect());
138
+ applyBitmapDisplacementEffectToWgpu(state, source, dest, effect({ map: null }));
139
+
140
+ expect(wgpuEffectPass.drawWgpuEffectPass).toHaveBeenCalledTimes(2);
141
+ });
142
+ });
143
+
144
+ describe('defaultWgpuBitmapDisplacementEffectRunner', () => {
145
+ it('routes the runner context through to the pass', () => {
146
+ defaultWgpuBitmapDisplacementEffectRunner(
147
+ { dest, pool: { free: [] }, source, state } as never,
148
+ effect({ scaleX: 3, scaleY: 4 }),
149
+ );
150
+ expect([...writtenUniforms.slice(0, 2)]).toEqual([3, 4]);
151
+ });
152
+ });
153
+
154
+ describe('isWgpuBitmapDisplacementEffectResolvable', () => {
155
+ it('exposes the missing-map sentinel', () => {
156
+ expect(isWgpuBitmapDisplacementEffectResolvable(state, effect())).toBe(true);
157
+ expect(isWgpuBitmapDisplacementEffectResolvable(state, effect({ map: null }))).toBe(false);
158
+ vi.mocked(renderWgpuContract.resolveWgpuTexture).mockReturnValue(null);
159
+ expect(isWgpuBitmapDisplacementEffectResolvable(state, effect())).toBe(false);
160
+ });
161
+ });
162
+
163
+ describe('registerWgpuBitmapDisplacementEffect', () => {
164
+ it('registers both the runner and per-instance map resolver', async () => {
165
+ const registeredState = await createWgpuRenderStateForTest();
166
+
167
+ registerWgpuBitmapDisplacementEffect(registeredState);
168
+ expect(getWgpuRenderEffectRunner(registeredState, 'BitmapDisplacementEffect')).toBe(
169
+ defaultWgpuBitmapDisplacementEffectRunner,
170
+ );
171
+ expect(isWgpuRenderEffectResolvable(registeredState, effect({ map: null }))).toBe(false);
172
+ });
173
+ });
@@ -7,6 +7,7 @@ import {
7
7
  import {
8
8
  getWgpuRenderEffectRunner,
9
9
  hasWgpuRenderEffectRunner,
10
+ isWgpuRenderEffectResolvable,
10
11
  registerWgpuRenderEffect,
11
12
  } from './wgpuRenderEffectRegistry';
12
13
 
@@ -34,6 +35,21 @@ describe('hasWgpuRenderEffectRunner', () => {
34
35
  });
35
36
  });
36
37
 
38
+ describe('isWgpuRenderEffectResolvable', () => {
39
+ it('treats a runner without a resolver as always resolvable', async () => {
40
+ const state = await createWgpuRenderStateForTest();
41
+ registerWgpuRenderEffect(state, 'acme.Always', vi.fn());
42
+ expect(isWgpuRenderEffectResolvable(state, { kind: 'acme.Always' })).toBe(true);
43
+ });
44
+
45
+ it('asks the resolver for each effect instance', async () => {
46
+ const state = await createWgpuRenderStateForTest();
47
+ registerWgpuRenderEffect(state, 'acme.Named', vi.fn(), (_state, effect) => 'key' in effect);
48
+ expect(isWgpuRenderEffectResolvable(state, { kind: 'acme.Named' })).toBe(false);
49
+ expect(isWgpuRenderEffectResolvable(state, { key: 'ready', kind: 'acme.Named' } as never)).toBe(true);
50
+ });
51
+ });
52
+
37
53
  describe('registerWgpuRenderEffect', () => {
38
54
  it('registers a runner retrievable by its kind', async () => {
39
55
  const state = await createWgpuRenderStateForTest();
@@ -55,6 +71,9 @@ describe('registerWgpuRenderEffect', () => {
55
71
  registerWgpuRenderEffect(state, 'TestEffect', runnerB);
56
72
 
57
73
  expect(getWgpuRenderEffectRunner(state, 'TestEffect')).toBe(runnerB);
58
- expect(before.entries.get('TestEffect')).toEqual({ state: 'bound', value: runnerA });
74
+ expect(before.entries.get('TestEffect')).toEqual({
75
+ state: 'bound',
76
+ value: { isResolvable: undefined, runner: runnerA },
77
+ });
59
78
  });
60
79
  });
@@ -105,10 +105,27 @@ describe('explainWgpuRenderEffectApplication', () => {
105
105
  requestedCount: 2,
106
106
  status: 'partial-registration',
107
107
  unregisteredKinds: ['test.explain-missing'],
108
+ unresolvedIndexes: [],
109
+ });
110
+ });
111
+
112
+ it('names a registered effect whose instance cannot resolve', async () => {
113
+ const state = await createWgpuRenderStateForTest();
114
+ const pool = createWgpuRenderTexturePool();
115
+ const source = acquireWgpuRenderTexture(state, pool, { width: 8, height: 8 });
116
+ const dest = acquireWgpuRenderTexture(state, pool, { width: 8, height: 8 });
117
+ writeWgpuRenderTextureTarget(state, source, () => {});
118
+ registerWgpuRenderEffect(state, 'test.explain-unresolved', vi.fn(), () => false);
119
+
120
+ expect(
121
+ explainWgpuRenderEffectApplication(state, source, dest, [{ kind: 'test.explain-unresolved' }]),
122
+ ).toMatchObject({
123
+ registeredCount: 1,
124
+ requestedCount: 1,
125
+ status: 'unresolved-effects',
126
+ unregisteredKinds: [],
127
+ unresolvedIndexes: [0],
108
128
  });
109
- // No resolvability field: WGPU has no resolver half to registration, so a field mirroring GL's
110
- // unresolvedIndexes could never be non-empty. Its absence is the contract, not an omission.
111
- expect('unresolvedIndexes' in explanation).toBe(false);
112
129
  });
113
130
  });
114
131
 
@@ -11,6 +11,7 @@ beforeAll(() => {
11
11
  describe('WGPU effect registration', () => {
12
12
  it.each([
13
13
  ['BevelEffect', 'registerWgpuBevelEffect', 'defaultWgpuBevelEffectRunner'],
14
+ ['BitmapDisplacementEffect', 'registerWgpuBitmapDisplacementEffect', 'defaultWgpuBitmapDisplacementEffectRunner'],
14
15
  ['BlendEffect', 'registerWgpuBlendEffect', 'defaultWgpuBlendEffectRunner'],
15
16
  ['BloomEffect', 'registerWgpuBloomEffect', 'defaultWgpuBloomEffectRunner'],
16
17
  ['BlurEffect', 'registerWgpuBlurEffect', 'defaultWgpuBlurEffectRunner'],