@flighthq/effects-gl 0.3.0-next.906.07cea63 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contract.d.ts +3 -2
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +3 -2
- package/dist/contract.js.map +1 -1
- package/dist/enableGlRenderEffectGuards.d.ts +5 -0
- package/dist/enableGlRenderEffectGuards.d.ts.map +1 -0
- package/dist/enableGlRenderEffectGuards.js +43 -0
- package/dist/enableGlRenderEffectGuards.js.map +1 -0
- package/dist/glBevelEffect.d.ts +1 -0
- package/dist/glBevelEffect.d.ts.map +1 -1
- package/dist/glBevelEffect.js +7 -3
- package/dist/glBevelEffect.js.map +1 -1
- package/dist/glBlendEffect.d.ts +2 -0
- package/dist/glBlendEffect.d.ts.map +1 -1
- package/dist/glBlendEffect.js +13 -2
- package/dist/glBlendEffect.js.map +1 -1
- package/dist/glBloomEffect.d.ts +1 -0
- package/dist/glBloomEffect.d.ts.map +1 -1
- package/dist/glBloomEffect.js +4 -0
- package/dist/glBloomEffect.js.map +1 -1
- package/dist/glBlurEffect.d.ts +7 -1
- package/dist/glBlurEffect.d.ts.map +1 -1
- package/dist/glBlurEffect.js +34 -6
- package/dist/glBlurEffect.js.map +1 -1
- package/dist/glBokehDepthOfFieldEffect.d.ts +1 -0
- package/dist/glBokehDepthOfFieldEffect.d.ts.map +1 -1
- package/dist/glBokehDepthOfFieldEffect.js +4 -0
- package/dist/glBokehDepthOfFieldEffect.js.map +1 -1
- package/dist/glCameraMotionBlurEffect.d.ts +1 -0
- package/dist/glCameraMotionBlurEffect.d.ts.map +1 -1
- package/dist/glCameraMotionBlurEffect.js +4 -0
- package/dist/glCameraMotionBlurEffect.js.map +1 -1
- package/dist/glChromaticAberrationEffect.d.ts +1 -0
- package/dist/glChromaticAberrationEffect.d.ts.map +1 -1
- package/dist/glChromaticAberrationEffect.js +4 -0
- package/dist/glChromaticAberrationEffect.js.map +1 -1
- package/dist/glCompositeEffect.d.ts +1 -0
- package/dist/glCompositeEffect.d.ts.map +1 -1
- package/dist/glCompositeEffect.js +4 -0
- package/dist/glCompositeEffect.js.map +1 -1
- package/dist/glContactShadowsEffect.d.ts +5 -0
- package/dist/glContactShadowsEffect.d.ts.map +1 -0
- package/dist/glContactShadowsEffect.js +20 -0
- package/dist/glContactShadowsEffect.js.map +1 -0
- package/dist/glConvolutionEffect.d.ts +1 -0
- package/dist/glConvolutionEffect.d.ts.map +1 -1
- package/dist/glConvolutionEffect.js +4 -0
- package/dist/glConvolutionEffect.js.map +1 -1
- package/dist/glCrtEffect.d.ts +1 -0
- package/dist/glCrtEffect.d.ts.map +1 -1
- package/dist/glCrtEffect.js +4 -0
- package/dist/glCrtEffect.js.map +1 -1
- package/dist/glCustomShaderEffect.d.ts +1 -0
- package/dist/glCustomShaderEffect.d.ts.map +1 -1
- package/dist/glCustomShaderEffect.js +4 -0
- package/dist/glCustomShaderEffect.js.map +1 -1
- package/dist/glDirectionalBlurEffect.d.ts +1 -0
- package/dist/glDirectionalBlurEffect.d.ts.map +1 -1
- package/dist/glDirectionalBlurEffect.js +4 -0
- package/dist/glDirectionalBlurEffect.js.map +1 -1
- package/dist/glDisplacementEffect.d.ts +1 -0
- package/dist/glDisplacementEffect.d.ts.map +1 -1
- package/dist/glDisplacementEffect.js +4 -0
- package/dist/glDisplacementEffect.js.map +1 -1
- package/dist/glDitherEffect.d.ts +1 -0
- package/dist/glDitherEffect.d.ts.map +1 -1
- package/dist/glDitherEffect.js +4 -0
- package/dist/glDitherEffect.js.map +1 -1
- package/dist/glDropShadowEffect.d.ts +1 -0
- package/dist/glDropShadowEffect.d.ts.map +1 -1
- package/dist/glDropShadowEffect.js +4 -0
- package/dist/glDropShadowEffect.js.map +1 -1
- package/dist/glEffectBlitShader.js +6 -6
- package/dist/glEffectBlitShader.js.map +1 -1
- package/dist/glEffectBoxBlur.js +2 -2
- package/dist/glEffectBoxBlur.js.map +1 -1
- package/dist/glEffectProgramCache.js +5 -5
- package/dist/glEffectProgramCache.js.map +1 -1
- package/dist/glEffectTintShader.js +4 -4
- package/dist/glEffectTintShader.js.map +1 -1
- package/dist/glFilmGrainEffect.d.ts +1 -0
- package/dist/glFilmGrainEffect.d.ts.map +1 -1
- package/dist/glFilmGrainEffect.js +4 -0
- package/dist/glFilmGrainEffect.js.map +1 -1
- package/dist/glFxaaEffect.d.ts +1 -0
- package/dist/glFxaaEffect.d.ts.map +1 -1
- package/dist/glFxaaEffect.js +4 -0
- package/dist/glFxaaEffect.js.map +1 -1
- package/dist/glGlitchEffect.d.ts +1 -0
- package/dist/glGlitchEffect.d.ts.map +1 -1
- package/dist/glGlitchEffect.js +4 -0
- package/dist/glGlitchEffect.js.map +1 -1
- package/dist/glGodRaysEffect.d.ts +1 -0
- package/dist/glGodRaysEffect.d.ts.map +1 -1
- package/dist/glGodRaysEffect.js +4 -0
- package/dist/glGodRaysEffect.js.map +1 -1
- package/dist/glGradientBevelEffect.d.ts +1 -0
- package/dist/glGradientBevelEffect.d.ts.map +1 -1
- package/dist/glGradientBevelEffect.js +8 -4
- package/dist/glGradientBevelEffect.js.map +1 -1
- package/dist/glGradientGlowEffect.d.ts +1 -0
- package/dist/glGradientGlowEffect.d.ts.map +1 -1
- package/dist/glGradientGlowEffect.js +6 -2
- package/dist/glGradientGlowEffect.js.map +1 -1
- package/dist/glHalftoneEffect.d.ts +1 -0
- package/dist/glHalftoneEffect.d.ts.map +1 -1
- package/dist/glHalftoneEffect.js +4 -0
- package/dist/glHalftoneEffect.js.map +1 -1
- package/dist/glInnerGlowEffect.d.ts +1 -0
- package/dist/glInnerGlowEffect.d.ts.map +1 -1
- package/dist/glInnerGlowEffect.js +6 -2
- package/dist/glInnerGlowEffect.js.map +1 -1
- package/dist/glInnerShadowEffect.d.ts +1 -0
- package/dist/glInnerShadowEffect.d.ts.map +1 -1
- package/dist/glInnerShadowEffect.js +6 -2
- package/dist/glInnerShadowEffect.js.map +1 -1
- package/dist/glKuwaharaEffect.d.ts +1 -0
- package/dist/glKuwaharaEffect.d.ts.map +1 -1
- package/dist/glKuwaharaEffect.js +4 -0
- package/dist/glKuwaharaEffect.js.map +1 -1
- package/dist/glLensDirtEffect.d.ts +1 -0
- package/dist/glLensDirtEffect.d.ts.map +1 -1
- package/dist/glLensDirtEffect.js +4 -0
- package/dist/glLensDirtEffect.js.map +1 -1
- package/dist/glLensDistortionEffect.d.ts +1 -0
- package/dist/glLensDistortionEffect.d.ts.map +1 -1
- package/dist/glLensDistortionEffect.js +4 -0
- package/dist/glLensDistortionEffect.js.map +1 -1
- package/dist/glLensFlareEffect.d.ts +1 -0
- package/dist/glLensFlareEffect.d.ts.map +1 -1
- package/dist/glLensFlareEffect.js +4 -0
- package/dist/glLensFlareEffect.js.map +1 -1
- package/dist/glMedianEffect.d.ts +1 -0
- package/dist/glMedianEffect.d.ts.map +1 -1
- package/dist/glMedianEffect.js +4 -0
- package/dist/glMedianEffect.js.map +1 -1
- package/dist/glMotionBlurEffect.d.ts +1 -0
- package/dist/glMotionBlurEffect.d.ts.map +1 -1
- package/dist/glMotionBlurEffect.js +4 -0
- package/dist/glMotionBlurEffect.js.map +1 -1
- package/dist/glOuterGlowEffect.d.ts +1 -0
- package/dist/glOuterGlowEffect.d.ts.map +1 -1
- package/dist/glOuterGlowEffect.js +4 -0
- package/dist/glOuterGlowEffect.js.map +1 -1
- package/dist/glOutlineEffect.d.ts +1 -0
- package/dist/glOutlineEffect.d.ts.map +1 -1
- package/dist/glOutlineEffect.js +4 -0
- package/dist/glOutlineEffect.js.map +1 -1
- package/dist/glPixelateEffect.d.ts +1 -0
- package/dist/glPixelateEffect.d.ts.map +1 -1
- package/dist/glPixelateEffect.js +4 -0
- package/dist/glPixelateEffect.js.map +1 -1
- package/dist/glPosterizeEffect.d.ts +1 -0
- package/dist/glPosterizeEffect.d.ts.map +1 -1
- package/dist/glPosterizeEffect.js +4 -0
- package/dist/glPosterizeEffect.js.map +1 -1
- package/dist/glRadialBlurEffect.d.ts +1 -0
- package/dist/glRadialBlurEffect.d.ts.map +1 -1
- package/dist/glRadialBlurEffect.js +4 -0
- package/dist/glRadialBlurEffect.js.map +1 -1
- package/dist/glRenderEffectPipeline.d.ts +2 -2
- package/dist/glRenderEffectPipeline.d.ts.map +1 -1
- package/dist/glRenderEffectPipeline.js +14 -7
- package/dist/glRenderEffectPipeline.js.map +1 -1
- package/dist/glRenderEffectRegistry.d.ts.map +1 -1
- package/dist/glRenderEffectRegistry.js +8 -10
- package/dist/glRenderEffectRegistry.js.map +1 -1
- package/dist/glRenderTextureEffect.d.ts +5 -0
- package/dist/glRenderTextureEffect.d.ts.map +1 -0
- package/dist/glRenderTextureEffect.js +83 -0
- package/dist/glRenderTextureEffect.js.map +1 -0
- package/dist/glScanlinesEffect.d.ts +1 -0
- package/dist/glScanlinesEffect.d.ts.map +1 -1
- package/dist/glScanlinesEffect.js +4 -0
- package/dist/glScanlinesEffect.js.map +1 -1
- package/dist/glScreenSpaceFogEffect.d.ts +1 -0
- package/dist/glScreenSpaceFogEffect.d.ts.map +1 -1
- package/dist/glScreenSpaceFogEffect.js +4 -0
- package/dist/glScreenSpaceFogEffect.js.map +1 -1
- package/dist/glSharpenEffect.d.ts +1 -0
- package/dist/glSharpenEffect.d.ts.map +1 -1
- package/dist/glSharpenEffect.js +4 -0
- package/dist/glSharpenEffect.js.map +1 -1
- package/dist/glSketchEffect.d.ts +1 -0
- package/dist/glSketchEffect.d.ts.map +1 -1
- package/dist/glSketchEffect.js +4 -0
- package/dist/glSketchEffect.js.map +1 -1
- package/dist/glSmaaEffect.d.ts +1 -0
- package/dist/glSmaaEffect.d.ts.map +1 -1
- package/dist/glSmaaEffect.js +4 -0
- package/dist/glSmaaEffect.js.map +1 -1
- package/dist/glSsaoEffect.d.ts +1 -0
- package/dist/glSsaoEffect.d.ts.map +1 -1
- package/dist/glSsaoEffect.js +4 -0
- package/dist/glSsaoEffect.js.map +1 -1
- package/dist/glTiltShiftEffect.d.ts +1 -0
- package/dist/glTiltShiftEffect.d.ts.map +1 -1
- package/dist/glTiltShiftEffect.js +4 -0
- package/dist/glTiltShiftEffect.js.map +1 -1
- package/dist/glToneMapEffect.d.ts +1 -0
- package/dist/glToneMapEffect.d.ts.map +1 -1
- package/dist/glToneMapEffect.js +4 -0
- package/dist/glToneMapEffect.js.map +1 -1
- package/dist/glVignetteEffect.d.ts +1 -0
- package/dist/glVignetteEffect.d.ts.map +1 -1
- package/dist/glVignetteEffect.js +4 -0
- package/dist/glVignetteEffect.js.map +1 -1
- package/dist/glWhiteBalanceEffect.d.ts +1 -0
- package/dist/glWhiteBalanceEffect.d.ts.map +1 -1
- package/dist/glWhiteBalanceEffect.js +4 -0
- package/dist/glWhiteBalanceEffect.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +9 -6
- package/src/enableGlRenderEffectGuards.test.ts +156 -0
- package/src/glBevelEffect.test.ts +7 -1
- package/src/glBlendEffect.test.ts +26 -0
- package/src/glBloomEffect.test.ts +7 -1
- package/src/glBlurEffect.test.ts +69 -1
- package/src/glBokehDepthOfFieldEffect.test.ts +11 -1
- package/src/glCameraMotionBlurEffect.test.ts +11 -1
- package/src/glChromaticAberrationEffect.test.ts +7 -0
- package/src/glCompositeEffect.test.ts +7 -0
- package/src/glContactShadowsEffect.test.ts +43 -0
- package/src/glConvolutionEffect.test.ts +11 -1
- package/src/glCrtEffect.test.ts +7 -1
- package/src/glCustomShaderEffect.test.ts +7 -0
- package/src/glDirectionalBlurEffect.test.ts +11 -1
- package/src/glDisplacementEffect.test.ts +11 -1
- package/src/glDitherEffect.test.ts +7 -1
- package/src/glDropShadowEffect.test.ts +11 -9
- package/src/glEffectBoxBlur.test.ts +0 -5
- package/src/glFilmGrainEffect.test.ts +11 -1
- package/src/glFxaaEffect.test.ts +7 -1
- package/src/glGlitchEffect.test.ts +7 -1
- package/src/glGodRaysEffect.test.ts +7 -1
- package/src/glGradientBevelEffect.test.ts +11 -1
- package/src/glGradientGlowEffect.test.ts +11 -1
- package/src/glHalftoneEffect.test.ts +7 -1
- package/src/glInnerGlowEffect.test.ts +11 -9
- package/src/glInnerShadowEffect.test.ts +11 -9
- package/src/glKuwaharaEffect.test.ts +7 -1
- package/src/glLensDirtEffect.test.ts +7 -1
- package/src/glLensDistortionEffect.test.ts +11 -1
- package/src/glLensFlareEffect.test.ts +11 -1
- package/src/glMedianEffect.test.ts +7 -1
- package/src/glMotionBlurEffect.test.ts +11 -1
- package/src/glOuterGlowEffect.test.ts +11 -9
- package/src/glOutlineEffect.test.ts +7 -1
- package/src/glPixelateEffect.test.ts +7 -1
- package/src/glPosterizeEffect.test.ts +11 -1
- package/src/glRadialBlurEffect.test.ts +11 -1
- package/src/glRenderEffectPipeline.test.ts +15 -0
- package/src/glRenderEffectRegistry.test.ts +24 -14
- package/src/glRenderTextureEffect.test.ts +246 -0
- package/src/glScanlinesEffect.test.ts +11 -1
- package/src/glScreenSpaceFogEffect.test.ts +11 -1
- package/src/glSharpenEffect.test.ts +7 -1
- package/src/glSketchEffect.test.ts +7 -1
- package/src/glSmaaEffect.test.ts +7 -1
- package/src/glSpatialEffectRegistration.test.ts +64 -0
- package/src/glSsaoEffect.test.ts +7 -1
- package/src/glTiltShiftEffect.test.ts +11 -1
- package/src/glToneMapEffect.test.ts +7 -1
- package/src/glVignetteEffect.test.ts +7 -1
- package/src/glWhiteBalanceEffect.test.ts +11 -1
- package/dist/glSsrEffect.d.ts +0 -4
- package/dist/glSsrEffect.d.ts.map +0 -1
- package/dist/glSsrEffect.js +0 -24
- package/dist/glSsrEffect.js.map +0 -1
- package/dist/glTaaEffect.d.ts +0 -4
- package/dist/glTaaEffect.d.ts.map +0 -1
- package/dist/glTaaEffect.js +0 -22
- package/dist/glTaaEffect.js.map +0 -1
- package/src/glSsrEffect.test.ts +0 -13
- package/src/glTaaEffect.test.ts +0 -13
package/dist/contract.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
export * from './enableGlRenderEffectGuards';
|
|
1
2
|
export * from './glColorMatrixPass';
|
|
2
3
|
export * from './glBevelEffect';
|
|
3
4
|
export * from './glBlendEffect';
|
|
4
5
|
export * from './glCompositeEffect';
|
|
6
|
+
export * from './glContactShadowsEffect';
|
|
5
7
|
export * from './glBloomEffect';
|
|
6
8
|
export * from './glBlurEffect';
|
|
7
9
|
export * from './glBokehDepthOfFieldEffect';
|
|
@@ -41,14 +43,13 @@ export * from './glPosterizeEffect';
|
|
|
41
43
|
export * from './glRadialBlurEffect';
|
|
42
44
|
export * from './glRenderEffectPipeline';
|
|
43
45
|
export * from './glRenderEffectRegistry';
|
|
46
|
+
export * from './glRenderTextureEffect';
|
|
44
47
|
export * from './glScanlinesEffect';
|
|
45
48
|
export * from './glScreenSpaceFogEffect';
|
|
46
49
|
export * from './glSharpenEffect';
|
|
47
50
|
export * from './glSketchEffect';
|
|
48
51
|
export * from './glSmaaEffect';
|
|
49
52
|
export * from './glSsaoEffect';
|
|
50
|
-
export * from './glSsrEffect';
|
|
51
|
-
export * from './glTaaEffect';
|
|
52
53
|
export * from './glTiltShiftEffect';
|
|
53
54
|
export * from './glToneMapEffect';
|
|
54
55
|
export * from './glVignetteEffect';
|
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
|
package/dist/contract.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
export * from './enableGlRenderEffectGuards';
|
|
1
2
|
export * from './glColorMatrixPass';
|
|
2
3
|
export * from './glBevelEffect';
|
|
3
4
|
export * from './glBlendEffect';
|
|
4
5
|
export * from './glCompositeEffect';
|
|
6
|
+
export * from './glContactShadowsEffect';
|
|
5
7
|
export * from './glBloomEffect';
|
|
6
8
|
export * from './glBlurEffect';
|
|
7
9
|
export * from './glBokehDepthOfFieldEffect';
|
|
@@ -41,14 +43,13 @@ export * from './glPosterizeEffect';
|
|
|
41
43
|
export * from './glRadialBlurEffect';
|
|
42
44
|
export * from './glRenderEffectPipeline';
|
|
43
45
|
export * from './glRenderEffectRegistry';
|
|
46
|
+
export * from './glRenderTextureEffect';
|
|
44
47
|
export * from './glScanlinesEffect';
|
|
45
48
|
export * from './glScreenSpaceFogEffect';
|
|
46
49
|
export * from './glSharpenEffect';
|
|
47
50
|
export * from './glSketchEffect';
|
|
48
51
|
export * from './glSmaaEffect';
|
|
49
52
|
export * from './glSsaoEffect';
|
|
50
|
-
export * from './glSsrEffect';
|
|
51
|
-
export * from './glTaaEffect';
|
|
52
53
|
export * from './glTiltShiftEffect';
|
|
53
54
|
export * from './glToneMapEffect';
|
|
54
55
|
export * from './glVignetteEffect';
|
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { GlRenderState } from '@flighthq/types/contract';
|
|
2
|
+
export declare function areGlRenderEffectGuardsEnabled(state: GlRenderState): boolean;
|
|
3
|
+
export declare function disableGlRenderEffectGuards(state: GlRenderState): void;
|
|
4
|
+
export declare function enableGlRenderEffectGuards(state: GlRenderState): void;
|
|
5
|
+
//# sourceMappingURL=enableGlRenderEffectGuards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableGlRenderEffectGuards.d.ts","sourceRoot":"","sources":["../src/enableGlRenderEffectGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAwC,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAKpG,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAE5E;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAGtE;AAMD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAGrE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { logOnce } from '@flighthq/log/contract';
|
|
2
|
+
import { LogLevel } from '@flighthq/types/contract';
|
|
3
|
+
import { setGlRenderEffectApplicationGuard } from './glRenderTextureEffect';
|
|
4
|
+
export function areGlRenderEffectGuardsEnabled(state) {
|
|
5
|
+
return _guardedStates.has(state);
|
|
6
|
+
}
|
|
7
|
+
export function disableGlRenderEffectGuards(state) {
|
|
8
|
+
setGlRenderEffectApplicationGuard(state, null);
|
|
9
|
+
_guardedStates.delete(state);
|
|
10
|
+
}
|
|
11
|
+
// Installs diagnostics for the effect-chain sentinels that are indistinguishable from working code:
|
|
12
|
+
// an unregistered chain returns false having never written `dest`, so a sprite sampling that texture
|
|
13
|
+
// shows whatever was last in it, and a partially registered chain succeeds while silently dropping
|
|
14
|
+
// the effects it could not run. Both are correct by contract and neither surfaces anywhere.
|
|
15
|
+
export function enableGlRenderEffectGuards(state) {
|
|
16
|
+
setGlRenderEffectApplicationGuard(state, warnGlRenderEffectApplication);
|
|
17
|
+
_guardedStates.add(state);
|
|
18
|
+
}
|
|
19
|
+
function getGlRenderEffectApplicationMessage(explanation) {
|
|
20
|
+
switch (explanation.status) {
|
|
21
|
+
case 'partial-registration':
|
|
22
|
+
return `applyGlRenderEffectsToRenderTexture: ${explanation.unregisteredKinds.length} of ${explanation.requestedCount} effect kinds have no registered runner and were SKIPPED — the destination was written without them; call registerGlRenderEffect(state, kind, runner) for ${explanation.unregisteredKinds.join(', ')}`;
|
|
23
|
+
case 'source-unavailable':
|
|
24
|
+
return 'applyGlRenderEffectsToRenderTexture: the source render Texture has no realized GL target, so the call returned false and the destination was NOT written — render into the source before applying effects';
|
|
25
|
+
case 'stale-destination':
|
|
26
|
+
return 'applyGlRenderEffectsToRenderTexture: the call returned false before replacing the destination, so its previously published pixels are a STALE DESTINATION — handle the false return before sampling dest, and make the source and runners available before retrying';
|
|
27
|
+
default:
|
|
28
|
+
return `applyGlRenderEffectsToRenderTexture: no registered runner for any of ${explanation.unregisteredKinds.join(', ')}, so the call returned false and the destination was NEVER WRITTEN — anything sampling it reads a stale or empty texture; call registerGlRenderEffect(state, kind, runner)`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function warnGlRenderEffectApplication(_state, explanation) {
|
|
32
|
+
// Keyed by status plus the kinds involved: a chain missing a different effect is a different
|
|
33
|
+
// observation worth reporting, while the same miss every frame is not.
|
|
34
|
+
logOnce(`effects-gl:effect-application:${explanation.status}:${explanation.unregisteredKinds.join(',')}`, LogLevel.Warn, {
|
|
35
|
+
message: getGlRenderEffectApplicationMessage(explanation),
|
|
36
|
+
registeredCount: explanation.registeredCount,
|
|
37
|
+
requestedCount: explanation.requestedCount,
|
|
38
|
+
status: explanation.status,
|
|
39
|
+
unregisteredKinds: explanation.unregisteredKinds,
|
|
40
|
+
}, 'effects-gl');
|
|
41
|
+
}
|
|
42
|
+
const _guardedStates = new WeakSet();
|
|
43
|
+
//# sourceMappingURL=enableGlRenderEffectGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableGlRenderEffectGuards.js","sourceRoot":"","sources":["../src/enableGlRenderEffectGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,iCAAiC,EAAE,MAAM,yBAAyB,CAAC;AAE5E,MAAM,UAAU,8BAA8B,CAAC,KAAoB;IACjE,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAoB;IAC9D,iCAAiC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/C,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,oGAAoG;AACpG,qGAAqG;AACrG,mGAAmG;AACnG,4FAA4F;AAC5F,MAAM,UAAU,0BAA0B,CAAC,KAAoB;IAC7D,iCAAiC,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;IACxE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,mCAAmC,CAAC,WAA2D;IACtG,QAAQ,WAAW,CAAC,MAAM,EAAE,CAAC;QAC3B,KAAK,sBAAsB;YACzB,OAAO,wCAAwC,WAAW,CAAC,iBAAiB,CAAC,MAAM,OAAO,WAAW,CAAC,cAAc,6JAA6J,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9T,KAAK,oBAAoB;YACvB,OAAO,2MAA2M,CAAC;QACrN,KAAK,mBAAmB;YACtB,OAAO,qQAAqQ,CAAC;QAC/Q;YACE,OAAO,wEAAwE,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,4KAA4K,CAAC;IACxS,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CACpC,MAAqB,EACrB,WAA2D;IAE3D,6FAA6F;IAC7F,uEAAuE;IACvE,OAAO,CACL,iCAAiC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAChG,QAAQ,CAAC,IAAI,EACb;QACE,OAAO,EAAE,mCAAmC,CAAC,WAAW,CAAC;QACzD,eAAe,EAAE,WAAW,CAAC,eAAe;QAC5C,cAAc,EAAE,WAAW,CAAC,cAAc;QAC1C,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;KACjD,EACD,YAAY,CACb,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,OAAO,EAAiB,CAAC"}
|
package/dist/glBevelEffect.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BevelEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget, GlRenderTargetPool } from '@flighthq/types/contract';
|
|
2
2
|
export declare function applyBevelEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, pool: GlRenderTargetPool, effect: Readonly<BevelEffect>): void;
|
|
3
3
|
export declare const defaultGlBevelEffectRunner: GlRenderEffectRunner;
|
|
4
|
+
export declare function registerGlBevelEffect(state: GlRenderState): void;
|
|
4
5
|
//# sourceMappingURL=glBevelEffect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glBevelEffect.d.ts","sourceRoot":"","sources":["../src/glBevelEffect.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,WAAW,EAEX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"glBevelEffect.d.ts","sourceRoot":"","sources":["../src/glBevelEffect.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,WAAW,EAEX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAsBlC,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAsDN;AAED,eAAO,MAAM,0BAA0B,EAAE,oBAExC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEhE"}
|
package/dist/glBevelEffect.js
CHANGED
|
@@ -2,6 +2,7 @@ import { acquireGlRenderTarget, clearGlRenderTarget, compileGlFullscreenProgram,
|
|
|
2
2
|
import { applyGlEffectBlitPass, applyGlEffectErasePass } from './glEffectBlitShader';
|
|
3
3
|
import { applyGlEffectBoxBlur } from './glEffectBoxBlur';
|
|
4
4
|
import { applyGlEffectTintPass } from './glEffectTintShader';
|
|
5
|
+
import { registerGlRenderEffect } from './glRenderEffectRegistry';
|
|
5
6
|
// Bevel composite effect: the directional gradient of the blurred silhouette drives a highlight/shadow edge band, clipped by bevelType and composited over the source.
|
|
6
7
|
// Full-frame realization: acquires the recipe's three scratch targets from the effect pool, runs the
|
|
7
8
|
// inlined multi-pass recipe, then releases them.
|
|
@@ -11,7 +12,7 @@ import { applyGlEffectTintPass } from './glEffectTintShader';
|
|
|
11
12
|
// `L = (cos angle, sin angle) · distance`. A positive gradient (the edge facing
|
|
12
13
|
// the light) draws the highlight color; a negative gradient draws the shadow
|
|
13
14
|
// color; `|gradient| · strength` is the band's alpha. The resulting tinted mask
|
|
14
|
-
// is composited over the source — matching `
|
|
15
|
+
// is composited over the source — matching `bevelBitmap` (the CPU reference).
|
|
15
16
|
//
|
|
16
17
|
// `bevelType` clips the mask:
|
|
17
18
|
// - `'inner'` (default): keep the band inside the shape (× source alpha)
|
|
@@ -69,6 +70,9 @@ export function applyBevelEffectToGl(state, source, dest, pool, effect) {
|
|
|
69
70
|
export const defaultGlBevelEffectRunner = (ctx, effect) => {
|
|
70
71
|
applyBevelEffectToGl(ctx.state, ctx.source, ctx.dest, ctx.pool, effect);
|
|
71
72
|
};
|
|
73
|
+
export function registerGlBevelEffect(state) {
|
|
74
|
+
registerGlRenderEffect(state, 'BevelEffect', defaultGlBevelEffectRunner);
|
|
75
|
+
}
|
|
72
76
|
// Reads the blurred alpha field (unit 0) and source (unit 1); writes the tinted, clipped bevel mask,
|
|
73
77
|
// premultiplied, blended over `dest` (which already holds the source when sourceMode is 'draw').
|
|
74
78
|
const BEVEL_COMPOSITE_FRAGMENT_SRC = `#version 300 es
|
|
@@ -115,7 +119,7 @@ function applyGlBevelCompositePass(state, field, source, dest, params) {
|
|
|
115
119
|
});
|
|
116
120
|
}
|
|
117
121
|
function getGlBevelCompositeShader(state) {
|
|
118
|
-
let loc = bevelCompositeShaders.get(state);
|
|
122
|
+
let loc = bevelCompositeShaders.get(state.gl);
|
|
119
123
|
if (loc === undefined) {
|
|
120
124
|
const gl = state.gl;
|
|
121
125
|
const base = compileGlFullscreenProgram(gl, BEVEL_COMPOSITE_FRAGMENT_SRC);
|
|
@@ -127,7 +131,7 @@ function getGlBevelCompositeShader(state) {
|
|
|
127
131
|
locIntensity: gl.getUniformLocation(base.program, 'u_intensity'),
|
|
128
132
|
locClipMode: gl.getUniformLocation(base.program, 'u_clipMode'),
|
|
129
133
|
};
|
|
130
|
-
bevelCompositeShaders.set(state, loc);
|
|
134
|
+
bevelCompositeShaders.set(state.gl, loc);
|
|
131
135
|
}
|
|
132
136
|
return loc;
|
|
133
137
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glBevelEffect.js","sourceRoot":"","sources":["../src/glBevelEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AAUtC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"glBevelEffect.js","sourceRoot":"","sources":["../src/glBevelEffect.ts"],"names":[],"mappings":"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"}
|
package/dist/glBlendEffect.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export declare function applyBlendEffectToGl(state: GlRenderState, source: Reado
|
|
|
3
3
|
export declare const defaultGlBlendEffectRunner: GlRenderEffectRunner;
|
|
4
4
|
export declare function getBlendEffectModeIndex(mode: AdvancedBlendMode): number;
|
|
5
5
|
export declare function getGlBlendEffectBackdrop(state: GlRenderState, backdropKey: string | null): WebGLTexture | null;
|
|
6
|
+
export declare function registerGlBlendEffect(state: GlRenderState): void;
|
|
6
7
|
export declare function registerGlBlendEffectBackdrop(state: GlRenderState, backdropKey: string, texture: WebGLTexture): void;
|
|
7
8
|
export declare function unregisterGlBlendEffectBackdrop(state: GlRenderState, backdropKey: string): boolean;
|
|
9
|
+
export declare const BLEND_FRAGMENT_SRC = "#version 300 es\nprecision highp float;\nin vec2 v_texCoord;\nuniform sampler2D u_texture0;\nuniform sampler2D u_texture1;\nuniform int u_mode;\nuniform float u_opacity;\nuniform int u_hasBackdrop;\nout vec4 o_color;\n\nfloat lum(vec3 c) { return 0.3 * c.r + 0.59 * c.g + 0.11 * c.b; }\nfloat sat(vec3 c) { return max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b); }\n\nvec3 clipColor(vec3 c) {\n float l = lum(c);\n float mn = min(min(c.r, c.g), c.b);\n float mx = max(max(c.r, c.g), c.b);\n if (mn < 0.0) c = l + (c - l) * l / (l - mn);\n if (mx > 1.0) c = l + (c - l) * (1.0 - l) / (mx - l);\n return c;\n}\nvec3 setLum(vec3 c, float l) { return clipColor(c + (l - lum(c))); }\n\nvec3 setSat(vec3 c, float s) {\n // Resolve min/mid/max channels, rescale mid+max to s, pin min to 0. Branchy but only three channels.\n float mn = min(min(c.r, c.g), c.b);\n float mx = max(max(c.r, c.g), c.b);\n float md = (c.r + c.g + c.b) - mn - mx;\n vec3 o;\n float rmid = (mx > mn) ? (md - mn) * s / (mx - mn) : 0.0;\n float rmax = (mx > mn) ? s : 0.0;\n o.r = (c.r == mx) ? rmax : ((c.r == mn) ? 0.0 : rmid);\n o.g = (c.g == mx) ? rmax : ((c.g == mn) ? 0.0 : rmid);\n o.b = (c.b == mx) ? rmax : ((c.b == mn) ? 0.0 : rmid);\n return o;\n}\n\nfloat sepChannel(int mode, float cb, float cs) {\n if (mode == 0) return cb <= 0.5 ? 2.0 * cb * cs : 1.0 - 2.0 * (1.0 - cb) * (1.0 - cs); // Overlay\n if (mode == 1) return cs <= 0.5 ? 2.0 * cb * cs : 1.0 - 2.0 * (1.0 - cb) * (1.0 - cs); // HardLight\n if (mode == 2) { // SoftLight\n float d = cb <= 0.25 ? ((16.0 * cb - 12.0) * cb + 4.0) * cb : sqrt(cb);\n return cs <= 0.5 ? cb - (1.0 - 2.0 * cs) * cb * (1.0 - cb) : cb + (2.0 * cs - 1.0) * (d - cb);\n }\n if (mode == 3) return abs(cb - cs); // Difference\n if (mode == 4) return cb + cs - 2.0 * cb * cs; // Exclusion\n if (mode == 5) return cb <= 0.0 ? 0.0 : (cs >= 1.0 ? 1.0 : min(1.0, cb / (1.0 - cs))); // ColorDodge\n if (mode == 6) return cb >= 1.0 ? 1.0 : (cs <= 0.0 ? 0.0 : 1.0 - min(1.0, (1.0 - cb) / cs)); // ColorBurn\n if (mode == 11) return min(cb, cs); // Darken\n if (mode == 12) return max(cb, cs); // Lighten\n return cs; // Normal\n}\n\nvec3 blendRgb(int mode, vec3 cb, vec3 cs) {\n if (mode == 7) return setLum(setSat(cs, sat(cb)), lum(cb)); // Hue\n if (mode == 8) return setLum(setSat(cb, sat(cs)), lum(cb)); // Saturation\n if (mode == 9) return setLum(cs, lum(cb)); // Color\n if (mode == 10) return setLum(cb, lum(cs)); // Luminosity\n return vec3(sepChannel(mode, cb.r, cs.r), sepChannel(mode, cb.g, cs.g), sepChannel(mode, cb.b, cs.b));\n}\n\nvoid main() {\n vec4 layer = texture(u_texture0, v_texCoord);\n // No backdrop registered: the blend has nothing to read, so pass the layer through unchanged.\n if (u_hasBackdrop == 0) { o_color = layer; return; }\n vec4 back = texture(u_texture1, v_texCoord);\n\n // Un-premultiply to straight RGB for the blend math.\n vec3 cs = layer.a > 0.0 ? layer.rgb / layer.a : vec3(0.0);\n vec3 cb = back.a > 0.0 ? back.rgb / back.a : vec3(0.0);\n float as = layer.a * u_opacity;\n float ab = back.a;\n\n // W3C blend mixing: the blended color contributes only where the backdrop is opaque; elsewhere the\n // straight source shows through. cs' = (1 - ab) * cs + ab * B(cb, cs).\n vec3 blended = blendRgb(u_mode, cb, cs);\n vec3 mixed = (1.0 - ab) * cs + ab * blended;\n\n // Porter-Duff source-over of the (mixed) layer onto the backdrop, output premultiplied.\n float outA = as + ab * (1.0 - as);\n vec3 outRgb = mixed * as + cb * ab * (1.0 - as);\n o_color = vec4(outRgb, outA);\n}";
|
|
8
10
|
//# sourceMappingURL=glBlendEffect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glBlendEffect.d.ts","sourceRoot":"","sources":["../src/glBlendEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"glBlendEffect.d.ts","sourceRoot":"","sources":["../src/glBlendEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAgBlC,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAkBN;AAED,eAAO,MAAM,0BAA0B,EAAE,oBAExC,CAAC;AAIF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAEvE;AAID,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,CAG9G;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEhE;AAKD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAOpH;AAID,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAElG;AA+BD,eAAO,MAAM,kBAAkB,m7HAkF7B,CAAC"}
|
package/dist/glBlendEffect.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { drawGlFullscreenPass } from '@flighthq/render-gl/contract';
|
|
2
2
|
import { AdvancedBlendMode as AdvancedBlendModeValues } from '@flighthq/types/contract';
|
|
3
3
|
import { getGlEffectProgram, getGlEffectUniformLocation } from './glEffectProgramCache';
|
|
4
|
+
import { registerGlRenderEffect } from './glRenderEffectRegistry';
|
|
4
5
|
// Advanced-blend composite pass: sample the incoming layer (`u_texture0`, the effect's `source`) and a
|
|
5
6
|
// registered backdrop (`u_texture1`), compute the destination-reading / non-separable blend named by the
|
|
6
7
|
// effect's `mode`, composite the blended color over the backdrop (Porter-Duff source-over), and write to
|
|
@@ -47,6 +48,9 @@ export function getGlBlendEffectBackdrop(state, backdropKey) {
|
|
|
47
48
|
return null;
|
|
48
49
|
return _backdrops.get(state)?.get(backdropKey) ?? null;
|
|
49
50
|
}
|
|
51
|
+
export function registerGlBlendEffect(state) {
|
|
52
|
+
registerGlRenderEffect(state, 'BlendEffect', defaultGlBlendEffectRunner);
|
|
53
|
+
}
|
|
50
54
|
// Registers a backdrop texture under `backdropKey` for this state, so a BlendEffect naming that key
|
|
51
55
|
// blends its layer over the texture. Last write wins. Pass a texture produced by the caller (e.g. a
|
|
52
56
|
// prior render target's `.texture`); the registry holds the handle only and never owns/frees it.
|
|
@@ -64,7 +68,8 @@ export function unregisterGlBlendEffectBackdrop(state, backdropKey) {
|
|
|
64
68
|
return _backdrops.get(state)?.delete(backdropKey) ?? false;
|
|
65
69
|
}
|
|
66
70
|
// AdvancedBlendMode → shader branch index. Alphabetical by value; kept in lockstep with the switch in
|
|
67
|
-
// BLEND_FRAGMENT_SRC. The four HSL modes (Color/Hue/Luminosity/Saturation) take indices 7..10
|
|
71
|
+
// BLEND_FRAGMENT_SRC. The four HSL modes (Color/Hue/Luminosity/Saturation) take indices 7..10, and the
|
|
72
|
+
// faithful Darken/Lighten 11..12 (the coverage-correct twins of the fixed-function BlendMode pair).
|
|
68
73
|
const BLEND_MODE_INDEX = {
|
|
69
74
|
[AdvancedBlendModeValues.Overlay]: 0,
|
|
70
75
|
[AdvancedBlendModeValues.HardLight]: 1,
|
|
@@ -77,6 +82,8 @@ const BLEND_MODE_INDEX = {
|
|
|
77
82
|
[AdvancedBlendModeValues.Saturation]: 8,
|
|
78
83
|
[AdvancedBlendModeValues.Color]: 9,
|
|
79
84
|
[AdvancedBlendModeValues.Luminosity]: 10,
|
|
85
|
+
[AdvancedBlendModeValues.Darken]: 11,
|
|
86
|
+
[AdvancedBlendModeValues.Lighten]: 12,
|
|
80
87
|
};
|
|
81
88
|
// Per-state backdrop registry. Off the render-state runtime type, freed with the state. Holds texture
|
|
82
89
|
// handles only — never owns or frees them.
|
|
@@ -85,7 +92,9 @@ const _backdrops = new WeakMap();
|
|
|
85
92
|
// un-premultiplied to straight RGB for the blend math, blended via the mode's B(cb, cs), then the blended
|
|
86
93
|
// color is composited over the backdrop with W3C mixing (cs' = (1 - ab)*cs + ab*B) and Porter-Duff
|
|
87
94
|
// source-over, re-premultiplied on output. The separable/HSL formulas mirror effects/blendModeMath.ts.
|
|
88
|
-
|
|
95
|
+
// Exported so the lockstep test can pin the branch switch against the index table above; the two are
|
|
96
|
+
// hand-maintained and a mode with an index but no branch silently renders Normal passthrough.
|
|
97
|
+
export const BLEND_FRAGMENT_SRC = `#version 300 es
|
|
89
98
|
precision highp float;
|
|
90
99
|
in vec2 v_texCoord;
|
|
91
100
|
uniform sampler2D u_texture0;
|
|
@@ -133,6 +142,8 @@ float sepChannel(int mode, float cb, float cs) {
|
|
|
133
142
|
if (mode == 4) return cb + cs - 2.0 * cb * cs; // Exclusion
|
|
134
143
|
if (mode == 5) return cb <= 0.0 ? 0.0 : (cs >= 1.0 ? 1.0 : min(1.0, cb / (1.0 - cs))); // ColorDodge
|
|
135
144
|
if (mode == 6) return cb >= 1.0 ? 1.0 : (cs <= 0.0 ? 0.0 : 1.0 - min(1.0, (1.0 - cb) / cs)); // ColorBurn
|
|
145
|
+
if (mode == 11) return min(cb, cs); // Darken
|
|
146
|
+
if (mode == 12) return max(cb, cs); // Lighten
|
|
136
147
|
return cs; // Normal
|
|
137
148
|
}
|
|
138
149
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glBlendEffect.js","sourceRoot":"","sources":["../src/glBlendEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAQpE,OAAO,EAAE,iBAAiB,IAAI,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"glBlendEffect.js","sourceRoot":"","sources":["../src/glBlendEffect.ts"],"names":[],"mappings":"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"}
|
package/dist/glBloomEffect.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BloomEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget, GlRenderTargetPool } from '@flighthq/types/contract';
|
|
2
2
|
export declare function applyBloomEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, pool: GlRenderTargetPool, effect: Readonly<BloomEffect>): void;
|
|
3
3
|
export declare const defaultGlBloomEffectRunner: GlRenderEffectRunner;
|
|
4
|
+
export declare function registerGlBloomEffect(state: GlRenderState): void;
|
|
4
5
|
//# sourceMappingURL=glBloomEffect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glBloomEffect.d.ts","sourceRoot":"","sources":["../src/glBloomEffect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"glBloomEffect.d.ts","sourceRoot":"","sources":["../src/glBloomEffect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAyBN;AAED,eAAO,MAAM,0BAA0B,EAAE,oBAExC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEhE"}
|
package/dist/glBloomEffect.js
CHANGED
|
@@ -2,6 +2,7 @@ import { computeBloomBlurRadius, computeBloomIntensity, computeBloomThreshold }
|
|
|
2
2
|
import { acquireGlRenderTarget, drawGlFullscreenPass, releaseGlRenderTarget } from '@flighthq/render-gl/contract';
|
|
3
3
|
import { applyGaussianBlurToGl } from './glBlurEffect';
|
|
4
4
|
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
5
|
+
import { registerGlRenderEffect } from './glRenderEffectRegistry';
|
|
5
6
|
// Bloom: bright-pass → blur the bright branch (via the effects-owned separable gaussian blur) →
|
|
6
7
|
// additively composite back. The multi-pass reference recipe — it acquires intermediate targets from
|
|
7
8
|
// the pool and releases them, branches, and reuses the blur primitive, which is what makes it an effect.
|
|
@@ -29,6 +30,9 @@ export function applyBloomEffectToGl(state, source, dest, pool, effect) {
|
|
|
29
30
|
export const defaultGlBloomEffectRunner = (ctx, effect) => {
|
|
30
31
|
applyBloomEffectToGl(ctx.state, ctx.source, ctx.dest, ctx.pool, effect);
|
|
31
32
|
};
|
|
33
|
+
export function registerGlBloomEffect(state) {
|
|
34
|
+
registerGlRenderEffect(state, 'BloomEffect', defaultGlBloomEffectRunner);
|
|
35
|
+
}
|
|
32
36
|
const BLOOM_BRIGHT_FRAGMENT_SRC = `#version 300 es
|
|
33
37
|
precision highp float;
|
|
34
38
|
in vec2 v_texCoord;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glBloomEffect.js","sourceRoot":"","sources":["../src/glBloomEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AASlH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"glBloomEffect.js","sourceRoot":"","sources":["../src/glBloomEffect.ts"],"names":[],"mappings":"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"}
|
package/dist/glBlurEffect.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import type { BlurEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget } from '@flighthq/types/contract';
|
|
1
|
+
import type { BlurEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget, RenderTexture } from '@flighthq/types/contract';
|
|
2
2
|
export declare function applyBlurEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, temp: Readonly<GlRenderTarget>, effect: Readonly<BlurEffect>): void;
|
|
3
|
+
export declare function applyBlurEffectToGlRenderTextures(state: GlRenderState, source: Readonly<RenderTexture>, dest: RenderTexture, temp: RenderTexture, effect: Readonly<BlurEffect>): boolean;
|
|
3
4
|
export declare function applyGaussianBlurToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, temp: Readonly<GlRenderTarget>, options: Readonly<{
|
|
4
5
|
blurX?: number;
|
|
5
6
|
blurY?: number;
|
|
6
7
|
}>): void;
|
|
8
|
+
export declare function applyGaussianBlurToGlRenderTextures(state: GlRenderState, source: Readonly<RenderTexture>, dest: RenderTexture, temp: RenderTexture, options: Readonly<{
|
|
9
|
+
blurX?: number;
|
|
10
|
+
blurY?: number;
|
|
11
|
+
}>): boolean;
|
|
7
12
|
export declare const defaultGlBlurEffectRunner: GlRenderEffectRunner;
|
|
13
|
+
export declare function registerGlBlurEffect(state: GlRenderState): void;
|
|
8
14
|
//# sourceMappingURL=glBlurEffect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glBlurEffect.d.ts","sourceRoot":"","sources":["../src/glBlurEffect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"glBlurEffect.d.ts","sourceRoot":"","sources":["../src/glBlurEffect.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,aAAa,EACd,MAAM,0BAA0B,CAAC;AAalC,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC3B,IAAI,CAEN;AAID,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC3B,OAAO,CAET;AAMD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,OAAO,EAAE,QAAQ,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACpD,IAAI,CAON;AAKD,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,QAAQ,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACpD,OAAO,CAcT;AAED,eAAO,MAAM,yBAAyB,EAAE,oBAKvC,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE/D"}
|
package/dist/glBlurEffect.js
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
|
-
import { acquireGlRenderTarget, drawGlFullscreenPass, releaseGlRenderTarget } from '@flighthq/render-gl/contract';
|
|
1
|
+
import { acquireGlRenderTarget, drawGlFullscreenPass, getGlRenderTextureTarget, releaseGlRenderTarget, withGlRenderState, writeGlRenderTextureTarget, } from '@flighthq/render-gl/contract';
|
|
2
2
|
import { getGlEffectProgram, getGlEffectUniformLocation } from './glEffectProgramCache';
|
|
3
|
+
import { registerGlRenderEffect } from './glRenderEffectRegistry';
|
|
3
4
|
// Plain separable Gaussian blur: two axis passes (source → temp horizontally, temp → dest vertically),
|
|
4
5
|
// each a single weighted fullscreen pass with radius ⌈3σ⌉. `blurX`/`blurY` are the Gaussian standard
|
|
5
6
|
// deviations (CSS `blur(Xpx)` uses sigma = X), so this matches the CSS and surface Gaussian references.
|
|
6
7
|
// The effects-owned blur primitive — the shared gaussian pass BloomEffect and the plain BlurEffect both
|
|
7
8
|
// use, so the effects backend owns its blur outright rather than delegating to a filters backend.
|
|
8
|
-
// Applies a `BlurEffect` descriptor to `source`,
|
|
9
|
-
//
|
|
9
|
+
// Applies a `BlurEffect` descriptor to `source`, compositing into `dest`. Neither `dest` nor the
|
|
10
|
+
// distinct ping-pong `temp` target is cleared by this entry point.
|
|
10
11
|
export function applyBlurEffectToGl(state, source, dest, temp, effect) {
|
|
11
12
|
applyGaussianBlurToGl(state, source, dest, temp, { blurX: effect.blurX, blurY: effect.blurY });
|
|
12
13
|
}
|
|
13
|
-
//
|
|
14
|
+
// RenderTexture-facing BlurEffect apply. It composites and never clears; clear reused `dest` and
|
|
15
|
+
// `temp` first with `clearGlRenderTexture` when each frame should replace the previous result.
|
|
16
|
+
export function applyBlurEffectToGlRenderTextures(state, source, dest, temp, effect) {
|
|
17
|
+
return applyGaussianBlurToGlRenderTextures(state, source, dest, temp, effect);
|
|
18
|
+
}
|
|
19
|
+
// Applies a faithful separable Gaussian blur to `source`, compositing into `dest`. `blurX`/`blurY` are the
|
|
14
20
|
// Gaussian standard deviations in pixels (default 4). Runs two unconditional separable passes,
|
|
15
|
-
// source → temp (X) then temp → dest (Y);
|
|
16
|
-
//
|
|
21
|
+
// source → temp (X) then temp → dest (Y); neither destination is cleared. `temp` is a ping-pong
|
|
22
|
+
// scratch distinct from both.
|
|
17
23
|
export function applyGaussianBlurToGl(state, source, dest, temp, options) {
|
|
18
24
|
const sigmaX = options.blurX ?? 4;
|
|
19
25
|
const sigmaY = options.blurY ?? 4;
|
|
@@ -22,12 +28,34 @@ export function applyGaussianBlurToGl(state, source, dest, temp, options) {
|
|
|
22
28
|
applyGlGaussianBlurPass(state, source, temp, sigmaX, radiusX, 1, 0);
|
|
23
29
|
applyGlGaussianBlurPass(state, temp, dest, sigmaY, radiusY, 0, 1);
|
|
24
30
|
}
|
|
31
|
+
// RenderTexture-facing target-to-target apply. Both passes composite and never clear; callers reusing
|
|
32
|
+
// `dest` or `temp` across frames must first clear them with `clearGlRenderTexture`. The hidden
|
|
33
|
+
// GlRenderTargets never leave this backend wrapper; success publishes both writes.
|
|
34
|
+
export function applyGaussianBlurToGlRenderTextures(state, source, dest, temp, options) {
|
|
35
|
+
if (source === dest || source === temp || dest === temp) {
|
|
36
|
+
throw new Error('applyGaussianBlurToGlRenderTextures: source, destination, and scratch must be distinct');
|
|
37
|
+
}
|
|
38
|
+
const sourceTarget = getGlRenderTextureTarget(state, source);
|
|
39
|
+
if (sourceTarget === null)
|
|
40
|
+
return false;
|
|
41
|
+
withGlRenderState(state, () => {
|
|
42
|
+
writeGlRenderTextureTarget(state, temp, (tempTarget) => {
|
|
43
|
+
writeGlRenderTextureTarget(state, dest, (destTarget) => {
|
|
44
|
+
applyGaussianBlurToGl(state, sourceTarget, destTarget, tempTarget, options);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
25
50
|
export const defaultGlBlurEffectRunner = (ctx, effect) => {
|
|
26
51
|
const descriptor = { width: ctx.source.width, height: ctx.source.height, format: ctx.source.format };
|
|
27
52
|
const temp = acquireGlRenderTarget(ctx.state, ctx.pool, descriptor);
|
|
28
53
|
applyBlurEffectToGl(ctx.state, ctx.source, ctx.dest, temp, effect);
|
|
29
54
|
releaseGlRenderTarget(ctx.pool, temp);
|
|
30
55
|
};
|
|
56
|
+
export function registerGlBlurEffect(state) {
|
|
57
|
+
registerGlRenderEffect(state, 'BlurEffect', defaultGlBlurEffectRunner);
|
|
58
|
+
}
|
|
31
59
|
function applyGlGaussianBlurPass(state, source, dest, sigma, radius, dirX, dirY) {
|
|
32
60
|
const program = getGlEffectProgram(state, 'blur.gaussian', GAUSSIAN_BLUR_FRAGMENT_SRC);
|
|
33
61
|
drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
|
package/dist/glBlurEffect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glBlurEffect.js","sourceRoot":"","sources":["../src/glBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"glBlurEffect.js","sourceRoot":"","sources":["../src/glBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AAStC,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,uGAAuG;AACvG,qGAAqG;AACrG,wGAAwG;AACxG,wGAAwG;AACxG,kGAAkG;AAElG,iGAAiG;AACjG,mEAAmE;AACnE,MAAM,UAAU,mBAAmB,CACjC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,IAA8B,EAC9B,MAA4B;IAE5B,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACjG,CAAC;AAED,iGAAiG;AACjG,+FAA+F;AAC/F,MAAM,UAAU,iCAAiC,CAC/C,KAAoB,EACpB,MAA+B,EAC/B,IAAmB,EACnB,IAAmB,EACnB,MAA4B;IAE5B,OAAO,mCAAmC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC;AAED,2GAA2G;AAC3G,+FAA+F;AAC/F,gGAAgG;AAChG,8BAA8B;AAC9B,MAAM,UAAU,qBAAqB,CACnC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,IAA8B,EAC9B,OAAqD;IAErD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,sGAAsG;AACtG,+FAA+F;AAC/F,mFAAmF;AACnF,MAAM,UAAU,mCAAmC,CACjD,KAAoB,EACpB,MAA+B,EAC/B,IAAmB,EACnB,IAAmB,EACnB,OAAqD;IAErD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;IAC5G,CAAC;IACD,MAAM,YAAY,GAAG,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7D,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACxC,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE;QAC5B,0BAA0B,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,EAAE;YACrD,0BAA0B,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,EAAE;gBACrD,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC7E,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACrG,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACpE,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAoB,CAAC,CAAC;IACjF,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,KAAoB;IACvD,sBAAsB,CAAC,KAAK,EAAE,YAAY,EAAE,yBAAyB,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,KAAa,EACb,MAAc,EACd,IAAY,EACZ,IAAY;IAEZ,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,0BAA0B,CAAC,CAAC;IACvF,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,0BAA0B,CAAC,KAAK,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACvG,EAAE,CAAC,SAAS,CAAC,0BAA0B,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;QACrE,EAAE,CAAC,SAAS,CAAC,0BAA0B,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;QACvE,EAAE,CAAC,SAAS,CAAC,0BAA0B,CAAC,KAAK,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;EAwBjC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BokehDepthOfFieldEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget } from '@flighthq/types/contract';
|
|
2
2
|
export declare function applyBokehDepthOfFieldEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, depthTexture: WebGLTexture | null, effect: Readonly<BokehDepthOfFieldEffect>): void;
|
|
3
3
|
export declare const defaultGlBokehDepthOfFieldEffectRunner: GlRenderEffectRunner;
|
|
4
|
+
export declare function registerGlBokehDepthOfFieldEffect(state: GlRenderState): void;
|
|
4
5
|
//# sourceMappingURL=glBokehDepthOfFieldEffect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glBokehDepthOfFieldEffect.d.ts","sourceRoot":"","sources":["../src/glBokehDepthOfFieldEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"glBokehDepthOfFieldEffect.d.ts","sourceRoot":"","sources":["../src/glBokehDepthOfFieldEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,MAAM,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GACxC,IAAI,CAaN;AAED,eAAO,MAAM,sCAAsC,EAAE,oBAQpD,CAAC;AAEF,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE5E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { drawGlFullscreenPass } from '@flighthq/render-gl/contract';
|
|
2
2
|
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
+
import { registerGlRenderEffect } from './glRenderEffectRegistry';
|
|
3
4
|
// Bokeh depth-of-field: a disc-shaped blur. When the scene supplied a sampleable depth texture
|
|
4
5
|
// (ctx.sceneDepthTexture), it computes a per-pixel circle of confusion from focusDistance/focusRange and
|
|
5
6
|
// scales the disc radius by it (the real DoF). When depth is absent it falls back to a uniform disc blur
|
|
@@ -21,6 +22,9 @@ export function applyBokehDepthOfFieldEffectToGl(state, source, dest, depthTextu
|
|
|
21
22
|
export const defaultGlBokehDepthOfFieldEffectRunner = (ctx, effect) => {
|
|
22
23
|
applyBokehDepthOfFieldEffectToGl(ctx.state, ctx.source, ctx.dest, ctx.sceneDepthTexture, effect);
|
|
23
24
|
};
|
|
25
|
+
export function registerGlBokehDepthOfFieldEffect(state) {
|
|
26
|
+
registerGlRenderEffect(state, 'BokehDepthOfFieldEffect', defaultGlBokehDepthOfFieldEffectRunner);
|
|
27
|
+
}
|
|
24
28
|
const BOKEH_DOF_FRAGMENT_SRC = `#version 300 es
|
|
25
29
|
precision highp float;
|
|
26
30
|
in vec2 v_texCoord;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glBokehDepthOfFieldEffect.js","sourceRoot":"","sources":["../src/glBokehDepthOfFieldEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAQpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"glBokehDepthOfFieldEffect.js","sourceRoot":"","sources":["../src/glBokehDepthOfFieldEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAQpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,+FAA+F;AAC/F,yGAAyG;AACzG,yGAAyG;AACzG,6FAA6F;AAC7F,MAAM,UAAU,gCAAgC,CAC9C,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,YAAiC,EACjC,MAAyC;IAEzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,GAAG,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC;IAC5C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,sBAAsB,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChF,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QAC3D,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5F,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,aAAa,CAAC,CAAC;QACjF,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;QAC3E,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,sCAAsC,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC1F,gCAAgC,CAC9B,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,iBAAiB,EACrB,MAAiC,CAClC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,iCAAiC,CAAC,KAAoB;IACpE,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,EAAE,sCAAsC,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8B7B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CameraMotionBlurEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget } from '@flighthq/types/contract';
|
|
2
2
|
export declare function applyCameraMotionBlurEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<CameraMotionBlurEffect>): void;
|
|
3
3
|
export declare const defaultGlCameraMotionBlurEffectRunner: GlRenderEffectRunner;
|
|
4
|
+
export declare function registerGlCameraMotionBlurEffect(state: GlRenderState): void;
|
|
4
5
|
//# sourceMappingURL=glCameraMotionBlurEffect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glCameraMotionBlurEffect.d.ts","sourceRoot":"","sources":["../src/glCameraMotionBlurEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"glCameraMotionBlurEffect.d.ts","sourceRoot":"","sources":["../src/glCameraMotionBlurEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACvC,IAAI,CAQN;AAED,eAAO,MAAM,qCAAqC,EAAE,oBAEnD,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE3E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { drawGlFullscreenPass } from '@flighthq/render-gl/contract';
|
|
2
2
|
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
+
import { registerGlRenderEffect } from './glRenderEffectRegistry';
|
|
3
4
|
// Camera3D motion blur: a real single-pass radial/zoom blur scaled by intensity — smears each sample
|
|
4
5
|
// toward the screen center. A legitimate 2D effect on its own. Two richer variants are 2D-native
|
|
5
6
|
// follow-ups, not 3D-gated: feeding the actual camera/root transform delta as the smear vector (global
|
|
@@ -16,6 +17,9 @@ export function applyCameraMotionBlurEffectToGl(state, source, dest, effect) {
|
|
|
16
17
|
export const defaultGlCameraMotionBlurEffectRunner = (ctx, effect) => {
|
|
17
18
|
applyCameraMotionBlurEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
|
|
18
19
|
};
|
|
20
|
+
export function registerGlCameraMotionBlurEffect(state) {
|
|
21
|
+
registerGlRenderEffect(state, 'CameraMotionBlurEffect', defaultGlCameraMotionBlurEffectRunner);
|
|
22
|
+
}
|
|
19
23
|
const CAMERA_MOTION_BLUR_FRAGMENT_SRC = `#version 300 es
|
|
20
24
|
precision highp float;
|
|
21
25
|
in vec2 v_texCoord;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glCameraMotionBlurEffect.js","sourceRoot":"","sources":["../src/glCameraMotionBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAQpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"glCameraMotionBlurEffect.js","sourceRoot":"","sources":["../src/glCameraMotionBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAQpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,qGAAqG;AACrG,iGAAiG;AACjG,uGAAuG;AACvG,0GAA0G;AAC1G,MAAM,UAAU,+BAA+B,CAC7C,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAwC;IAExC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,EAAE,+BAA+B,CAAC,CAAC;IAC/F,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC;QACzE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,qCAAqC,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACzF,+BAA+B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAgC,CAAC,CAAC;AACrG,CAAC,CAAC;AAEF,MAAM,UAAU,gCAAgC,CAAC,KAAoB;IACnE,sBAAsB,CAAC,KAAK,EAAE,wBAAwB,EAAE,qCAAqC,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;EAqBtC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ChromaticAberrationEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget } from '@flighthq/types/contract';
|
|
2
2
|
export declare function applyChromaticAberrationEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<ChromaticAberrationEffect>): void;
|
|
3
3
|
export declare const defaultGlChromaticAberrationEffectRunner: GlRenderEffectRunner;
|
|
4
|
+
export declare function registerGlChromaticAberrationEffect(state: GlRenderState): void;
|
|
4
5
|
//# sourceMappingURL=glChromaticAberrationEffect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glChromaticAberrationEffect.d.ts","sourceRoot":"","sources":["../src/glChromaticAberrationEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"glChromaticAberrationEffect.d.ts","sourceRoot":"","sources":["../src/glChromaticAberrationEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAC1C,IAAI,CAQN;AAED,eAAO,MAAM,wCAAwC,EAAE,oBAEtD,CAAC;AAEF,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE9E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { drawGlFullscreenPass } from '@flighthq/render-gl/contract';
|
|
2
2
|
import { getGlEffectProgram } from './glEffectProgramCache';
|
|
3
|
+
import { registerGlRenderEffect } from './glRenderEffectRegistry';
|
|
3
4
|
// Chromatic aberration: sample the R/G/B channels at progressively larger offsets so colors fringe
|
|
4
5
|
// apart. When radial, the offset scales with distance from the optical center (true lens behavior);
|
|
5
6
|
// otherwise it is a uniform horizontal split.
|
|
@@ -15,6 +16,9 @@ export function applyChromaticAberrationEffectToGl(state, source, dest, effect)
|
|
|
15
16
|
export const defaultGlChromaticAberrationEffectRunner = (ctx, effect) => {
|
|
16
17
|
applyChromaticAberrationEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
|
|
17
18
|
};
|
|
19
|
+
export function registerGlChromaticAberrationEffect(state) {
|
|
20
|
+
registerGlRenderEffect(state, 'ChromaticAberrationEffect', defaultGlChromaticAberrationEffectRunner);
|
|
21
|
+
}
|
|
18
22
|
const CHROMATIC_ABERRATION_FRAGMENT_SRC = `#version 300 es
|
|
19
23
|
precision highp float;
|
|
20
24
|
in vec2 v_texCoord;
|