@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 +2 -2
- package/dist/contract.d.ts +1 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +1 -0
- package/dist/contract.js.map +1 -1
- package/dist/glBitmapDisplacementEffect.d.ts +7 -0
- package/dist/glBitmapDisplacementEffect.d.ts.map +1 -0
- package/dist/glBitmapDisplacementEffect.js +104 -0
- package/dist/glBitmapDisplacementEffect.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
- package/src/glBitmapDisplacementEffect.test.ts +185 -0
- package/src/glSpatialEffectRegistration.test.ts +1 -0
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.
|
|
17
|
-
- [License](https://github.com/flighthq/flight/blob/
|
|
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)
|
package/dist/contract.d.ts
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';
|
package/dist/contract.d.ts.map
CHANGED
|
@@ -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';
|
package/dist/contract.js.map
CHANGED
|
@@ -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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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.
|
|
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.
|
|
42
|
-
"@flighthq/color": "0.5.1-next.
|
|
43
|
-
"@flighthq/effects": "0.5.1-next.
|
|
44
|
-
"@flighthq/geometry": "0.5.1-next.
|
|
45
|
-
"@flighthq/log": "0.5.1-next.
|
|
46
|
-
"@flighthq/render-gl": "0.5.1-next.
|
|
47
|
-
"@flighthq/registry": "0.5.1-next.
|
|
48
|
-
"@flighthq/types": "0.5.1-next.
|
|
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'],
|