@flighthq/effects-wgpu 0.1.0 → 0.2.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/index.d.ts +17 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -10
- package/dist/index.js.map +1 -1
- package/dist/wgpuBevelEffect.d.ts +4 -0
- package/dist/wgpuBevelEffect.d.ts.map +1 -0
- package/dist/wgpuBevelEffect.js +122 -0
- package/dist/wgpuBevelEffect.js.map +1 -0
- package/dist/wgpuBloomEffect.d.ts.map +1 -1
- package/dist/wgpuBloomEffect.js +9 -8
- package/dist/wgpuBloomEffect.js.map +1 -1
- package/dist/wgpuBlurEffect.d.ts +8 -0
- package/dist/wgpuBlurEffect.d.ts.map +1 -0
- package/dist/wgpuBlurEffect.js +70 -0
- package/dist/wgpuBlurEffect.js.map +1 -0
- package/dist/wgpuBokehDepthOfFieldEffect.d.ts.map +1 -1
- package/dist/wgpuBokehDepthOfFieldEffect.js +2 -2
- package/dist/wgpuBokehDepthOfFieldEffect.js.map +1 -1
- package/dist/wgpuCameraMotionBlurEffect.d.ts.map +1 -1
- package/dist/wgpuCameraMotionBlurEffect.js +2 -2
- package/dist/wgpuCameraMotionBlurEffect.js.map +1 -1
- package/dist/wgpuChromaticAberrationEffect.d.ts.map +1 -1
- package/dist/wgpuChromaticAberrationEffect.js +2 -2
- package/dist/wgpuChromaticAberrationEffect.js.map +1 -1
- package/dist/wgpuColorLutPass.d.ts +3 -0
- package/dist/wgpuColorLutPass.d.ts.map +1 -0
- package/dist/wgpuColorLutPass.js +144 -0
- package/dist/wgpuColorLutPass.js.map +1 -0
- package/dist/wgpuColorMatrixPass.d.ts +3 -0
- package/dist/wgpuColorMatrixPass.d.ts.map +1 -0
- package/dist/wgpuColorMatrixPass.js +51 -0
- package/dist/wgpuColorMatrixPass.js.map +1 -0
- package/dist/wgpuConvolutionEffect.d.ts +5 -0
- package/dist/wgpuConvolutionEffect.d.ts.map +1 -0
- package/dist/wgpuConvolutionEffect.js +108 -0
- package/dist/wgpuConvolutionEffect.js.map +1 -0
- package/dist/wgpuCrtEffect.d.ts.map +1 -1
- package/dist/wgpuCrtEffect.js +2 -2
- package/dist/wgpuCrtEffect.js.map +1 -1
- package/dist/wgpuDirectionalBlurEffect.d.ts.map +1 -1
- package/dist/wgpuDirectionalBlurEffect.js +2 -2
- package/dist/wgpuDirectionalBlurEffect.js.map +1 -1
- package/dist/wgpuDisplacementEffect.d.ts.map +1 -1
- package/dist/wgpuDisplacementEffect.js +2 -2
- package/dist/wgpuDisplacementEffect.js.map +1 -1
- package/dist/wgpuDitherEffect.d.ts.map +1 -1
- package/dist/wgpuDitherEffect.js +2 -2
- package/dist/wgpuDitherEffect.js.map +1 -1
- package/dist/wgpuDropShadowEffect.d.ts +4 -0
- package/dist/wgpuDropShadowEffect.d.ts.map +1 -0
- package/dist/wgpuDropShadowEffect.js +49 -0
- package/dist/wgpuDropShadowEffect.js.map +1 -0
- package/dist/wgpuEffectBlitShader.d.ts +15 -0
- package/dist/wgpuEffectBlitShader.d.ts.map +1 -0
- package/dist/wgpuEffectBlitShader.js +71 -0
- package/dist/wgpuEffectBlitShader.js.map +1 -0
- package/dist/wgpuEffectBoxBlur.d.ts +14 -0
- package/dist/wgpuEffectBoxBlur.d.ts.map +1 -0
- package/dist/wgpuEffectBoxBlur.js +81 -0
- package/dist/wgpuEffectBoxBlur.js.map +1 -0
- package/dist/wgpuEffectGradientRamp.d.ts +17 -0
- package/dist/wgpuEffectGradientRamp.d.ts.map +1 -0
- package/dist/wgpuEffectGradientRamp.js +89 -0
- package/dist/wgpuEffectGradientRamp.js.map +1 -0
- package/dist/wgpuEffectPass.d.ts +41 -0
- package/dist/wgpuEffectPass.d.ts.map +1 -0
- package/dist/wgpuEffectPass.js +259 -0
- package/dist/wgpuEffectPass.js.map +1 -0
- package/dist/wgpuEffectProgramCache.d.ts +2 -2
- package/dist/wgpuEffectProgramCache.d.ts.map +1 -1
- package/dist/wgpuEffectProgramCache.js +5 -5
- package/dist/wgpuEffectProgramCache.js.map +1 -1
- package/dist/wgpuEffectTintShader.d.ts +8 -0
- package/dist/wgpuEffectTintShader.d.ts.map +1 -0
- package/dist/wgpuEffectTintShader.js +109 -0
- package/dist/wgpuEffectTintShader.js.map +1 -0
- package/dist/wgpuFilmGrainEffect.d.ts.map +1 -1
- package/dist/wgpuFilmGrainEffect.js +2 -2
- package/dist/wgpuFilmGrainEffect.js.map +1 -1
- package/dist/wgpuFxaaEffect.d.ts.map +1 -1
- package/dist/wgpuFxaaEffect.js +2 -2
- package/dist/wgpuFxaaEffect.js.map +1 -1
- package/dist/wgpuGlitchEffect.d.ts.map +1 -1
- package/dist/wgpuGlitchEffect.js +2 -2
- package/dist/wgpuGlitchEffect.js.map +1 -1
- package/dist/wgpuGodRaysEffect.d.ts.map +1 -1
- package/dist/wgpuGodRaysEffect.js +2 -2
- package/dist/wgpuGodRaysEffect.js.map +1 -1
- package/dist/wgpuGradientBevelEffect.d.ts +4 -0
- package/dist/wgpuGradientBevelEffect.d.ts.map +1 -0
- package/dist/wgpuGradientBevelEffect.js +189 -0
- package/dist/wgpuGradientBevelEffect.js.map +1 -0
- package/dist/wgpuGradientGlowEffect.d.ts +4 -0
- package/dist/wgpuGradientGlowEffect.d.ts.map +1 -0
- package/dist/wgpuGradientGlowEffect.js +97 -0
- package/dist/wgpuGradientGlowEffect.js.map +1 -0
- package/dist/wgpuHalftoneEffect.d.ts.map +1 -1
- package/dist/wgpuHalftoneEffect.js +2 -2
- package/dist/wgpuHalftoneEffect.js.map +1 -1
- package/dist/wgpuInnerGlowEffect.d.ts +4 -0
- package/dist/wgpuInnerGlowEffect.d.ts.map +1 -0
- package/dist/wgpuInnerGlowEffect.js +37 -0
- package/dist/wgpuInnerGlowEffect.js.map +1 -0
- package/dist/wgpuInnerShadowEffect.d.ts +4 -0
- package/dist/wgpuInnerShadowEffect.d.ts.map +1 -0
- package/dist/wgpuInnerShadowEffect.js +42 -0
- package/dist/wgpuInnerShadowEffect.js.map +1 -0
- package/dist/wgpuKuwaharaEffect.d.ts.map +1 -1
- package/dist/wgpuKuwaharaEffect.js +2 -2
- package/dist/wgpuKuwaharaEffect.js.map +1 -1
- package/dist/wgpuLensDirtEffect.d.ts.map +1 -1
- package/dist/wgpuLensDirtEffect.js +2 -2
- package/dist/wgpuLensDirtEffect.js.map +1 -1
- package/dist/wgpuLensDistortionEffect.d.ts.map +1 -1
- package/dist/wgpuLensDistortionEffect.js +2 -2
- package/dist/wgpuLensDistortionEffect.js.map +1 -1
- package/dist/wgpuLensFlareEffect.d.ts.map +1 -1
- package/dist/wgpuLensFlareEffect.js +2 -2
- package/dist/wgpuLensFlareEffect.js.map +1 -1
- package/dist/wgpuMedianEffect.d.ts +5 -0
- package/dist/wgpuMedianEffect.d.ts.map +1 -0
- package/dist/wgpuMedianEffect.js +74 -0
- package/dist/wgpuMedianEffect.js.map +1 -0
- package/dist/wgpuMotionBlurEffect.d.ts.map +1 -1
- package/dist/wgpuMotionBlurEffect.js +6 -7
- package/dist/wgpuMotionBlurEffect.js.map +1 -1
- package/dist/wgpuOuterGlowEffect.d.ts +4 -0
- package/dist/wgpuOuterGlowEffect.d.ts.map +1 -0
- package/dist/wgpuOuterGlowEffect.js +43 -0
- package/dist/wgpuOuterGlowEffect.js.map +1 -0
- package/dist/wgpuOutlineEffect.d.ts.map +1 -1
- package/dist/wgpuOutlineEffect.js +2 -2
- package/dist/wgpuOutlineEffect.js.map +1 -1
- package/dist/wgpuPixelateEffect.d.ts.map +1 -1
- package/dist/wgpuPixelateEffect.js +2 -2
- package/dist/wgpuPixelateEffect.js.map +1 -1
- package/dist/wgpuPosterizeEffect.d.ts.map +1 -1
- package/dist/wgpuPosterizeEffect.js +2 -2
- package/dist/wgpuPosterizeEffect.js.map +1 -1
- package/dist/wgpuRadialBlurEffect.d.ts.map +1 -1
- package/dist/wgpuRadialBlurEffect.js +2 -2
- package/dist/wgpuRadialBlurEffect.js.map +1 -1
- package/dist/wgpuRenderEffectPipeline.d.ts +2 -2
- package/dist/wgpuRenderEffectPipeline.d.ts.map +1 -1
- package/dist/wgpuRenderEffectPipeline.js +59 -9
- package/dist/wgpuRenderEffectPipeline.js.map +1 -1
- package/dist/wgpuRenderEffectRegistrants.d.ts +1 -0
- package/dist/wgpuRenderEffectRegistrants.d.ts.map +1 -1
- package/dist/wgpuRenderEffectRegistrants.js +39 -28
- package/dist/wgpuRenderEffectRegistrants.js.map +1 -1
- package/dist/wgpuScanlinesEffect.d.ts.map +1 -1
- package/dist/wgpuScanlinesEffect.js +2 -2
- package/dist/wgpuScanlinesEffect.js.map +1 -1
- package/dist/wgpuScreenSpaceFogEffect.d.ts.map +1 -1
- package/dist/wgpuScreenSpaceFogEffect.js +2 -2
- package/dist/wgpuScreenSpaceFogEffect.js.map +1 -1
- package/dist/wgpuSharpenEffect.d.ts.map +1 -1
- package/dist/wgpuSharpenEffect.js +2 -2
- package/dist/wgpuSharpenEffect.js.map +1 -1
- package/dist/wgpuSketchEffect.d.ts.map +1 -1
- package/dist/wgpuSketchEffect.js +2 -2
- package/dist/wgpuSketchEffect.js.map +1 -1
- package/dist/wgpuSmaaEffect.d.ts.map +1 -1
- package/dist/wgpuSmaaEffect.js +2 -2
- package/dist/wgpuSmaaEffect.js.map +1 -1
- package/dist/wgpuSsaoEffect.d.ts.map +1 -1
- package/dist/wgpuSsaoEffect.js +2 -2
- package/dist/wgpuSsaoEffect.js.map +1 -1
- package/dist/wgpuSsrEffect.d.ts.map +1 -1
- package/dist/wgpuSsrEffect.js +2 -2
- package/dist/wgpuSsrEffect.js.map +1 -1
- package/dist/wgpuTaaEffect.d.ts.map +1 -1
- package/dist/wgpuTaaEffect.js +2 -2
- package/dist/wgpuTaaEffect.js.map +1 -1
- package/dist/wgpuTiltShiftEffect.d.ts.map +1 -1
- package/dist/wgpuTiltShiftEffect.js +2 -2
- package/dist/wgpuTiltShiftEffect.js.map +1 -1
- package/dist/wgpuToneMapEffect.d.ts.map +1 -1
- package/dist/wgpuToneMapEffect.js +2 -2
- package/dist/wgpuToneMapEffect.js.map +1 -1
- package/dist/wgpuVignetteEffect.d.ts.map +1 -1
- package/dist/wgpuVignetteEffect.js +2 -2
- package/dist/wgpuVignetteEffect.js.map +1 -1
- package/dist/wgpuWhiteBalanceEffect.d.ts.map +1 -1
- package/dist/wgpuWhiteBalanceEffect.js +2 -2
- package/dist/wgpuWhiteBalanceEffect.js.map +1 -1
- package/package.json +11 -7
- package/src/wgpuBevelEffect.test.ts +13 -0
- package/src/wgpuBlurEffect.test.ts +19 -0
- package/src/wgpuColorLutPass.test.ts +7 -0
- package/src/wgpuColorMatrixPass.test.ts +7 -0
- package/src/wgpuConvolutionEffect.test.ts +13 -0
- package/src/wgpuDropShadowEffect.test.ts +13 -0
- package/src/wgpuEffectBlitShader.test.ts +13 -0
- package/src/wgpuEffectBoxBlur.test.ts +7 -0
- package/src/wgpuEffectGradientRamp.test.ts +7 -0
- package/src/wgpuEffectPass.test.ts +51 -0
- package/src/wgpuEffectTintShader.test.ts +23 -0
- package/src/wgpuGradientBevelEffect.test.ts +13 -0
- package/src/wgpuGradientGlowEffect.test.ts +13 -0
- package/src/wgpuInnerGlowEffect.test.ts +13 -0
- package/src/wgpuInnerShadowEffect.test.ts +13 -0
- package/src/wgpuMedianEffect.test.ts +13 -0
- package/src/wgpuOuterGlowEffect.test.ts +13 -0
- package/src/wgpuRenderEffectPipeline.test.ts +2 -0
- package/src/wgpuRenderEffectRegistrants.test.ts +25 -14
- package/dist/wgpuBrightnessContrastEffect.d.ts +0 -4
- package/dist/wgpuBrightnessContrastEffect.d.ts.map +0 -1
- package/dist/wgpuBrightnessContrastEffect.js +0 -29
- package/dist/wgpuBrightnessContrastEffect.js.map +0 -1
- package/dist/wgpuChannelMixerEffect.d.ts +0 -4
- package/dist/wgpuChannelMixerEffect.d.ts.map +0 -1
- package/dist/wgpuChannelMixerEffect.js +0 -34
- package/dist/wgpuChannelMixerEffect.js.map +0 -1
- package/dist/wgpuColorGradeEffect.d.ts +0 -4
- package/dist/wgpuColorGradeEffect.d.ts.map +0 -1
- package/dist/wgpuColorGradeEffect.js +0 -52
- package/dist/wgpuColorGradeEffect.js.map +0 -1
- package/dist/wgpuExposureEffect.d.ts +0 -4
- package/dist/wgpuExposureEffect.d.ts.map +0 -1
- package/dist/wgpuExposureEffect.js +0 -28
- package/dist/wgpuExposureEffect.js.map +0 -1
- package/dist/wgpuGrayscaleEffect.d.ts +0 -4
- package/dist/wgpuGrayscaleEffect.d.ts.map +0 -1
- package/dist/wgpuGrayscaleEffect.js +0 -27
- package/dist/wgpuGrayscaleEffect.js.map +0 -1
- package/dist/wgpuHueSaturationEffect.d.ts +0 -4
- package/dist/wgpuHueSaturationEffect.d.ts.map +0 -1
- package/dist/wgpuHueSaturationEffect.js +0 -75
- package/dist/wgpuHueSaturationEffect.js.map +0 -1
- package/dist/wgpuInvertEffect.d.ts +0 -4
- package/dist/wgpuInvertEffect.d.ts.map +0 -1
- package/dist/wgpuInvertEffect.js +0 -26
- package/dist/wgpuInvertEffect.js.map +0 -1
- package/dist/wgpuLiftGammaGainEffect.d.ts +0 -4
- package/dist/wgpuLiftGammaGainEffect.d.ts.map +0 -1
- package/dist/wgpuLiftGammaGainEffect.js +0 -51
- package/dist/wgpuLiftGammaGainEffect.js.map +0 -1
- package/dist/wgpuLookupTableGradeEffect.d.ts +0 -4
- package/dist/wgpuLookupTableGradeEffect.d.ts.map +0 -1
- package/dist/wgpuLookupTableGradeEffect.js +0 -30
- package/dist/wgpuLookupTableGradeEffect.js.map +0 -1
- package/dist/wgpuSepiaEffect.d.ts +0 -4
- package/dist/wgpuSepiaEffect.d.ts.map +0 -1
- package/dist/wgpuSepiaEffect.js +0 -31
- package/dist/wgpuSepiaEffect.js.map +0 -1
- package/src/wgpuBrightnessContrastEffect.test.ts +0 -16
- package/src/wgpuChannelMixerEffect.test.ts +0 -13
- package/src/wgpuColorGradeEffect.test.ts +0 -13
- package/src/wgpuExposureEffect.test.ts +0 -13
- package/src/wgpuGrayscaleEffect.test.ts +0 -13
- package/src/wgpuHueSaturationEffect.test.ts +0 -13
- package/src/wgpuInvertEffect.test.ts +0 -13
- package/src/wgpuLiftGammaGainEffect.test.ts +0 -13
- package/src/wgpuLookupTableGradeEffect.test.ts +0 -16
- package/src/wgpuSepiaEffect.test.ts +0 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuHalftoneEffect.d.ts","sourceRoot":"","sources":["../src/wgpuHalftoneEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuHalftoneEffect.d.ts","sourceRoot":"","sources":["../src/wgpuHalftoneEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAOjH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC/B,IAAI,CAWN;AAED,eAAO,MAAM,+BAA+B,EAAE,sBAE7C,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { drawWgpuEffectPass } from './wgpuEffectPass';
|
|
2
2
|
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
3
|
// Halftone: sample luminance, then carve a rotated dot grid whose dot radius tracks darkness — the
|
|
4
4
|
// classic print/comic screen. `scale` sets the cell size, `angle` rotates the grid.
|
|
@@ -6,7 +6,7 @@ export function applyHalftoneEffectToWgpu(state, source, dest, effect) {
|
|
|
6
6
|
const scale = effect.scale ?? 6;
|
|
7
7
|
const angle = effect.angle ?? 0.4;
|
|
8
8
|
const pipeline = getWgpuEffectPipeline(state, 'stylization.halftone', HALFTONE_FRAGMENT_WGSL, 'replace');
|
|
9
|
-
|
|
9
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32) => {
|
|
10
10
|
f32[0] = Math.max(1, scale);
|
|
11
11
|
f32[1] = angle;
|
|
12
12
|
// u_resolution (vec2f) aligns to slot [2].
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuHalftoneEffect.js","sourceRoot":"","sources":["../src/wgpuHalftoneEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuHalftoneEffect.js","sourceRoot":"","sources":["../src/wgpuHalftoneEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,mGAAmG;AACnG,oFAAoF;AACpF,MAAM,UAAU,yBAAyB,CACvC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAgC;IAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;IAClC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC;IACzG,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACf,2CAA2C;QAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACtB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACrF,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAwB,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,wDAAwD;AACxD,MAAM,sBAAsB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;EAuBxC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { InnerGlowEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget, WgpuRenderTargetPool } from '@flighthq/types';
|
|
2
|
+
export declare function applyInnerGlowEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, pool: WgpuRenderTargetPool, effect: Readonly<InnerGlowEffect>): void;
|
|
3
|
+
export declare const defaultWgpuInnerGlowEffectRunner: WgpuRenderEffectRunner;
|
|
4
|
+
//# sourceMappingURL=wgpuInnerGlowEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuInnerGlowEffect.d.ts","sourceRoot":"","sources":["../src/wgpuInnerGlowEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAUzB,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,IAAI,EAAE,oBAAoB,EAC1B,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CA4BN;AAED,eAAO,MAAM,gCAAgC,EAAE,sBAE9C,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { acquireWgpuRenderTarget, releaseWgpuRenderTarget } from '@flighthq/render-wgpu';
|
|
2
|
+
import { applyWgpuEffectBlitPass } from './wgpuEffectBlitShader';
|
|
3
|
+
import { applyWgpuEffectBoxBlur } from './wgpuEffectBoxBlur';
|
|
4
|
+
import { clearWgpuEffectTarget } from './wgpuEffectPass';
|
|
5
|
+
import { applyWgpuEffectInnerClipPass, applyWgpuEffectInvertTintPass } from './wgpuEffectTintShader';
|
|
6
|
+
// Inner-glow composite effect: tint the inverted silhouette, blur inward, clip to the source alpha, then composite over the source.
|
|
7
|
+
// Full-frame realization: acquires the recipe's three scratch targets from the effect pool, runs the
|
|
8
|
+
// multi-pass recipe (invert-tint → box blur → inner clip → composite), then releases them.
|
|
9
|
+
export function applyInnerGlowEffectToWgpu(state, source, dest, pool, effect) {
|
|
10
|
+
const src = source;
|
|
11
|
+
const dst = dest;
|
|
12
|
+
const descriptor = { width: source.width, height: source.height, format: source.format };
|
|
13
|
+
const s0 = acquireWgpuRenderTarget(state, pool, descriptor);
|
|
14
|
+
const s1 = acquireWgpuRenderTarget(state, pool, descriptor);
|
|
15
|
+
const s2 = acquireWgpuRenderTarget(state, pool, descriptor);
|
|
16
|
+
const color = effect.color ?? 0xff0000;
|
|
17
|
+
const alpha = effect.alpha ?? 1;
|
|
18
|
+
const strength = effect.strength ?? 1;
|
|
19
|
+
const quality = Math.max(1, Math.round(effect.quality ?? 1));
|
|
20
|
+
applyWgpuEffectInvertTintPass(state, src, s0, color, alpha, strength);
|
|
21
|
+
applyWgpuEffectBoxBlur(state, s0, s1, s2, {
|
|
22
|
+
blurX: effect.blurX ?? 6,
|
|
23
|
+
blurY: effect.blurY ?? 6,
|
|
24
|
+
passes: quality,
|
|
25
|
+
});
|
|
26
|
+
applyWgpuEffectInnerClipPass(state, s1, src, s0);
|
|
27
|
+
clearWgpuEffectTarget(state, dst);
|
|
28
|
+
applyWgpuEffectBlitPass(state, src, dst);
|
|
29
|
+
applyWgpuEffectBlitPass(state, s0, dst);
|
|
30
|
+
releaseWgpuRenderTarget(pool, s0);
|
|
31
|
+
releaseWgpuRenderTarget(pool, s1);
|
|
32
|
+
releaseWgpuRenderTarget(pool, s2);
|
|
33
|
+
}
|
|
34
|
+
export const defaultWgpuInnerGlowEffectRunner = (ctx, effect) => {
|
|
35
|
+
applyInnerGlowEffectToWgpu(ctx.state, ctx.source, ctx.dest, ctx.pool, effect);
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=wgpuInnerGlowEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuInnerGlowEffect.js","sourceRoot":"","sources":["../src/wgpuInnerGlowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AASzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAErG,oIAAoI;AACpI,qGAAqG;AACrG,2FAA2F;AAC3F,MAAM,UAAU,0BAA0B,CACxC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,IAA0B,EAC1B,MAAiC;IAEjC,MAAM,GAAG,GAAG,MAA0B,CAAC;IACvC,MAAM,GAAG,GAAG,IAAwB,CAAC;IACrC,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACzF,MAAM,EAAE,GAAG,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5D,MAAM,EAAE,GAAG,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5D,MAAM,EAAE,GAAG,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IAE7D,6BAA6B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtE,sBAAsB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACxC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;QACxB,MAAM,EAAE,OAAO;KAChB,CAAC,CAAC;IACH,4BAA4B,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAEjD,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACzC,uBAAuB,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAExC,uBAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAClC,uBAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAClC,uBAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,gCAAgC,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACtF,0BAA0B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAyB,CAAC,CAAC;AACnG,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { InnerShadowEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget, WgpuRenderTargetPool } from '@flighthq/types';
|
|
2
|
+
export declare function applyInnerShadowEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, pool: WgpuRenderTargetPool, effect: Readonly<InnerShadowEffect>): void;
|
|
3
|
+
export declare const defaultWgpuInnerShadowEffectRunner: WgpuRenderEffectRunner;
|
|
4
|
+
//# sourceMappingURL=wgpuInnerShadowEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuInnerShadowEffect.d.ts","sourceRoot":"","sources":["../src/wgpuInnerShadowEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAUzB,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,IAAI,EAAE,oBAAoB,EAC1B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAClC,IAAI,CAiCN;AAED,eAAO,MAAM,kCAAkC,EAAE,sBAEhD,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { acquireWgpuRenderTarget, releaseWgpuRenderTarget } from '@flighthq/render-wgpu';
|
|
2
|
+
import { applyWgpuEffectBlitOffsetPass, applyWgpuEffectBlitPass } from './wgpuEffectBlitShader';
|
|
3
|
+
import { applyWgpuEffectBoxBlur } from './wgpuEffectBoxBlur';
|
|
4
|
+
import { clearWgpuEffectTarget } from './wgpuEffectPass';
|
|
5
|
+
import { applyWgpuEffectInnerClipPass, applyWgpuEffectInvertTintPass } from './wgpuEffectTintShader';
|
|
6
|
+
// Inner-shadow composite effect: tint the inverted silhouette, blur, offset by angle/distance, clip to the source alpha, then composite over the source.
|
|
7
|
+
// Full-frame realization: acquires the recipe's three scratch targets from the effect pool, runs the
|
|
8
|
+
// multi-pass recipe (invert-tint → box blur → offset → inner clip → composite), then releases them.
|
|
9
|
+
export function applyInnerShadowEffectToWgpu(state, source, dest, pool, effect) {
|
|
10
|
+
const src = source;
|
|
11
|
+
const dst = dest;
|
|
12
|
+
const descriptor = { width: source.width, height: source.height, format: source.format };
|
|
13
|
+
const s0 = acquireWgpuRenderTarget(state, pool, descriptor);
|
|
14
|
+
const s1 = acquireWgpuRenderTarget(state, pool, descriptor);
|
|
15
|
+
const s2 = acquireWgpuRenderTarget(state, pool, descriptor);
|
|
16
|
+
const angle = ((effect.angle ?? 45) * Math.PI) / 180;
|
|
17
|
+
const distance = effect.distance ?? 4;
|
|
18
|
+
const dx = Math.cos(angle) * distance;
|
|
19
|
+
const dy = Math.sin(angle) * distance;
|
|
20
|
+
const color = effect.color ?? 0;
|
|
21
|
+
const alpha = effect.alpha ?? 1;
|
|
22
|
+
const strength = effect.strength ?? 1;
|
|
23
|
+
const quality = Math.max(1, Math.round(effect.quality ?? 1));
|
|
24
|
+
applyWgpuEffectInvertTintPass(state, src, s0, color, alpha, strength);
|
|
25
|
+
applyWgpuEffectBoxBlur(state, s0, s1, s2, {
|
|
26
|
+
blurX: effect.blurX ?? 4,
|
|
27
|
+
blurY: effect.blurY ?? 4,
|
|
28
|
+
passes: quality,
|
|
29
|
+
});
|
|
30
|
+
applyWgpuEffectBlitOffsetPass(state, s1, s0, dx, dy);
|
|
31
|
+
applyWgpuEffectInnerClipPass(state, s0, src, s1);
|
|
32
|
+
clearWgpuEffectTarget(state, dst);
|
|
33
|
+
applyWgpuEffectBlitPass(state, src, dst);
|
|
34
|
+
applyWgpuEffectBlitPass(state, s1, dst);
|
|
35
|
+
releaseWgpuRenderTarget(pool, s0);
|
|
36
|
+
releaseWgpuRenderTarget(pool, s1);
|
|
37
|
+
releaseWgpuRenderTarget(pool, s2);
|
|
38
|
+
}
|
|
39
|
+
export const defaultWgpuInnerShadowEffectRunner = (ctx, effect) => {
|
|
40
|
+
applyInnerShadowEffectToWgpu(ctx.state, ctx.source, ctx.dest, ctx.pool, effect);
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=wgpuInnerShadowEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuInnerShadowEffect.js","sourceRoot":"","sources":["../src/wgpuInnerShadowEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuKuwaharaEffect.d.ts","sourceRoot":"","sources":["../src/wgpuKuwaharaEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuKuwaharaEffect.d.ts","sourceRoot":"","sources":["../src/wgpuKuwaharaEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAQjH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC/B,IAAI,CASN;AAED,eAAO,MAAM,+BAA+B,EAAE,sBAE7C,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { drawWgpuEffectPass } from './wgpuEffectPass';
|
|
2
2
|
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
3
|
// Kuwahara: edge-preserving smoothing. Over a fixed small radius split the neighborhood into four
|
|
4
4
|
// overlapping quadrants, compute each mean and variance, and emit the lowest-variance mean — flattens
|
|
@@ -6,7 +6,7 @@ import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
|
6
6
|
export function applyKuwaharaEffectToWgpu(state, source, dest, effect) {
|
|
7
7
|
const radius = effect.radius ?? 3;
|
|
8
8
|
const pipeline = getWgpuEffectPipeline(state, 'stylization.kuwahara', KUWAHARA_FRAGMENT_WGSL, 'replace');
|
|
9
|
-
|
|
9
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32) => {
|
|
10
10
|
f32[0] = Math.max(1, radius);
|
|
11
11
|
// u_resolution (vec2f) aligns to slot [2].
|
|
12
12
|
f32[2] = source.width;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuKuwaharaEffect.js","sourceRoot":"","sources":["../src/wgpuKuwaharaEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuKuwaharaEffect.js","sourceRoot":"","sources":["../src/wgpuKuwaharaEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,kGAAkG;AAClG,sGAAsG;AACtG,wEAAwE;AACxE,MAAM,UAAU,yBAAyB,CACvC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAgC;IAEhC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC;IACzG,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7B,2CAA2C;QAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACtB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACrF,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAwB,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,uDAAuD;AACvD,MAAM,sBAAsB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgDxC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuLensDirtEffect.d.ts","sourceRoot":"","sources":["../src/wgpuLensDirtEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuLensDirtEffect.d.ts","sourceRoot":"","sources":["../src/wgpuLensDirtEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMjH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC/B,IAAI,CAUN;AAED,eAAO,MAAM,+BAA+B,EAAE,sBAE7C,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { drawWgpuEffectPass } from './wgpuEffectPass';
|
|
2
2
|
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
3
|
// Lens dirt: procedural soft smudges that brighten where the scene is bright — a cheap bloom-dirt overlay.
|
|
4
4
|
export function applyLensDirtEffectToWgpu(state, source, dest, effect) {
|
|
@@ -6,7 +6,7 @@ export function applyLensDirtEffectToWgpu(state, source, dest, effect) {
|
|
|
6
6
|
const threshold = effect.threshold ?? 0.55;
|
|
7
7
|
const seed = effect.seed ?? 0;
|
|
8
8
|
const pipeline = getWgpuEffectPipeline(state, 'lens.lensDirt', LENS_DIRT_FRAGMENT_WGSL, 'replace');
|
|
9
|
-
|
|
9
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32) => {
|
|
10
10
|
f32[0] = intensity;
|
|
11
11
|
f32[1] = threshold;
|
|
12
12
|
f32[2] = seed;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuLensDirtEffect.js","sourceRoot":"","sources":["../src/wgpuLensDirtEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuLensDirtEffect.js","sourceRoot":"","sources":["../src/wgpuLensDirtEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,2GAA2G;AAC3G,MAAM,UAAU,yBAAyB,CACvC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAgC;IAEhC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;IACnG,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACrF,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAwB,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,uDAAuD;AACvD,MAAM,uBAAuB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BzC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuLensDistortionEffect.d.ts","sourceRoot":"","sources":["../src/wgpuLensDistortionEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuLensDistortionEffect.d.ts","sourceRoot":"","sources":["../src/wgpuLensDistortionEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAOvH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GACrC,IAAI,CAQN;AAED,eAAO,MAAM,qCAAqC,EAAE,sBAEnD,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { drawWgpuEffectPass } from './wgpuEffectPass';
|
|
2
2
|
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
3
|
// Lens distortion: remap uv by a radial polynomial. Positive amount bulges outward (barrel), negative
|
|
4
4
|
// pinches inward (pincushion); scale re-frames the result so corners stay in view.
|
|
@@ -6,7 +6,7 @@ export function applyLensDistortionEffectToWgpu(state, source, dest, effect) {
|
|
|
6
6
|
const amount = effect.amount ?? 0.2;
|
|
7
7
|
const scale = effect.scale ?? 1;
|
|
8
8
|
const pipeline = getWgpuEffectPipeline(state, 'lens.lensDistortion', LENS_DISTORTION_FRAGMENT_WGSL, 'replace');
|
|
9
|
-
|
|
9
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32) => {
|
|
10
10
|
f32[0] = amount;
|
|
11
11
|
f32[1] = scale;
|
|
12
12
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuLensDistortionEffect.js","sourceRoot":"","sources":["../src/wgpuLensDistortionEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuLensDistortionEffect.js","sourceRoot":"","sources":["../src/wgpuLensDistortionEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,sGAAsG;AACtG,mFAAmF;AACnF,MAAM,UAAU,+BAA+B,CAC7C,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAsC;IAEtC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,SAAS,CAAC,CAAC;IAC/G,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAChB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,qCAAqC,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC3F,+BAA+B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA8B,CAAC,CAAC;AACnG,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;EAkB/C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuLensFlareEffect.d.ts","sourceRoot":"","sources":["../src/wgpuLensFlareEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuLensFlareEffect.d.ts","sourceRoot":"","sources":["../src/wgpuLensFlareEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAUlH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAYN;AAED,eAAO,MAAM,gCAAgC,EAAE,sBAE9C,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { drawWgpuEffectPass } from './wgpuEffectPass';
|
|
2
2
|
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
3
|
// Lens flare: a single-pass approximation. A true flare is a multi-pass recipe (downsample a bright
|
|
4
4
|
// pass, then accumulate ghosts and a halo from it). Here, on each fragment, we sample the source's
|
|
@@ -11,7 +11,7 @@ export function applyLensFlareEffectToWgpu(state, source, dest, effect) {
|
|
|
11
11
|
const ghosts = effect.ghosts ?? 4;
|
|
12
12
|
const halo = effect.halo ?? 0.5;
|
|
13
13
|
const pipeline = getWgpuEffectPipeline(state, 'lens.lensFlare', LENS_FLARE_FRAGMENT_WGSL, 'replace');
|
|
14
|
-
|
|
14
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32) => {
|
|
15
15
|
f32[0] = threshold;
|
|
16
16
|
f32[1] = intensity;
|
|
17
17
|
f32[2] = ghosts;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuLensFlareEffect.js","sourceRoot":"","sources":["../src/wgpuLensFlareEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuLensFlareEffect.js","sourceRoot":"","sources":["../src/wgpuLensFlareEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,oGAAoG;AACpG,mGAAmG;AACnG,sGAAsG;AACtG,wGAAwG;AACxG,UAAU;AACV,MAAM,UAAU,0BAA0B,CACxC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAiC;IAEjC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC;IAChC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,SAAS,CAAC,CAAC;IACrG,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAChB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,gCAAgC,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACtF,0BAA0B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAyB,CAAC,CAAC;AACzF,CAAC,CAAC;AAEF,mEAAmE;AACnE,MAAM,wBAAwB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmC1C,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MedianEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types';
|
|
2
|
+
export declare const MAX_MEDIAN_EFFECT_WGPU_RADIUS = 2;
|
|
3
|
+
export declare function applyMedianEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, effect: Readonly<MedianEffect>): void;
|
|
4
|
+
export declare const defaultWgpuMedianEffectRunner: WgpuRenderEffectRunner;
|
|
5
|
+
//# sourceMappingURL=wgpuMedianEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuMedianEffect.d.ts","sourceRoot":"","sources":["../src/wgpuMedianEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAO/G,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAM/C,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC7B,IAAI,CAQN;AAED,eAAO,MAAM,6BAA6B,EAAE,sBAE3C,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { drawWgpuEffectPass } from './wgpuEffectPass';
|
|
2
|
+
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
|
+
// Largest median-filter radius the WebGPU path supports (radius 2 → a 5×5, 25-sample window). The cap
|
|
4
|
+
// is the fixed sort-array size in the shader; sorts each channel independently with insertion sort.
|
|
5
|
+
export const MAX_MEDIAN_EFFECT_WGPU_RADIUS = 2;
|
|
6
|
+
const MAX_SAMPLES = (MAX_MEDIAN_EFFECT_WGPU_RADIUS * 2 + 1) * (MAX_MEDIAN_EFFECT_WGPU_RADIUS * 2 + 1); // 25
|
|
7
|
+
// Per-channel median denoise: each output pixel is the median of its (2·radius+1)² neighborhood.
|
|
8
|
+
// Preserves edges while removing salt-and-pepper noise. A single GPU pass — no scratch targets.
|
|
9
|
+
export function applyMedianEffectToWgpu(state, source, dest, effect) {
|
|
10
|
+
const radius = Math.min(MAX_MEDIAN_EFFECT_WGPU_RADIUS, Math.max(0, Math.round(effect.radius ?? 1)));
|
|
11
|
+
const pipeline = getWgpuEffectPipeline(state, 'stylization.median', MEDIAN_WGSL, 'replace');
|
|
12
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32, i32) => {
|
|
13
|
+
f32[0] = 1 / source.width;
|
|
14
|
+
f32[1] = 1 / source.height;
|
|
15
|
+
i32[2] = radius;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export const defaultWgpuMedianEffectRunner = (ctx, effect) => {
|
|
19
|
+
applyMedianEffectToWgpu(ctx.state, ctx.source, ctx.dest, effect);
|
|
20
|
+
};
|
|
21
|
+
// Uniforms layout (16 bytes): offset 0 texelSize (vec2f), offset 8 radius (i32), offset 12 _pad (i32).
|
|
22
|
+
const MEDIAN_WGSL = /* wgsl */ `
|
|
23
|
+
struct Uniforms {
|
|
24
|
+
texelSize : vec2f,
|
|
25
|
+
radius : i32,
|
|
26
|
+
_pad : i32,
|
|
27
|
+
}
|
|
28
|
+
@group(0) @binding(0) var<uniform> uni : Uniforms;
|
|
29
|
+
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
30
|
+
@group(1) @binding(1) var smp : sampler;
|
|
31
|
+
|
|
32
|
+
fn sortArr(arr : ptr<function, array<f32, ${MAX_SAMPLES}>>, n : i32) {
|
|
33
|
+
for (var i = 1; i < n; i++) {
|
|
34
|
+
let key = (*arr)[i];
|
|
35
|
+
var j = i - 1;
|
|
36
|
+
loop {
|
|
37
|
+
if (j < 0 || (*arr)[j] <= key) { break; }
|
|
38
|
+
(*arr)[j + 1] = (*arr)[j];
|
|
39
|
+
j -= 1;
|
|
40
|
+
}
|
|
41
|
+
(*arr)[j + 1] = key;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@fragment
|
|
46
|
+
fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {
|
|
47
|
+
let r = clamp(uni.radius, 0, ${MAX_MEDIAN_EFFECT_WGPU_RADIUS});
|
|
48
|
+
if (r == 0) { return textureSampleLevel(tex, smp, uv, 0.0); }
|
|
49
|
+
let n = (2 * r + 1) * (2 * r + 1);
|
|
50
|
+
var rv : array<f32, ${MAX_SAMPLES}>;
|
|
51
|
+
var gv : array<f32, ${MAX_SAMPLES}>;
|
|
52
|
+
var bv : array<f32, ${MAX_SAMPLES}>;
|
|
53
|
+
var av : array<f32, ${MAX_SAMPLES}>;
|
|
54
|
+
var count = 0;
|
|
55
|
+
for (var dy = -${MAX_MEDIAN_EFFECT_WGPU_RADIUS}; dy <= ${MAX_MEDIAN_EFFECT_WGPU_RADIUS}; dy++) {
|
|
56
|
+
for (var dx = -${MAX_MEDIAN_EFFECT_WGPU_RADIUS}; dx <= ${MAX_MEDIAN_EFFECT_WGPU_RADIUS}; dx++) {
|
|
57
|
+
if (abs(dy) <= r && abs(dx) <= r) {
|
|
58
|
+
let s = textureSampleLevel(tex, smp, uv + vec2f(f32(dx), f32(dy)) * uni.texelSize, 0.0);
|
|
59
|
+
rv[count] = s.r;
|
|
60
|
+
gv[count] = s.g;
|
|
61
|
+
bv[count] = s.b;
|
|
62
|
+
av[count] = s.a;
|
|
63
|
+
count += 1;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
sortArr(&rv, n);
|
|
68
|
+
sortArr(&gv, n);
|
|
69
|
+
sortArr(&bv, n);
|
|
70
|
+
sortArr(&av, n);
|
|
71
|
+
let mid = n / 2;
|
|
72
|
+
return vec4f(rv[mid], gv[mid], bv[mid], av[mid]);
|
|
73
|
+
}`;
|
|
74
|
+
//# sourceMappingURL=wgpuMedianEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuMedianEffect.js","sourceRoot":"","sources":["../src/wgpuMedianEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,sGAAsG;AACtG,oGAAoG;AACpG,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAE/C,MAAM,WAAW,GAAG,CAAC,6BAA6B,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;AAE5G,iGAAiG;AACjG,gGAAgG;AAChG,MAAM,UAAU,uBAAuB,CACrC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAA8B;IAE9B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC5F,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACrG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACnF,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAsB,CAAC,CAAC;AACnF,CAAC,CAAC;AAEF,uGAAuG;AACvG,MAAM,WAAW,GAAG,UAAU,CAAC;;;;;;;;;;4CAUa,WAAW;;;;;;;;;;;;;;;iCAetB,6BAA6B;;;wBAGtC,WAAW;wBACX,WAAW;wBACX,WAAW;wBACX,WAAW;;mBAEhB,6BAA6B,WAAW,6BAA6B;qBACnE,6BAA6B,WAAW,6BAA6B;;;;;;;;;;;;;;;;;EAiBxF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuMotionBlurEffect.d.ts","sourceRoot":"","sources":["../src/wgpuMotionBlurEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuMotionBlurEffect.d.ts","sourceRoot":"","sources":["../src/wgpuMotionBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAcnH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,eAAe,EAAE,UAAU,GAAG,IAAI,EAClC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI,CAwCN;AAED,eAAO,MAAM,iCAAiC,EAAE,sBAE/C,CAAC"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { drawWgpuDualSourcePass } from '@flighthq/filters-wgpu';
|
|
1
|
+
import { createWgpuDualSourceEffectPipeline, drawWgpuDualSourceEffectPass } from './wgpuEffectPass';
|
|
3
2
|
// Motion blur (per-object): the velocity-driven analog of the depth consumers (fog/DoF), the Wgpu
|
|
4
3
|
// mirror of effects-gl's applyMotionBlurEffectToGl. When the scene produced a per-pixel velocity
|
|
5
4
|
// buffer (`velocityTexture`, rgba16f screen-space velocity in pixels in the RG channels), this is the
|
|
6
5
|
// real recipe — read each fragment's velocity, scale it by `intensity`, and accumulate `samples` taps
|
|
7
6
|
// spread along that vector centered on the fragment, smearing every object by its own motion. The
|
|
8
|
-
// velocity texture binds as the second source via
|
|
7
|
+
// velocity texture binds as the second source via drawWgpuDualSourceEffectPass (@group(2)). When velocity is
|
|
9
8
|
// absent (the scene did not write the buffer), u_hasVelocity=0 and it is a passthrough copy (sentinel
|
|
10
9
|
// path), preserving the pipeline stage without altering the image. Demonstrates the
|
|
11
10
|
// ctx.sceneVelocityTexture seam: real velocity path when present, sentinel copy when null.
|
|
@@ -16,7 +15,7 @@ export function applyMotionBlurEffectToWgpu(state, source, dest, velocityTexture
|
|
|
16
15
|
if (velocityTexture === null) {
|
|
17
16
|
// Sentinel path: no velocity buffer — bind source as both inputs so the dual-source layout is
|
|
18
17
|
// satisfied, and u_hasVelocity=0 makes the fragment a passthrough copy.
|
|
19
|
-
|
|
18
|
+
drawWgpuDualSourceEffectPass(state, source, source, dest, pipeline, (f32) => {
|
|
20
19
|
f32[0] = intensity;
|
|
21
20
|
f32[1] = samples;
|
|
22
21
|
f32[2] = source.width;
|
|
@@ -25,10 +24,10 @@ export function applyMotionBlurEffectToWgpu(state, source, dest, velocityTexture
|
|
|
25
24
|
});
|
|
26
25
|
return;
|
|
27
26
|
}
|
|
28
|
-
// Wrap the raw velocity GPUTexture as a minimal second source:
|
|
27
|
+
// Wrap the raw velocity GPUTexture as a minimal second source: drawWgpuDualSourceEffectPass reads only the
|
|
29
28
|
// `.view`, so a view over the velocity texture is all that is required for the @group(2) binding.
|
|
30
29
|
const velocitySource = { view: velocityTexture.createView() };
|
|
31
|
-
|
|
30
|
+
drawWgpuDualSourceEffectPass(state, source, velocitySource, dest, pipeline, (f32) => {
|
|
32
31
|
f32[0] = intensity;
|
|
33
32
|
f32[1] = samples;
|
|
34
33
|
f32[2] = source.width;
|
|
@@ -44,7 +43,7 @@ export const defaultWgpuMotionBlurEffectRunner = (ctx, effect) => {
|
|
|
44
43
|
function getMotionBlurPipeline(state) {
|
|
45
44
|
let pipeline = _motionBlurPipelines.get(state);
|
|
46
45
|
if (pipeline === undefined) {
|
|
47
|
-
pipeline =
|
|
46
|
+
pipeline = createWgpuDualSourceEffectPipeline(state, MOTION_BLUR_FRAGMENT_WGSL, 'replace');
|
|
48
47
|
_motionBlurPipelines.set(state, pipeline);
|
|
49
48
|
}
|
|
50
49
|
return pipeline;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuMotionBlurEffect.js","sourceRoot":"","sources":["../src/wgpuMotionBlurEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuMotionBlurEffect.js","sourceRoot":"","sources":["../src/wgpuMotionBlurEffect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kCAAkC,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAEpG,kGAAkG;AAClG,iGAAiG;AACjG,sGAAsG;AACtG,sGAAsG;AACtG,kGAAkG;AAClG,6GAA6G;AAC7G,sGAAsG;AACtG,oFAAoF;AACpF,2FAA2F;AAC3F,MAAM,UAAU,2BAA2B,CACzC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,eAAkC,EAClC,MAAkC;IAElC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC7B,8FAA8F;QAC9F,wEAAwE;QACxE,4BAA4B,CAC1B,KAAK,EACL,MAA0B,EAC1B,MAA0B,EAC1B,IAAwB,EACxB,QAAQ,EACR,CAAC,GAAG,EAAE,EAAE;YACN,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;YACnB,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;YACjB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YACtB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACb,CAAC,CACF,CAAC;QACF,OAAO;IACT,CAAC;IACD,2GAA2G;IAC3G,kGAAkG;IAClG,MAAM,cAAc,GAAG,EAAE,IAAI,EAAE,eAAe,CAAC,UAAU,EAAE,EAAsB,CAAC;IAClF,4BAA4B,CAC1B,KAAK,EACL,MAA0B,EAC1B,cAAc,EACd,IAAwB,EACxB,QAAQ,EACR,CAAC,GAAG,EAAE,EAAE;QACN,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;QACjB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACtB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACvB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,iCAAiC,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACvF,2BAA2B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,oBAAoB,EAAE,MAA0B,CAAC,CAAC;AACrH,CAAC,CAAC;AAEF,8FAA8F;AAC9F,+FAA+F;AAC/F,SAAS,qBAAqB,CAAC,KAAsB;IACnD,IAAI,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,QAAQ,GAAG,kCAAkC,CAAC,KAAK,EAAE,yBAAyB,EAAE,SAAS,CAAC,CAAC;QAC3F,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,oBAAoB,GAAG,IAAI,OAAO,EAAiD,CAAC;AAE1F,sGAAsG;AACtG,yGAAyG;AACzG,MAAM,yBAAyB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyC3C,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { OuterGlowEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget, WgpuRenderTargetPool } from '@flighthq/types';
|
|
2
|
+
export declare function applyOuterGlowEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, pool: WgpuRenderTargetPool, effect: Readonly<OuterGlowEffect>): void;
|
|
3
|
+
export declare const defaultWgpuOuterGlowEffectRunner: WgpuRenderEffectRunner;
|
|
4
|
+
//# sourceMappingURL=wgpuOuterGlowEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuOuterGlowEffect.d.ts","sourceRoot":"","sources":["../src/wgpuOuterGlowEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAUzB,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,IAAI,EAAE,oBAAoB,EAC1B,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAoCN;AAED,eAAO,MAAM,gCAAgC,EAAE,sBAE9C,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { acquireWgpuRenderTarget, releaseWgpuRenderTarget } from '@flighthq/render-wgpu';
|
|
2
|
+
import { applyWgpuEffectBlitPass } from './wgpuEffectBlitShader';
|
|
3
|
+
import { applyWgpuEffectBoxBlur } from './wgpuEffectBoxBlur';
|
|
4
|
+
import { clearWgpuEffectTarget } from './wgpuEffectPass';
|
|
5
|
+
import { applyWgpuEffectTintPass } from './wgpuEffectTintShader';
|
|
6
|
+
// Outer-glow composite effect: tint the scene silhouette, blur it centered (no offset), then composite the source over the glow.
|
|
7
|
+
// Full-frame realization: acquires the recipe's three scratch targets from the effect pool, runs the
|
|
8
|
+
// multi-pass recipe (tint → box blur → composite), then releases them.
|
|
9
|
+
export function applyOuterGlowEffectToWgpu(state, source, dest, pool, effect) {
|
|
10
|
+
const src = source;
|
|
11
|
+
const dst = dest;
|
|
12
|
+
const descriptor = { width: source.width, height: source.height, format: source.format };
|
|
13
|
+
const mask = acquireWgpuRenderTarget(state, pool, descriptor);
|
|
14
|
+
const blurred = acquireWgpuRenderTarget(state, pool, descriptor);
|
|
15
|
+
const blurTemp = acquireWgpuRenderTarget(state, pool, descriptor);
|
|
16
|
+
const color = effect.color ?? 0xff0000;
|
|
17
|
+
const alpha = effect.alpha ?? 1;
|
|
18
|
+
const strength = effect.strength ?? 1;
|
|
19
|
+
const quality = Math.max(1, Math.round(effect.quality ?? 1));
|
|
20
|
+
const knockout = effect.knockout ?? false;
|
|
21
|
+
const tintStrength = Math.min(1, strength);
|
|
22
|
+
const glowPasses = Math.max(1, Math.floor(strength));
|
|
23
|
+
applyWgpuEffectTintPass(state, src, mask, color, alpha, tintStrength);
|
|
24
|
+
applyWgpuEffectBoxBlur(state, mask, blurred, blurTemp, {
|
|
25
|
+
blurX: effect.blurX ?? 6,
|
|
26
|
+
blurY: effect.blurY ?? 6,
|
|
27
|
+
passes: quality,
|
|
28
|
+
});
|
|
29
|
+
clearWgpuEffectTarget(state, dst);
|
|
30
|
+
for (let i = 0; i < glowPasses; i++) {
|
|
31
|
+
applyWgpuEffectBlitPass(state, blurred, dst);
|
|
32
|
+
}
|
|
33
|
+
if (!knockout) {
|
|
34
|
+
applyWgpuEffectBlitPass(state, src, dst);
|
|
35
|
+
}
|
|
36
|
+
releaseWgpuRenderTarget(pool, mask);
|
|
37
|
+
releaseWgpuRenderTarget(pool, blurred);
|
|
38
|
+
releaseWgpuRenderTarget(pool, blurTemp);
|
|
39
|
+
}
|
|
40
|
+
export const defaultWgpuOuterGlowEffectRunner = (ctx, effect) => {
|
|
41
|
+
applyOuterGlowEffectToWgpu(ctx.state, ctx.source, ctx.dest, ctx.pool, effect);
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=wgpuOuterGlowEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wgpuOuterGlowEffect.js","sourceRoot":"","sources":["../src/wgpuOuterGlowEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuOutlineEffect.d.ts","sourceRoot":"","sources":["../src/wgpuOutlineEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuOutlineEffect.d.ts","sourceRoot":"","sources":["../src/wgpuOutlineEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAOhH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,GAC9B,IAAI,CAqBN;AAED,eAAO,MAAM,8BAA8B,EAAE,sBAE5C,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { drawWgpuEffectPass } from './wgpuEffectPass';
|
|
2
2
|
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
3
|
// Outline: Sobel edge detection on luminance; where the gradient magnitude exceeds `threshold`, mix
|
|
4
4
|
// the pixel toward the outline color by `thickness`. Color arrives packed RGBA, unpacked to 0..1 here.
|
|
@@ -11,7 +11,7 @@ export function applyOutlineEffectToWgpu(state, source, dest, effect) {
|
|
|
11
11
|
const b = ((color >>> 8) & 0xff) / 255;
|
|
12
12
|
const a = (color & 0xff) / 255;
|
|
13
13
|
const pipeline = getWgpuEffectPipeline(state, 'stylization.outline', OUTLINE_FRAGMENT_WGSL, 'replace');
|
|
14
|
-
|
|
14
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32) => {
|
|
15
15
|
f32[0] = threshold;
|
|
16
16
|
f32[1] = thickness;
|
|
17
17
|
// u_resolution (vec2f) aligns to slot [2].
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuOutlineEffect.js","sourceRoot":"","sources":["../src/wgpuOutlineEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuOutlineEffect.js","sourceRoot":"","sources":["../src/wgpuOutlineEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,oGAAoG;AACpG,uGAAuG;AACvG,MAAM,UAAU,wBAAwB,CACtC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAA+B;IAE/B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACxC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACxC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAC/B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;IACvG,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;QACnB,2CAA2C;QAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACtB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACvB,sCAAsC;QACtC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACpF,wBAAwB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAuB,CAAC,CAAC;AACrF,CAAC,CAAC;AAEF,mFAAmF;AACnF,MAAM,qBAAqB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCvC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuPixelateEffect.d.ts","sourceRoot":"","sources":["../src/wgpuPixelateEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuPixelateEffect.d.ts","sourceRoot":"","sources":["../src/wgpuPixelateEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMjH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC/B,IAAI,CASN;AAED,eAAO,MAAM,+BAA+B,EAAE,sBAE7C,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { drawWgpuEffectPass } from './wgpuEffectPass';
|
|
2
2
|
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
3
|
// Pixelate: snap uv to the center of `size`-pixel blocks before sampling, producing hard mosaic blocks.
|
|
4
4
|
export function applyPixelateEffectToWgpu(state, source, dest, effect) {
|
|
5
5
|
const size = effect.size ?? 8;
|
|
6
6
|
const pipeline = getWgpuEffectPipeline(state, 'stylization.pixelate', PIXELATE_FRAGMENT_WGSL, 'replace');
|
|
7
|
-
|
|
7
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32) => {
|
|
8
8
|
f32[0] = Math.max(1, size);
|
|
9
9
|
// u_resolution (vec2f) aligns to slot [2].
|
|
10
10
|
f32[2] = source.width;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuPixelateEffect.js","sourceRoot":"","sources":["../src/wgpuPixelateEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuPixelateEffect.js","sourceRoot":"","sources":["../src/wgpuPixelateEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,wGAAwG;AACxG,MAAM,UAAU,yBAAyB,CACvC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAgC;IAEhC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC;IACzG,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3B,2CAA2C;QAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACtB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACrF,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAwB,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,qDAAqD;AACrD,MAAM,sBAAsB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;EAexC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuPosterizeEffect.d.ts","sourceRoot":"","sources":["../src/wgpuPosterizeEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuPosterizeEffect.d.ts","sourceRoot":"","sources":["../src/wgpuPosterizeEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMlH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAMN;AAED,eAAO,MAAM,gCAAgC,EAAE,sBAE9C,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { drawWgpuEffectPass } from './wgpuEffectPass';
|
|
2
2
|
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
3
|
// Posterize: floor each channel to `levels` discrete steps.
|
|
4
4
|
export function applyPosterizeEffectToWgpu(state, source, dest, effect) {
|
|
5
5
|
const levels = Math.max(2, effect.levels ?? 8);
|
|
6
6
|
const pipeline = getWgpuEffectPipeline(state, 'colorGrade.posterize', POSTERIZE_FRAGMENT_WGSL, 'replace');
|
|
7
|
-
|
|
7
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32) => {
|
|
8
8
|
f32[0] = levels;
|
|
9
9
|
});
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuPosterizeEffect.js","sourceRoot":"","sources":["../src/wgpuPosterizeEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuPosterizeEffect.js","sourceRoot":"","sources":["../src/wgpuPosterizeEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,4DAA4D;AAC5D,MAAM,UAAU,0BAA0B,CACxC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAiC;IAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;IAC1G,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,gCAAgC,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACtF,0BAA0B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAyB,CAAC,CAAC;AACzF,CAAC,CAAC;AAEF,2BAA2B;AAC3B,MAAM,uBAAuB,GAAG,UAAU,CAAC;;;;;;;;;;;EAWzC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuRadialBlurEffect.d.ts","sourceRoot":"","sources":["../src/wgpuRadialBlurEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuRadialBlurEffect.d.ts","sourceRoot":"","sources":["../src/wgpuRadialBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAQnH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI,CAYN;AAED,eAAO,MAAM,iCAAiC,EAAE,sBAE/C,CAAC"}
|