@flighthq/effects-canvas 0.1.0 → 0.2.1-next.410.a23f189
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/dist/canvasBlurEffect.d.ts +4 -0
- package/dist/canvasBlurEffect.d.ts.map +1 -0
- package/dist/canvasBlurEffect.js +14 -0
- package/dist/canvasBlurEffect.js.map +1 -0
- package/dist/canvasColorLutPass.d.ts +3 -0
- package/dist/canvasColorLutPass.d.ts.map +1 -0
- package/dist/canvasColorLutPass.js +20 -0
- package/dist/canvasColorLutPass.js.map +1 -0
- package/dist/canvasColorMatrixPass.d.ts +3 -0
- package/dist/canvasColorMatrixPass.d.ts.map +1 -0
- package/dist/canvasColorMatrixPass.js +43 -0
- package/dist/canvasColorMatrixPass.js.map +1 -0
- package/dist/canvasConvolutionEffect.d.ts +4 -0
- package/dist/canvasConvolutionEffect.d.ts.map +1 -0
- package/dist/canvasConvolutionEffect.js +11 -0
- package/dist/canvasConvolutionEffect.js.map +1 -0
- package/dist/canvasDropShadowEffect.d.ts +5 -0
- package/dist/canvasDropShadowEffect.d.ts.map +1 -0
- package/dist/canvasDropShadowEffect.js +40 -0
- package/dist/canvasDropShadowEffect.js.map +1 -0
- package/dist/canvasEffectDropShadowCss.d.ts +4 -0
- package/dist/canvasEffectDropShadowCss.d.ts.map +1 -0
- package/dist/canvasEffectDropShadowCss.js +36 -0
- package/dist/canvasEffectDropShadowCss.js.map +1 -0
- package/dist/canvasMedianEffect.d.ts +4 -0
- package/dist/canvasMedianEffect.d.ts.map +1 -0
- package/dist/canvasMedianEffect.js +11 -0
- package/dist/canvasMedianEffect.js.map +1 -0
- package/dist/canvasOuterGlowEffect.d.ts +5 -0
- package/dist/canvasOuterGlowEffect.d.ts.map +1 -0
- package/dist/canvasOuterGlowEffect.js +36 -0
- package/dist/canvasOuterGlowEffect.js.map +1 -0
- package/dist/canvasRenderEffectPipeline.d.ts +2 -2
- package/dist/canvasRenderEffectPipeline.d.ts.map +1 -1
- package/dist/canvasRenderEffectPipeline.js +56 -14
- package/dist/canvasRenderEffectPipeline.js.map +1 -1
- package/dist/canvasRenderEffectRegistration.d.ts +1 -0
- package/dist/canvasRenderEffectRegistration.d.ts.map +1 -1
- package/dist/canvasRenderEffectRegistration.js +34 -27
- package/dist/canvasRenderEffectRegistration.js.map +1 -1
- package/dist/canvasSourceModeCompositing.d.ts +7 -0
- package/dist/canvasSourceModeCompositing.d.ts.map +1 -0
- package/dist/canvasSourceModeCompositing.js +47 -0
- package/dist/canvasSourceModeCompositing.js.map +1 -0
- package/dist/index.d.ts +8 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -10
- package/dist/index.js.map +1 -1
- package/package.json +11 -7
- package/src/canvasBlurEffect.test.ts +13 -0
- package/src/canvasColorLutPass.test.ts +7 -0
- package/src/canvasColorMatrixPass.test.ts +7 -0
- package/src/canvasConvolutionEffect.test.ts +13 -0
- package/src/canvasDropShadowEffect.test.ts +88 -0
- package/src/canvasEffectDropShadowCss.test.ts +34 -0
- package/src/canvasMedianEffect.test.ts +13 -0
- package/src/canvasOuterGlowEffect.test.ts +88 -0
- package/src/canvasRenderEffectRegistration.test.ts +36 -22
- package/src/canvasSourceModeCompositing.test.ts +30 -0
- package/dist/canvasBrightnessContrastEffect.d.ts +0 -4
- package/dist/canvasBrightnessContrastEffect.d.ts.map +0 -1
- package/dist/canvasBrightnessContrastEffect.js +0 -13
- package/dist/canvasBrightnessContrastEffect.js.map +0 -1
- package/dist/canvasChannelMixerEffect.d.ts +0 -4
- package/dist/canvasChannelMixerEffect.d.ts.map +0 -1
- package/dist/canvasChannelMixerEffect.js +0 -11
- package/dist/canvasChannelMixerEffect.js.map +0 -1
- package/dist/canvasColorGradeEffect.d.ts +0 -4
- package/dist/canvasColorGradeEffect.d.ts.map +0 -1
- package/dist/canvasColorGradeEffect.js +0 -21
- package/dist/canvasColorGradeEffect.js.map +0 -1
- package/dist/canvasExposureEffect.d.ts +0 -4
- package/dist/canvasExposureEffect.d.ts.map +0 -1
- package/dist/canvasExposureEffect.js +0 -11
- package/dist/canvasExposureEffect.js.map +0 -1
- package/dist/canvasGrayscaleEffect.d.ts +0 -4
- package/dist/canvasGrayscaleEffect.d.ts.map +0 -1
- package/dist/canvasGrayscaleEffect.js +0 -10
- package/dist/canvasGrayscaleEffect.js.map +0 -1
- package/dist/canvasHueSaturationEffect.d.ts +0 -4
- package/dist/canvasHueSaturationEffect.d.ts.map +0 -1
- package/dist/canvasHueSaturationEffect.js +0 -13
- package/dist/canvasHueSaturationEffect.js.map +0 -1
- package/dist/canvasInvertEffect.d.ts +0 -4
- package/dist/canvasInvertEffect.d.ts.map +0 -1
- package/dist/canvasInvertEffect.js +0 -10
- package/dist/canvasInvertEffect.js.map +0 -1
- package/dist/canvasLiftGammaGainEffect.d.ts +0 -4
- package/dist/canvasLiftGammaGainEffect.d.ts.map +0 -1
- package/dist/canvasLiftGammaGainEffect.js +0 -11
- package/dist/canvasLiftGammaGainEffect.js.map +0 -1
- package/dist/canvasLookupTableGradeEffect.d.ts +0 -4
- package/dist/canvasLookupTableGradeEffect.d.ts.map +0 -1
- package/dist/canvasLookupTableGradeEffect.js +0 -10
- package/dist/canvasLookupTableGradeEffect.js.map +0 -1
- package/dist/canvasSepiaEffect.d.ts +0 -4
- package/dist/canvasSepiaEffect.d.ts.map +0 -1
- package/dist/canvasSepiaEffect.js +0 -10
- package/dist/canvasSepiaEffect.js.map +0 -1
- package/src/canvasBrightnessContrastEffect.test.ts +0 -16
- package/src/canvasChannelMixerEffect.test.ts +0 -13
- package/src/canvasColorGradeEffect.test.ts +0 -13
- package/src/canvasExposureEffect.test.ts +0 -13
- package/src/canvasGrayscaleEffect.test.ts +0 -13
- package/src/canvasHueSaturationEffect.test.ts +0 -13
- package/src/canvasInvertEffect.test.ts +0 -13
- package/src/canvasLiftGammaGainEffect.test.ts +0 -13
- package/src/canvasLookupTableGradeEffect.test.ts +0 -16
- package/src/canvasSepiaEffect.test.ts +0 -13
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { BlurEffect, CanvasRenderEffectRunner, CanvasRenderTarget } from '@flighthq/types';
|
|
2
|
+
export declare function applyBlurEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<BlurEffect>): void;
|
|
3
|
+
export declare const defaultCanvasBlurEffectRunner: CanvasRenderEffectRunner;
|
|
4
|
+
//# sourceMappingURL=canvasBlurEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasBlurEffect.d.ts","sourceRoot":"","sources":["../src/canvasBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAOhG,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC3B,IAAI,CAKN;AAED,eAAO,MAAM,6BAA6B,EAAE,wBAE3C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { drawCanvasEffectPass } from './canvasEffectCompositing';
|
|
2
|
+
// Plain Gaussian blur via the Canvas 2D `blur()` CSS filter — the same primitive the canvas bloom
|
|
3
|
+
// branch uses. Canvas `blur()` is isotropic (a single radius), so the per-axis `blurX`/`blurY` sigmas
|
|
4
|
+
// are averaged into one radius; a non-positive radius passes the image through unchanged.
|
|
5
|
+
export function applyBlurEffectToCanvas(source, dest, effect) {
|
|
6
|
+
const blurX = effect.blurX ?? 4;
|
|
7
|
+
const blurY = effect.blurY ?? 4;
|
|
8
|
+
const radius = Math.max(0, (blurX + blurY) / 2);
|
|
9
|
+
drawCanvasEffectPass(dest, source, radius > 0 ? `blur(${radius}px)` : 'none');
|
|
10
|
+
}
|
|
11
|
+
export const defaultCanvasBlurEffectRunner = (ctx, effect) => {
|
|
12
|
+
applyBlurEffectToCanvas(ctx.source, ctx.dest, effect);
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=canvasBlurEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasBlurEffect.js","sourceRoot":"","sources":["../src/canvasBlurEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,kGAAkG;AAClG,sGAAsG;AACtG,0FAA0F;AAC1F,MAAM,UAAU,uBAAuB,CACrC,MAAoC,EACpC,IAAkC,EAClC,MAA4B;IAE5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACrF,uBAAuB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAoB,CAAC,CAAC;AACtE,CAAC,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { CanvasRenderTarget, ColorLut } from '@flighthq/types';
|
|
2
|
+
export declare function applyColorLutPassToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, lut: Readonly<ColorLut>): void;
|
|
3
|
+
//# sourceMappingURL=canvasColorLutPass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasColorLutPass.d.ts","sourceRoot":"","sources":["../src/canvasColorLutPass.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AASpE,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,GACtB,IAAI,CAWN"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { sampleColorLut } from '@flighthq/adjustments';
|
|
2
|
+
import { drawCanvasImageDataPass } from './canvasEffectCompositing';
|
|
3
|
+
// Generic pointwise color-LUT pass — the single fold-in realization for the whole LUT-tier Adjustment
|
|
4
|
+
// family on Canvas 2D. A run of consecutive pointwise adjustments containing any nonlinear (LUT-tier)
|
|
5
|
+
// member bakes to ONE `ColorLut` (matrices folded in) and runs through this one per-pixel pass instead of
|
|
6
|
+
// one pass per op. Each pixel is normalized to [0,1], trilinearly sampled from the LUT (the CPU
|
|
7
|
+
// counterpart of the GPU's hardware-filtered 3D tap), and written back; alpha is preserved.
|
|
8
|
+
export function applyColorLutPassToCanvas(source, dest, lut) {
|
|
9
|
+
const rgb = [0, 0, 0];
|
|
10
|
+
drawCanvasImageDataPass(dest, source, (data, pixelCount) => {
|
|
11
|
+
for (let i = 0; i < pixelCount; i++) {
|
|
12
|
+
const p = i * 4;
|
|
13
|
+
sampleColorLut(lut, rgb, data[p] / 255, data[p + 1] / 255, data[p + 2] / 255);
|
|
14
|
+
data[p] = rgb[0] * 255;
|
|
15
|
+
data[p + 1] = rgb[1] * 255;
|
|
16
|
+
data[p + 2] = rgb[2] * 255;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=canvasColorLutPass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasColorLutPass.js","sourceRoot":"","sources":["../src/canvasColorLutPass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,sGAAsG;AACtG,sGAAsG;AACtG,0GAA0G;AAC1G,gGAAgG;AAChG,4FAA4F;AAC5F,MAAM,UAAU,yBAAyB,CACvC,MAAoC,EACpC,IAAkC,EAClC,GAAuB;IAEvB,MAAM,GAAG,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAC9E,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACvB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAC3B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { CanvasRenderTarget } from '@flighthq/types';
|
|
2
|
+
export declare function applyColorMatrixPassToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, matrix: ReadonlyArray<number>): void;
|
|
3
|
+
//# sourceMappingURL=canvasColorMatrixPass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasColorMatrixPass.d.ts","sourceRoot":"","sources":["../src/canvasColorMatrixPass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAS1D,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B,IAAI,CAmCN"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { drawCanvasImageDataPass } from './canvasEffectCompositing';
|
|
2
|
+
// Generic pointwise color-matrix pass — the single fold-in realization for the whole matrix-tier
|
|
3
|
+
// Adjustment family on Canvas 2D. A run of consecutive matrix-tier adjustments fuses to ONE 4×5 matrix
|
|
4
|
+
// (in the adjustments colorMatrixMath convention: linear RGBA coefficients + a 0–255 offset column) and
|
|
5
|
+
// runs through this one per-pixel pass instead of one pass per op. ImageData is straight-alpha 0–255 —
|
|
6
|
+
// the same units the offset column is in — so the matrix applies directly, clamped per channel.
|
|
7
|
+
export function applyColorMatrixPassToCanvas(source, dest, matrix) {
|
|
8
|
+
const m0 = matrix[0] ?? 0;
|
|
9
|
+
const m1 = matrix[1] ?? 0;
|
|
10
|
+
const m2 = matrix[2] ?? 0;
|
|
11
|
+
const m3 = matrix[3] ?? 0;
|
|
12
|
+
const m4 = matrix[4] ?? 0;
|
|
13
|
+
const m5 = matrix[5] ?? 0;
|
|
14
|
+
const m6 = matrix[6] ?? 0;
|
|
15
|
+
const m7 = matrix[7] ?? 0;
|
|
16
|
+
const m8 = matrix[8] ?? 0;
|
|
17
|
+
const m9 = matrix[9] ?? 0;
|
|
18
|
+
const m10 = matrix[10] ?? 0;
|
|
19
|
+
const m11 = matrix[11] ?? 0;
|
|
20
|
+
const m12 = matrix[12] ?? 0;
|
|
21
|
+
const m13 = matrix[13] ?? 0;
|
|
22
|
+
const m14 = matrix[14] ?? 0;
|
|
23
|
+
const m15 = matrix[15] ?? 0;
|
|
24
|
+
const m16 = matrix[16] ?? 0;
|
|
25
|
+
const m17 = matrix[17] ?? 0;
|
|
26
|
+
const m18 = matrix[18] ?? 0;
|
|
27
|
+
const m19 = matrix[19] ?? 0;
|
|
28
|
+
drawCanvasImageDataPass(dest, source, (data, pixelCount) => {
|
|
29
|
+
for (let i = 0; i < pixelCount; i++) {
|
|
30
|
+
const p = i * 4;
|
|
31
|
+
const r = data[p];
|
|
32
|
+
const g = data[p + 1];
|
|
33
|
+
const b = data[p + 2];
|
|
34
|
+
const a = data[p + 3];
|
|
35
|
+
// Uint8ClampedArray clamps stores to 0–255, so an explicit clamp is unnecessary.
|
|
36
|
+
data[p] = m0 * r + m1 * g + m2 * b + m3 * a + m4;
|
|
37
|
+
data[p + 1] = m5 * r + m6 * g + m7 * b + m8 * a + m9;
|
|
38
|
+
data[p + 2] = m10 * r + m11 * g + m12 * b + m13 * a + m14;
|
|
39
|
+
data[p + 3] = m15 * r + m16 * g + m17 * b + m18 * a + m19;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=canvasColorMatrixPass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasColorMatrixPass.js","sourceRoot":"","sources":["../src/canvasColorMatrixPass.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CanvasRenderEffectRunner, CanvasRenderTarget, ConvolutionEffect } from '@flighthq/types';
|
|
2
|
+
export declare function applyConvolutionEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<ConvolutionEffect>): void;
|
|
3
|
+
export declare const defaultCanvasConvolutionEffectRunner: CanvasRenderEffectRunner;
|
|
4
|
+
//# sourceMappingURL=canvasConvolutionEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasConvolutionEffect.d.ts","sourceRoot":"","sources":["../src/canvasConvolutionEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAOvG,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GACnC,IAAI,CAEN;AAED,eAAO,MAAM,oCAAoC,EAAE,wBAElD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
|
|
2
|
+
// Convolution (PASSTHROUGH): a generic matrix-kernel gather is per-pixel neighbor math. No CSS filter
|
|
3
|
+
// equivalent, but expressible per-pixel via getImageData/putImageData; not yet implemented — passthrough
|
|
4
|
+
// for now.
|
|
5
|
+
export function applyConvolutionEffectToCanvas(source, dest, _effect) {
|
|
6
|
+
passthroughCanvasEffectPass(dest, source);
|
|
7
|
+
}
|
|
8
|
+
export const defaultCanvasConvolutionEffectRunner = (ctx, effect) => {
|
|
9
|
+
applyConvolutionEffectToCanvas(ctx.source, ctx.dest, effect);
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=canvasConvolutionEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasConvolutionEffect.js","sourceRoot":"","sources":["../src/canvasConvolutionEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,sGAAsG;AACtG,yGAAyG;AACzG,WAAW;AACX,MAAM,UAAU,8BAA8B,CAC5C,MAAoC,EACpC,IAAkC,EAClC,OAAoC;IAEpC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,oCAAoC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC5F,8BAA8B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA2B,CAAC,CAAC;AACpF,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CanvasRenderEffectRunner, CanvasRenderTarget, CanvasRenderTargetPool, DropShadowEffect } from '@flighthq/types';
|
|
2
|
+
export declare function applyDropShadowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<DropShadowEffect>): void;
|
|
3
|
+
export declare function applyDropShadowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<DropShadowEffect>): void;
|
|
4
|
+
export declare const defaultCanvasDropShadowEffectRunner: CanvasRenderEffectRunner;
|
|
5
|
+
//# sourceMappingURL=canvasDropShadowEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasDropShadowEffect.d.ts","sourceRoot":"","sources":["../src/canvasDropShadowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAmBzB,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI,CAAC;AACR,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI,CAAC;AAkBR,eAAO,MAAM,mCAAmC,EAAE,wBAEjD,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { drawCanvasEffectPass } from './canvasEffectCompositing';
|
|
2
|
+
import { computeDropShadowEffectCss } from './canvasEffectDropShadowCss';
|
|
3
|
+
import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
|
|
4
|
+
import { clearCanvasTarget, compositeCanvasImage, compositeCanvasSourceMode, drawCanvasTintedAlphaMask, } from './canvasSourceModeCompositing';
|
|
5
|
+
export function applyDropShadowEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
|
|
6
|
+
const effect = maybeEffect ?? poolOrEffect;
|
|
7
|
+
const css = computeDropShadowEffectCss(effect);
|
|
8
|
+
if (css !== null) {
|
|
9
|
+
drawCanvasEffectPass(dest, source, css);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const pool = maybeEffect === undefined ? createCanvasRenderTargetPool() : poolOrEffect;
|
|
13
|
+
applyDropShadowEffectToCanvasWithPool(source, dest, pool, effect);
|
|
14
|
+
}
|
|
15
|
+
export const defaultCanvasDropShadowEffectRunner = (ctx, effect) => {
|
|
16
|
+
applyDropShadowEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
|
|
17
|
+
};
|
|
18
|
+
function applyDropShadowEffectToCanvasWithPool(source, dest, pool, effect) {
|
|
19
|
+
const mask = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
20
|
+
const blurred = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
21
|
+
const angle = ((effect.angle ?? 45) * Math.PI) / 180;
|
|
22
|
+
const distance = effect.distance ?? 4;
|
|
23
|
+
const dx = Math.cos(angle) * distance;
|
|
24
|
+
const dy = Math.sin(angle) * distance;
|
|
25
|
+
const strength = effect.strength ?? 1;
|
|
26
|
+
const tintStrength = Math.min(1, strength);
|
|
27
|
+
const shadowPasses = Math.max(1, Math.floor(strength));
|
|
28
|
+
const blur = Math.max(0, ((effect.blurX ?? 4) + (effect.blurY ?? 4)) / 2);
|
|
29
|
+
const sourceMode = effect.sourceMode ?? 'draw';
|
|
30
|
+
drawCanvasTintedAlphaMask(mask, source, effect.color ?? 0, effect.alpha ?? 1, tintStrength);
|
|
31
|
+
drawCanvasEffectPass(blurred, mask, blur > 0 ? `blur(${blur}px)` : 'none');
|
|
32
|
+
clearCanvasTarget(dest);
|
|
33
|
+
for (let i = 0; i < shadowPasses; i++) {
|
|
34
|
+
compositeCanvasImage(dest, blurred, dx, dy);
|
|
35
|
+
}
|
|
36
|
+
compositeCanvasSourceMode(dest, source, sourceMode);
|
|
37
|
+
releaseCanvasRenderTarget(pool, mask);
|
|
38
|
+
releaseCanvasRenderTarget(pool, blurred);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=canvasDropShadowEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasDropShadowEffect.js","sourceRoot":"","sources":["../src/canvasDropShadowEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DropShadowEffect, OuterGlowEffect } from '@flighthq/types';
|
|
2
|
+
export declare function computeDropShadowEffectCss(effect: Readonly<DropShadowEffect>): string | null;
|
|
3
|
+
export declare function computeOuterGlowEffectCss(effect: Readonly<OuterGlowEffect>): string | null;
|
|
4
|
+
//# sourceMappingURL=canvasEffectDropShadowCss.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasEffectDropShadowCss.d.ts","sourceRoot":"","sources":["../src/canvasEffectDropShadowCss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,MAAM,GAAG,IAAI,CAW5F;AAID,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,MAAM,GAAG,IAAI,CAM1F"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Drop-shadow composite effect as a CSS `drop-shadow()` string (the same string the DOM backend emits).
|
|
2
|
+
// Only sourceMode 'draw' and isotropic blur can be represented by CSS-only drop-shadow().
|
|
3
|
+
// Offset is derived from angle (degrees, default 45) and distance (default 4), rounded to whole pixels.
|
|
4
|
+
export function computeDropShadowEffectCss(effect) {
|
|
5
|
+
if ((effect.sourceMode ?? 'draw') !== 'draw')
|
|
6
|
+
return null;
|
|
7
|
+
const blurX = effect.blurX ?? 4;
|
|
8
|
+
const blurY = effect.blurY ?? 4;
|
|
9
|
+
if (blurX !== blurY)
|
|
10
|
+
return null;
|
|
11
|
+
const angle = effect.angle ?? 45;
|
|
12
|
+
const distance = effect.distance ?? 4;
|
|
13
|
+
const radians = (angle * Math.PI) / 180;
|
|
14
|
+
const dx = Math.round(Math.cos(radians) * distance);
|
|
15
|
+
const dy = Math.round(Math.sin(radians) * distance);
|
|
16
|
+
return `drop-shadow(${dx}px ${dy}px ${blurX}px ${cssRgbaFromColor(effect.color ?? 0, effect.alpha ?? 1)})`;
|
|
17
|
+
}
|
|
18
|
+
// Outer-glow composite effect as a centered (no offset) CSS `drop-shadow()` string.
|
|
19
|
+
// Only sourceMode 'draw' and isotropic blur can be represented by CSS-only drop-shadow().
|
|
20
|
+
export function computeOuterGlowEffectCss(effect) {
|
|
21
|
+
if ((effect.sourceMode ?? 'draw') !== 'draw')
|
|
22
|
+
return null;
|
|
23
|
+
const blurX = effect.blurX ?? 6;
|
|
24
|
+
const blurY = effect.blurY ?? 6;
|
|
25
|
+
if (blurX !== blurY)
|
|
26
|
+
return null;
|
|
27
|
+
return `drop-shadow(0px 0px ${blurX}px ${cssRgbaFromColor(effect.color ?? 0xff0000, effect.alpha ?? 1)})`;
|
|
28
|
+
}
|
|
29
|
+
// Packed 0xRRGGBB integer + separate alpha to a CSS `rgba()` string (alpha fixed to 3 decimals).
|
|
30
|
+
function cssRgbaFromColor(color, alpha) {
|
|
31
|
+
const r = (color >> 16) & 0xff;
|
|
32
|
+
const g = (color >> 8) & 0xff;
|
|
33
|
+
const b = color & 0xff;
|
|
34
|
+
return `rgba(${r},${g},${b},${alpha.toFixed(3)})`;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=canvasEffectDropShadowCss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasEffectDropShadowCss.js","sourceRoot":"","sources":["../src/canvasEffectDropShadowCss.ts"],"names":[],"mappings":"AAEA,wGAAwG;AACxG,0FAA0F;AAC1F,wGAAwG;AACxG,MAAM,UAAU,0BAA0B,CAAC,MAAkC;IAC3E,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IACpD,OAAO,eAAe,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,gBAAgB,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC;AAC7G,CAAC;AAED,oFAAoF;AACpF,0FAA0F;AAC1F,MAAM,UAAU,yBAAyB,CAAC,MAAiC;IACzE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,uBAAuB,KAAK,MAAM,gBAAgB,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC;AAC5G,CAAC;AAED,iGAAiG;AACjG,SAAS,gBAAgB,CAAC,KAAa,EAAE,KAAa;IACpD,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACvB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CanvasRenderEffectRunner, CanvasRenderTarget, MedianEffect } from '@flighthq/types';
|
|
2
|
+
export declare function applyMedianEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<MedianEffect>): void;
|
|
3
|
+
export declare const defaultCanvasMedianEffectRunner: CanvasRenderEffectRunner;
|
|
4
|
+
//# sourceMappingURL=canvasMedianEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasMedianEffect.d.ts","sourceRoot":"","sources":["../src/canvasMedianEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAOlG,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC9B,IAAI,CAEN;AAED,eAAO,MAAM,+BAA+B,EAAE,wBAE7C,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
|
|
2
|
+
// Median (PASSTHROUGH): per-channel median over a neighborhood is per-pixel neighbor math. No CSS filter
|
|
3
|
+
// equivalent, but expressible per-pixel via getImageData/putImageData; not yet implemented — passthrough
|
|
4
|
+
// for now.
|
|
5
|
+
export function applyMedianEffectToCanvas(source, dest, _effect) {
|
|
6
|
+
passthroughCanvasEffectPass(dest, source);
|
|
7
|
+
}
|
|
8
|
+
export const defaultCanvasMedianEffectRunner = (ctx, effect) => {
|
|
9
|
+
applyMedianEffectToCanvas(ctx.source, ctx.dest, effect);
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=canvasMedianEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasMedianEffect.js","sourceRoot":"","sources":["../src/canvasMedianEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,yGAAyG;AACzG,yGAAyG;AACzG,WAAW;AACX,MAAM,UAAU,yBAAyB,CACvC,MAAoC,EACpC,IAAkC,EAClC,OAA+B;IAE/B,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACvF,yBAAyB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAsB,CAAC,CAAC;AAC1E,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CanvasRenderEffectRunner, CanvasRenderTarget, CanvasRenderTargetPool, OuterGlowEffect } from '@flighthq/types';
|
|
2
|
+
export declare function applyOuterGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<OuterGlowEffect>): void;
|
|
3
|
+
export declare function applyOuterGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<OuterGlowEffect>): void;
|
|
4
|
+
export declare const defaultCanvasOuterGlowEffectRunner: CanvasRenderEffectRunner;
|
|
5
|
+
//# sourceMappingURL=canvasOuterGlowEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasOuterGlowEffect.d.ts","sourceRoot":"","sources":["../src/canvasOuterGlowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAmBzB,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAAC;AACR,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAAC;AAkBR,eAAO,MAAM,kCAAkC,EAAE,wBAEhD,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { drawCanvasEffectPass } from './canvasEffectCompositing';
|
|
2
|
+
import { computeOuterGlowEffectCss } from './canvasEffectDropShadowCss';
|
|
3
|
+
import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
|
|
4
|
+
import { clearCanvasTarget, compositeCanvasImage, compositeCanvasSourceMode, drawCanvasTintedAlphaMask, } from './canvasSourceModeCompositing';
|
|
5
|
+
export function applyOuterGlowEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
|
|
6
|
+
const effect = maybeEffect ?? poolOrEffect;
|
|
7
|
+
const css = computeOuterGlowEffectCss(effect);
|
|
8
|
+
if (css !== null) {
|
|
9
|
+
drawCanvasEffectPass(dest, source, css);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const pool = maybeEffect === undefined ? createCanvasRenderTargetPool() : poolOrEffect;
|
|
13
|
+
applyOuterGlowEffectToCanvasWithPool(source, dest, pool, effect);
|
|
14
|
+
}
|
|
15
|
+
export const defaultCanvasOuterGlowEffectRunner = (ctx, effect) => {
|
|
16
|
+
applyOuterGlowEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
|
|
17
|
+
};
|
|
18
|
+
function applyOuterGlowEffectToCanvasWithPool(source, dest, pool, effect) {
|
|
19
|
+
const mask = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
20
|
+
const blurred = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
21
|
+
const strength = effect.strength ?? 1;
|
|
22
|
+
const tintStrength = Math.min(1, strength);
|
|
23
|
+
const glowPasses = Math.max(1, Math.floor(strength));
|
|
24
|
+
const blur = Math.max(0, ((effect.blurX ?? 6) + (effect.blurY ?? 6)) / 2);
|
|
25
|
+
const sourceMode = effect.sourceMode ?? 'draw';
|
|
26
|
+
drawCanvasTintedAlphaMask(mask, source, effect.color ?? 0xff0000, effect.alpha ?? 1, tintStrength);
|
|
27
|
+
drawCanvasEffectPass(blurred, mask, blur > 0 ? `blur(${blur}px)` : 'none');
|
|
28
|
+
clearCanvasTarget(dest);
|
|
29
|
+
for (let i = 0; i < glowPasses; i++) {
|
|
30
|
+
compositeCanvasImage(dest, blurred);
|
|
31
|
+
}
|
|
32
|
+
compositeCanvasSourceMode(dest, source, sourceMode);
|
|
33
|
+
releaseCanvasRenderTarget(pool, mask);
|
|
34
|
+
releaseCanvasRenderTarget(pool, blurred);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=canvasOuterGlowEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasOuterGlowEffect.js","sourceRoot":"","sources":["../src/canvasOuterGlowEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { CanvasRenderEffectPipeline, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, RenderEffect, RenderEffectPipelineOptions } from '@flighthq/types';
|
|
1
|
+
import type { Adjustment, CanvasRenderEffectPipeline, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, RenderEffect, RenderEffectPipelineOptions } from '@flighthq/types';
|
|
2
2
|
export declare function acquireCanvasRenderTarget(pool: CanvasRenderTargetPool, width: number, height: number): CanvasRenderTarget;
|
|
3
3
|
export declare function beginCanvasRenderEffectPipeline(state: CanvasRenderState, pipeline: CanvasRenderEffectPipeline): void;
|
|
4
4
|
export declare function createCanvasRenderEffectPipeline(_state: CanvasRenderState, options?: Readonly<RenderEffectPipelineOptions>): CanvasRenderEffectPipeline;
|
|
5
5
|
export declare function createCanvasRenderTargetPool(): CanvasRenderTargetPool;
|
|
6
6
|
export declare function destroyCanvasRenderEffectPipeline(_state: CanvasRenderState, pipeline: CanvasRenderEffectPipeline): void;
|
|
7
|
-
export declare function endCanvasRenderEffectPipeline(state: CanvasRenderState, pipeline: CanvasRenderEffectPipeline,
|
|
7
|
+
export declare function endCanvasRenderEffectPipeline(state: CanvasRenderState, pipeline: CanvasRenderEffectPipeline, operations: ReadonlyArray<RenderEffect | Adjustment>): void;
|
|
8
8
|
export declare function releaseCanvasRenderTarget(pool: CanvasRenderTargetPool, target: CanvasRenderTarget): void;
|
|
9
9
|
//# sourceMappingURL=canvasRenderEffectPipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasRenderEffectPipeline.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectPipeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvasRenderEffectPipeline.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectPipeline.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,UAAU,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AAgBzB,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,sBAAsB,EAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,kBAAkB,CAOpB;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,0BAA0B,GAAG,IAAI,CAYpH;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,QAAQ,CAAC,2BAA2B,CAAM,GAClD,0BAA0B,CAO5B;AAED,wBAAgB,4BAA4B,IAAI,sBAAsB,CAErE;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,0BAA0B,GACnC,IAAI,CAQN;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,0BAA0B,EACpC,UAAU,EAAE,aAAa,CAAC,YAAY,GAAG,UAAU,CAAC,GACnD,IAAI,CAyDN;AAID,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAIxG"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { bakeColorLutForRun, createColorLutCache, fuseColorMatrices, getAdjustmentColorMatrix, isColorLutAdjustment, } from '@flighthq/adjustments';
|
|
2
|
+
import { beginCanvasRenderPass, createCanvasRenderTarget, endCanvasRenderPass, resizeCanvasRenderTarget, } from '@flighthq/displayobject-canvas';
|
|
3
|
+
import { applyColorLutPassToCanvas } from './canvasColorLutPass';
|
|
4
|
+
import { applyColorMatrixPassToCanvas } from './canvasColorMatrixPass';
|
|
3
5
|
import { getCanvasRenderEffectRunner } from './canvasRenderEffectRegistry';
|
|
4
6
|
// Opt-in Canvas 2D post-process pipeline — the parallel of the Gl effect pipeline. The scene renders
|
|
5
7
|
// into the pipeline's offscreen canvas between begin/end; end runs the agnostic effect list through the
|
|
@@ -28,13 +30,17 @@ export function beginCanvasRenderEffectPipeline(state, pipeline) {
|
|
|
28
30
|
else {
|
|
29
31
|
resizeCanvasRenderTarget(pipeline.sceneTarget, w, h);
|
|
30
32
|
}
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
beginCanvasRenderTarget(state, pipeline.sceneTarget, state.renderTransform2D ?? createMatrix());
|
|
33
|
+
// beginCanvasRenderPass clears the offscreen scene canvas by default (an unchanged size would keep last
|
|
34
|
+
// frame's pixels otherwise); the current 2D transform is inherited rather than passed.
|
|
35
|
+
beginCanvasRenderPass(state, pipeline.sceneTarget);
|
|
35
36
|
}
|
|
36
37
|
export function createCanvasRenderEffectPipeline(_state, options = {}) {
|
|
37
|
-
return {
|
|
38
|
+
return {
|
|
39
|
+
options: { ...options },
|
|
40
|
+
sceneTarget: null,
|
|
41
|
+
pool: createCanvasRenderTargetPool(),
|
|
42
|
+
lutCache: createColorLutCache(),
|
|
43
|
+
};
|
|
38
44
|
}
|
|
39
45
|
export function createCanvasRenderTargetPool() {
|
|
40
46
|
return { free: [], inUse: [] };
|
|
@@ -45,28 +51,64 @@ export function destroyCanvasRenderEffectPipeline(_state, pipeline) {
|
|
|
45
51
|
pipeline.sceneTarget = null;
|
|
46
52
|
pipeline.pool.free.length = 0;
|
|
47
53
|
pipeline.pool.inUse.length = 0;
|
|
54
|
+
pipeline.lutCache.signature = null;
|
|
55
|
+
pipeline.lutCache.lut = null;
|
|
48
56
|
}
|
|
49
|
-
export function endCanvasRenderEffectPipeline(state, pipeline,
|
|
57
|
+
export function endCanvasRenderEffectPipeline(state, pipeline, operations) {
|
|
50
58
|
const scene = pipeline.sceneTarget;
|
|
51
59
|
if (scene === null)
|
|
52
60
|
return;
|
|
53
|
-
|
|
61
|
+
endCanvasRenderPass(state);
|
|
54
62
|
const pool = pipeline.pool;
|
|
55
63
|
let source = scene;
|
|
56
64
|
let scratchA = null;
|
|
57
65
|
let scratchB = null;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
66
|
+
// A maximal run of consecutive pointwise adjustments fuses into ONE pass: all matrix-tier → one 4×5
|
|
67
|
+
// matrix (cheaper applyColorMatrixPass); any LUT-tier member → the whole run (matrices folded in) bakes
|
|
68
|
+
// into one ColorLut (applyColorLutPass). An effect (or the end of the stack) breaks the run and flushes
|
|
69
|
+
// it first, preserving stack order.
|
|
70
|
+
let pending = [];
|
|
71
|
+
const ensureScratch = () => {
|
|
62
72
|
if (scratchA === null)
|
|
63
73
|
scratchA = acquireCanvasRenderTarget(pool, scene.width, scene.height);
|
|
64
74
|
if (scratchB === null)
|
|
65
75
|
scratchB = acquireCanvasRenderTarget(pool, scene.width, scene.height);
|
|
76
|
+
};
|
|
77
|
+
const flushAdjustments = () => {
|
|
78
|
+
if (pending.length === 0)
|
|
79
|
+
return;
|
|
80
|
+
ensureScratch();
|
|
81
|
+
const dest = source === scratchA ? scratchB : scratchA;
|
|
82
|
+
if (pending.some(isColorLutAdjustment)) {
|
|
83
|
+
applyColorLutPassToCanvas(source, dest, bakeColorLutForRun(pipeline.lutCache, pending));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const matrices = [];
|
|
87
|
+
for (const op of pending) {
|
|
88
|
+
const matrix = getAdjustmentColorMatrix(op);
|
|
89
|
+
if (matrix !== null)
|
|
90
|
+
matrices.push(matrix);
|
|
91
|
+
}
|
|
92
|
+
applyColorMatrixPassToCanvas(source, dest, fuseColorMatrices(matrices));
|
|
93
|
+
}
|
|
94
|
+
source = dest;
|
|
95
|
+
pending = [];
|
|
96
|
+
};
|
|
97
|
+
for (const operation of operations) {
|
|
98
|
+
if (getAdjustmentColorMatrix(operation) !== null || isColorLutAdjustment(operation)) {
|
|
99
|
+
pending.push(operation);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const runner = getCanvasRenderEffectRunner(state, operation.kind);
|
|
103
|
+
if (runner === null)
|
|
104
|
+
continue;
|
|
105
|
+
flushAdjustments();
|
|
106
|
+
ensureScratch();
|
|
66
107
|
const dest = source === scratchA ? scratchB : scratchA;
|
|
67
|
-
runner({ state, source, dest, pool },
|
|
108
|
+
runner({ state, source, dest, pool }, operation);
|
|
68
109
|
source = dest;
|
|
69
110
|
}
|
|
111
|
+
flushAdjustments();
|
|
70
112
|
presentCanvasRenderEffectResult(state, source);
|
|
71
113
|
if (scratchA !== null)
|
|
72
114
|
releaseCanvasRenderTarget(pool, scratchA);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasRenderEffectPipeline.js","sourceRoot":"","sources":["../src/canvasRenderEffectPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"canvasRenderEffectPipeline.js","sourceRoot":"","sources":["../src/canvasRenderEffectPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import type { CanvasRenderState } from '@flighthq/types';
|
|
|
2
2
|
export declare function registerAllCanvasRenderEffects(state: CanvasRenderState): void;
|
|
3
3
|
export declare function registerBlurCanvasRenderEffects(state: CanvasRenderState): void;
|
|
4
4
|
export declare function registerColorGradeCanvasRenderEffects(state: CanvasRenderState): void;
|
|
5
|
+
export declare function registerCompositeCanvasRenderEffects(state: CanvasRenderState): void;
|
|
5
6
|
export declare function registerScreenSpaceCanvasRenderEffects(state: CanvasRenderState): void;
|
|
6
7
|
export declare function registerStylizeCanvasRenderEffects(state: CanvasRenderState): void;
|
|
7
8
|
//# sourceMappingURL=canvasRenderEffectRegistration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasRenderEffectRegistration.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectRegistration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"canvasRenderEffectRegistration.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectRegistration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA4CnF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAM7E;AAOD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAI9E;AASD,wBAAgB,qCAAqC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIpF;AAQD,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAInF;AAOD,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIrF;AAOD,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIjF"}
|