@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
package/dist/wgpuTaaEffect.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { drawWgpuEffectPass } from './wgpuEffectPass';
|
|
2
2
|
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
3
|
// TAA: passthrough copy of source → dest. Real temporal AA needs a history buffer + motion vectors to
|
|
4
4
|
// reproject and accumulate prior frames; neither is available in the single-frame effect context, so
|
|
5
5
|
// this is a placeholder that preserves the pipeline stage without altering the image.
|
|
6
6
|
export function applyTaaEffectToWgpu(state, source, dest, _effect) {
|
|
7
7
|
const pipeline = getWgpuEffectPipeline(state, 'antialiasing.taa', TAA_FRAGMENT_WGSL, 'replace');
|
|
8
|
-
|
|
8
|
+
drawWgpuEffectPass(state, source, dest, pipeline, _noopSetUniforms);
|
|
9
9
|
}
|
|
10
10
|
export const defaultWgpuTaaEffectRunner = (ctx, effect) => {
|
|
11
11
|
applyTaaEffectToWgpu(ctx.state, ctx.source, ctx.dest, effect);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuTaaEffect.js","sourceRoot":"","sources":["../src/wgpuTaaEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuTaaEffect.js","sourceRoot":"","sources":["../src/wgpuTaaEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,sGAAsG;AACtG,qGAAqG;AACrG,sFAAsF;AACtF,MAAM,UAAU,oBAAoB,CAClC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,OAA4B;IAE5B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAChG,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AAC9G,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAChF,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAmB,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF,SAAS,gBAAgB,KAAU,CAAC;AAEpC,sGAAsG;AACtG,yFAAyF;AACzF,MAAM,iBAAiB,GAAG,UAAU,CAAC;;;;;;;;;;EAUnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuTiltShiftEffect.d.ts","sourceRoot":"","sources":["../src/wgpuTiltShiftEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuTiltShiftEffect.d.ts","sourceRoot":"","sources":["../src/wgpuTiltShiftEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAQlH,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
|
// Tilt-shift: keep a horizontal focus band sharp and blur above and below it. The band is centered at
|
|
4
4
|
// `center` on Y with height `width`; blur strength ramps with distance outside the band. Blur is
|
|
@@ -8,7 +8,7 @@ export function applyTiltShiftEffectToWgpu(state, source, dest, effect) {
|
|
|
8
8
|
const width = effect.width ?? 0.3;
|
|
9
9
|
const blur = effect.blur ?? 4;
|
|
10
10
|
const pipeline = getWgpuEffectPipeline(state, 'lens.tiltShift', TILT_SHIFT_FRAGMENT_WGSL, 'replace');
|
|
11
|
-
|
|
11
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32) => {
|
|
12
12
|
f32[0] = center;
|
|
13
13
|
f32[1] = width;
|
|
14
14
|
f32[2] = blur;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuTiltShiftEffect.js","sourceRoot":"","sources":["../src/wgpuTiltShiftEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuTiltShiftEffect.js","sourceRoot":"","sources":["../src/wgpuTiltShiftEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,sGAAsG;AACtG,iGAAiG;AACjG,kGAAkG;AAClG,MAAM,UAAU,0BAA0B,CACxC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAiC;IAEjC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9B,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,MAAM,CAAC;QAChB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACf,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,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,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,uGAAuG;AACvG,MAAM,wBAAwB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B1C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuToneMapEffect.d.ts","sourceRoot":"","sources":["../src/wgpuToneMapEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuToneMapEffect.d.ts","sourceRoot":"","sources":["../src/wgpuToneMapEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAQhH,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,CASN;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
|
// Tone map: compress HDR to displayable range via the selected operator. Single-pass reference recipe,
|
|
4
4
|
// the Wgpu mirror of effects-gl's applyToneMapEffectToGl. The operator selects a tonemap body
|
|
@@ -8,7 +8,7 @@ export function applyToneMapEffectToWgpu(state, source, dest, effect) {
|
|
|
8
8
|
const exposure = effect.exposure ?? 1;
|
|
9
9
|
const white = effect.white ?? 1;
|
|
10
10
|
const pipeline = getWgpuEffectPipeline(state, `toneMap.${operator}`, buildToneMapFragment(operator), 'replace');
|
|
11
|
-
|
|
11
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32) => {
|
|
12
12
|
f32[0] = exposure;
|
|
13
13
|
f32[1] = white;
|
|
14
14
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuToneMapEffect.js","sourceRoot":"","sources":["../src/wgpuToneMapEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuToneMapEffect.js","sourceRoot":"","sources":["../src/wgpuToneMapEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,uGAAuG;AACvG,8FAA8F;AAC9F,6EAA6E;AAC7E,MAAM,UAAU,wBAAwB,CACtC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAA+B;IAE/B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,WAAW,QAAQ,EAAE,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;IAChH,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACjB,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,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,OAAO,qBAAqB,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC;AACjH,CAAC;AAED,sGAAsG;AACtG,qCAAqC;AACrC,MAAM,qBAAqB,GAAG,UAAU,CAAC;;;;;;iCAMR,CAAC;AAElC,MAAM,qBAAqB,GAAG,UAAU,CAAC;;;;;;;EAOvC,CAAC;AAEH,MAAM,iBAAiB,GAA2B;IAChD,IAAI,EAAE;;;gBAGQ;IACd,QAAQ,EAAE;sDAC0C;IACpD,MAAM,EAAE;;+DAEqD;IAC7D,UAAU,EAAE;;;YAGF;IACV,GAAG,EAAE;;6BAEsB;CAC5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuVignetteEffect.d.ts","sourceRoot":"","sources":["../src/wgpuVignetteEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuVignetteEffect.d.ts","sourceRoot":"","sources":["../src/wgpuVignetteEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAUjH,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,CAmBN;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
|
// Vignette: darken toward the edges. Pixels inside `radius` stay full bright; beyond it, brightness
|
|
4
4
|
// falls off over `softness` and the color is blended toward the (unpacked) vignette color by intensity.
|
|
@@ -15,7 +15,7 @@ export function applyVignetteEffectToWgpu(state, source, dest, effect) {
|
|
|
15
15
|
const b = ((color >>> 8) & 0xff) / 255;
|
|
16
16
|
const a = (color & 0xff) / 255;
|
|
17
17
|
const pipeline = getWgpuEffectPipeline(state, 'lens.vignette', VIGNETTE_FRAGMENT_WGSL, 'replace');
|
|
18
|
-
|
|
18
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32) => {
|
|
19
19
|
f32[0] = intensity;
|
|
20
20
|
f32[1] = radius;
|
|
21
21
|
f32[2] = softness;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuVignetteEffect.js","sourceRoot":"","sources":["../src/wgpuVignetteEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuVignetteEffect.js","sourceRoot":"","sources":["../src/wgpuVignetteEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,oGAAoG;AACpG,wGAAwG;AACxG,6FAA6F;AAC7F,sGAAsG;AACtG,sFAAsF;AACtF,MAAM,UAAU,yBAAyB,CACvC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAgC;IAEhC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;IACzC,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,eAAe,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC;IAClG,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,MAAM,CAAC;QAChB,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QAClB,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,+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,qGAAqG;AACrG,sFAAsF;AACtF,MAAM,sBAAsB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;EAoBxC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuWhiteBalanceEffect.d.ts","sourceRoot":"","sources":["../src/wgpuWhiteBalanceEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuWhiteBalanceEffect.d.ts","sourceRoot":"","sources":["../src/wgpuWhiteBalanceEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAMrH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACnC,IAAI,CAQN;AAED,eAAO,MAAM,mCAAmC,EAAE,sBAEjD,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { drawWgpuEffectPass } from './wgpuEffectPass';
|
|
2
2
|
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
3
|
// White balance: warm/cool temperature and magenta/green tint channel shift.
|
|
4
4
|
export function applyWhiteBalanceEffectToWgpu(state, source, dest, effect) {
|
|
5
5
|
const temperature = effect.temperature ?? 0;
|
|
6
6
|
const tint = effect.tint ?? 0;
|
|
7
7
|
const pipeline = getWgpuEffectPipeline(state, 'colorGrade.whiteBalance', WHITE_BALANCE_FRAGMENT_WGSL, 'replace');
|
|
8
|
-
|
|
8
|
+
drawWgpuEffectPass(state, source, dest, pipeline, (f32) => {
|
|
9
9
|
f32[0] = temperature;
|
|
10
10
|
f32[1] = tint;
|
|
11
11
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuWhiteBalanceEffect.js","sourceRoot":"","sources":["../src/wgpuWhiteBalanceEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wgpuWhiteBalanceEffect.js","sourceRoot":"","sources":["../src/wgpuWhiteBalanceEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,6EAA6E;AAC7E,MAAM,UAAU,6BAA6B,CAC3C,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAoC;IAEpC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,SAAS,CAAC,CAAC;IACjH,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;QACrB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,mCAAmC,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACzF,6BAA6B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA4B,CAAC,CAAC;AAC/F,CAAC,CAAC;AAEF,0CAA0C;AAC1C,MAAM,2BAA2B,GAAG,UAAU,CAAC;;;;;;;;;;;;;;EAc7C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/effects-wgpu",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "https://github.com/flighthq/flight.git",
|
|
7
|
+
"directory": "packages/effects-wgpu"
|
|
8
|
+
},
|
|
4
9
|
"type": "module",
|
|
5
10
|
"main": "dist/index.js",
|
|
6
11
|
"types": "dist/index.d.ts",
|
|
@@ -27,12 +32,11 @@
|
|
|
27
32
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
28
33
|
},
|
|
29
34
|
"dependencies": {
|
|
30
|
-
"@flighthq/
|
|
31
|
-
"@flighthq/
|
|
32
|
-
"@flighthq/
|
|
33
|
-
"@flighthq/
|
|
34
|
-
"@flighthq/
|
|
35
|
-
"@flighthq/types": "0.1.0"
|
|
35
|
+
"@flighthq/adjustments": "0.2.0",
|
|
36
|
+
"@flighthq/effects": "0.2.0",
|
|
37
|
+
"@flighthq/geometry": "0.2.0",
|
|
38
|
+
"@flighthq/render-wgpu": "0.2.0",
|
|
39
|
+
"@flighthq/types": "0.2.0"
|
|
36
40
|
},
|
|
37
41
|
"devDependencies": {
|
|
38
42
|
"typescript": "^5.3.0"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { applyBevelEffectToWgpu, defaultWgpuBevelEffectRunner } from './wgpuBevelEffect';
|
|
2
|
+
|
|
3
|
+
describe('applyBevelEffectToWgpu', () => {
|
|
4
|
+
it('is a function', () => {
|
|
5
|
+
expect(typeof applyBevelEffectToWgpu).toBe('function');
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe('defaultWgpuBevelEffectRunner', () => {
|
|
10
|
+
it('is a function', () => {
|
|
11
|
+
expect(typeof defaultWgpuBevelEffectRunner).toBe('function');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { applyBlurEffectToWgpu, applyGaussianBlurToWgpu, defaultWgpuBlurEffectRunner } from './wgpuBlurEffect';
|
|
2
|
+
|
|
3
|
+
describe('applyBlurEffectToWgpu', () => {
|
|
4
|
+
it('is a function', () => {
|
|
5
|
+
expect(typeof applyBlurEffectToWgpu).toBe('function');
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe('applyGaussianBlurToWgpu', () => {
|
|
10
|
+
it('is a function', () => {
|
|
11
|
+
expect(typeof applyGaussianBlurToWgpu).toBe('function');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
describe('defaultWgpuBlurEffectRunner', () => {
|
|
16
|
+
it('is a function', () => {
|
|
17
|
+
expect(typeof defaultWgpuBlurEffectRunner).toBe('function');
|
|
18
|
+
});
|
|
19
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { applyConvolutionEffectToWgpu, defaultWgpuConvolutionEffectRunner } from './wgpuConvolutionEffect';
|
|
2
|
+
|
|
3
|
+
describe('applyConvolutionEffectToWgpu', () => {
|
|
4
|
+
it('is a function', () => {
|
|
5
|
+
expect(typeof applyConvolutionEffectToWgpu).toBe('function');
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe('defaultWgpuConvolutionEffectRunner', () => {
|
|
10
|
+
it('is a function', () => {
|
|
11
|
+
expect(typeof defaultWgpuConvolutionEffectRunner).toBe('function');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { applyDropShadowEffectToWgpu, defaultWgpuDropShadowEffectRunner } from './wgpuDropShadowEffect';
|
|
2
|
+
|
|
3
|
+
describe('applyDropShadowEffectToWgpu', () => {
|
|
4
|
+
it('is a function', () => {
|
|
5
|
+
expect(typeof applyDropShadowEffectToWgpu).toBe('function');
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe('defaultWgpuDropShadowEffectRunner', () => {
|
|
10
|
+
it('is a function', () => {
|
|
11
|
+
expect(typeof defaultWgpuDropShadowEffectRunner).toBe('function');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { applyWgpuEffectBlitOffsetPass, applyWgpuEffectBlitPass } from './wgpuEffectBlitShader';
|
|
2
|
+
|
|
3
|
+
describe('applyWgpuEffectBlitOffsetPass', () => {
|
|
4
|
+
it('is a function', () => {
|
|
5
|
+
expect(typeof applyWgpuEffectBlitOffsetPass).toBe('function');
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe('applyWgpuEffectBlitPass', () => {
|
|
10
|
+
it('is a function', () => {
|
|
11
|
+
expect(typeof applyWgpuEffectBlitPass).toBe('function');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import {
|
|
2
|
+
clearWgpuEffectTarget,
|
|
3
|
+
createWgpuDualSourceEffectPipeline,
|
|
4
|
+
createWgpuEffectPipeline,
|
|
5
|
+
drawWgpuDualSourceEffectPass,
|
|
6
|
+
drawWgpuEffectPass,
|
|
7
|
+
EFFECT_VERTEX_WGSL,
|
|
8
|
+
getWgpuEffectPassState,
|
|
9
|
+
} from './wgpuEffectPass';
|
|
10
|
+
|
|
11
|
+
describe('clearWgpuEffectTarget', () => {
|
|
12
|
+
it('is a function', () => {
|
|
13
|
+
expect(typeof clearWgpuEffectTarget).toBe('function');
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
describe('createWgpuDualSourceEffectPipeline', () => {
|
|
18
|
+
it('is a function', () => {
|
|
19
|
+
expect(typeof createWgpuDualSourceEffectPipeline).toBe('function');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
describe('createWgpuEffectPipeline', () => {
|
|
24
|
+
it('is a function', () => {
|
|
25
|
+
expect(typeof createWgpuEffectPipeline).toBe('function');
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
describe('drawWgpuDualSourceEffectPass', () => {
|
|
30
|
+
it('is a function', () => {
|
|
31
|
+
expect(typeof drawWgpuDualSourceEffectPass).toBe('function');
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
describe('drawWgpuEffectPass', () => {
|
|
36
|
+
it('is a function', () => {
|
|
37
|
+
expect(typeof drawWgpuEffectPass).toBe('function');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe('EFFECT_VERTEX_WGSL', () => {
|
|
42
|
+
it('is a WGSL string', () => {
|
|
43
|
+
expect(typeof EFFECT_VERTEX_WGSL).toBe('string');
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
describe('getWgpuEffectPassState', () => {
|
|
48
|
+
it('is a function', () => {
|
|
49
|
+
expect(typeof getWgpuEffectPassState).toBe('function');
|
|
50
|
+
});
|
|
51
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {
|
|
2
|
+
applyWgpuEffectInnerClipPass,
|
|
3
|
+
applyWgpuEffectInvertTintPass,
|
|
4
|
+
applyWgpuEffectTintPass,
|
|
5
|
+
} from './wgpuEffectTintShader';
|
|
6
|
+
|
|
7
|
+
describe('applyWgpuEffectInnerClipPass', () => {
|
|
8
|
+
it('is a function', () => {
|
|
9
|
+
expect(typeof applyWgpuEffectInnerClipPass).toBe('function');
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
describe('applyWgpuEffectInvertTintPass', () => {
|
|
14
|
+
it('is a function', () => {
|
|
15
|
+
expect(typeof applyWgpuEffectInvertTintPass).toBe('function');
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
describe('applyWgpuEffectTintPass', () => {
|
|
20
|
+
it('is a function', () => {
|
|
21
|
+
expect(typeof applyWgpuEffectTintPass).toBe('function');
|
|
22
|
+
});
|
|
23
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { applyGradientBevelEffectToWgpu, defaultWgpuGradientBevelEffectRunner } from './wgpuGradientBevelEffect';
|
|
2
|
+
|
|
3
|
+
describe('applyGradientBevelEffectToWgpu', () => {
|
|
4
|
+
it('is a function', () => {
|
|
5
|
+
expect(typeof applyGradientBevelEffectToWgpu).toBe('function');
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe('defaultWgpuGradientBevelEffectRunner', () => {
|
|
10
|
+
it('is a function', () => {
|
|
11
|
+
expect(typeof defaultWgpuGradientBevelEffectRunner).toBe('function');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { applyGradientGlowEffectToWgpu, defaultWgpuGradientGlowEffectRunner } from './wgpuGradientGlowEffect';
|
|
2
|
+
|
|
3
|
+
describe('applyGradientGlowEffectToWgpu', () => {
|
|
4
|
+
it('is a function', () => {
|
|
5
|
+
expect(typeof applyGradientGlowEffectToWgpu).toBe('function');
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe('defaultWgpuGradientGlowEffectRunner', () => {
|
|
10
|
+
it('is a function', () => {
|
|
11
|
+
expect(typeof defaultWgpuGradientGlowEffectRunner).toBe('function');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { applyInnerGlowEffectToWgpu, defaultWgpuInnerGlowEffectRunner } from './wgpuInnerGlowEffect';
|
|
2
|
+
|
|
3
|
+
describe('applyInnerGlowEffectToWgpu', () => {
|
|
4
|
+
it('is a function', () => {
|
|
5
|
+
expect(typeof applyInnerGlowEffectToWgpu).toBe('function');
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe('defaultWgpuInnerGlowEffectRunner', () => {
|
|
10
|
+
it('is a function', () => {
|
|
11
|
+
expect(typeof defaultWgpuInnerGlowEffectRunner).toBe('function');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { applyInnerShadowEffectToWgpu, defaultWgpuInnerShadowEffectRunner } from './wgpuInnerShadowEffect';
|
|
2
|
+
|
|
3
|
+
describe('applyInnerShadowEffectToWgpu', () => {
|
|
4
|
+
it('is a function', () => {
|
|
5
|
+
expect(typeof applyInnerShadowEffectToWgpu).toBe('function');
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe('defaultWgpuInnerShadowEffectRunner', () => {
|
|
10
|
+
it('is a function', () => {
|
|
11
|
+
expect(typeof defaultWgpuInnerShadowEffectRunner).toBe('function');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { applyMedianEffectToWgpu, defaultWgpuMedianEffectRunner } from './wgpuMedianEffect';
|
|
2
|
+
|
|
3
|
+
describe('applyMedianEffectToWgpu', () => {
|
|
4
|
+
it('is a function', () => {
|
|
5
|
+
expect(typeof applyMedianEffectToWgpu).toBe('function');
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe('defaultWgpuMedianEffectRunner', () => {
|
|
10
|
+
it('is a function', () => {
|
|
11
|
+
expect(typeof defaultWgpuMedianEffectRunner).toBe('function');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { applyOuterGlowEffectToWgpu, defaultWgpuOuterGlowEffectRunner } from './wgpuOuterGlowEffect';
|
|
2
|
+
|
|
3
|
+
describe('applyOuterGlowEffectToWgpu', () => {
|
|
4
|
+
it('is a function', () => {
|
|
5
|
+
expect(typeof applyOuterGlowEffectToWgpu).toBe('function');
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe('defaultWgpuOuterGlowEffectRunner', () => {
|
|
10
|
+
it('is a function', () => {
|
|
11
|
+
expect(typeof defaultWgpuOuterGlowEffectRunner).toBe('function');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -36,6 +36,8 @@ describe('setWgpuRenderEffectVelocityTexture', () => {
|
|
|
36
36
|
options: {},
|
|
37
37
|
sceneTarget: null,
|
|
38
38
|
pool: { free: [] },
|
|
39
|
+
lutCache: { signature: null, lut: null },
|
|
40
|
+
lutTexture: { texture: null, size: 0, lut: null },
|
|
39
41
|
velocityTexture: null,
|
|
40
42
|
};
|
|
41
43
|
const texture = {} as GPUTexture;
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
registerBloomWgpuRenderEffects,
|
|
6
6
|
registerBlurWgpuRenderEffects,
|
|
7
7
|
registerColorWgpuRenderEffects,
|
|
8
|
+
registerCompositeWgpuRenderEffects,
|
|
8
9
|
registerScreenSpaceWgpuRenderEffects,
|
|
9
10
|
registerStandardWgpuRenderEffects,
|
|
10
11
|
registerStylizeWgpuRenderEffects,
|
|
@@ -53,22 +54,33 @@ describe('registerBlurWgpuRenderEffects', () => {
|
|
|
53
54
|
});
|
|
54
55
|
|
|
55
56
|
describe('registerColorWgpuRenderEffects', () => {
|
|
56
|
-
it('registers
|
|
57
|
+
it('registers the remaining color and tone effect runners', async () => {
|
|
57
58
|
const state = await createWgpuRenderStateForTest();
|
|
58
59
|
registerColorWgpuRenderEffects(state);
|
|
59
|
-
expect(getWgpuRenderEffectRunner(state, 'BrightnessContrastEffect')).not.toBe(null);
|
|
60
|
-
expect(getWgpuRenderEffectRunner(state, 'ChannelMixerEffect')).not.toBe(null);
|
|
61
|
-
expect(getWgpuRenderEffectRunner(state, 'ColorGradeEffect')).not.toBe(null);
|
|
62
|
-
expect(getWgpuRenderEffectRunner(state, 'ExposureEffect')).not.toBe(null);
|
|
63
|
-
expect(getWgpuRenderEffectRunner(state, 'GrayscaleEffect')).not.toBe(null);
|
|
64
|
-
expect(getWgpuRenderEffectRunner(state, 'HueSaturationEffect')).not.toBe(null);
|
|
65
|
-
expect(getWgpuRenderEffectRunner(state, 'InvertEffect')).not.toBe(null);
|
|
66
|
-
expect(getWgpuRenderEffectRunner(state, 'LiftGammaGainEffect')).not.toBe(null);
|
|
67
|
-
expect(getWgpuRenderEffectRunner(state, 'LookupTableGradeEffect')).not.toBe(null);
|
|
68
|
-
expect(getWgpuRenderEffectRunner(state, 'PosterizeEffect')).not.toBe(null);
|
|
69
|
-
expect(getWgpuRenderEffectRunner(state, 'SepiaEffect')).not.toBe(null);
|
|
70
60
|
expect(getWgpuRenderEffectRunner(state, 'ToneMapEffect')).not.toBe(null);
|
|
71
61
|
expect(getWgpuRenderEffectRunner(state, 'WhiteBalanceEffect')).not.toBe(null);
|
|
62
|
+
// The pointwise color ops moved to @flighthq/adjustments and fold through the pipeline, no runner.
|
|
63
|
+
expect(getWgpuRenderEffectRunner(state, 'ColorGradeEffect')).toBe(null);
|
|
64
|
+
expect(getWgpuRenderEffectRunner(state, 'HueSaturationEffect')).toBe(null);
|
|
65
|
+
expect(getWgpuRenderEffectRunner(state, 'LookupTableGradeEffect')).toBe(null);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
describe('registerCompositeWgpuRenderEffects', () => {
|
|
70
|
+
it('registers the seven former-filter composite effect runners', async () => {
|
|
71
|
+
const state = await createWgpuRenderStateForTest();
|
|
72
|
+
registerCompositeWgpuRenderEffects(state);
|
|
73
|
+
for (const kind of [
|
|
74
|
+
'BevelEffect',
|
|
75
|
+
'DropShadowEffect',
|
|
76
|
+
'GradientBevelEffect',
|
|
77
|
+
'GradientGlowEffect',
|
|
78
|
+
'InnerGlowEffect',
|
|
79
|
+
'InnerShadowEffect',
|
|
80
|
+
'OuterGlowEffect',
|
|
81
|
+
]) {
|
|
82
|
+
expect(getWgpuRenderEffectRunner(state, kind)).not.toBe(null);
|
|
83
|
+
}
|
|
72
84
|
});
|
|
73
85
|
});
|
|
74
86
|
|
|
@@ -85,14 +97,13 @@ describe('registerScreenSpaceWgpuRenderEffects', () => {
|
|
|
85
97
|
});
|
|
86
98
|
|
|
87
99
|
describe('registerStandardWgpuRenderEffects', () => {
|
|
88
|
-
it('registers all
|
|
100
|
+
it('registers all 43 standard effect runners', async () => {
|
|
89
101
|
const state = await createWgpuRenderStateForTest();
|
|
90
102
|
registerStandardWgpuRenderEffects(state);
|
|
91
103
|
// Spot-check one from each band.
|
|
92
104
|
expect(getWgpuRenderEffectRunner(state, 'FxaaEffect')).not.toBe(null);
|
|
93
105
|
expect(getWgpuRenderEffectRunner(state, 'BloomEffect')).not.toBe(null);
|
|
94
106
|
expect(getWgpuRenderEffectRunner(state, 'DirectionalBlurEffect')).not.toBe(null);
|
|
95
|
-
expect(getWgpuRenderEffectRunner(state, 'GrayscaleEffect')).not.toBe(null);
|
|
96
107
|
expect(getWgpuRenderEffectRunner(state, 'SsaoEffect')).not.toBe(null);
|
|
97
108
|
expect(getWgpuRenderEffectRunner(state, 'HalftoneEffect')).not.toBe(null);
|
|
98
109
|
});
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { BrightnessContrastEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types';
|
|
2
|
-
export declare function applyBrightnessContrastEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, effect: Readonly<BrightnessContrastEffect>): void;
|
|
3
|
-
export declare const defaultWgpuBrightnessContrastEffectRunner: WgpuRenderEffectRunner;
|
|
4
|
-
//# sourceMappingURL=wgpuBrightnessContrastEffect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuBrightnessContrastEffect.d.ts","sourceRoot":"","sources":["../src/wgpuBrightnessContrastEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAKzB,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,wBAAwB,CAAC,GACzC,IAAI,CAaN;AAED,eAAO,MAAM,yCAAyC,EAAE,sBAEvD,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { drawWgpuFilterPass } from '@flighthq/filters-wgpu';
|
|
2
|
-
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
|
-
// Brightness/contrast: shift then scale about mid-grey.
|
|
4
|
-
export function applyBrightnessContrastEffectToWgpu(state, source, dest, effect) {
|
|
5
|
-
const brightness = effect.brightness ?? 0;
|
|
6
|
-
const contrast = effect.contrast ?? 1;
|
|
7
|
-
const pipeline = getWgpuEffectPipeline(state, 'colorGrade.brightnessContrast', BRIGHTNESS_CONTRAST_FRAGMENT_WGSL, 'replace');
|
|
8
|
-
drawWgpuFilterPass(state, source, dest, pipeline, (f32) => {
|
|
9
|
-
f32[0] = brightness;
|
|
10
|
-
f32[1] = contrast;
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
export const defaultWgpuBrightnessContrastEffectRunner = (ctx, effect) => {
|
|
14
|
-
applyBrightnessContrastEffectToWgpu(ctx.state, ctx.source, ctx.dest, effect);
|
|
15
|
-
};
|
|
16
|
-
// Slot layout: [0]=brightness, [1]=contrast.
|
|
17
|
-
const BRIGHTNESS_CONTRAST_FRAGMENT_WGSL = /* wgsl */ `
|
|
18
|
-
struct Uniforms { u_brightness : f32, u_contrast : f32, _pad0 : f32, _pad1 : f32, }
|
|
19
|
-
@group(0) @binding(0) var<uniform> uni : Uniforms;
|
|
20
|
-
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
21
|
-
@group(1) @binding(1) var smp : sampler;
|
|
22
|
-
|
|
23
|
-
@fragment
|
|
24
|
-
fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {
|
|
25
|
-
let c = textureSampleLevel(tex, smp, uv, 0.0);
|
|
26
|
-
let rgb = (c.rgb + uni.u_brightness - 0.5) * uni.u_contrast + 0.5;
|
|
27
|
-
return vec4f(clamp(rgb, vec3f(0.0), vec3f(1.0)), c.a);
|
|
28
|
-
}`;
|
|
29
|
-
//# sourceMappingURL=wgpuBrightnessContrastEffect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuBrightnessContrastEffect.js","sourceRoot":"","sources":["../src/wgpuBrightnessContrastEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQ5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,wDAAwD;AACxD,MAAM,UAAU,mCAAmC,CACjD,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAA0C;IAE1C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,qBAAqB,CACpC,KAAK,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,SAAS,CACV,CAAC;IACF,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;QACpB,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,yCAAyC,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC/F,mCAAmC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAkC,CAAC,CAAC;AAC3G,CAAC,CAAC;AAEF,6CAA6C;AAC7C,MAAM,iCAAiC,GAAG,UAAU,CAAC;;;;;;;;;;;EAWnD,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { ChannelMixerEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types';
|
|
2
|
-
export declare function applyChannelMixerEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, effect: Readonly<ChannelMixerEffect>): void;
|
|
3
|
-
export declare const defaultWgpuChannelMixerEffectRunner: WgpuRenderEffectRunner;
|
|
4
|
-
//# sourceMappingURL=wgpuChannelMixerEffect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wgpuChannelMixerEffect.d.ts","sourceRoot":"","sources":["../src/wgpuChannelMixerEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMrH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACnC,IAAI,CAON;AAED,eAAO,MAAM,mCAAmC,EAAE,sBAEjD,CAAC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { drawWgpuFilterPass } from '@flighthq/filters-wgpu';
|
|
2
|
-
import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
|
|
3
|
-
// Channel mixer: apply a 3x4 row-major RGB->RGB matrix plus per-row offset. The matrix is uploaded as
|
|
4
|
-
// three vec4f rows (r/g/b), each 16-byte aligned, so the std140 layout maps a row directly onto a slot.
|
|
5
|
-
export function applyChannelMixerEffectToWgpu(state, source, dest, effect) {
|
|
6
|
-
const matrix = new Float32Array(12);
|
|
7
|
-
for (let i = 0; i < 12; i++)
|
|
8
|
-
matrix[i] = effect.matrix[i] ?? IDENTITY_CHANNEL_MIXER[i];
|
|
9
|
-
const pipeline = getWgpuEffectPipeline(state, 'colorGrade.channelMixer', CHANNEL_MIXER_FRAGMENT_WGSL, 'replace');
|
|
10
|
-
drawWgpuFilterPass(state, source, dest, pipeline, (f32) => {
|
|
11
|
-
for (let i = 0; i < 12; i++)
|
|
12
|
-
f32[i] = matrix[i];
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
export const defaultWgpuChannelMixerEffectRunner = (ctx, effect) => {
|
|
16
|
-
applyChannelMixerEffectToWgpu(ctx.state, ctx.source, ctx.dest, effect);
|
|
17
|
-
};
|
|
18
|
-
const IDENTITY_CHANNEL_MIXER = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0];
|
|
19
|
-
// Slot layout: three vec4f rows, each 16-byte aligned — [0..3]=row r, [4..7]=row g, [8..11]=row b.
|
|
20
|
-
const CHANNEL_MIXER_FRAGMENT_WGSL = /* wgsl */ `
|
|
21
|
-
struct Uniforms { u_row_r : vec4f, u_row_g : vec4f, u_row_b : vec4f, }
|
|
22
|
-
@group(0) @binding(0) var<uniform> uni : Uniforms;
|
|
23
|
-
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
24
|
-
@group(1) @binding(1) var smp : sampler;
|
|
25
|
-
|
|
26
|
-
@fragment
|
|
27
|
-
fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {
|
|
28
|
-
let c = textureSampleLevel(tex, smp, uv, 0.0);
|
|
29
|
-
let r = uni.u_row_r.x * c.r + uni.u_row_r.y * c.g + uni.u_row_r.z * c.b + uni.u_row_r.w;
|
|
30
|
-
let g = uni.u_row_g.x * c.r + uni.u_row_g.y * c.g + uni.u_row_g.z * c.b + uni.u_row_g.w;
|
|
31
|
-
let b = uni.u_row_b.x * c.r + uni.u_row_b.y * c.g + uni.u_row_b.z * c.b + uni.u_row_b.w;
|
|
32
|
-
return vec4f(clamp(vec3f(r, g, b), vec3f(0.0), vec3f(1.0)), c.a);
|
|
33
|
-
}`;
|
|
34
|
-
//# sourceMappingURL=wgpuChannelMixerEffect.js.map
|