@flighthq/effects-canvas 0.3.0-next.906.07cea63 → 0.3.0
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/canvasBevelEffect.d.ts +7 -0
- package/dist/canvasBevelEffect.d.ts.map +1 -0
- package/dist/canvasBevelEffect.js +76 -0
- package/dist/canvasBevelEffect.js.map +1 -0
- package/dist/canvasBlendEffect.d.ts +9 -0
- package/dist/canvasBlendEffect.d.ts.map +1 -0
- package/dist/canvasBlendEffect.js +89 -0
- package/dist/canvasBlendEffect.js.map +1 -0
- package/dist/canvasBloomEffect.d.ts +2 -1
- package/dist/canvasBloomEffect.d.ts.map +1 -1
- package/dist/canvasBloomEffect.js +4 -0
- package/dist/canvasBloomEffect.js.map +1 -1
- package/dist/canvasBlurEffect.d.ts +2 -1
- package/dist/canvasBlurEffect.d.ts.map +1 -1
- package/dist/canvasBlurEffect.js +4 -0
- package/dist/canvasBlurEffect.js.map +1 -1
- package/dist/canvasColorMatrixPass.d.ts +1 -0
- package/dist/canvasColorMatrixPass.d.ts.map +1 -1
- package/dist/canvasColorMatrixPass.js +22 -16
- package/dist/canvasColorMatrixPass.js.map +1 -1
- package/dist/canvasCompositeEffect.d.ts +6 -0
- package/dist/canvasCompositeEffect.d.ts.map +1 -0
- package/dist/canvasCompositeEffect.js +71 -0
- package/dist/canvasCompositeEffect.js.map +1 -0
- package/dist/canvasDropShadowEffect.d.ts +2 -1
- package/dist/canvasDropShadowEffect.d.ts.map +1 -1
- package/dist/canvasDropShadowEffect.js +4 -0
- package/dist/canvasDropShadowEffect.js.map +1 -1
- package/dist/canvasFilmGrainEffect.d.ts +2 -1
- package/dist/canvasFilmGrainEffect.d.ts.map +1 -1
- package/dist/canvasFilmGrainEffect.js +4 -0
- package/dist/canvasFilmGrainEffect.js.map +1 -1
- package/dist/canvasGradientBevelEffect.d.ts +6 -0
- package/dist/canvasGradientBevelEffect.d.ts.map +1 -0
- package/dist/canvasGradientBevelEffect.js +62 -0
- package/dist/canvasGradientBevelEffect.js.map +1 -0
- package/dist/canvasGradientGlowEffect.d.ts +6 -0
- package/dist/canvasGradientGlowEffect.d.ts.map +1 -0
- package/dist/canvasGradientGlowEffect.js +36 -0
- package/dist/canvasGradientGlowEffect.js.map +1 -0
- package/dist/canvasGradientRamp.d.ts +4 -0
- package/dist/canvasGradientRamp.d.ts.map +1 -0
- package/dist/canvasGradientRamp.js +75 -0
- package/dist/canvasGradientRamp.js.map +1 -0
- package/dist/canvasInnerGlowEffect.d.ts +6 -0
- package/dist/canvasInnerGlowEffect.d.ts.map +1 -0
- package/dist/canvasInnerGlowEffect.js +37 -0
- package/dist/canvasInnerGlowEffect.js.map +1 -0
- package/dist/canvasInnerShadowEffect.d.ts +6 -0
- package/dist/canvasInnerShadowEffect.d.ts.map +1 -0
- package/dist/canvasInnerShadowEffect.js +43 -0
- package/dist/canvasInnerShadowEffect.js.map +1 -0
- package/dist/canvasOuterGlowEffect.d.ts +2 -1
- package/dist/canvasOuterGlowEffect.d.ts.map +1 -1
- package/dist/canvasOuterGlowEffect.js +4 -0
- package/dist/canvasOuterGlowEffect.js.map +1 -1
- package/dist/canvasPixelateEffect.d.ts +2 -1
- package/dist/canvasPixelateEffect.d.ts.map +1 -1
- package/dist/canvasPixelateEffect.js +4 -0
- package/dist/canvasPixelateEffect.js.map +1 -1
- package/dist/canvasRenderEffectPipeline.d.ts.map +1 -1
- package/dist/canvasRenderEffectPipeline.js +9 -3
- package/dist/canvasRenderEffectPipeline.js.map +1 -1
- package/dist/canvasRenderEffectRegistry.d.ts.map +1 -1
- package/dist/canvasRenderEffectRegistry.js +9 -12
- package/dist/canvasRenderEffectRegistry.js.map +1 -1
- package/dist/canvasRenderTextureEffect.d.ts +3 -0
- package/dist/canvasRenderTextureEffect.d.ts.map +1 -0
- package/dist/canvasRenderTextureEffect.js +31 -0
- package/dist/canvasRenderTextureEffect.js.map +1 -0
- package/dist/canvasScanlinesEffect.d.ts +2 -1
- package/dist/canvasScanlinesEffect.d.ts.map +1 -1
- package/dist/canvasScanlinesEffect.js +4 -0
- package/dist/canvasScanlinesEffect.js.map +1 -1
- package/dist/canvasSourceModeCompositing.d.ts +1 -0
- package/dist/canvasSourceModeCompositing.d.ts.map +1 -1
- package/dist/canvasSourceModeCompositing.js +24 -0
- package/dist/canvasSourceModeCompositing.js.map +1 -1
- package/dist/canvasVignetteEffect.d.ts +2 -1
- package/dist/canvasVignetteEffect.d.ts.map +1 -1
- package/dist/canvasVignetteEffect.js +4 -0
- package/dist/canvasVignetteEffect.js.map +1 -1
- package/dist/contract.d.ts +9 -31
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +9 -31
- package/dist/contract.js.map +1 -1
- 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 +8 -6
- package/src/canvasBevelEffect.test.ts +212 -0
- package/src/canvasBlendEffect.test.ts +235 -0
- package/src/canvasBloomEffect.test.ts +9 -1
- package/src/canvasBlurEffect.test.ts +12 -1
- package/src/canvasColorMatrixPass.test.ts +61 -11
- package/src/canvasCompositeEffect.test.ts +181 -0
- package/src/canvasDropShadowEffect.test.ts +15 -8
- package/src/canvasEffectRegistration.test.ts +27 -0
- package/src/canvasFilmGrainEffect.test.ts +9 -1
- package/src/canvasGradientBevelEffect.test.ts +180 -0
- package/src/canvasGradientGlowEffect.test.ts +125 -0
- package/src/canvasGradientRamp.test.ts +98 -0
- package/src/canvasInnerGlowEffect.test.ts +152 -0
- package/src/canvasInnerShadowEffect.test.ts +173 -0
- package/src/canvasOuterGlowEffect.test.ts +15 -8
- package/src/canvasPixelateEffect.test.ts +9 -1
- package/src/canvasRealizedEffectRegistration.test.ts +30 -0
- package/src/canvasRenderEffectPipeline.test.ts +38 -0
- package/src/canvasRenderEffectRegistry.test.ts +10 -9
- package/src/canvasRenderTextureEffect.test.ts +73 -0
- package/src/canvasScanlinesEffect.test.ts +9 -1
- package/src/canvasSourceModeCompositing.test.ts +40 -0
- package/src/canvasVignetteEffect.test.ts +9 -1
- package/dist/canvasBokehDepthOfFieldEffect.d.ts +0 -4
- package/dist/canvasBokehDepthOfFieldEffect.d.ts.map +0 -1
- package/dist/canvasBokehDepthOfFieldEffect.js +0 -10
- package/dist/canvasBokehDepthOfFieldEffect.js.map +0 -1
- package/dist/canvasCameraMotionBlurEffect.d.ts +0 -4
- package/dist/canvasCameraMotionBlurEffect.d.ts.map +0 -1
- package/dist/canvasCameraMotionBlurEffect.js +0 -11
- package/dist/canvasCameraMotionBlurEffect.js.map +0 -1
- package/dist/canvasChromaticAberrationEffect.d.ts +0 -4
- package/dist/canvasChromaticAberrationEffect.d.ts.map +0 -1
- package/dist/canvasChromaticAberrationEffect.js +0 -11
- package/dist/canvasChromaticAberrationEffect.js.map +0 -1
- package/dist/canvasConvolutionEffect.d.ts +0 -4
- package/dist/canvasConvolutionEffect.d.ts.map +0 -1
- package/dist/canvasConvolutionEffect.js +0 -11
- package/dist/canvasConvolutionEffect.js.map +0 -1
- package/dist/canvasCrtEffect.d.ts +0 -4
- package/dist/canvasCrtEffect.d.ts.map +0 -1
- package/dist/canvasCrtEffect.js +0 -11
- package/dist/canvasCrtEffect.js.map +0 -1
- package/dist/canvasDirectionalBlurEffect.d.ts +0 -4
- package/dist/canvasDirectionalBlurEffect.d.ts.map +0 -1
- package/dist/canvasDirectionalBlurEffect.js +0 -11
- package/dist/canvasDirectionalBlurEffect.js.map +0 -1
- package/dist/canvasDisplacementEffect.d.ts +0 -4
- package/dist/canvasDisplacementEffect.d.ts.map +0 -1
- package/dist/canvasDisplacementEffect.js +0 -10
- package/dist/canvasDisplacementEffect.js.map +0 -1
- package/dist/canvasDitherEffect.d.ts +0 -4
- package/dist/canvasDitherEffect.d.ts.map +0 -1
- package/dist/canvasDitherEffect.js +0 -11
- package/dist/canvasDitherEffect.js.map +0 -1
- package/dist/canvasFxaaEffect.d.ts +0 -4
- package/dist/canvasFxaaEffect.d.ts.map +0 -1
- package/dist/canvasFxaaEffect.js +0 -11
- package/dist/canvasFxaaEffect.js.map +0 -1
- package/dist/canvasGlitchEffect.d.ts +0 -4
- package/dist/canvasGlitchEffect.d.ts.map +0 -1
- package/dist/canvasGlitchEffect.js +0 -11
- package/dist/canvasGlitchEffect.js.map +0 -1
- package/dist/canvasGodRaysEffect.d.ts +0 -4
- package/dist/canvasGodRaysEffect.d.ts.map +0 -1
- package/dist/canvasGodRaysEffect.js +0 -11
- package/dist/canvasGodRaysEffect.js.map +0 -1
- package/dist/canvasHalftoneEffect.d.ts +0 -4
- package/dist/canvasHalftoneEffect.d.ts.map +0 -1
- package/dist/canvasHalftoneEffect.js +0 -10
- package/dist/canvasHalftoneEffect.js.map +0 -1
- package/dist/canvasKuwaharaEffect.d.ts +0 -4
- package/dist/canvasKuwaharaEffect.d.ts.map +0 -1
- package/dist/canvasKuwaharaEffect.js +0 -11
- package/dist/canvasKuwaharaEffect.js.map +0 -1
- package/dist/canvasLensDirtEffect.d.ts +0 -4
- package/dist/canvasLensDirtEffect.d.ts.map +0 -1
- package/dist/canvasLensDirtEffect.js +0 -11
- package/dist/canvasLensDirtEffect.js.map +0 -1
- package/dist/canvasLensDistortionEffect.d.ts +0 -4
- package/dist/canvasLensDistortionEffect.d.ts.map +0 -1
- package/dist/canvasLensDistortionEffect.js +0 -10
- package/dist/canvasLensDistortionEffect.js.map +0 -1
- package/dist/canvasLensFlareEffect.d.ts +0 -4
- package/dist/canvasLensFlareEffect.d.ts.map +0 -1
- package/dist/canvasLensFlareEffect.js +0 -11
- package/dist/canvasLensFlareEffect.js.map +0 -1
- package/dist/canvasMedianEffect.d.ts +0 -4
- package/dist/canvasMedianEffect.d.ts.map +0 -1
- package/dist/canvasMedianEffect.js +0 -11
- package/dist/canvasMedianEffect.js.map +0 -1
- package/dist/canvasMotionBlurEffect.d.ts +0 -4
- package/dist/canvasMotionBlurEffect.d.ts.map +0 -1
- package/dist/canvasMotionBlurEffect.js +0 -11
- package/dist/canvasMotionBlurEffect.js.map +0 -1
- package/dist/canvasOutlineEffect.d.ts +0 -4
- package/dist/canvasOutlineEffect.d.ts.map +0 -1
- package/dist/canvasOutlineEffect.js +0 -11
- package/dist/canvasOutlineEffect.js.map +0 -1
- package/dist/canvasPosterizeEffect.d.ts +0 -4
- package/dist/canvasPosterizeEffect.d.ts.map +0 -1
- package/dist/canvasPosterizeEffect.js +0 -10
- package/dist/canvasPosterizeEffect.js.map +0 -1
- package/dist/canvasRadialBlurEffect.d.ts +0 -4
- package/dist/canvasRadialBlurEffect.d.ts.map +0 -1
- package/dist/canvasRadialBlurEffect.js +0 -11
- package/dist/canvasRadialBlurEffect.js.map +0 -1
- package/dist/canvasScreenSpaceFogEffect.d.ts +0 -4
- package/dist/canvasScreenSpaceFogEffect.d.ts.map +0 -1
- package/dist/canvasScreenSpaceFogEffect.js +0 -10
- package/dist/canvasScreenSpaceFogEffect.js.map +0 -1
- package/dist/canvasSharpenEffect.d.ts +0 -4
- package/dist/canvasSharpenEffect.d.ts.map +0 -1
- package/dist/canvasSharpenEffect.js +0 -11
- package/dist/canvasSharpenEffect.js.map +0 -1
- package/dist/canvasSketchEffect.d.ts +0 -4
- package/dist/canvasSketchEffect.d.ts.map +0 -1
- package/dist/canvasSketchEffect.js +0 -11
- package/dist/canvasSketchEffect.js.map +0 -1
- package/dist/canvasSmaaEffect.d.ts +0 -4
- package/dist/canvasSmaaEffect.d.ts.map +0 -1
- package/dist/canvasSmaaEffect.js +0 -11
- package/dist/canvasSmaaEffect.js.map +0 -1
- package/dist/canvasSsaoEffect.d.ts +0 -4
- package/dist/canvasSsaoEffect.d.ts.map +0 -1
- package/dist/canvasSsaoEffect.js +0 -11
- package/dist/canvasSsaoEffect.js.map +0 -1
- package/dist/canvasSsrEffect.d.ts +0 -4
- package/dist/canvasSsrEffect.d.ts.map +0 -1
- package/dist/canvasSsrEffect.js +0 -11
- package/dist/canvasSsrEffect.js.map +0 -1
- package/dist/canvasTaaEffect.d.ts +0 -4
- package/dist/canvasTaaEffect.d.ts.map +0 -1
- package/dist/canvasTaaEffect.js +0 -11
- package/dist/canvasTaaEffect.js.map +0 -1
- package/dist/canvasTiltShiftEffect.d.ts +0 -4
- package/dist/canvasTiltShiftEffect.d.ts.map +0 -1
- package/dist/canvasTiltShiftEffect.js +0 -11
- package/dist/canvasTiltShiftEffect.js.map +0 -1
- package/dist/canvasToneMapEffect.d.ts +0 -4
- package/dist/canvasToneMapEffect.d.ts.map +0 -1
- package/dist/canvasToneMapEffect.js +0 -12
- package/dist/canvasToneMapEffect.js.map +0 -1
- package/dist/canvasWhiteBalanceEffect.d.ts +0 -4
- package/dist/canvasWhiteBalanceEffect.d.ts.map +0 -1
- package/dist/canvasWhiteBalanceEffect.js +0 -11
- package/dist/canvasWhiteBalanceEffect.js.map +0 -1
- package/src/canvasBokehDepthOfFieldEffect.test.ts +0 -16
- package/src/canvasCameraMotionBlurEffect.test.ts +0 -16
- package/src/canvasChromaticAberrationEffect.test.ts +0 -16
- package/src/canvasConvolutionEffect.test.ts +0 -13
- package/src/canvasCrtEffect.test.ts +0 -13
- package/src/canvasDirectionalBlurEffect.test.ts +0 -16
- package/src/canvasDisplacementEffect.test.ts +0 -13
- package/src/canvasDitherEffect.test.ts +0 -13
- package/src/canvasFxaaEffect.test.ts +0 -13
- package/src/canvasGlitchEffect.test.ts +0 -13
- package/src/canvasGodRaysEffect.test.ts +0 -13
- package/src/canvasHalftoneEffect.test.ts +0 -13
- package/src/canvasKuwaharaEffect.test.ts +0 -13
- package/src/canvasLensDirtEffect.test.ts +0 -13
- package/src/canvasLensDistortionEffect.test.ts +0 -16
- package/src/canvasLensFlareEffect.test.ts +0 -13
- package/src/canvasMedianEffect.test.ts +0 -13
- package/src/canvasMotionBlurEffect.test.ts +0 -13
- package/src/canvasOutlineEffect.test.ts +0 -13
- package/src/canvasPosterizeEffect.test.ts +0 -13
- package/src/canvasRadialBlurEffect.test.ts +0 -13
- package/src/canvasScreenSpaceFogEffect.test.ts +0 -16
- package/src/canvasSharpenEffect.test.ts +0 -13
- package/src/canvasSketchEffect.test.ts +0 -13
- package/src/canvasSmaaEffect.test.ts +0 -13
- package/src/canvasSsaoEffect.test.ts +0 -13
- package/src/canvasSsrEffect.test.ts +0 -13
- package/src/canvasTaaEffect.test.ts +0 -13
- package/src/canvasTiltShiftEffect.test.ts +0 -13
- package/src/canvasToneMapEffect.test.ts +0 -13
- package/src/canvasWhiteBalanceEffect.test.ts +0 -13
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { clipCanvasBevelBand } from './canvasBevelEffect';
|
|
2
|
+
import { drawCanvasEffectPass } from './canvasEffectCompositing';
|
|
3
|
+
import { applyCanvasGradientRampLookup, buildCanvasGradientRamp } from './canvasGradientRamp';
|
|
4
|
+
import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
|
|
5
|
+
import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
|
|
6
|
+
import { clearCanvasTarget, compositeCanvasImage } from './canvasSourceModeCompositing';
|
|
7
|
+
export function applyGradientBevelEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
|
|
8
|
+
const effect = maybeEffect ?? poolOrEffect;
|
|
9
|
+
const pool = maybeEffect === undefined ? createCanvasRenderTargetPool() : poolOrEffect;
|
|
10
|
+
applyGradientBevelEffectToCanvasWithPool(source, dest, pool, effect);
|
|
11
|
+
}
|
|
12
|
+
export const defaultCanvasGradientBevelEffectRunner = (ctx, effect) => {
|
|
13
|
+
applyGradientBevelEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
|
|
14
|
+
};
|
|
15
|
+
export function registerCanvasGradientBevelEffect(state) {
|
|
16
|
+
registerCanvasRenderEffect(state, 'GradientBevelEffect', defaultCanvasGradientBevelEffectRunner);
|
|
17
|
+
}
|
|
18
|
+
function applyGradientBevelEffectToCanvasWithPool(source, dest, pool, effect) {
|
|
19
|
+
const blurred = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
20
|
+
const lit = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
21
|
+
const shade = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
22
|
+
const side = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
23
|
+
const ramped = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
24
|
+
const band = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
25
|
+
const blur = Math.max(0, ((effect.blurX ?? 4) + (effect.blurY ?? 4)) / 2);
|
|
26
|
+
const angle = ((effect.angle ?? 45) * Math.PI) / 180;
|
|
27
|
+
const distance = effect.distance ?? 4;
|
|
28
|
+
const offsetX = Math.cos(angle) * distance;
|
|
29
|
+
const offsetY = Math.sin(angle) * distance;
|
|
30
|
+
const strength = Math.min(1, effect.strength ?? 1);
|
|
31
|
+
const ramp = buildCanvasGradientRamp(effect.colors, effect.alphas, effect.ratios);
|
|
32
|
+
drawCanvasEffectPass(blurred, source, blur > 0 ? `blur(${blur}px)` : 'none');
|
|
33
|
+
clearCanvasTarget(lit);
|
|
34
|
+
compositeCanvasImage(lit, blurred, -offsetX, -offsetY);
|
|
35
|
+
clearCanvasTarget(shade);
|
|
36
|
+
compositeCanvasImage(shade, blurred, offsetX, offsetY);
|
|
37
|
+
clearCanvasTarget(band);
|
|
38
|
+
// Highlight side reads the ramp upward from its midpoint.
|
|
39
|
+
clearCanvasTarget(side);
|
|
40
|
+
compositeCanvasImage(side, lit);
|
|
41
|
+
compositeCanvasImage(side, shade, 0, 0, 'destination-out');
|
|
42
|
+
applyCanvasGradientRampLookup(ramped, side, ramp, 0.5, 0.5 * strength);
|
|
43
|
+
compositeCanvasImage(band, ramped);
|
|
44
|
+
// Shadow side reads the same ramp downward from the midpoint, so one ramp spans both halves.
|
|
45
|
+
clearCanvasTarget(side);
|
|
46
|
+
compositeCanvasImage(side, shade);
|
|
47
|
+
compositeCanvasImage(side, lit, 0, 0, 'destination-out');
|
|
48
|
+
applyCanvasGradientRampLookup(ramped, side, ramp, 0.5, -0.5 * strength);
|
|
49
|
+
compositeCanvasImage(band, ramped);
|
|
50
|
+
clipCanvasBevelBand(band, source, effect.bevelType);
|
|
51
|
+
clearCanvasTarget(dest);
|
|
52
|
+
if ((effect.sourceMode ?? 'draw') !== 'hide')
|
|
53
|
+
compositeCanvasImage(dest, source);
|
|
54
|
+
compositeCanvasImage(dest, band);
|
|
55
|
+
releaseCanvasRenderTarget(pool, band);
|
|
56
|
+
releaseCanvasRenderTarget(pool, ramped);
|
|
57
|
+
releaseCanvasRenderTarget(pool, side);
|
|
58
|
+
releaseCanvasRenderTarget(pool, shade);
|
|
59
|
+
releaseCanvasRenderTarget(pool, lit);
|
|
60
|
+
releaseCanvasRenderTarget(pool, blurred);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=canvasGradientBevelEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasGradientBevelEffect.js","sourceRoot":"","sources":["../src/canvasGradientBevelEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, GradientGlowEffect } from '@flighthq/types/contract';
|
|
2
|
+
export declare function applyGradientGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<GradientGlowEffect>): void;
|
|
3
|
+
export declare function applyGradientGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<GradientGlowEffect>): void;
|
|
4
|
+
export declare const defaultCanvasGradientGlowEffectRunner: CanvasRenderEffectRunner;
|
|
5
|
+
export declare function registerCanvasGradientGlowEffect(state: CanvasRenderState): void;
|
|
6
|
+
//# sourceMappingURL=canvasGradientGlowEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasGradientGlowEffect.d.ts","sourceRoot":"","sources":["../src/canvasGradientGlowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAmBlC,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACnC,IAAI,CAAC;AACR,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACnC,IAAI,CAAC;AAYR,eAAO,MAAM,qCAAqC,EAAE,wBAEnD,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE/E"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { drawCanvasEffectPass } from './canvasEffectCompositing';
|
|
2
|
+
import { applyCanvasGradientRampLookup, buildCanvasGradientRamp } from './canvasGradientRamp';
|
|
3
|
+
import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
|
|
4
|
+
import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
|
|
5
|
+
import { clearCanvasTarget, compositeCanvasImage } from './canvasSourceModeCompositing';
|
|
6
|
+
export function applyGradientGlowEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
|
|
7
|
+
const effect = maybeEffect ?? poolOrEffect;
|
|
8
|
+
const pool = maybeEffect === undefined ? createCanvasRenderTargetPool() : poolOrEffect;
|
|
9
|
+
applyGradientGlowEffectToCanvasWithPool(source, dest, pool, effect);
|
|
10
|
+
}
|
|
11
|
+
export const defaultCanvasGradientGlowEffectRunner = (ctx, effect) => {
|
|
12
|
+
applyGradientGlowEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
|
|
13
|
+
};
|
|
14
|
+
export function registerCanvasGradientGlowEffect(state) {
|
|
15
|
+
registerCanvasRenderEffect(state, 'GradientGlowEffect', defaultCanvasGradientGlowEffectRunner);
|
|
16
|
+
}
|
|
17
|
+
function applyGradientGlowEffectToCanvasWithPool(source, dest, pool, effect) {
|
|
18
|
+
const blurred = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
19
|
+
const glow = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
20
|
+
const strength = effect.strength ?? 1;
|
|
21
|
+
const glowPasses = Math.max(1, Math.floor(strength));
|
|
22
|
+
const blur = Math.max(0, ((effect.blurX ?? 6) + (effect.blurY ?? 6)) / 2);
|
|
23
|
+
const ramp = buildCanvasGradientRamp(effect.colors, effect.alphas, effect.ratios);
|
|
24
|
+
drawCanvasEffectPass(blurred, source, blur > 0 ? `blur(${blur}px)` : 'none');
|
|
25
|
+
applyCanvasGradientRampLookup(glow, blurred, ramp);
|
|
26
|
+
clearCanvasTarget(dest);
|
|
27
|
+
// The glow goes down FIRST and the source over it — this is an outer effect, so the shape occludes the
|
|
28
|
+
// part of the glow that falls under it.
|
|
29
|
+
for (let i = 0; i < glowPasses; i++)
|
|
30
|
+
compositeCanvasImage(dest, glow);
|
|
31
|
+
if ((effect.sourceMode ?? 'draw') !== 'hide')
|
|
32
|
+
compositeCanvasImage(dest, source);
|
|
33
|
+
releaseCanvasRenderTarget(pool, glow);
|
|
34
|
+
releaseCanvasRenderTarget(pool, blurred);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=canvasGradientGlowEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasGradientGlowEffect.js","sourceRoot":"","sources":["../src/canvasGradientGlowEffect.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAoBxF,MAAM,UAAU,+BAA+B,CAC7C,MAAoC,EACpC,IAAkC,EAClC,YAAmE,EACnE,WAA0C;IAE1C,MAAM,MAAM,GAAG,WAAW,IAAK,YAA6C,CAAC;IAC7E,MAAM,IAAI,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAE,YAAuC,CAAC;IACnH,uCAAuC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,MAAM,qCAAqC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC7F,+BAA+B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAA4B,CAAC,CAAC;AAChG,CAAC,CAAC;AAEF,MAAM,UAAU,gCAAgC,CAAC,KAAwB;IACvE,0BAA0B,CAAC,KAAK,EAAE,oBAAoB,EAAE,qCAAqC,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,uCAAuC,CAC9C,MAAoC,EACpC,IAAkC,EAClC,IAA4B,EAC5B,MAAoC;IAEpC,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAE1E,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAElF,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7E,6BAA6B,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAEnD,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,uGAAuG;IACvG,wCAAwC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE;QAAE,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,MAAM;QAAE,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEjF,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CanvasRenderTarget } from '@flighthq/types/contract';
|
|
2
|
+
export declare function applyCanvasGradientRampLookup(dest: Readonly<CanvasRenderTarget>, source: Readonly<CanvasRenderTarget>, ramp: Readonly<Uint8ClampedArray>, bias?: number, scale?: number): void;
|
|
3
|
+
export declare function buildCanvasGradientRamp(colors: ReadonlyArray<number>, alphas: ReadonlyArray<number>, ratios: ReadonlyArray<number>): Uint8ClampedArray;
|
|
4
|
+
//# sourceMappingURL=canvasGradientRamp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasGradientRamp.d.ts","sourceRoot":"","sources":["../src/canvasGradientRamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAuBnE,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACjC,IAAI,SAAI,EACR,KAAK,SAAI,GACR,IAAI,CAYN;AAID,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B,iBAAiB,CAsCnB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { drawCanvasImageDataPass } from './canvasEffectCompositing';
|
|
2
|
+
// The 256-entry colour ramp the gradient effects index, and the pass that indexes it.
|
|
3
|
+
//
|
|
4
|
+
// This is a per-pixel LOOKUP, not a spatial gradient, and the distinction is the whole reason this file
|
|
5
|
+
// uses `drawCanvasImageDataPass` rather than `createLinearGradient`. The GL passes read
|
|
6
|
+
// `texture(u_ramp, vec2(value, 0.5))` — the ramp is indexed by a per-pixel SCALAR (a blurred alpha for
|
|
7
|
+
// the glow, an encoded bevel depth for the bevel), so where a colour lands depends on the value at that
|
|
8
|
+
// pixel and not on where the pixel is. A CSS gradient paints by position and cannot express that for an
|
|
9
|
+
// arbitrary silhouette.
|
|
10
|
+
//
|
|
11
|
+
// The per-pixel cost is one table read per pixel with no resampling, which is a different and much
|
|
12
|
+
// cheaper class than the radial remaps that are still unimplemented on this backend.
|
|
13
|
+
// Replaces every pixel of `source` with the ramp entry its ALPHA indexes, writing to `dest`. `bias` and
|
|
14
|
+
// `scale` map that alpha into the ramp before the lookup: the glow passes 0 and 1 to index directly,
|
|
15
|
+
// while the bevel passes 0.5 and ±0.5 so a band's strength runs outward from the ramp's midpoint, which
|
|
16
|
+
// is how the shadow half and the highlight half read opposite ends of one ramp.
|
|
17
|
+
//
|
|
18
|
+
// Output alpha is the ramp's own, matching GL, where the lookup result is written unmultiplied by the
|
|
19
|
+
// source. A ramp whose first entry is transparent therefore leaves the untouched exterior transparent.
|
|
20
|
+
export function applyCanvasGradientRampLookup(dest, source, ramp, bias = 0, scale = 1) {
|
|
21
|
+
drawCanvasImageDataPass(dest, source, (data, pixelCount) => {
|
|
22
|
+
for (let i = 0; i < pixelCount; i++) {
|
|
23
|
+
const at = i * 4;
|
|
24
|
+
const t = bias + (data[at + 3] / 255) * scale;
|
|
25
|
+
const index = Math.max(0, Math.min(255, Math.round(t * 255))) * 4;
|
|
26
|
+
data[at] = ramp[index];
|
|
27
|
+
data[at + 1] = ramp[index + 1];
|
|
28
|
+
data[at + 2] = ramp[index + 2];
|
|
29
|
+
data[at + 3] = ramp[index + 3];
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Builds the ramp as 256 RGBA entries, mirroring the GL ramp texture: stops are placed by `ratios`
|
|
34
|
+
// (0..255) and linearly interpolated between, with the first and last stop extended to the ends.
|
|
35
|
+
export function buildCanvasGradientRamp(colors, alphas, ratios) {
|
|
36
|
+
const ramp = new Uint8ClampedArray(256 * 4);
|
|
37
|
+
if (colors.length === 0)
|
|
38
|
+
return ramp;
|
|
39
|
+
for (let i = 0; i < 256; i++) {
|
|
40
|
+
let upper = 0;
|
|
41
|
+
while (upper < ratios.length && (ratios[upper] ?? 0) < i)
|
|
42
|
+
upper++;
|
|
43
|
+
let color;
|
|
44
|
+
let alpha;
|
|
45
|
+
if (upper <= 0) {
|
|
46
|
+
color = colors[0];
|
|
47
|
+
alpha = alphas[0] ?? 1;
|
|
48
|
+
}
|
|
49
|
+
else if (upper >= colors.length) {
|
|
50
|
+
color = colors[colors.length - 1];
|
|
51
|
+
alpha = alphas[colors.length - 1] ?? 1;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const lowRatio = ratios[upper - 1] ?? 0;
|
|
55
|
+
const highRatio = ratios[upper] ?? 255;
|
|
56
|
+
const span = highRatio - lowRatio;
|
|
57
|
+
// A zero-width span means two stops share a ratio: take the later one rather than dividing by zero.
|
|
58
|
+
const t = span > 0 ? (i - lowRatio) / span : 1;
|
|
59
|
+
const lowColor = colors[upper - 1];
|
|
60
|
+
const highColor = colors[upper];
|
|
61
|
+
color =
|
|
62
|
+
(Math.round(((lowColor >> 16) & 0xff) + (((highColor >> 16) & 0xff) - ((lowColor >> 16) & 0xff)) * t) << 16) |
|
|
63
|
+
(Math.round(((lowColor >> 8) & 0xff) + (((highColor >> 8) & 0xff) - ((lowColor >> 8) & 0xff)) * t) << 8) |
|
|
64
|
+
Math.round((lowColor & 0xff) + ((highColor & 0xff) - (lowColor & 0xff)) * t);
|
|
65
|
+
alpha = (alphas[upper - 1] ?? 1) + ((alphas[upper] ?? 1) - (alphas[upper - 1] ?? 1)) * t;
|
|
66
|
+
}
|
|
67
|
+
const at = i * 4;
|
|
68
|
+
ramp[at] = (color >> 16) & 0xff;
|
|
69
|
+
ramp[at + 1] = (color >> 8) & 0xff;
|
|
70
|
+
ramp[at + 2] = color & 0xff;
|
|
71
|
+
ramp[at + 3] = Math.max(0, Math.min(1, alpha)) * 255;
|
|
72
|
+
}
|
|
73
|
+
return ramp;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=canvasGradientRamp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasGradientRamp.js","sourceRoot":"","sources":["../src/canvasGradientRamp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, InnerGlowEffect } from '@flighthq/types/contract';
|
|
2
|
+
export declare function applyInnerGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<InnerGlowEffect>): void;
|
|
3
|
+
export declare function applyInnerGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<InnerGlowEffect>): void;
|
|
4
|
+
export declare const defaultCanvasInnerGlowEffectRunner: CanvasRenderEffectRunner;
|
|
5
|
+
export declare function registerCanvasInnerGlowEffect(state: CanvasRenderState): void;
|
|
6
|
+
//# sourceMappingURL=canvasInnerGlowEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasInnerGlowEffect.d.ts","sourceRoot":"","sources":["../src/canvasInnerGlowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AA4BlC,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;AAYR,eAAO,MAAM,kCAAkC,EAAE,wBAEhD,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE5E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { drawCanvasEffectPass } from './canvasEffectCompositing';
|
|
2
|
+
import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
|
|
3
|
+
import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
|
|
4
|
+
import { clearCanvasTarget, compositeCanvasImage, drawCanvasInvertedTintedAlphaMask, } from './canvasSourceModeCompositing';
|
|
5
|
+
export function applyInnerGlowEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
|
|
6
|
+
const effect = maybeEffect ?? poolOrEffect;
|
|
7
|
+
const pool = maybeEffect === undefined ? createCanvasRenderTargetPool() : poolOrEffect;
|
|
8
|
+
applyInnerGlowEffectToCanvasWithPool(source, dest, pool, effect);
|
|
9
|
+
}
|
|
10
|
+
export const defaultCanvasInnerGlowEffectRunner = (ctx, effect) => {
|
|
11
|
+
applyInnerGlowEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
|
|
12
|
+
};
|
|
13
|
+
export function registerCanvasInnerGlowEffect(state) {
|
|
14
|
+
registerCanvasRenderEffect(state, 'InnerGlowEffect', defaultCanvasInnerGlowEffectRunner);
|
|
15
|
+
}
|
|
16
|
+
function applyInnerGlowEffectToCanvasWithPool(source, dest, pool, effect) {
|
|
17
|
+
const mask = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
18
|
+
const glow = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
19
|
+
const strength = effect.strength ?? 1;
|
|
20
|
+
const glowPasses = Math.max(1, Math.floor(strength));
|
|
21
|
+
const blur = Math.max(0, ((effect.blurX ?? 6) + (effect.blurY ?? 6)) / 2);
|
|
22
|
+
drawCanvasInvertedTintedAlphaMask(mask, source, effect.color ?? 0xffffff, effect.alpha ?? 1, Math.min(1, strength));
|
|
23
|
+
drawCanvasEffectPass(glow, mask, blur > 0 ? `blur(${blur}px)` : 'none');
|
|
24
|
+
// Clip to the source alpha. Without this the blurred inversion still covers the whole exterior, which
|
|
25
|
+
// would paint the glow outside the shape as well as inside it.
|
|
26
|
+
compositeCanvasImage(glow, source, 0, 0, 'destination-in');
|
|
27
|
+
clearCanvasTarget(dest);
|
|
28
|
+
// 'hide' drops the source and keeps only the glow; the type admits no 'knockout' for inner effects,
|
|
29
|
+
// since knocking the shape out of an effect drawn inside it would erase the effect too.
|
|
30
|
+
if ((effect.sourceMode ?? 'draw') !== 'hide')
|
|
31
|
+
compositeCanvasImage(dest, source);
|
|
32
|
+
for (let i = 0; i < glowPasses; i++)
|
|
33
|
+
compositeCanvasImage(dest, glow);
|
|
34
|
+
releaseCanvasRenderTarget(pool, mask);
|
|
35
|
+
releaseCanvasRenderTarget(pool, glow);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=canvasInnerGlowEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasInnerGlowEffect.js","sourceRoot":"","sources":["../src/canvasInnerGlowEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, InnerShadowEffect } from '@flighthq/types/contract';
|
|
2
|
+
export declare function applyInnerShadowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<InnerShadowEffect>): void;
|
|
3
|
+
export declare function applyInnerShadowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<InnerShadowEffect>): void;
|
|
4
|
+
export declare const defaultCanvasInnerShadowEffectRunner: CanvasRenderEffectRunner;
|
|
5
|
+
export declare function registerCanvasInnerShadowEffect(state: CanvasRenderState): void;
|
|
6
|
+
//# sourceMappingURL=canvasInnerShadowEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasInnerShadowEffect.d.ts","sourceRoot":"","sources":["../src/canvasInnerShadowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAwBlC,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAClC,IAAI,CAAC;AACR,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAClC,IAAI,CAAC;AAYR,eAAO,MAAM,oCAAoC,EAAE,wBAElD,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE9E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { drawCanvasEffectPass } from './canvasEffectCompositing';
|
|
2
|
+
import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
|
|
3
|
+
import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
|
|
4
|
+
import { clearCanvasTarget, compositeCanvasImage, drawCanvasInvertedTintedAlphaMask, } from './canvasSourceModeCompositing';
|
|
5
|
+
export function applyInnerShadowEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
|
|
6
|
+
const effect = maybeEffect ?? poolOrEffect;
|
|
7
|
+
const pool = maybeEffect === undefined ? createCanvasRenderTargetPool() : poolOrEffect;
|
|
8
|
+
applyInnerShadowEffectToCanvasWithPool(source, dest, pool, effect);
|
|
9
|
+
}
|
|
10
|
+
export const defaultCanvasInnerShadowEffectRunner = (ctx, effect) => {
|
|
11
|
+
applyInnerShadowEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
|
|
12
|
+
};
|
|
13
|
+
export function registerCanvasInnerShadowEffect(state) {
|
|
14
|
+
registerCanvasRenderEffect(state, 'InnerShadowEffect', defaultCanvasInnerShadowEffectRunner);
|
|
15
|
+
}
|
|
16
|
+
function applyInnerShadowEffectToCanvasWithPool(source, dest, pool, effect) {
|
|
17
|
+
const mask = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
18
|
+
const blurred = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
19
|
+
const shadow = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
20
|
+
const strength = effect.strength ?? 1;
|
|
21
|
+
const shadowPasses = Math.max(1, Math.floor(strength));
|
|
22
|
+
const blur = Math.max(0, ((effect.blurX ?? 4) + (effect.blurY ?? 4)) / 2);
|
|
23
|
+
const angle = ((effect.angle ?? 45) * Math.PI) / 180;
|
|
24
|
+
const distance = effect.distance ?? 4;
|
|
25
|
+
const offsetX = Math.cos(angle) * distance;
|
|
26
|
+
const offsetY = Math.sin(angle) * distance;
|
|
27
|
+
drawCanvasInvertedTintedAlphaMask(mask, source, effect.color ?? 0x000000, effect.alpha ?? 1, Math.min(1, strength));
|
|
28
|
+
drawCanvasEffectPass(blurred, mask, blur > 0 ? `blur(${blur}px)` : 'none');
|
|
29
|
+
// The offset is its own pass into a cleared target rather than a shifted draw into `blurred`, because
|
|
30
|
+
// drawing a target onto itself at an offset would read pixels it is concurrently writing.
|
|
31
|
+
clearCanvasTarget(shadow);
|
|
32
|
+
compositeCanvasImage(shadow, blurred, offsetX, offsetY);
|
|
33
|
+
compositeCanvasImage(shadow, source, 0, 0, 'destination-in');
|
|
34
|
+
clearCanvasTarget(dest);
|
|
35
|
+
if ((effect.sourceMode ?? 'draw') !== 'hide')
|
|
36
|
+
compositeCanvasImage(dest, source);
|
|
37
|
+
for (let i = 0; i < shadowPasses; i++)
|
|
38
|
+
compositeCanvasImage(dest, shadow);
|
|
39
|
+
releaseCanvasRenderTarget(pool, mask);
|
|
40
|
+
releaseCanvasRenderTarget(pool, blurred);
|
|
41
|
+
releaseCanvasRenderTarget(pool, shadow);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=canvasInnerShadowEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasInnerShadowEffect.js","sourceRoot":"","sources":["../src/canvasInnerShadowEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { CanvasRenderEffectRunner, CanvasRenderTarget, CanvasRenderTargetPool, OuterGlowEffect } from '@flighthq/types/contract';
|
|
1
|
+
import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, OuterGlowEffect } from '@flighthq/types/contract';
|
|
2
2
|
export declare function applyOuterGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<OuterGlowEffect>): void;
|
|
3
3
|
export declare function applyOuterGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<OuterGlowEffect>): void;
|
|
4
4
|
export declare const defaultCanvasOuterGlowEffectRunner: CanvasRenderEffectRunner;
|
|
5
|
+
export declare function registerCanvasOuterGlowEffect(state: CanvasRenderState): void;
|
|
5
6
|
//# sourceMappingURL=canvasOuterGlowEffect.d.ts.map
|
|
@@ -1 +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,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"canvasOuterGlowEffect.d.ts","sourceRoot":"","sources":["../src/canvasOuterGlowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAoBlC,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;AAEF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE5E"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { drawCanvasEffectPass } from './canvasEffectCompositing';
|
|
2
2
|
import { computeOuterGlowEffectCss } from './canvasEffectDropShadowCss';
|
|
3
3
|
import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
|
|
4
|
+
import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
|
|
4
5
|
import { clearCanvasTarget, compositeCanvasImage, compositeCanvasSourceMode, drawCanvasTintedAlphaMask, } from './canvasSourceModeCompositing';
|
|
5
6
|
export function applyOuterGlowEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
|
|
6
7
|
const effect = maybeEffect ?? poolOrEffect;
|
|
@@ -15,6 +16,9 @@ export function applyOuterGlowEffectToCanvas(source, dest, poolOrEffect, maybeEf
|
|
|
15
16
|
export const defaultCanvasOuterGlowEffectRunner = (ctx, effect) => {
|
|
16
17
|
applyOuterGlowEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
|
|
17
18
|
};
|
|
19
|
+
export function registerCanvasOuterGlowEffect(state) {
|
|
20
|
+
registerCanvasRenderEffect(state, 'OuterGlowEffect', defaultCanvasOuterGlowEffectRunner);
|
|
21
|
+
}
|
|
18
22
|
function applyOuterGlowEffectToCanvasWithPool(source, dest, pool, effect) {
|
|
19
23
|
const mask = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
20
24
|
const blurred = acquireCanvasRenderTarget(pool, source.width, source.height);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasOuterGlowEffect.js","sourceRoot":"","sources":["../src/canvasOuterGlowEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvasOuterGlowEffect.js","sourceRoot":"","sources":["../src/canvasOuterGlowEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { CanvasRenderEffectRunner, CanvasRenderTarget, CanvasRenderTargetPool, PixelateEffect } from '@flighthq/types/contract';
|
|
1
|
+
import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, PixelateEffect } from '@flighthq/types/contract';
|
|
2
2
|
export declare function applyPixelateEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<PixelateEffect>): void;
|
|
3
3
|
export declare const defaultCanvasPixelateEffectRunner: CanvasRenderEffectRunner;
|
|
4
|
+
export declare function registerCanvasPixelateEffect(state: CanvasRenderState): void;
|
|
4
5
|
//# sourceMappingURL=canvasPixelateEffect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasPixelateEffect.d.ts","sourceRoot":"","sources":["../src/canvasPixelateEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACf,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"canvasPixelateEffect.d.ts","sourceRoot":"","sources":["../src/canvasPixelateEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACf,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC/B,IAAI,CA8BN;AAED,eAAO,MAAM,iCAAiC,EAAE,wBAE/C,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE3E"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { acquireCanvasRenderTarget, releaseCanvasRenderTarget } from './canvasRenderEffectPipeline';
|
|
2
|
+
import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
|
|
2
3
|
// Pixelate (REAL): downscale the scene to (width/size, height/size) on a scratch canvas, then upscale
|
|
3
4
|
// back to full size with imageSmoothingEnabled=false so the blocks stay hard-edged — the canonical 2D
|
|
4
5
|
// mosaic.
|
|
@@ -33,4 +34,7 @@ export function applyPixelateEffectToCanvas(source, dest, pool, effect) {
|
|
|
33
34
|
export const defaultCanvasPixelateEffectRunner = (ctx, effect) => {
|
|
34
35
|
applyPixelateEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
|
|
35
36
|
};
|
|
37
|
+
export function registerCanvasPixelateEffect(state) {
|
|
38
|
+
registerCanvasRenderEffect(state, 'PixelateEffect', defaultCanvasPixelateEffectRunner);
|
|
39
|
+
}
|
|
36
40
|
//# sourceMappingURL=canvasPixelateEffect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasPixelateEffect.js","sourceRoot":"","sources":["../src/canvasPixelateEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvasPixelateEffect.js","sourceRoot":"","sources":["../src/canvasPixelateEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
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,0BAA0B,CAAC;
|
|
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,0BAA0B,CAAC;AAiBlC,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,CA6DN;AAID,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAIxG"}
|
|
@@ -2,6 +2,7 @@ import { bakeColorLutForRun, createColorLutCache, fuseColorMatrices, getAdjustme
|
|
|
2
2
|
import { beginCanvasRenderPass, createCanvasRenderTarget, endCanvasRenderPass, resizeCanvasRenderTarget, } from '@flighthq/scene2d-canvas/contract';
|
|
3
3
|
import { applyColorLutPassToCanvas } from './canvasColorLutPass';
|
|
4
4
|
import { applyColorMatrixPassToCanvas } from './canvasColorMatrixPass';
|
|
5
|
+
import { drawCanvasEffectPass } from './canvasEffectCompositing';
|
|
5
6
|
import { getCanvasRenderEffectRunner } from './canvasRenderEffectRegistry';
|
|
6
7
|
// Opt-in Canvas 2D post-process pipeline — the parallel of the Gl effect pipeline. The scene renders
|
|
7
8
|
// into the pipeline's offscreen canvas between begin/end; end runs the agnostic effect list through the
|
|
@@ -100,12 +101,17 @@ export function endCanvasRenderEffectPipeline(state, pipeline, operations) {
|
|
|
100
101
|
continue;
|
|
101
102
|
}
|
|
102
103
|
const runner = getCanvasRenderEffectRunner(state, operation.kind);
|
|
103
|
-
if (runner === null)
|
|
104
|
-
continue;
|
|
105
104
|
flushAdjustments();
|
|
106
105
|
ensureScratch();
|
|
107
106
|
const dest = source === scratchA ? scratchB : scratchA;
|
|
108
|
-
|
|
107
|
+
// Registration is the backend's proof that an effect kind is realized. An unregistered effect is
|
|
108
|
+
// therefore a pipeline-level identity operation: copy the current source into the next target so a
|
|
109
|
+
// later pass never reads an uninitialized ping-pong target. Keeping this composition rule here
|
|
110
|
+
// avoids per-kind passthrough registrations that would falsely advertise renderer support.
|
|
111
|
+
if (runner === null)
|
|
112
|
+
drawCanvasEffectPass(dest, source, 'none');
|
|
113
|
+
else
|
|
114
|
+
runner({ state, source, dest, pool }, operation);
|
|
109
115
|
source = dest;
|
|
110
116
|
}
|
|
111
117
|
flushAdjustments();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasRenderEffectPipeline.js","sourceRoot":"","sources":["../src/canvasRenderEffectPipeline.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"canvasRenderEffectPipeline.js","sourceRoot":"","sources":["../src/canvasRenderEffectPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasRenderEffectRegistry.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectRegistry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvasRenderEffectRegistry.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectRegistry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAS5F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAEnH;AAKD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3F;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,wBAAwB,GAC/B,IAAI,CAGN"}
|
|
@@ -1,24 +1,21 @@
|
|
|
1
|
+
import { getCanvasRenderStateRuntime } from '@flighthq/scene2d-canvas/contract';
|
|
1
2
|
// Per-state registry mapping an effect `kind` string to its Canvas 2D runner — the material-renderer
|
|
2
3
|
// pattern one tier up, and the Canvas parallel of registerGlRenderEffect. Registration is opt-in
|
|
3
4
|
// (import a runner only to register it) and dispatch is a Map lookup, so there is no monolithic switch
|
|
4
5
|
// and unused effect recipes tree-shake away. Register an alternative runner under the same key to swap
|
|
5
|
-
// algorithms.
|
|
6
|
+
// algorithms. A built-in registerCanvas<Kind>Effect wrapper is pure ergonomics: it calls this function
|
|
7
|
+
// with the literal kind and public default runner, and installs no padding or shader companions.
|
|
6
8
|
export function getCanvasRenderEffectRunner(state, kind) {
|
|
7
|
-
return
|
|
9
|
+
return getCanvasRenderStateRuntime(state).canvasRenderEffectRegistry?.get(kind) ?? null;
|
|
8
10
|
}
|
|
9
11
|
// Returns true if a runner is registered for the given kind in this state. Use to validate an effect
|
|
10
|
-
// chain before dispatching
|
|
11
|
-
// your own policy (warn, filter) rather than relying on
|
|
12
|
+
// chain before dispatching. The pipeline preserves unregistered operations as initialized identity
|
|
13
|
+
// passes; check up front to apply your own policy (warn, filter) rather than relying on that fallback.
|
|
12
14
|
export function hasCanvasRenderEffectRunner(state, kind) {
|
|
13
|
-
return
|
|
15
|
+
return getCanvasRenderStateRuntime(state).canvasRenderEffectRegistry?.has(kind) ?? false;
|
|
14
16
|
}
|
|
15
17
|
export function registerCanvasRenderEffect(state, kind, runner) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
registry = new Map();
|
|
19
|
-
_registries.set(state, registry);
|
|
20
|
-
}
|
|
21
|
-
registry.set(kind, runner);
|
|
18
|
+
const runtime = getCanvasRenderStateRuntime(state);
|
|
19
|
+
(runtime.canvasRenderEffectRegistry ??= new Map()).set(kind, runner);
|
|
22
20
|
}
|
|
23
|
-
const _registries = new WeakMap();
|
|
24
21
|
//# sourceMappingURL=canvasRenderEffectRegistry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasRenderEffectRegistry.js","sourceRoot":"","sources":["../src/canvasRenderEffectRegistry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvasRenderEffectRegistry.js","sourceRoot":"","sources":["../src/canvasRenderEffectRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAGhF,qGAAqG;AACrG,iGAAiG;AACjG,uGAAuG;AACvG,uGAAuG;AACvG,uGAAuG;AACvG,iGAAiG;AAEjG,MAAM,UAAU,2BAA2B,CAAC,KAAwB,EAAE,IAAY;IAChF,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC1F,CAAC;AAED,qGAAqG;AACrG,mGAAmG;AACnG,uGAAuG;AACvG,MAAM,UAAU,2BAA2B,CAAC,KAAwB,EAAE,IAAY;IAChF,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAwB,EACxB,IAAY,EACZ,MAAgC;IAEhC,MAAM,OAAO,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,OAAO,CAAC,0BAA0B,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { CanvasRenderState, CanvasRenderTexturePool, RenderEffect, RenderTexture } from '@flighthq/types/contract';
|
|
2
|
+
export declare function applyCanvasRenderEffectsToRenderTexture(state: CanvasRenderState, pool: CanvasRenderTexturePool, source: Readonly<RenderTexture>, dest: RenderTexture, scratch: RenderTexture, effects: ReadonlyArray<Readonly<RenderEffect>>): boolean;
|
|
3
|
+
//# sourceMappingURL=canvasRenderTextureEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasRenderTextureEffect.d.ts","sourceRoot":"","sources":["../src/canvasRenderTextureEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAOxH,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,uBAAuB,EAC7B,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAC7C,OAAO,CAuBT"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { getCanvasRenderTextureTarget, writeCanvasRenderTextureTarget } from '@flighthq/scene2d-canvas/contract';
|
|
2
|
+
import { getCanvasRenderEffectRunner } from './canvasRenderEffectRegistry';
|
|
3
|
+
// Applies registered Canvas effect runners from one completed RenderTexture into another. The
|
|
4
|
+
// caller supplies one distinct scratch lease; parity chooses the first destination so the final
|
|
5
|
+
// registered operation always publishes `dest`.
|
|
6
|
+
export function applyCanvasRenderEffectsToRenderTexture(state, pool, source, dest, scratch, effects) {
|
|
7
|
+
if (source === dest || source === scratch || dest === scratch) {
|
|
8
|
+
throw new Error('applyCanvasRenderEffectsToRenderTexture: source, destination, and scratch must be distinct');
|
|
9
|
+
}
|
|
10
|
+
const sourceTarget = getCanvasRenderTextureTarget(state, source);
|
|
11
|
+
if (sourceTarget === null)
|
|
12
|
+
return false;
|
|
13
|
+
const operations = effects.flatMap((effect) => {
|
|
14
|
+
const runner = getCanvasRenderEffectRunner(state, effect.kind);
|
|
15
|
+
return runner === null ? [] : [{ effect, runner }];
|
|
16
|
+
});
|
|
17
|
+
if (operations.length === 0)
|
|
18
|
+
return false;
|
|
19
|
+
let current = sourceTarget;
|
|
20
|
+
for (let index = 0; index < operations.length; index++) {
|
|
21
|
+
const operation = operations[index];
|
|
22
|
+
const remaining = operations.length - index;
|
|
23
|
+
const output = remaining % 2 === 1 ? dest : scratch;
|
|
24
|
+
writeCanvasRenderTextureTarget(state, output, (target) => {
|
|
25
|
+
operation.runner({ state, source: current, dest: target, pool: pool.effectTargets }, operation.effect);
|
|
26
|
+
});
|
|
27
|
+
current = getCanvasRenderTextureTarget(state, output);
|
|
28
|
+
}
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=canvasRenderTextureEffect.js.map
|