@flighthq/effects-gl 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-gl`. The `@f
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-gl@0.5.1-next.685.f72fc7f](https://github.com/flighthq/flight/tree/f72fc7feaa9653d950f39c7d2fe6365f48e82e51/packages/effects-gl)
17
- - [License](https://github.com/flighthq/flight/blob/f72fc7feaa9653d950f39c7d2fe6365f48e82e51/LICENSE.md)
16
+ - [Source for @flighthq/effects-gl@0.5.1-next.704.19c91ec](https://github.com/flighthq/flight/tree/19c91ec3e569d6b3b471682726465a79fba9f8cb/packages/effects-gl)
17
+ - [License](https://github.com/flighthq/flight/blob/19c91ec3e569d6b3b471682726465a79fba9f8cb/LICENSE.md)
@@ -1,6 +1,7 @@
1
1
  export * from './enableGlRenderEffectGuards';
2
2
  export * from './glColorMatrixPass';
3
3
  export * from './glBevelEffect';
4
+ export * from './glBitmapDisplacementEffect';
4
5
  export * from './glBlendEffect';
5
6
  export * from './glCompositeEffect';
6
7
  export * from './glContactShadowsEffect';
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
package/dist/contract.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './enableGlRenderEffectGuards';
2
2
  export * from './glColorMatrixPass';
3
3
  export * from './glBevelEffect';
4
+ export * from './glBitmapDisplacementEffect';
4
5
  export * from './glBlendEffect';
5
6
  export * from './glCompositeEffect';
6
7
  export * from './glContactShadowsEffect';
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { BitmapDisplacementEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget, RenderEffect } from '@flighthq/types/contract';
2
+ export declare function applyBitmapDisplacementEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<BitmapDisplacementEffect>): void;
3
+ export declare const defaultGlBitmapDisplacementEffectRunner: GlRenderEffectRunner;
4
+ export declare function isGlBitmapDisplacementEffectResolvable(state: GlRenderState, effect: Readonly<RenderEffect>): boolean;
5
+ export declare function registerGlBitmapDisplacementEffect(state: GlRenderState): void;
6
+ export declare const BITMAP_DISPLACEMENT_FRAGMENT_SRC = "#version 300 es\nprecision highp float;\nin vec2 v_texCoord;\nuniform sampler2D u_texture0;\nuniform sampler2D u_texture1;\nuniform int u_componentX;\nuniform int u_componentY;\nuniform int u_edgeMode;\nuniform int u_mapIsRenderTarget;\nuniform vec2 u_resolution;\nuniform vec2 u_scale;\nout vec4 o_color;\n\nfloat sampleChannel(vec4 value, int component) {\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\nvoid main() {\n // Fullscreen GL texcoords and render-target textures are bottom-origin. Uploaded Bitmap/Image map\n // rows are top-origin, so reflect only that source family; a RenderTarget map already matches.\n vec2 mapUv = vec2(v_texCoord.x, u_mapIsRenderTarget == 1 ? v_texCoord.y : 1.0 - v_texCoord.y);\n vec4 mapSample = texture(u_texture1, mapUv);\n vec2 mapped = vec2(\n sampleChannel(mapSample, u_componentX),\n sampleChannel(mapSample, u_componentY)\n );\n vec2 displacementPixels = (mapped - vec2(0.5)) * u_scale;\n vec2 displacement = displacementPixels / u_resolution;\n vec2 displaced = vec2(v_texCoord.x + displacement.x, v_texCoord.y - displacement.y);\n vec2 sourceUv = u_edgeMode == 1\n ? fract(displaced)\n : clamp(displaced, vec2(0.0), vec2(1.0));\n o_color = texture(u_texture0, sourceUv);\n}";
7
+ //# sourceMappingURL=glBitmapDisplacementEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glBitmapDisplacementEffect.d.ts","sourceRoot":"","sources":["../src/glBitmapDisplacementEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,wBAAwB,EACxB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,YAAY,EACb,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,wBAAwB,CAAC,GACzC,IAAI,CAoCN;AAED,eAAO,MAAM,uCAAuC,EAAE,oBAErD,CAAC;AAKF,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,OAAO,CAGpH;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAO7E;AAED,eAAO,MAAM,gCAAgC,+zCAoC3C,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { drawGlFullscreenPass, resolveGlTexture } from '@flighthq/render-gl/contract';
2
+ import { ImageChannel, RenderTargetTextureSourceKind } from '@flighthq/types/contract';
3
+ import { getGlEffectProgram, getGlEffectUniformLocation } from './glEffectProgramCache';
4
+ import { registerGlRenderEffect } from './glRenderEffectRegistry';
5
+ // Samples the displacement map and source in one fullscreen pass. Map channels are centred around
6
+ // 0.5, converted to pixel offsets by scaleX/scaleY, then normalized by the source resolution. Positive
7
+ // Y means down in image space, so the GL target's bottom-left texcoord subtracts that component.
8
+ export function applyBitmapDisplacementEffectToGl(state, source, dest, effect) {
9
+ const map = effect.map;
10
+ const mapTexture = map === null ? null : resolveGlTexture(state, map, false, source.colorSpace);
11
+ if (mapTexture === null) {
12
+ const passthrough = getGlEffectProgram(state, 'spatial.bitmapDisplacement.passthrough', BITMAP_DISPLACEMENT_PASSTHROUGH_FRAGMENT_SRC);
13
+ drawGlFullscreenPass(state, passthrough, [source.texture], dest, NO_UNIFORMS);
14
+ return;
15
+ }
16
+ const resolvedMap = map;
17
+ const program = getGlEffectProgram(state, 'spatial.bitmapDisplacement', BITMAP_DISPLACEMENT_FRAGMENT_SRC);
18
+ const componentX = effect.componentX ?? ImageChannel.Red;
19
+ const componentY = effect.componentY ?? ImageChannel.Green;
20
+ const scaleX = effect.scaleX ?? 0;
21
+ const scaleY = effect.scaleY ?? 0;
22
+ const edgeMode = effect.edgeMode === 'clamp' ? 0 : 1;
23
+ const mapIsRenderTarget = resolvedMap.source?.kind === RenderTargetTextureSourceKind;
24
+ drawGlFullscreenPass(state, program, [source.texture, mapTexture], dest, (gl, p) => {
25
+ const componentXLoc = getGlEffectUniformLocation(state, p, 'u_componentX');
26
+ const componentYLoc = getGlEffectUniformLocation(state, p, 'u_componentY');
27
+ const edgeModeLoc = getGlEffectUniformLocation(state, p, 'u_edgeMode');
28
+ const mapIsRenderTargetLoc = getGlEffectUniformLocation(state, p, 'u_mapIsRenderTarget');
29
+ const resolutionLoc = getGlEffectUniformLocation(state, p, 'u_resolution');
30
+ const scaleLoc = getGlEffectUniformLocation(state, p, 'u_scale');
31
+ if (componentXLoc !== null)
32
+ gl.uniform1i(componentXLoc, componentX);
33
+ if (componentYLoc !== null)
34
+ gl.uniform1i(componentYLoc, componentY);
35
+ if (edgeModeLoc !== null)
36
+ gl.uniform1i(edgeModeLoc, edgeMode);
37
+ if (mapIsRenderTargetLoc !== null)
38
+ gl.uniform1i(mapIsRenderTargetLoc, mapIsRenderTarget ? 1 : 0);
39
+ if (resolutionLoc !== null)
40
+ gl.uniform2f(resolutionLoc, source.width, source.height);
41
+ if (scaleLoc !== null)
42
+ gl.uniform2f(scaleLoc, scaleX, scaleY);
43
+ });
44
+ }
45
+ export const defaultGlBitmapDisplacementEffectRunner = (ctx, effect) => {
46
+ applyBitmapDisplacementEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
47
+ };
48
+ // Whether this instance resolves to the map-driven pass. The runner still copies through when false;
49
+ // pairing this query with registration lets the render-texture explanation distinguish that sentinel
50
+ // from a working displacement whose output happens to resemble its input.
51
+ export function isGlBitmapDisplacementEffectResolvable(state, effect) {
52
+ const map = effect.map;
53
+ return map !== null && resolveGlTexture(state, map, false, map.colorSpace === 'linear' ? 'linear' : 'srgb') !== null;
54
+ }
55
+ export function registerGlBitmapDisplacementEffect(state) {
56
+ registerGlRenderEffect(state, 'BitmapDisplacementEffect', defaultGlBitmapDisplacementEffectRunner, isGlBitmapDisplacementEffectResolvable);
57
+ }
58
+ export const BITMAP_DISPLACEMENT_FRAGMENT_SRC = `#version 300 es
59
+ precision highp float;
60
+ in vec2 v_texCoord;
61
+ uniform sampler2D u_texture0;
62
+ uniform sampler2D u_texture1;
63
+ uniform int u_componentX;
64
+ uniform int u_componentY;
65
+ uniform int u_edgeMode;
66
+ uniform int u_mapIsRenderTarget;
67
+ uniform vec2 u_resolution;
68
+ uniform vec2 u_scale;
69
+ out vec4 o_color;
70
+
71
+ float sampleChannel(vec4 value, int component) {
72
+ if (component == 0) return value.r;
73
+ if (component == 1) return value.g;
74
+ if (component == 2) return value.b;
75
+ return value.a;
76
+ }
77
+
78
+ void main() {
79
+ // Fullscreen GL texcoords and render-target textures are bottom-origin. Uploaded Bitmap/Image map
80
+ // rows are top-origin, so reflect only that source family; a RenderTarget map already matches.
81
+ vec2 mapUv = vec2(v_texCoord.x, u_mapIsRenderTarget == 1 ? v_texCoord.y : 1.0 - v_texCoord.y);
82
+ vec4 mapSample = texture(u_texture1, mapUv);
83
+ vec2 mapped = vec2(
84
+ sampleChannel(mapSample, u_componentX),
85
+ sampleChannel(mapSample, u_componentY)
86
+ );
87
+ vec2 displacementPixels = (mapped - vec2(0.5)) * u_scale;
88
+ vec2 displacement = displacementPixels / u_resolution;
89
+ vec2 displaced = vec2(v_texCoord.x + displacement.x, v_texCoord.y - displacement.y);
90
+ vec2 sourceUv = u_edgeMode == 1
91
+ ? fract(displaced)
92
+ : clamp(displaced, vec2(0.0), vec2(1.0));
93
+ o_color = texture(u_texture0, sourceUv);
94
+ }`;
95
+ const BITMAP_DISPLACEMENT_PASSTHROUGH_FRAGMENT_SRC = `#version 300 es
96
+ precision highp float;
97
+ in vec2 v_texCoord;
98
+ uniform sampler2D u_texture0;
99
+ out vec4 o_color;
100
+ void main() {
101
+ o_color = texture(u_texture0, v_texCoord);
102
+ }`;
103
+ const NO_UNIFORMS = () => { };
104
+ //# sourceMappingURL=glBitmapDisplacementEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glBitmapDisplacementEffect.js","sourceRoot":"","sources":["../src/glBitmapDisplacementEffect.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { applyBlurEffectToGlRenderTextures, applyGaussianBlurToGlRenderTextures, disableGlRenderEffectGuards, enableGlRenderEffectGuards, explainGlRenderEffectApplication, applyGlRenderEffectsToRenderTexture, beginGlRenderEffectPipeline, createGlRenderEffectPipeline, defaultGlBevelEffectRunner, defaultGlBlendEffectRunner, defaultGlBloomEffectRunner, defaultGlBlurEffectRunner, defaultGlBokehDepthOfFieldEffectRunner, defaultGlCameraMotionBlurEffectRunner, defaultGlChromaticAberrationEffectRunner, defaultGlCompositeEffectRunner, defaultGlContactShadowsEffectRunner, defaultGlConvolutionEffectRunner, defaultGlCrtEffectRunner, defaultGlCustomShaderEffectRunner, defaultGlDirectionalBlurEffectRunner, defaultGlDisplacementEffectRunner, defaultGlDitherEffectRunner, defaultGlDropShadowEffectRunner, defaultGlFilmGrainEffectRunner, defaultGlFxaaEffectRunner, defaultGlGlitchEffectRunner, defaultGlGodRaysEffectRunner, defaultGlGradientBevelEffectRunner, defaultGlGradientGlowEffectRunner, defaultGlHalftoneEffectRunner, defaultGlInnerGlowEffectRunner, defaultGlInnerShadowEffectRunner, defaultGlKuwaharaEffectRunner, defaultGlLensDirtEffectRunner, defaultGlLensDistortionEffectRunner, defaultGlLensFlareEffectRunner, defaultGlMedianEffectRunner, defaultGlMotionBlurEffectRunner, defaultGlOuterGlowEffectRunner, defaultGlOutlineEffectRunner, defaultGlPixelateEffectRunner, defaultGlPosterizeEffectRunner, defaultGlRadialBlurEffectRunner, defaultGlScanlinesEffectRunner, defaultGlScreenSpaceFogEffectRunner, defaultGlSharpenEffectRunner, defaultGlSketchEffectRunner, defaultGlSmaaEffectRunner, defaultGlSsaoEffectRunner, defaultGlTiltShiftEffectRunner, defaultGlToneMapEffectRunner, defaultGlVignetteEffectRunner, defaultGlWhiteBalanceEffectRunner, endGlRenderEffectPipeline, getGlCustomShaderSource, registerGlCustomShaderSource, registerGlBlendEffectBackdrop, registerGlBevelEffect, registerGlBlurEffect, registerGlContactShadowsEffect, registerGlDropShadowEffect, registerGlGradientBevelEffect, registerGlGradientGlowEffect, registerGlInnerGlowEffect, registerGlInnerShadowEffect, registerGlOuterGlowEffect, registerGlBlendEffect, registerGlBloomEffect, registerGlBokehDepthOfFieldEffect, registerGlCameraMotionBlurEffect, registerGlChromaticAberrationEffect, registerGlCompositeEffect, registerGlConvolutionEffect, registerGlCrtEffect, registerGlCustomShaderEffect, registerGlDirectionalBlurEffect, registerGlDisplacementEffect, registerGlDitherEffect, registerGlFilmGrainEffect, registerGlFxaaEffect, registerGlGlitchEffect, registerGlGodRaysEffect, registerGlHalftoneEffect, registerGlKuwaharaEffect, registerGlLensDirtEffect, registerGlLensDistortionEffect, registerGlLensFlareEffect, registerGlMedianEffect, registerGlMotionBlurEffect, registerGlOutlineEffect, registerGlPixelateEffect, registerGlPosterizeEffect, registerGlRadialBlurEffect, registerGlScanlinesEffect, registerGlScreenSpaceFogEffect, registerGlSharpenEffect, registerGlSketchEffect, registerGlSmaaEffect, registerGlSsaoEffect, registerGlTiltShiftEffect, registerGlToneMapEffect, registerGlVignetteEffect, registerGlWhiteBalanceEffect, registerGlRenderEffect, setGlRenderEffectVelocityTexture, } from './contract';
1
+ export { applyBlurEffectToGlRenderTextures, applyGaussianBlurToGlRenderTextures, disableGlRenderEffectGuards, enableGlRenderEffectGuards, explainGlRenderEffectApplication, applyGlRenderEffectsToRenderTexture, beginGlRenderEffectPipeline, createGlRenderEffectPipeline, defaultGlBevelEffectRunner, defaultGlBitmapDisplacementEffectRunner, defaultGlBlendEffectRunner, defaultGlBloomEffectRunner, defaultGlBlurEffectRunner, defaultGlBokehDepthOfFieldEffectRunner, defaultGlCameraMotionBlurEffectRunner, defaultGlChromaticAberrationEffectRunner, defaultGlCompositeEffectRunner, defaultGlContactShadowsEffectRunner, defaultGlConvolutionEffectRunner, defaultGlCrtEffectRunner, defaultGlCustomShaderEffectRunner, defaultGlDirectionalBlurEffectRunner, defaultGlDisplacementEffectRunner, defaultGlDitherEffectRunner, defaultGlDropShadowEffectRunner, defaultGlFilmGrainEffectRunner, defaultGlFxaaEffectRunner, defaultGlGlitchEffectRunner, defaultGlGodRaysEffectRunner, defaultGlGradientBevelEffectRunner, defaultGlGradientGlowEffectRunner, defaultGlHalftoneEffectRunner, defaultGlInnerGlowEffectRunner, defaultGlInnerShadowEffectRunner, defaultGlKuwaharaEffectRunner, defaultGlLensDirtEffectRunner, defaultGlLensDistortionEffectRunner, defaultGlLensFlareEffectRunner, defaultGlMedianEffectRunner, defaultGlMotionBlurEffectRunner, defaultGlOuterGlowEffectRunner, defaultGlOutlineEffectRunner, defaultGlPixelateEffectRunner, defaultGlPosterizeEffectRunner, defaultGlRadialBlurEffectRunner, defaultGlScanlinesEffectRunner, defaultGlScreenSpaceFogEffectRunner, defaultGlSharpenEffectRunner, defaultGlSketchEffectRunner, defaultGlSmaaEffectRunner, defaultGlSsaoEffectRunner, defaultGlTiltShiftEffectRunner, defaultGlToneMapEffectRunner, defaultGlVignetteEffectRunner, defaultGlWhiteBalanceEffectRunner, endGlRenderEffectPipeline, getGlCustomShaderSource, registerGlCustomShaderSource, registerGlBlendEffectBackdrop, registerGlBevelEffect, registerGlBitmapDisplacementEffect, registerGlBlurEffect, registerGlContactShadowsEffect, registerGlDropShadowEffect, registerGlGradientBevelEffect, registerGlGradientGlowEffect, registerGlInnerGlowEffect, registerGlInnerShadowEffect, registerGlOuterGlowEffect, registerGlBlendEffect, registerGlBloomEffect, registerGlBokehDepthOfFieldEffect, registerGlCameraMotionBlurEffect, registerGlChromaticAberrationEffect, registerGlCompositeEffect, registerGlConvolutionEffect, registerGlCrtEffect, registerGlCustomShaderEffect, registerGlDirectionalBlurEffect, registerGlDisplacementEffect, registerGlDitherEffect, registerGlFilmGrainEffect, registerGlFxaaEffect, registerGlGlitchEffect, registerGlGodRaysEffect, registerGlHalftoneEffect, registerGlKuwaharaEffect, registerGlLensDirtEffect, registerGlLensDistortionEffect, registerGlLensFlareEffect, registerGlMedianEffect, registerGlMotionBlurEffect, registerGlOutlineEffect, registerGlPixelateEffect, registerGlPosterizeEffect, registerGlRadialBlurEffect, registerGlScanlinesEffect, registerGlScreenSpaceFogEffect, registerGlSharpenEffect, registerGlSketchEffect, registerGlSmaaEffect, registerGlSsaoEffect, registerGlTiltShiftEffect, registerGlToneMapEffect, registerGlVignetteEffect, registerGlWhiteBalanceEffect, registerGlRenderEffect, setGlRenderEffectVelocityTexture, } 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,iCAAiC,EACjC,mCAAmC,EACnC,2BAA2B,EAC3B,0BAA0B,EAC1B,gCAAgC,EAChC,mCAAmC,EACnC,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EACzB,sCAAsC,EACtC,qCAAqC,EACrC,wCAAwC,EACxC,8BAA8B,EAC9B,mCAAmC,EACnC,gCAAgC,EAChC,wBAAwB,EACxB,iCAAiC,EACjC,oCAAoC,EACpC,iCAAiC,EACjC,2BAA2B,EAC3B,+BAA+B,EAC/B,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,kCAAkC,EAClC,iCAAiC,EACjC,6BAA6B,EAC7B,8BAA8B,EAC9B,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,EAC7B,mCAAmC,EACnC,8BAA8B,EAC9B,2BAA2B,EAC3B,+BAA+B,EAC/B,8BAA8B,EAC9B,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,+BAA+B,EAC/B,8BAA8B,EAC9B,mCAAmC,EACnC,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,EAC9B,4BAA4B,EAC5B,6BAA6B,EAC7B,iCAAiC,EACjC,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,8BAA8B,EAC9B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,iCAAiC,EACjC,gCAAgC,EAChC,mCAAmC,EACnC,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACnB,4BAA4B,EAC5B,+BAA+B,EAC/B,4BAA4B,EAC5B,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,sBAAsB,EACtB,gCAAgC,GACjC,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,mCAAmC,EACnC,2BAA2B,EAC3B,0BAA0B,EAC1B,gCAAgC,EAChC,mCAAmC,EACnC,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,uCAAuC,EACvC,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EACzB,sCAAsC,EACtC,qCAAqC,EACrC,wCAAwC,EACxC,8BAA8B,EAC9B,mCAAmC,EACnC,gCAAgC,EAChC,wBAAwB,EACxB,iCAAiC,EACjC,oCAAoC,EACpC,iCAAiC,EACjC,2BAA2B,EAC3B,+BAA+B,EAC/B,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,kCAAkC,EAClC,iCAAiC,EACjC,6BAA6B,EAC7B,8BAA8B,EAC9B,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,EAC7B,mCAAmC,EACnC,8BAA8B,EAC9B,2BAA2B,EAC3B,+BAA+B,EAC/B,8BAA8B,EAC9B,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,+BAA+B,EAC/B,8BAA8B,EAC9B,mCAAmC,EACnC,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,EAC9B,4BAA4B,EAC5B,6BAA6B,EAC7B,iCAAiC,EACjC,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,qBAAqB,EACrB,kCAAkC,EAClC,oBAAoB,EACpB,8BAA8B,EAC9B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,iCAAiC,EACjC,gCAAgC,EAChC,mCAAmC,EACnC,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACnB,4BAA4B,EAC5B,+BAA+B,EAC/B,4BAA4B,EAC5B,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,sBAAsB,EACtB,gCAAgC,GACjC,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { applyBlurEffectToGlRenderTextures, applyGaussianBlurToGlRenderTextures, disableGlRenderEffectGuards, enableGlRenderEffectGuards, explainGlRenderEffectApplication, applyGlRenderEffectsToRenderTexture, beginGlRenderEffectPipeline, createGlRenderEffectPipeline, defaultGlBevelEffectRunner, defaultGlBlendEffectRunner, defaultGlBloomEffectRunner, defaultGlBlurEffectRunner, defaultGlBokehDepthOfFieldEffectRunner, defaultGlCameraMotionBlurEffectRunner, defaultGlChromaticAberrationEffectRunner, defaultGlCompositeEffectRunner, defaultGlContactShadowsEffectRunner, defaultGlConvolutionEffectRunner, defaultGlCrtEffectRunner, defaultGlCustomShaderEffectRunner, defaultGlDirectionalBlurEffectRunner, defaultGlDisplacementEffectRunner, defaultGlDitherEffectRunner, defaultGlDropShadowEffectRunner, defaultGlFilmGrainEffectRunner, defaultGlFxaaEffectRunner, defaultGlGlitchEffectRunner, defaultGlGodRaysEffectRunner, defaultGlGradientBevelEffectRunner, defaultGlGradientGlowEffectRunner, defaultGlHalftoneEffectRunner, defaultGlInnerGlowEffectRunner, defaultGlInnerShadowEffectRunner, defaultGlKuwaharaEffectRunner, defaultGlLensDirtEffectRunner, defaultGlLensDistortionEffectRunner, defaultGlLensFlareEffectRunner, defaultGlMedianEffectRunner, defaultGlMotionBlurEffectRunner, defaultGlOuterGlowEffectRunner, defaultGlOutlineEffectRunner, defaultGlPixelateEffectRunner, defaultGlPosterizeEffectRunner, defaultGlRadialBlurEffectRunner, defaultGlScanlinesEffectRunner, defaultGlScreenSpaceFogEffectRunner, defaultGlSharpenEffectRunner, defaultGlSketchEffectRunner, defaultGlSmaaEffectRunner, defaultGlSsaoEffectRunner, defaultGlTiltShiftEffectRunner, defaultGlToneMapEffectRunner, defaultGlVignetteEffectRunner, defaultGlWhiteBalanceEffectRunner, endGlRenderEffectPipeline, getGlCustomShaderSource, registerGlCustomShaderSource, registerGlBlendEffectBackdrop, registerGlBevelEffect, registerGlBlurEffect, registerGlContactShadowsEffect, registerGlDropShadowEffect, registerGlGradientBevelEffect, registerGlGradientGlowEffect, registerGlInnerGlowEffect, registerGlInnerShadowEffect, registerGlOuterGlowEffect, registerGlBlendEffect, registerGlBloomEffect, registerGlBokehDepthOfFieldEffect, registerGlCameraMotionBlurEffect, registerGlChromaticAberrationEffect, registerGlCompositeEffect, registerGlConvolutionEffect, registerGlCrtEffect, registerGlCustomShaderEffect, registerGlDirectionalBlurEffect, registerGlDisplacementEffect, registerGlDitherEffect, registerGlFilmGrainEffect, registerGlFxaaEffect, registerGlGlitchEffect, registerGlGodRaysEffect, registerGlHalftoneEffect, registerGlKuwaharaEffect, registerGlLensDirtEffect, registerGlLensDistortionEffect, registerGlLensFlareEffect, registerGlMedianEffect, registerGlMotionBlurEffect, registerGlOutlineEffect, registerGlPixelateEffect, registerGlPosterizeEffect, registerGlRadialBlurEffect, registerGlScanlinesEffect, registerGlScreenSpaceFogEffect, registerGlSharpenEffect, registerGlSketchEffect, registerGlSmaaEffect, registerGlSsaoEffect, registerGlTiltShiftEffect, registerGlToneMapEffect, registerGlVignetteEffect, registerGlWhiteBalanceEffect, registerGlRenderEffect, setGlRenderEffectVelocityTexture, } from './contract';
1
+ export { applyBlurEffectToGlRenderTextures, applyGaussianBlurToGlRenderTextures, disableGlRenderEffectGuards, enableGlRenderEffectGuards, explainGlRenderEffectApplication, applyGlRenderEffectsToRenderTexture, beginGlRenderEffectPipeline, createGlRenderEffectPipeline, defaultGlBevelEffectRunner, defaultGlBitmapDisplacementEffectRunner, defaultGlBlendEffectRunner, defaultGlBloomEffectRunner, defaultGlBlurEffectRunner, defaultGlBokehDepthOfFieldEffectRunner, defaultGlCameraMotionBlurEffectRunner, defaultGlChromaticAberrationEffectRunner, defaultGlCompositeEffectRunner, defaultGlContactShadowsEffectRunner, defaultGlConvolutionEffectRunner, defaultGlCrtEffectRunner, defaultGlCustomShaderEffectRunner, defaultGlDirectionalBlurEffectRunner, defaultGlDisplacementEffectRunner, defaultGlDitherEffectRunner, defaultGlDropShadowEffectRunner, defaultGlFilmGrainEffectRunner, defaultGlFxaaEffectRunner, defaultGlGlitchEffectRunner, defaultGlGodRaysEffectRunner, defaultGlGradientBevelEffectRunner, defaultGlGradientGlowEffectRunner, defaultGlHalftoneEffectRunner, defaultGlInnerGlowEffectRunner, defaultGlInnerShadowEffectRunner, defaultGlKuwaharaEffectRunner, defaultGlLensDirtEffectRunner, defaultGlLensDistortionEffectRunner, defaultGlLensFlareEffectRunner, defaultGlMedianEffectRunner, defaultGlMotionBlurEffectRunner, defaultGlOuterGlowEffectRunner, defaultGlOutlineEffectRunner, defaultGlPixelateEffectRunner, defaultGlPosterizeEffectRunner, defaultGlRadialBlurEffectRunner, defaultGlScanlinesEffectRunner, defaultGlScreenSpaceFogEffectRunner, defaultGlSharpenEffectRunner, defaultGlSketchEffectRunner, defaultGlSmaaEffectRunner, defaultGlSsaoEffectRunner, defaultGlTiltShiftEffectRunner, defaultGlToneMapEffectRunner, defaultGlVignetteEffectRunner, defaultGlWhiteBalanceEffectRunner, endGlRenderEffectPipeline, getGlCustomShaderSource, registerGlCustomShaderSource, registerGlBlendEffectBackdrop, registerGlBevelEffect, registerGlBitmapDisplacementEffect, registerGlBlurEffect, registerGlContactShadowsEffect, registerGlDropShadowEffect, registerGlGradientBevelEffect, registerGlGradientGlowEffect, registerGlInnerGlowEffect, registerGlInnerShadowEffect, registerGlOuterGlowEffect, registerGlBlendEffect, registerGlBloomEffect, registerGlBokehDepthOfFieldEffect, registerGlCameraMotionBlurEffect, registerGlChromaticAberrationEffect, registerGlCompositeEffect, registerGlConvolutionEffect, registerGlCrtEffect, registerGlCustomShaderEffect, registerGlDirectionalBlurEffect, registerGlDisplacementEffect, registerGlDitherEffect, registerGlFilmGrainEffect, registerGlFxaaEffect, registerGlGlitchEffect, registerGlGodRaysEffect, registerGlHalftoneEffect, registerGlKuwaharaEffect, registerGlLensDirtEffect, registerGlLensDistortionEffect, registerGlLensFlareEffect, registerGlMedianEffect, registerGlMotionBlurEffect, registerGlOutlineEffect, registerGlPixelateEffect, registerGlPosterizeEffect, registerGlRadialBlurEffect, registerGlScanlinesEffect, registerGlScreenSpaceFogEffect, registerGlSharpenEffect, registerGlSketchEffect, registerGlSmaaEffect, registerGlSsaoEffect, registerGlTiltShiftEffect, registerGlToneMapEffect, registerGlVignetteEffect, registerGlWhiteBalanceEffect, registerGlRenderEffect, setGlRenderEffectVelocityTexture, } 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,iCAAiC,EACjC,mCAAmC,EACnC,2BAA2B,EAC3B,0BAA0B,EAC1B,gCAAgC,EAChC,mCAAmC,EACnC,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EACzB,sCAAsC,EACtC,qCAAqC,EACrC,wCAAwC,EACxC,8BAA8B,EAC9B,mCAAmC,EACnC,gCAAgC,EAChC,wBAAwB,EACxB,iCAAiC,EACjC,oCAAoC,EACpC,iCAAiC,EACjC,2BAA2B,EAC3B,+BAA+B,EAC/B,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,kCAAkC,EAClC,iCAAiC,EACjC,6BAA6B,EAC7B,8BAA8B,EAC9B,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,EAC7B,mCAAmC,EACnC,8BAA8B,EAC9B,2BAA2B,EAC3B,+BAA+B,EAC/B,8BAA8B,EAC9B,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,+BAA+B,EAC/B,8BAA8B,EAC9B,mCAAmC,EACnC,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,EAC9B,4BAA4B,EAC5B,6BAA6B,EAC7B,iCAAiC,EACjC,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,8BAA8B,EAC9B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,iCAAiC,EACjC,gCAAgC,EAChC,mCAAmC,EACnC,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACnB,4BAA4B,EAC5B,+BAA+B,EAC/B,4BAA4B,EAC5B,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,sBAAsB,EACtB,gCAAgC,GACjC,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,mCAAmC,EACnC,2BAA2B,EAC3B,0BAA0B,EAC1B,gCAAgC,EAChC,mCAAmC,EACnC,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,uCAAuC,EACvC,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EACzB,sCAAsC,EACtC,qCAAqC,EACrC,wCAAwC,EACxC,8BAA8B,EAC9B,mCAAmC,EACnC,gCAAgC,EAChC,wBAAwB,EACxB,iCAAiC,EACjC,oCAAoC,EACpC,iCAAiC,EACjC,2BAA2B,EAC3B,+BAA+B,EAC/B,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,kCAAkC,EAClC,iCAAiC,EACjC,6BAA6B,EAC7B,8BAA8B,EAC9B,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,EAC7B,mCAAmC,EACnC,8BAA8B,EAC9B,2BAA2B,EAC3B,+BAA+B,EAC/B,8BAA8B,EAC9B,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,+BAA+B,EAC/B,8BAA8B,EAC9B,mCAAmC,EACnC,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,EAC9B,4BAA4B,EAC5B,6BAA6B,EAC7B,iCAAiC,EACjC,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,qBAAqB,EACrB,kCAAkC,EAClC,oBAAoB,EACpB,8BAA8B,EAC9B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,iCAAiC,EACjC,gCAAgC,EAChC,mCAAmC,EACnC,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACnB,4BAA4B,EAC5B,+BAA+B,EAC/B,4BAA4B,EAC5B,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,sBAAsB,EACtB,gCAAgC,GACjC,MAAM,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/effects-gl",
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-gl": "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-gl": "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
  "devDependencies": {
51
51
  "typescript": "^5.3.0"
@@ -0,0 +1,185 @@
1
+ import {
2
+ createGlContextFromCanvasElement,
3
+ createGlContextState,
4
+ createEmptyGlRegistries,
5
+ createGlPipeline,
6
+ createGlRenderState,
7
+ } from '@flighthq/render-gl/contract';
8
+ import * as renderGlContract from '@flighthq/render-gl/contract';
9
+ import type { BitmapDisplacementEffect, GlRenderState, GlRenderTarget, Texture2D } from '@flighthq/types/contract';
10
+ import { ImageChannel } from '@flighthq/types/contract';
11
+
12
+ import {
13
+ applyBitmapDisplacementEffectToGl,
14
+ defaultGlBitmapDisplacementEffectRunner,
15
+ isGlBitmapDisplacementEffectResolvable,
16
+ registerGlBitmapDisplacementEffect,
17
+ } from './glBitmapDisplacementEffect';
18
+ import * as glEffectProgramCache from './glEffectProgramCache';
19
+ import { getGlRenderEffectRunner, isGlRenderEffectResolvable } from './glRenderEffectRegistry';
20
+ import { explainGlRenderEffectApplication } from './glRenderTextureEffect';
21
+
22
+ const sourceTexture = {} as WebGLTexture;
23
+ const mapTexture = {} as WebGLTexture;
24
+ const source = {
25
+ colorSpace: 'srgb',
26
+ height: 64,
27
+ texture: sourceTexture,
28
+ width: 128,
29
+ } as GlRenderTarget;
30
+ const dest = { ...source, texture: {} as WebGLTexture } as GlRenderTarget;
31
+ const map = {
32
+ colorSpace: 'linear',
33
+ dimension: '2d',
34
+ source: {},
35
+ } as unknown as Texture2D;
36
+ const state = { gl: {} } as GlRenderState;
37
+ const draw = vi.fn();
38
+ const program = vi.fn((_state: unknown, key: string, fragmentSource: string) => ({
39
+ fragmentSource,
40
+ key,
41
+ program: {},
42
+ }));
43
+ const gl = {
44
+ getUniformLocation: vi.fn((_program: unknown, name: string) => name),
45
+ uniform1i: vi.fn(),
46
+ uniform2f: vi.fn(),
47
+ };
48
+
49
+ beforeEach(() => {
50
+ draw.mockReset();
51
+ program.mockClear();
52
+ gl.getUniformLocation.mockClear();
53
+ gl.uniform1i.mockClear();
54
+ gl.uniform2f.mockClear();
55
+ vi.spyOn(renderGlContract, 'resolveGlTexture').mockReturnValue(mapTexture);
56
+ vi.spyOn(renderGlContract, 'drawGlFullscreenPass').mockImplementation(((
57
+ _state: unknown,
58
+ effectProgram: unknown,
59
+ inputs: unknown,
60
+ output: unknown,
61
+ set: (gl: never, program: never) => void,
62
+ ) => {
63
+ draw(effectProgram, inputs, output);
64
+ set(gl as never, effectProgram as never);
65
+ }) as never);
66
+ vi.spyOn(glEffectProgramCache, 'getGlEffectProgram').mockImplementation(program as never);
67
+ vi.spyOn(glEffectProgramCache, 'getGlEffectUniformLocation').mockImplementation(
68
+ ((_state: unknown, _program: unknown, name: string) => name) as never,
69
+ );
70
+ });
71
+
72
+ afterEach(() => vi.restoreAllMocks());
73
+
74
+ function effect(overrides: Readonly<Partial<BitmapDisplacementEffect>> = {}): BitmapDisplacementEffect {
75
+ return { kind: 'BitmapDisplacementEffect', map, ...overrides } as BitmapDisplacementEffect;
76
+ }
77
+
78
+ function uniform1i(name: string): number {
79
+ const call = gl.uniform1i.mock.calls.find((candidate) => candidate[0] === name);
80
+ if (call === undefined) throw new Error(`missing ${name}`);
81
+ return call[1] as number;
82
+ }
83
+
84
+ function uniform2f(name: string): readonly [number, number] {
85
+ const call = gl.uniform2f.mock.calls.find((candidate) => candidate[0] === name);
86
+ if (call === undefined) throw new Error(`missing ${name}`);
87
+ return [call[1] as number, call[2] as number];
88
+ }
89
+
90
+ describe('applyBitmapDisplacementEffectToGl', () => {
91
+ it('binds the source and resolved map in one fullscreen pass', () => {
92
+ applyBitmapDisplacementEffectToGl(state, source, dest, effect());
93
+
94
+ expect(renderGlContract.resolveGlTexture).toHaveBeenCalledWith(state, map, false, source.colorSpace);
95
+ expect(draw).toHaveBeenCalledWith(expect.anything(), [sourceTexture, mapTexture], dest);
96
+ expect(program).toHaveBeenCalledWith(state, 'spatial.bitmapDisplacement', expect.any(String));
97
+ });
98
+
99
+ it('maps selected channels and preserves signed scale uniforms', () => {
100
+ applyBitmapDisplacementEffectToGl(
101
+ state,
102
+ source,
103
+ dest,
104
+ effect({
105
+ componentX: ImageChannel.Alpha,
106
+ componentY: ImageChannel.Blue,
107
+ scaleX: -14,
108
+ scaleY: 9,
109
+ }),
110
+ );
111
+
112
+ expect(uniform1i('u_componentX')).toBe(ImageChannel.Alpha);
113
+ expect(uniform1i('u_componentY')).toBe(ImageChannel.Blue);
114
+ expect(uniform2f('u_scale')).toEqual([-14, 9]);
115
+ expect(uniform2f('u_resolution')).toEqual([source.width, source.height]);
116
+ });
117
+
118
+ it.each([
119
+ ['clamp', 0],
120
+ ['wrap', 1],
121
+ ] as const)('maps %s edge mode to shader branch %s', (edgeMode, expected) => {
122
+ applyBitmapDisplacementEffectToGl(state, source, dest, effect({ edgeMode }));
123
+ expect(uniform1i('u_edgeMode')).toBe(expected);
124
+ });
125
+
126
+ it('ships map-channel, centred offset, wrap, clamp, and GL vertical-offset shader branches', () => {
127
+ applyBitmapDisplacementEffectToGl(state, source, dest, effect());
128
+ const shader = program.mock.calls[0]![2];
129
+
130
+ expect(shader).toContain('sampleChannel(mapSample, u_componentX)');
131
+ expect(shader).toContain('sampleChannel(mapSample, u_componentY)');
132
+ expect(shader).toContain('(mapped - vec2(0.5)) * u_scale');
133
+ expect(shader).toContain('fract(displaced)');
134
+ expect(shader).toContain('clamp(displaced, vec2(0.0), vec2(1.0))');
135
+ expect(shader).toContain('v_texCoord.y - displacement.y');
136
+ });
137
+
138
+ it('copies through when the map is absent or unresolved', () => {
139
+ vi.mocked(renderGlContract.resolveGlTexture).mockReturnValue(null);
140
+ applyBitmapDisplacementEffectToGl(state, source, dest, effect());
141
+ applyBitmapDisplacementEffectToGl(state, source, dest, effect({ map: null }));
142
+
143
+ expect(draw).toHaveBeenNthCalledWith(1, expect.anything(), [sourceTexture], dest);
144
+ expect(draw).toHaveBeenNthCalledWith(2, expect.anything(), [sourceTexture], dest);
145
+ });
146
+ });
147
+
148
+ describe('defaultGlBitmapDisplacementEffectRunner', () => {
149
+ it('routes the runner context through to the pass', () => {
150
+ defaultGlBitmapDisplacementEffectRunner(
151
+ { dest, pool: { free: [] }, source, state } as never,
152
+ effect({ scaleX: 3, scaleY: 4 }),
153
+ );
154
+ expect(uniform2f('u_scale')).toEqual([3, 4]);
155
+ });
156
+ });
157
+
158
+ describe('isGlBitmapDisplacementEffectResolvable', () => {
159
+ it('exposes the missing-map sentinel', () => {
160
+ expect(isGlBitmapDisplacementEffectResolvable(state, effect())).toBe(true);
161
+ expect(isGlBitmapDisplacementEffectResolvable(state, effect({ map: null }))).toBe(false);
162
+ vi.mocked(renderGlContract.resolveGlTexture).mockReturnValue(null);
163
+ expect(isGlBitmapDisplacementEffectResolvable(state, effect())).toBe(false);
164
+ });
165
+ });
166
+
167
+ describe('registerGlBitmapDisplacementEffect', () => {
168
+ it('registers both the runner and per-instance map resolver', () => {
169
+ const registeredState = createGlRenderState(
170
+ createGlContextState(createGlContextFromCanvasElement(document.createElement('canvas'))),
171
+ createGlPipeline(createEmptyGlRegistries()),
172
+ );
173
+
174
+ expect(getGlRenderEffectRunner(registeredState, 'BitmapDisplacementEffect')).toBeNull();
175
+ registerGlBitmapDisplacementEffect(registeredState);
176
+ expect(getGlRenderEffectRunner(registeredState, 'BitmapDisplacementEffect')).toBe(
177
+ defaultGlBitmapDisplacementEffectRunner,
178
+ );
179
+ expect(isGlRenderEffectResolvable(registeredState, effect({ map: null }))).toBe(false);
180
+ expect(explainGlRenderEffectApplication(registeredState, [effect({ map: null })], true)).toMatchObject({
181
+ status: 'unresolved-effects',
182
+ unresolvedIndexes: [0],
183
+ });
184
+ });
185
+ });
@@ -13,6 +13,7 @@ import * as publicEffects from './index';
13
13
  describe('GL effect registration', () => {
14
14
  it.each([
15
15
  ['BevelEffect', 'registerGlBevelEffect', 'defaultGlBevelEffectRunner'],
16
+ ['BitmapDisplacementEffect', 'registerGlBitmapDisplacementEffect', 'defaultGlBitmapDisplacementEffectRunner'],
16
17
  ['BlendEffect', 'registerGlBlendEffect', 'defaultGlBlendEffectRunner'],
17
18
  ['BloomEffect', 'registerGlBloomEffect', 'defaultGlBloomEffectRunner'],
18
19
  ['BlurEffect', 'registerGlBlurEffect', 'defaultGlBlurEffectRunner'],