gl-transitions 1.74.0 → 1.76.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/README.md +78 -0
- package/compatibility.json +2070 -0
- package/glsl3/AdvancedMosaic.glsl +21 -0
- package/glsl3/BlockDissolve.glsl +16 -0
- package/glsl3/BookFlip.glsl +37 -0
- package/glsl3/Bounce.glsl +35 -0
- package/glsl3/BowTieHorizontal.glsl +123 -0
- package/glsl3/BowTieVertical.glsl +117 -0
- package/glsl3/BowTieWithParameter.glsl +74 -0
- package/glsl3/Box.glsl +33 -0
- package/glsl3/ButterflyWaveScrawler.glsl +33 -0
- package/glsl3/CircleCrop.glsl +20 -0
- package/glsl3/ColourDistance.glsl +19 -0
- package/glsl3/CrazyParametricFun.glsl +20 -0
- package/glsl3/CrossZoom.glsl +68 -0
- package/glsl3/DefocusBlur.glsl +47 -0
- package/glsl3/Directional.glsl +18 -0
- package/glsl3/DirectionalScaled.glsl +35 -0
- package/glsl3/DoomScreenTransition.glsl +62 -0
- package/glsl3/Dreamy.glsl +14 -0
- package/glsl3/DreamyZoom.glsl +43 -0
- package/glsl3/Drop_Zone_Flicker.glsl +159 -0
- package/glsl3/EdgeTransition.glsl +50 -0
- package/glsl3/FilmBurn.glsl +63 -0
- package/glsl3/Fold.glsl +12 -0
- package/glsl3/GlitchDisplace.glsl +78 -0
- package/glsl3/GlitchMemories.glsl +17 -0
- package/glsl3/GridFlip.glsl +77 -0
- package/glsl3/HSVfade.glsl +29 -0
- package/glsl3/HorizontalClose.glsl +16 -0
- package/glsl3/HorizontalOpen.glsl +18 -0
- package/glsl3/InvertedPageCurl.glsl +228 -0
- package/glsl3/LeftRight.glsl +28 -0
- package/glsl3/LinearBlur.glsl +30 -0
- package/glsl3/Mosaic.glsl +45 -0
- package/glsl3/Overexposure.glsl +25 -0
- package/glsl3/PolkaDotsCurtain.glsl +14 -0
- package/glsl3/PuzzleRight.glsl +57 -0
- package/glsl3/Radial.glsl +19 -0
- package/glsl3/Rectangle.glsl +29 -0
- package/glsl3/RectangleCrop.glsl +30 -0
- package/glsl3/Revolve_Left.glsl +98 -0
- package/glsl3/Rolls.glsl +42 -0
- package/glsl3/RotateScaleVanish.glsl +42 -0
- package/glsl3/SimpleFlip.glsl +14 -0
- package/glsl3/SimpleZoom.glsl +20 -0
- package/glsl3/SimpleZoomOut.glsl +23 -0
- package/glsl3/Slides.glsl +41 -0
- package/glsl3/StarWipe.glsl +51 -0
- package/glsl3/StaticFade.glsl +47 -0
- package/glsl3/StereoViewer.glsl +214 -0
- package/glsl3/StripDatamoshGlitch.glsl +187 -0
- package/glsl3/Swirl.glsl +34 -0
- package/glsl3/TVStatic.glsl +29 -0
- package/glsl3/TilesWave.glsl +63 -0
- package/glsl3/TopBottom.glsl +27 -0
- package/glsl3/VerticalClose.glsl +16 -0
- package/glsl3/VerticalOpen.glsl +17 -0
- package/glsl3/WaterDrop.glsl +21 -0
- package/glsl3/ZoomInCircles.glsl +40 -0
- package/glsl3/ZoomLeftWipe.glsl +36 -0
- package/glsl3/ZoomRigthWipe.glsl +36 -0
- package/glsl3/angular.glsl +25 -0
- package/glsl3/burn.glsl +14 -0
- package/glsl3/burn0.glsl +55 -0
- package/glsl3/cannabisleaf.glsl +18 -0
- package/glsl3/chessboard.glsl +28 -0
- package/glsl3/circle.glsl +24 -0
- package/glsl3/circleopen.glsl +18 -0
- package/glsl3/colorphase.glsl +19 -0
- package/glsl3/coord-from-in.glsl +18 -0
- package/glsl3/crosshatch.glsl +20 -0
- package/glsl3/crosswarp.glsl +10 -0
- package/glsl3/cube.glsl +71 -0
- package/glsl3/directional-easing.glsl +19 -0
- package/glsl3/directionalwarp.glsl +20 -0
- package/glsl3/directionalwipe.glsl +22 -0
- package/glsl3/displacement.glsl +26 -0
- package/glsl3/dissolve.glsl +54 -0
- package/glsl3/doorway.glsl +55 -0
- package/glsl3/fade.glsl +13 -0
- package/glsl3/fadecolor.glsl +15 -0
- package/glsl3/fadegrayscale.glsl +21 -0
- package/glsl3/flyeye.glsl +20 -0
- package/glsl3/fragment.glsl +54 -0
- package/glsl3/heart.glsl +19 -0
- package/glsl3/hexagonalize.glsl +78 -0
- package/glsl3/kaleidoscope.glsl +25 -0
- package/glsl3/luma.glsl +15 -0
- package/glsl3/luminance_melt.glsl +131 -0
- package/glsl3/morph.glsl +20 -0
- package/glsl3/mosaic_transition.glsl +20 -0
- package/glsl3/multiply_blend.glsl +19 -0
- package/glsl3/old_tv_lost_signal.glsl +51 -0
- package/glsl3/parametric_glitch.glsl +29 -0
- package/glsl3/perlin.glsl +66 -0
- package/glsl3/pinwheel.glsl +20 -0
- package/glsl3/pixelize.glsl +21 -0
- package/glsl3/polar_function.glsl +24 -0
- package/glsl3/powerKaleido.glsl +57 -0
- package/glsl3/randomNoisex.glsl +15 -0
- package/glsl3/randomsquares.glsl +20 -0
- package/glsl3/ripple.glsl +20 -0
- package/glsl3/rotateTransition.glsl +22 -0
- package/glsl3/rotate_scale_fade.glsl +39 -0
- package/glsl3/scale-in.glsl +18 -0
- package/glsl3/splitSlideInHorizontal.glsl +26 -0
- package/glsl3/splitSlideInOutHorizontal.glsl +23 -0
- package/glsl3/splitSlideInOutVertical.glsl +23 -0
- package/glsl3/splitSlideInVertical.glsl +24 -0
- package/glsl3/splitSlideOutHorizontal.glsl +22 -0
- package/glsl3/splitSlideOutVertical.glsl +22 -0
- package/glsl3/squareswire.glsl +26 -0
- package/glsl3/squeeze.glsl +23 -0
- package/glsl3/static_wipe.glsl +39 -0
- package/glsl3/swap.glsl +64 -0
- package/glsl3/tangentMotionBlur.glsl +139 -0
- package/glsl3/undulatingBurnOut.glsl +56 -0
- package/glsl3/wind.glsl +25 -0
- package/glsl3/windowblinds.glsl +18 -0
- package/glsl3/windowslice.glsl +16 -0
- package/glsl3/wipeDown.glsl +12 -0
- package/glsl3/wipeLeft.glsl +12 -0
- package/glsl3/wipeRight.glsl +12 -0
- package/glsl3/wipeUp.glsl +12 -0
- package/glsl3/x_axis_translation.glsl +21 -0
- package/glsl3/zoomInOut.glsl +20 -0
- package/index.d.ts +61 -0
- package/layouts.json +2956 -0
- package/llms-full.txt +1707 -0
- package/llms.txt +153 -0
- package/msl/AdvancedMosaic.metal +136 -0
- package/msl/BlockDissolve.metal +108 -0
- package/msl/BookFlip.metal +191 -0
- package/msl/Bounce.metal +128 -0
- package/msl/BowTieHorizontal.metal +375 -0
- package/msl/BowTieVertical.metal +375 -0
- package/msl/BowTieWithParameter.metal +361 -0
- package/msl/Box.metal +204 -0
- package/msl/ButterflyWaveScrawler.metal +190 -0
- package/msl/CircleCrop.metal +117 -0
- package/msl/ColourDistance.metal +110 -0
- package/msl/CrazyParametricFun.metal +139 -0
- package/msl/CrossZoom.metal +274 -0
- package/msl/DefocusBlur.metal +297 -0
- package/msl/Directional.metal +107 -0
- package/msl/DirectionalScaled.metal +147 -0
- package/msl/DoomScreenTransition.metal +212 -0
- package/msl/Dreamy.metal +133 -0
- package/msl/DreamyZoom.metal +182 -0
- package/msl/Drop_Zone_Flicker.metal +561 -0
- package/msl/EdgeTransition.metal +277 -0
- package/msl/FilmBurn.metal +425 -0
- package/msl/Fold.metal +110 -0
- package/msl/GlitchDisplace.metal +374 -0
- package/msl/GlitchMemories.metal +146 -0
- package/msl/GridFlip.metal +285 -0
- package/msl/HSVfade.metal +161 -0
- package/msl/HorizontalClose.metal +100 -0
- package/msl/HorizontalOpen.metal +103 -0
- package/msl/InvertedPageCurl.metal +762 -0
- package/msl/LeftRight.metal +138 -0
- package/msl/LinearBlur.metal +169 -0
- package/msl/Mosaic.metal +212 -0
- package/msl/Overexposure.metal +130 -0
- package/msl/PolkaDotsCurtain.metal +112 -0
- package/msl/PuzzleRight.metal +262 -0
- package/msl/Radial.metal +102 -0
- package/msl/Rectangle.metal +129 -0
- package/msl/RectangleCrop.metal +127 -0
- package/msl/Revolve_Left.metal +363 -0
- package/msl/Rolls.metal +209 -0
- package/msl/RotateScaleVanish.metal +227 -0
- package/msl/SimpleFlip.metal +110 -0
- package/msl/SimpleZoom.metal +116 -0
- package/msl/SimpleZoomOut.metal +127 -0
- package/msl/Slides.metal +244 -0
- package/msl/StarWipe.metal +204 -0
- package/msl/StaticFade.metal +193 -0
- package/msl/StereoViewer.metal +707 -0
- package/msl/StripDatamoshGlitch.metal +828 -0
- package/msl/Swirl.metal +152 -0
- package/msl/TVStatic.metal +136 -0
- package/msl/TilesWave.metal +290 -0
- package/msl/TopBottom.metal +138 -0
- package/msl/VerticalClose.metal +100 -0
- package/msl/VerticalOpen.metal +103 -0
- package/msl/WaterDrop.metal +126 -0
- package/msl/ZoomInCircles.metal +169 -0
- package/msl/ZoomLeftWipe.metal +152 -0
- package/msl/ZoomRigthWipe.metal +152 -0
- package/msl/angular.metal +111 -0
- package/msl/burn.metal +103 -0
- package/msl/burn0.metal +236 -0
- package/msl/cannabisleaf.metal +120 -0
- package/msl/chessboard.metal +144 -0
- package/msl/circle.metal +115 -0
- package/msl/circleopen.metal +124 -0
- package/msl/colorphase.metal +106 -0
- package/msl/coord-from-in.metal +111 -0
- package/msl/crosshatch.metal +126 -0
- package/msl/crosswarp.metal +103 -0
- package/msl/cube.metal +259 -0
- package/msl/directional-easing.metal +111 -0
- package/msl/directionalwarp.metal +121 -0
- package/msl/directionalwipe.metal +120 -0
- package/msl/displacement.metal +129 -0
- package/msl/dissolve.metal +146 -0
- package/msl/doorway.metal +210 -0
- package/msl/fade.metal +95 -0
- package/msl/fadecolor.metal +104 -0
- package/msl/fadegrayscale.metal +123 -0
- package/msl/flyeye.metal +133 -0
- package/msl/fragment.metal +276 -0
- package/msl/heart.metal +134 -0
- package/msl/hexagonalize.metal +274 -0
- package/msl/kaleidoscope.metal +157 -0
- package/msl/luma.metal +113 -0
- package/msl/luminance_melt.metal +337 -0
- package/msl/morph.metal +131 -0
- package/msl/mosaic_transition.metal +137 -0
- package/msl/multiply_blend.metal +127 -0
- package/msl/old_tv_lost_signal.metal +172 -0
- package/msl/parametric_glitch.metal +152 -0
- package/msl/perlin.metal +206 -0
- package/msl/pinwheel.metal +112 -0
- package/msl/pixelize.metal +134 -0
- package/msl/polar_function.metal +116 -0
- package/msl/powerKaleido.metal +304 -0
- package/msl/randomNoisex.metal +115 -0
- package/msl/randomsquares.metal +118 -0
- package/msl/ripple.metal +113 -0
- package/msl/rotateTransition.metal +116 -0
- package/msl/rotate_scale_fade.metal +167 -0
- package/msl/scale-in.metal +111 -0
- package/msl/splitSlideInHorizontal.metal +147 -0
- package/msl/splitSlideInOutHorizontal.metal +138 -0
- package/msl/splitSlideInOutVertical.metal +138 -0
- package/msl/splitSlideInVertical.metal +144 -0
- package/msl/splitSlideOutHorizontal.metal +131 -0
- package/msl/splitSlideOutVertical.metal +131 -0
- package/msl/squareswire.metal +144 -0
- package/msl/squeeze.metal +133 -0
- package/msl/static_wipe.metal +147 -0
- package/msl/swap.metal +256 -0
- package/msl/tangentMotionBlur.metal +583 -0
- package/msl/undulatingBurnOut.metal +217 -0
- package/msl/wind.metal +131 -0
- package/msl/windowblinds.metal +107 -0
- package/msl/windowslice.metal +108 -0
- package/msl/wipeDown.metal +105 -0
- package/msl/wipeLeft.metal +105 -0
- package/msl/wipeRight.metal +105 -0
- package/msl/wipeUp.metal +105 -0
- package/msl/x_axis_translation.metal +110 -0
- package/msl/zoomInOut.metal +125 -0
- package/package.json +1 -1
- package/skills/gl-transitions/SKILL.md +46 -0
- package/skills/gl-transitions/references/catalog.md +224 -0
- package/skills/gl-transitions/references/skia.md +118 -0
- package/skills/gl-transitions/references/video.md +71 -0
- package/skills/gl-transitions/references/webgl.md +122 -0
- package/sksl/index.d.ts +4 -0
- package/sksl/index.js +1 -0
- package/wgsl/AdvancedMosaic.wgsl +108 -0
- package/wgsl/BlockDissolve.wgsl +78 -0
- package/wgsl/BookFlip.wgsl +157 -0
- package/wgsl/Bounce.wgsl +98 -0
- package/wgsl/BowTieHorizontal.wgsl +331 -0
- package/wgsl/BowTieVertical.wgsl +331 -0
- package/wgsl/BowTieWithParameter.wgsl +313 -0
- package/wgsl/Box.wgsl +176 -0
- package/wgsl/ButterflyWaveScrawler.wgsl +158 -0
- package/wgsl/CircleCrop.wgsl +88 -0
- package/wgsl/ColourDistance.wgsl +82 -0
- package/wgsl/CrazyParametricFun.wgsl +111 -0
- package/wgsl/CrossZoom.wgsl +219 -0
- package/wgsl/DefocusBlur.wgsl +269 -0
- package/wgsl/Directional.wgsl +79 -0
- package/wgsl/DirectionalScaled.wgsl +117 -0
- package/wgsl/DoomScreenTransition.wgsl +171 -0
- package/wgsl/Dreamy.wgsl +102 -0
- package/wgsl/DreamyZoom.wgsl +154 -0
- package/wgsl/Drop_Zone_Flicker.wgsl +513 -0
- package/wgsl/EdgeTransition.wgsl +216 -0
- package/wgsl/FilmBurn.wgsl +361 -0
- package/wgsl/Fold.wgsl +82 -0
- package/wgsl/GlitchDisplace.wgsl +327 -0
- package/wgsl/GlitchMemories.wgsl +118 -0
- package/wgsl/GridFlip.wgsl +250 -0
- package/wgsl/HSVfade.wgsl +131 -0
- package/wgsl/HorizontalClose.wgsl +72 -0
- package/wgsl/HorizontalOpen.wgsl +75 -0
- package/wgsl/InvertedPageCurl.wgsl +690 -0
- package/wgsl/LeftRight.wgsl +109 -0
- package/wgsl/LinearBlur.wgsl +131 -0
- package/wgsl/Mosaic.wgsl +174 -0
- package/wgsl/Overexposure.wgsl +102 -0
- package/wgsl/PolkaDotsCurtain.wgsl +83 -0
- package/wgsl/PuzzleRight.wgsl +230 -0
- package/wgsl/Radial.wgsl +74 -0
- package/wgsl/Rectangle.wgsl +100 -0
- package/wgsl/RectangleCrop.wgsl +98 -0
- package/wgsl/Revolve_Left.wgsl +314 -0
- package/wgsl/Rolls.wgsl +181 -0
- package/wgsl/RotateScaleVanish.wgsl +199 -0
- package/wgsl/SimpleFlip.wgsl +82 -0
- package/wgsl/SimpleZoom.wgsl +85 -0
- package/wgsl/SimpleZoomOut.wgsl +96 -0
- package/wgsl/Slides.wgsl +216 -0
- package/wgsl/StarWipe.wgsl +169 -0
- package/wgsl/StaticFade.wgsl +159 -0
- package/wgsl/StereoViewer.wgsl +625 -0
- package/wgsl/StripDatamoshGlitch.wgsl +755 -0
- package/wgsl/Swirl.wgsl +124 -0
- package/wgsl/TVStatic.wgsl +106 -0
- package/wgsl/TilesWave.wgsl +262 -0
- package/wgsl/TopBottom.wgsl +109 -0
- package/wgsl/VerticalClose.wgsl +72 -0
- package/wgsl/VerticalOpen.wgsl +75 -0
- package/wgsl/WaterDrop.wgsl +98 -0
- package/wgsl/ZoomInCircles.wgsl +138 -0
- package/wgsl/ZoomLeftWipe.wgsl +121 -0
- package/wgsl/ZoomRigthWipe.wgsl +121 -0
- package/wgsl/angular.wgsl +83 -0
- package/wgsl/burn.wgsl +74 -0
- package/wgsl/burn0.wgsl +198 -0
- package/wgsl/cannabisleaf.wgsl +92 -0
- package/wgsl/chessboard.wgsl +116 -0
- package/wgsl/circle.wgsl +87 -0
- package/wgsl/circleopen.wgsl +96 -0
- package/wgsl/colorphase.wgsl +77 -0
- package/wgsl/coord-from-in.wgsl +83 -0
- package/wgsl/crosshatch.wgsl +96 -0
- package/wgsl/crosswarp.wgsl +75 -0
- package/wgsl/cube.wgsl +217 -0
- package/wgsl/directional-easing.wgsl +83 -0
- package/wgsl/directionalwarp.wgsl +92 -0
- package/wgsl/directionalwipe.wgsl +91 -0
- package/wgsl/displacement.wgsl +96 -0
- package/wgsl/dissolve.wgsl +116 -0
- package/wgsl/doorway.wgsl +174 -0
- package/wgsl/fade.wgsl +67 -0
- package/wgsl/fadecolor.wgsl +75 -0
- package/wgsl/fadegrayscale.wgsl +93 -0
- package/wgsl/flyeye.wgsl +105 -0
- package/wgsl/fragment.wgsl +227 -0
- package/wgsl/heart.wgsl +103 -0
- package/wgsl/hexagonalize.wgsl +238 -0
- package/wgsl/kaleidoscope.wgsl +124 -0
- package/wgsl/luma.wgsl +80 -0
- package/wgsl/luminance_melt.wgsl +299 -0
- package/wgsl/morph.wgsl +103 -0
- package/wgsl/mosaic_transition.wgsl +107 -0
- package/wgsl/multiply_blend.wgsl +96 -0
- package/wgsl/old_tv_lost_signal.wgsl +142 -0
- package/wgsl/parametric_glitch.wgsl +124 -0
- package/wgsl/perlin.wgsl +174 -0
- package/wgsl/pinwheel.wgsl +84 -0
- package/wgsl/pixelize.wgsl +105 -0
- package/wgsl/polar_function.wgsl +88 -0
- package/wgsl/powerKaleido.wgsl +254 -0
- package/wgsl/randomNoisex.wgsl +85 -0
- package/wgsl/randomsquares.wgsl +87 -0
- package/wgsl/ripple.wgsl +85 -0
- package/wgsl/rotateTransition.wgsl +85 -0
- package/wgsl/rotate_scale_fade.wgsl +138 -0
- package/wgsl/scale-in.wgsl +79 -0
- package/wgsl/splitSlideInHorizontal.wgsl +118 -0
- package/wgsl/splitSlideInOutHorizontal.wgsl +109 -0
- package/wgsl/splitSlideInOutVertical.wgsl +109 -0
- package/wgsl/splitSlideInVertical.wgsl +115 -0
- package/wgsl/splitSlideOutHorizontal.wgsl +102 -0
- package/wgsl/splitSlideOutVertical.wgsl +102 -0
- package/wgsl/squareswire.wgsl +115 -0
- package/wgsl/squeeze.wgsl +105 -0
- package/wgsl/static_wipe.wgsl +117 -0
- package/wgsl/swap.wgsl +218 -0
- package/wgsl/tangentMotionBlur.wgsl +503 -0
- package/wgsl/undulatingBurnOut.wgsl +181 -0
- package/wgsl/wind.wgsl +101 -0
- package/wgsl/windowblinds.wgsl +79 -0
- package/wgsl/windowslice.wgsl +80 -0
- package/wgsl/wipeDown.wgsl +77 -0
- package/wgsl/wipeLeft.wgsl +77 -0
- package/wgsl/wipeRight.wgsl +77 -0
- package/wgsl/wipeUp.wgsl +77 -0
- package/wgsl/x_axis_translation.wgsl +82 -0
- package/wgsl/zoomInOut.wgsl +94 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// RotateScaleVanish — GLSL ES 3.00, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/RotateScaleVanish.glsl
|
|
2
|
+
// Author: Mark Craig
|
|
3
|
+
// mrmcsoftware on github and youtube ( http://www.youtube.com/MrMcSoftware )
|
|
4
|
+
// License: MIT
|
|
5
|
+
// Description: The outgoing image spins and shrinks away over the incoming one
|
|
6
|
+
// Tags: rotate, zoom, spin
|
|
7
|
+
|
|
8
|
+
// RotateScaleVanish Transition by Mark Craig (Copyright © 2022)
|
|
9
|
+
|
|
10
|
+
// @param Fade in the incoming image
|
|
11
|
+
uniform bool FadeInSecond; // = true
|
|
12
|
+
// @param Run the effect in reverse
|
|
13
|
+
uniform bool ReverseEffect; // = false
|
|
14
|
+
// @param Rotate the other way
|
|
15
|
+
uniform bool ReverseRotation; // = false
|
|
16
|
+
|
|
17
|
+
#define M_PI 3.14159265358979323846
|
|
18
|
+
#define _TWOPI 6.283185307179586476925286766559
|
|
19
|
+
|
|
20
|
+
vec4 transition(vec2 uv)
|
|
21
|
+
{
|
|
22
|
+
vec2 iResolution = vec2(ratio, 1.0);
|
|
23
|
+
float t = ReverseEffect ? 1.0 - progress : progress;
|
|
24
|
+
float theta = ReverseRotation ? _TWOPI * t : -_TWOPI * t;
|
|
25
|
+
float c1 = cos(theta);
|
|
26
|
+
float s1 = sin(theta);
|
|
27
|
+
float rad = max(0.00001, 1.0 - t);
|
|
28
|
+
float xc1 = (uv.x - 0.5) * iResolution.x;
|
|
29
|
+
float yc1 = (uv.y - 0.5) * iResolution.y;
|
|
30
|
+
float xc2 = (xc1 * c1 - yc1 * s1) / rad;
|
|
31
|
+
float yc2 = (xc1 * s1 + yc1 * c1) / rad;
|
|
32
|
+
vec2 uv2 = vec2(xc2 + iResolution.x / 2.0, yc2 + iResolution.y / 2.0);
|
|
33
|
+
vec4 col3;
|
|
34
|
+
vec4 ColorTo = ReverseEffect ? getFromColor(uv) : getToColor(uv);
|
|
35
|
+
if ((uv2.x >= 0.0) && (uv2.x <= iResolution.x) && (uv2.y >= 0.0) && (uv2.y <= iResolution.y))
|
|
36
|
+
{
|
|
37
|
+
uv2 /= iResolution;
|
|
38
|
+
col3 = ReverseEffect ? getToColor(uv2) : getFromColor(uv2);
|
|
39
|
+
}
|
|
40
|
+
else { col3 = FadeInSecond ? vec4(0.0, 0.0, 0.0, 1.0) : ColorTo; }
|
|
41
|
+
return((1.0 - t) * col3 + t * ColorTo); // could have used mix
|
|
42
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// SimpleFlip — GLSL ES 3.00, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/SimpleFlip.glsl
|
|
2
|
+
// Author: nwoeanhinnogaehr
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: The outgoing image flips around the vertical axis into the incoming one
|
|
5
|
+
// Tags: flip, horizontal
|
|
6
|
+
// Ported from https://gist.github.com/nwoeanhinnogaehr/408045772d255df97520
|
|
7
|
+
|
|
8
|
+
vec4 transition(vec2 uv) {
|
|
9
|
+
vec2 q = uv;
|
|
10
|
+
uv.x = (uv.x - 0.5) / abs(progress - 0.5) * 0.5 + 0.5;
|
|
11
|
+
vec4 a = getFromColor(uv);
|
|
12
|
+
vec4 b = getToColor(uv);
|
|
13
|
+
return vec4(mix(a, b, step(0.5, progress)).rgb * step(abs(q.x - 0.5), abs(progress - 0.5)), 1.0);
|
|
14
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// SimpleZoom — GLSL ES 3.00, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/SimpleZoom.glsl
|
|
2
|
+
// Author: 0gust1
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: Zooms into the outgoing image, then fades to the incoming one
|
|
5
|
+
// Tags: zoom, fade
|
|
6
|
+
|
|
7
|
+
// @range(0.2, 1) Part of the transition spent zooming
|
|
8
|
+
uniform float zoom_quickness; // = 0.8
|
|
9
|
+
vec2 zoom(vec2 uv, float amount) {
|
|
10
|
+
return 0.5 + ((uv - 0.5) * (1.0-amount));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
vec4 transition (vec2 uv) {
|
|
14
|
+
float nQuick = clamp(zoom_quickness,0.2,1.0);
|
|
15
|
+
return mix(
|
|
16
|
+
getFromColor(zoom(uv, smoothstep(0.0, nQuick, progress))),
|
|
17
|
+
getToColor(uv),
|
|
18
|
+
smoothstep(nQuick-0.2, 1.0, progress)
|
|
19
|
+
);
|
|
20
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// SimpleZoomOut — GLSL ES 3.00, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/SimpleZoomOut.glsl
|
|
2
|
+
// Author: Tianshuo
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: The incoming image zooms out into place while fading in
|
|
5
|
+
// Tags: zoom, fade
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
// @range(0.2, 1) Part of the transition spent zooming
|
|
9
|
+
uniform float zoom_quickness; // = 0.8
|
|
10
|
+
// @param Fade instead of cutting to the incoming image
|
|
11
|
+
uniform bool fade; // = true
|
|
12
|
+
vec2 zoom(vec2 uv, float amount) {
|
|
13
|
+
return 0.5 + ((uv - 0.5) * (1.0-amount));
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
vec4 transition (vec2 uv) {
|
|
17
|
+
float nQuick = clamp(zoom_quickness,0.2,1.0);
|
|
18
|
+
return mix(
|
|
19
|
+
getFromColor(uv),
|
|
20
|
+
getToColor(zoom(uv,1.-smoothstep(1.-nQuick, 1., progress))),
|
|
21
|
+
fade?smoothstep(1.0-nQuick, 1., progress):(progress<1.0-nQuick?0.0:1.0)
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Slides — GLSL ES 3.00, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/Slides.glsl
|
|
2
|
+
// Author: Mark Craig
|
|
3
|
+
// mrmcsoftware on github and youtube ( http://www.youtube.com/MrMcSoftware )
|
|
4
|
+
// License: MIT
|
|
5
|
+
// Description: The outgoing image slides out, or the incoming one slides in, toward an edge, a corner or the center
|
|
6
|
+
// Tags: slide, directional
|
|
7
|
+
|
|
8
|
+
// Slides Transition by Mark Craig (Copyright © 2022)
|
|
9
|
+
|
|
10
|
+
uniform int type; // = 0
|
|
11
|
+
// @param Slide the incoming image in instead of the outgoing one out
|
|
12
|
+
uniform bool In; // = false
|
|
13
|
+
// type: slide to/from which edge, which corner, or center
|
|
14
|
+
// In: if true slide new image in, otherwise slide old image out
|
|
15
|
+
|
|
16
|
+
#define rad2 rad / 2.0
|
|
17
|
+
|
|
18
|
+
vec4 transition(vec2 uv)
|
|
19
|
+
{
|
|
20
|
+
vec2 uv0 = uv;
|
|
21
|
+
float rad = In ? progress : 1.0 - progress;
|
|
22
|
+
float xc1, yc1;
|
|
23
|
+
// I used if/else instead of switch in case it's an old GPU
|
|
24
|
+
if (type == 0) { xc1 = .5 - rad2; yc1 = 0.0; }
|
|
25
|
+
else if (type == 1) { xc1 = 1.0 - rad; yc1 = .5 - rad2; }
|
|
26
|
+
else if (type == 2) { xc1 = .5 - rad2; yc1 = 1.0 - rad; }
|
|
27
|
+
else if (type == 3) { xc1 = 0.0; yc1 = .5 - rad2; }
|
|
28
|
+
else if (type == 4) { xc1 = 1.0 - rad; yc1 = 0.0; }
|
|
29
|
+
else if (type == 5) { xc1 = 1.0 - rad; yc1 = 1.0 - rad; }
|
|
30
|
+
else if (type == 6) { xc1 = 0.0; yc1 = 1.0 - rad; }
|
|
31
|
+
else if (type == 7) { xc1 = 0.0; yc1 = 0.0; }
|
|
32
|
+
else if (type == 8) { xc1 = .5 - rad2; yc1 = .5 - rad2; }
|
|
33
|
+
uv.y = 1.0 - uv.y;
|
|
34
|
+
vec2 uv2;
|
|
35
|
+
if ((uv.x >= xc1) && (uv.x <= xc1 + rad) && (uv.y >= yc1) && (uv.y <= yc1 + rad))
|
|
36
|
+
{
|
|
37
|
+
uv2 = vec2((uv.x - xc1) / rad, 1.0 - (uv.y - yc1) / rad);
|
|
38
|
+
return(In ? getToColor(uv2) : getFromColor(uv2));
|
|
39
|
+
}
|
|
40
|
+
return(In ? getFromColor(uv0) : getToColor(uv0));
|
|
41
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// StarWipe — GLSL ES 3.00, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/StarWipe.glsl
|
|
2
|
+
// Author: Ben Lucas
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: A growing star reveals the incoming image
|
|
5
|
+
// Tags: wipe, shape, star
|
|
6
|
+
#define PI 3.141592653589793
|
|
7
|
+
#define STAR_ANGLE 1.2566370614359172
|
|
8
|
+
|
|
9
|
+
// @param Thickness of the star's border
|
|
10
|
+
uniform float border_thickness;// = 0.01
|
|
11
|
+
uniform float star_rotation;// = 0.75
|
|
12
|
+
// @color Color of the star's border
|
|
13
|
+
uniform vec4 border_color; // = vec4(1.0)
|
|
14
|
+
// @param Center of the star
|
|
15
|
+
uniform vec2 star_center;// = vec2(0.5)
|
|
16
|
+
|
|
17
|
+
vec2 rotate(vec2 v, float theta) {
|
|
18
|
+
float cosTheta = cos(theta);
|
|
19
|
+
float sinTheta = sin(theta);
|
|
20
|
+
|
|
21
|
+
return vec2(
|
|
22
|
+
cosTheta * v.x - sinTheta * v.y,
|
|
23
|
+
sinTheta * v.x + cosTheta * v.y
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
bool inStar(vec2 uv, vec2 center, float radius){
|
|
28
|
+
vec2 uv_centered = uv - center;
|
|
29
|
+
uv_centered = rotate(uv_centered, star_rotation * STAR_ANGLE);
|
|
30
|
+
float theta = atan(uv_centered.y, uv_centered.x) + PI;
|
|
31
|
+
|
|
32
|
+
vec2 uv_rotated = rotate(uv_centered, -STAR_ANGLE * (floor(theta / STAR_ANGLE) + 0.5));
|
|
33
|
+
|
|
34
|
+
float slope = 0.3;
|
|
35
|
+
if(uv_rotated.y > 0.0){
|
|
36
|
+
return (radius + uv_rotated.x * slope > uv_rotated.y);
|
|
37
|
+
} else {
|
|
38
|
+
return (-radius - uv_rotated.x * slope < uv_rotated.y);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
vec4 transition (vec2 uv) {
|
|
43
|
+
float progressScaled = (2.0 * border_thickness + 1.0) * progress - border_thickness;
|
|
44
|
+
if(inStar(uv, star_center, progressScaled)){
|
|
45
|
+
return getToColor(uv);
|
|
46
|
+
} else if(inStar(uv, star_center, progressScaled+border_thickness)){
|
|
47
|
+
return border_color;
|
|
48
|
+
} else {
|
|
49
|
+
return getFromColor(uv);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// StaticFade — GLSL ES 3.00, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/StaticFade.glsl
|
|
2
|
+
// Author: Ben Lucas
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: Cuts to the incoming image halfway, hidden behind a burst of TV static
|
|
5
|
+
// Tags: static, noise, retro
|
|
6
|
+
|
|
7
|
+
uniform float n_noise_pixels ; // = 200.0
|
|
8
|
+
uniform float static_luminosity ; // = 0.8
|
|
9
|
+
|
|
10
|
+
float rnd (vec2 st) {
|
|
11
|
+
return fract(sin(dot(st.xy,
|
|
12
|
+
vec2(10.5302340293,70.23492931)))*
|
|
13
|
+
12345.5453123);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
vec4 staticNoise (vec2 st, float offset, float luminosity) {
|
|
17
|
+
float staticR = luminosity * rnd(st * vec2(offset * 2.0, offset * 3.0));
|
|
18
|
+
float staticG = luminosity * rnd(st * vec2(offset * 3.0, offset * 5.0));
|
|
19
|
+
float staticB = luminosity * rnd(st * vec2(offset * 5.0, offset * 7.0));
|
|
20
|
+
return vec4(staticR, staticG, staticB, 1.0);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
float staticIntensity(float t)
|
|
24
|
+
{
|
|
25
|
+
float transitionProgress = abs(2.0*(t-0.5));
|
|
26
|
+
float transformedThreshold =1.2*(1.0 - transitionProgress)-0.1;
|
|
27
|
+
return min(1.0, transformedThreshold);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
vec4 transition (vec2 uv) {
|
|
31
|
+
|
|
32
|
+
float baseMix = step(0.5, progress);
|
|
33
|
+
vec4 transitionMix = mix(
|
|
34
|
+
getFromColor(uv),
|
|
35
|
+
getToColor(uv),
|
|
36
|
+
baseMix
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
vec2 uvStatic = floor(uv * n_noise_pixels)/n_noise_pixels;
|
|
40
|
+
|
|
41
|
+
vec4 staticColor = staticNoise(uvStatic, progress, static_luminosity);
|
|
42
|
+
|
|
43
|
+
float staticThresh = staticIntensity(progress);
|
|
44
|
+
float staticMix = step(rnd(uvStatic), staticThresh);
|
|
45
|
+
|
|
46
|
+
return mix(transitionMix, staticColor, staticMix);
|
|
47
|
+
}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
// StereoViewer — GLSL ES 3.00, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/StereoViewer.glsl
|
|
2
|
+
// Tunable parameters
|
|
3
|
+
// How much to zoom (out) for the effect ~ 0.5 - 1.0
|
|
4
|
+
// @range(0.5, 1) How much the images zoom out
|
|
5
|
+
uniform float zoom; // = 0.88
|
|
6
|
+
// Corner radius as a fraction of the image height
|
|
7
|
+
uniform float corner_radius; // = 0.22
|
|
8
|
+
|
|
9
|
+
// Author: Ted Schundler
|
|
10
|
+
// License: BSD 2 Clause
|
|
11
|
+
// Description: Both images shrink into rounded cards that swap, like a stereo viewer toy
|
|
12
|
+
// Tags: cards, zoom, retro
|
|
13
|
+
// Free for use and modification by anyone with credit
|
|
14
|
+
|
|
15
|
+
// Copyright (c) 2016, Theodore K Schundler
|
|
16
|
+
// All rights reserved.
|
|
17
|
+
|
|
18
|
+
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
|
19
|
+
|
|
20
|
+
// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
21
|
+
|
|
22
|
+
// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
|
23
|
+
|
|
24
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
25
|
+
|
|
26
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
27
|
+
// Stereo Viewer Toy Transition //
|
|
28
|
+
// //
|
|
29
|
+
// Inspired by ViewMaster / Image3D image viewer devices. //
|
|
30
|
+
// This effect is similar to what you see when you press the device's lever. //
|
|
31
|
+
// There is a quick zoom in / out to make the transition 'valid' for GLSL.io //
|
|
32
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
33
|
+
|
|
34
|
+
const vec4 black = vec4(0.0, 0.0, 0.0, 1.0);
|
|
35
|
+
const vec2 c00 = vec2(0.0, 0.0); // the four corner points
|
|
36
|
+
const vec2 c01 = vec2(0.0, 1.0);
|
|
37
|
+
const vec2 c11 = vec2(1.0, 1.0);
|
|
38
|
+
const vec2 c10 = vec2(1.0, 0.0);
|
|
39
|
+
|
|
40
|
+
// Check if a point is within a given corner
|
|
41
|
+
bool in_corner(vec2 p, vec2 corner, vec2 radius) {
|
|
42
|
+
// determine the direction we want to be filled
|
|
43
|
+
vec2 axis = (c11 - corner) - corner;
|
|
44
|
+
|
|
45
|
+
// warp the point so we are always testing the bottom left point with the
|
|
46
|
+
// circle centered on the origin
|
|
47
|
+
p = p - (corner + axis * radius);
|
|
48
|
+
p *= axis / radius;
|
|
49
|
+
return (p.x > 0.0 && p.y > -1.0) || (p.y > 0.0 && p.x > -1.0) || dot(p, p) < 1.0;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Check all four corners
|
|
53
|
+
// return a float for v2 for anti-aliasing?
|
|
54
|
+
bool test_rounded_mask(vec2 p, vec2 corner_size) {
|
|
55
|
+
return
|
|
56
|
+
in_corner(p, c00, corner_size) &&
|
|
57
|
+
in_corner(p, c01, corner_size) &&
|
|
58
|
+
in_corner(p, c10, corner_size) &&
|
|
59
|
+
in_corner(p, c11, corner_size);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Screen blend mode - https://en.wikipedia.org/wiki/Blend_modes
|
|
63
|
+
// This more closely approximates what you see than linear blending
|
|
64
|
+
vec4 screen(vec4 a, vec4 b) {
|
|
65
|
+
return 1.0 - (1.0 - a) * (1.0 -b);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Given RGBA, find a value that when screened with itself
|
|
69
|
+
// will yield the original value.
|
|
70
|
+
vec4 unscreen(vec4 c) {
|
|
71
|
+
return 1.0 - sqrt(1.0 - c);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Grab a pixel, only if it isn't masked out by the rounded corners
|
|
75
|
+
vec4 sample_with_corners_from(vec2 p, vec2 corner_size) {
|
|
76
|
+
p = (p - 0.5) / zoom + 0.5;
|
|
77
|
+
if (!test_rounded_mask(p, corner_size)) {
|
|
78
|
+
return black;
|
|
79
|
+
}
|
|
80
|
+
return unscreen(getFromColor(p));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
vec4 sample_with_corners_to(vec2 p, vec2 corner_size) {
|
|
84
|
+
p = (p - 0.5) / zoom + 0.5;
|
|
85
|
+
if (!test_rounded_mask(p, corner_size)) {
|
|
86
|
+
return black;
|
|
87
|
+
}
|
|
88
|
+
return unscreen(getToColor(p));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// special sampling used when zooming - extra zoom parameter and don't unscreen
|
|
92
|
+
vec4 simple_sample_with_corners_from(vec2 p, vec2 corner_size, float zoom_amt) {
|
|
93
|
+
p = (p - 0.5) / (1.0 - zoom_amt + zoom * zoom_amt) + 0.5;
|
|
94
|
+
if (!test_rounded_mask(p, corner_size)) {
|
|
95
|
+
return black;
|
|
96
|
+
}
|
|
97
|
+
return getFromColor(p);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
vec4 simple_sample_with_corners_to(vec2 p, vec2 corner_size, float zoom_amt) {
|
|
101
|
+
p = (p - 0.5) / (1.0 - zoom_amt + zoom * zoom_amt) + 0.5;
|
|
102
|
+
if (!test_rounded_mask(p, corner_size)) {
|
|
103
|
+
return black;
|
|
104
|
+
}
|
|
105
|
+
return getToColor(p);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Basic 2D affine transform matrix helpers
|
|
109
|
+
// These really shouldn't be used in a fragment shader - I should work out the
|
|
110
|
+
// the math for a translate & rotate function as a pair of dot products instead
|
|
111
|
+
|
|
112
|
+
mat3 rotate2d(float angle, float ratio) {
|
|
113
|
+
float s = sin(angle);
|
|
114
|
+
float c = cos(angle);
|
|
115
|
+
return mat3(
|
|
116
|
+
c, s ,0.0,
|
|
117
|
+
-s, c, 0.0,
|
|
118
|
+
0.0, 0.0, 1.0);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
mat3 translate2d(float x, float y) {
|
|
122
|
+
return mat3(
|
|
123
|
+
1.0, 0.0, 0,
|
|
124
|
+
0.0, 1.0, 0,
|
|
125
|
+
-x, -y, 1.0);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
mat3 scale2d(float x, float y) {
|
|
129
|
+
return mat3(
|
|
130
|
+
x, 0.0, 0,
|
|
131
|
+
0.0, y, 0,
|
|
132
|
+
0, 0, 1.0);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Split an image and rotate one up and one down along off screen pivot points
|
|
136
|
+
vec4 get_cross_rotated(vec3 p3, float angle, vec2 corner_size, float ratio) {
|
|
137
|
+
angle = angle * angle; // easing
|
|
138
|
+
angle /= 2.4; // works out to be a good number of radians
|
|
139
|
+
|
|
140
|
+
mat3 center_and_scale = translate2d(-0.5, -0.5) * scale2d(1.0, ratio);
|
|
141
|
+
mat3 unscale_and_uncenter = scale2d(1.0, 1.0/ratio) * translate2d(0.5,0.5);
|
|
142
|
+
mat3 slide_left = translate2d(-2.0,0.0);
|
|
143
|
+
mat3 slide_right = translate2d(2.0,0.0);
|
|
144
|
+
mat3 rotate = rotate2d(angle, ratio);
|
|
145
|
+
|
|
146
|
+
mat3 op_a = center_and_scale * slide_right * rotate * slide_left * unscale_and_uncenter;
|
|
147
|
+
mat3 op_b = center_and_scale * slide_left * rotate * slide_right * unscale_and_uncenter;
|
|
148
|
+
|
|
149
|
+
vec4 a = sample_with_corners_from((op_a * p3).xy, corner_size);
|
|
150
|
+
vec4 b = sample_with_corners_from((op_b * p3).xy, corner_size);
|
|
151
|
+
|
|
152
|
+
return screen(a, b);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Image stays put, but this time move two masks
|
|
156
|
+
vec4 get_cross_masked(vec3 p3, float angle, vec2 corner_size, float ratio) {
|
|
157
|
+
angle = 1.0 - angle;
|
|
158
|
+
angle = angle * angle; // easing
|
|
159
|
+
angle /= 2.4;
|
|
160
|
+
|
|
161
|
+
vec4 img;
|
|
162
|
+
|
|
163
|
+
mat3 center_and_scale = translate2d(-0.5, -0.5) * scale2d(1.0, ratio);
|
|
164
|
+
mat3 unscale_and_uncenter = scale2d(1.0 / zoom, 1.0 / (zoom * ratio)) * translate2d(0.5,0.5);
|
|
165
|
+
mat3 slide_left = translate2d(-2.0,0.0);
|
|
166
|
+
mat3 slide_right = translate2d(2.0,0.0);
|
|
167
|
+
mat3 rotate = rotate2d(angle, ratio);
|
|
168
|
+
|
|
169
|
+
mat3 op_a = center_and_scale * slide_right * rotate * slide_left * unscale_and_uncenter;
|
|
170
|
+
mat3 op_b = center_and_scale * slide_left * rotate * slide_right * unscale_and_uncenter;
|
|
171
|
+
|
|
172
|
+
bool mask_a = test_rounded_mask((op_a * p3).xy, corner_size);
|
|
173
|
+
bool mask_b = test_rounded_mask((op_b * p3).xy, corner_size);
|
|
174
|
+
|
|
175
|
+
if (mask_a || mask_b) {
|
|
176
|
+
img = sample_with_corners_to(p3.xy, corner_size);
|
|
177
|
+
return screen(mask_a ? img : black, mask_b ? img : black);
|
|
178
|
+
} else {
|
|
179
|
+
return black;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
vec4 transition(vec2 uv) {
|
|
184
|
+
float a;
|
|
185
|
+
vec2 p=uv.xy/vec2(1.0).xy;
|
|
186
|
+
vec3 p3 = vec3(p.xy, 1.0); // for 2D matrix transforms
|
|
187
|
+
|
|
188
|
+
// corner is warped to represent to size after mapping to 1.0, 1.0
|
|
189
|
+
vec2 corner_size = vec2(corner_radius / ratio, corner_radius);
|
|
190
|
+
|
|
191
|
+
if (progress <= 0.0) {
|
|
192
|
+
// 0.0: start with the base frame always
|
|
193
|
+
return getFromColor(p);
|
|
194
|
+
} else if (progress < 0.1) {
|
|
195
|
+
// 0.0-0.1: zoom out and add rounded corners
|
|
196
|
+
a = progress / 0.1;
|
|
197
|
+
return simple_sample_with_corners_from(p, corner_size * a, a);
|
|
198
|
+
} else if (progress < 0.48) {
|
|
199
|
+
// 0.1-0.48: Split original image apart
|
|
200
|
+
a = (progress - 0.1)/0.38;
|
|
201
|
+
return get_cross_rotated(p3, a, corner_size, ratio);
|
|
202
|
+
} else if (progress < 0.9) {
|
|
203
|
+
// 0.48-0.52: black
|
|
204
|
+
// 0.52 - 0.9: unmask new image
|
|
205
|
+
return get_cross_masked(p3, (progress - 0.52)/0.38, corner_size, ratio);
|
|
206
|
+
} else if (progress < 1.0) {
|
|
207
|
+
// zoom out and add rounded corners
|
|
208
|
+
a = (1.0 - progress) / 0.1;
|
|
209
|
+
return simple_sample_with_corners_to(p, corner_size * a, a);
|
|
210
|
+
} else {
|
|
211
|
+
// 1.0 end with base frame
|
|
212
|
+
return getToColor(p);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
// StripDatamoshGlitch — GLSL ES 3.00, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/StripDatamoshGlitch.glsl
|
|
2
|
+
// Author: bread
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: A datamosh glitch: torn strips, chroma shifts and scan noise drag the outgoing image into the incoming one
|
|
5
|
+
// Tags: glitch, datamosh, chromatic
|
|
6
|
+
|
|
7
|
+
uniform float strength; // = 1.0
|
|
8
|
+
uniform float horizontalBars; // = 42.0
|
|
9
|
+
uniform float verticalSlits; // = 18.0
|
|
10
|
+
uniform float tear; // = 0.18
|
|
11
|
+
uniform float chroma; // = 0.032
|
|
12
|
+
uniform float residue; // = 0.62
|
|
13
|
+
uniform float noiseAmount; // = 0.16
|
|
14
|
+
uniform float scanAmount; // = 0.13
|
|
15
|
+
uniform float flashAmount; // = 0.20
|
|
16
|
+
|
|
17
|
+
const float PI = 3.141592653589793;
|
|
18
|
+
|
|
19
|
+
float hash(float n) {
|
|
20
|
+
return fract(sin(n) * 43758.5453123);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
float hash(vec2 p) {
|
|
24
|
+
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
float sat(float v) {
|
|
28
|
+
return clamp(v, 0.0, 1.0);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
float burst() {
|
|
32
|
+
return pow(max(0.0, sin(progress * PI)), 0.42) * strength;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
vec2 safeUv(vec2 uv) {
|
|
36
|
+
return clamp(uv, vec2(0.0), vec2(1.0));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
float stripeY(vec2 uv, float density, float seed, float minWidth, float maxWidth) {
|
|
40
|
+
float y = uv.y * density + seed * 0.137;
|
|
41
|
+
float id = floor(y);
|
|
42
|
+
float f = fract(y);
|
|
43
|
+
float c = hash(vec2(id, seed));
|
|
44
|
+
float w = mix(minWidth, maxWidth, hash(vec2(id + 9.17, seed + 2.31)));
|
|
45
|
+
return 1.0 - smoothstep(w, w + 0.018, abs(f - c));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
float stripeX(vec2 uv, float density, float seed, float minWidth, float maxWidth) {
|
|
49
|
+
float x = uv.x * density + seed * 0.091;
|
|
50
|
+
float id = floor(x);
|
|
51
|
+
float f = fract(x);
|
|
52
|
+
float c = hash(vec2(id, seed + 41.0));
|
|
53
|
+
float w = mix(minWidth, maxWidth, hash(vec2(id + 4.7, seed + 8.9)));
|
|
54
|
+
return 1.0 - smoothstep(w, w + 0.012, abs(f - c));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
float brokenGate(vec2 uv, float row, float rnd, float frame) {
|
|
58
|
+
float segs = mix(1.0, 9.0, hash(vec2(row, frame + 44.0)));
|
|
59
|
+
float seg = floor(uv.x * segs);
|
|
60
|
+
return step(0.16, hash(vec2(seg, row + frame * 3.0 + rnd)));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
float horizontalMask(vec2 uv, float frame) {
|
|
64
|
+
float r1 = floor((uv.y + hash(frame) * 0.031) * horizontalBars * 0.38);
|
|
65
|
+
float r2 = floor((uv.y + hash(frame + 2.0) * 0.013) * horizontalBars);
|
|
66
|
+
float r3 = floor((uv.y + hash(frame + 7.0) * 0.006) * horizontalBars * 3.4);
|
|
67
|
+
|
|
68
|
+
float thick = stripeY(uv, horizontalBars * 0.38, frame + 1.0, 0.035, 0.22);
|
|
69
|
+
float mid = stripeY(uv, horizontalBars, frame + 4.0, 0.014, 0.11);
|
|
70
|
+
float hair = stripeY(uv, horizontalBars * 3.4, frame + 9.0, 0.004, 0.035);
|
|
71
|
+
|
|
72
|
+
thick *= step(0.42, hash(vec2(r1, frame + 10.0)));
|
|
73
|
+
mid *= step(0.48, hash(vec2(r2, frame + 20.0)));
|
|
74
|
+
hair *= step(0.62, hash(vec2(r3, frame + 30.0)));
|
|
75
|
+
|
|
76
|
+
thick *= brokenGate(uv, r1, hash(vec2(r1, frame)), frame);
|
|
77
|
+
mid *= brokenGate(uv, r2, hash(vec2(r2, frame)), frame + 3.0);
|
|
78
|
+
|
|
79
|
+
return sat(max(thick, max(mid, hair)));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
float verticalMask(vec2 uv, float frame) {
|
|
83
|
+
float col = floor((uv.x + hash(frame + 12.0) * 0.017) * verticalSlits);
|
|
84
|
+
float slit = stripeX(uv, verticalSlits, frame + 13.0, 0.01, 0.075);
|
|
85
|
+
slit *= step(0.66, hash(vec2(col, frame + 19.0)));
|
|
86
|
+
return sat(slit);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
vec4 chromaFrom(vec2 uv, vec2 s) {
|
|
90
|
+
uv = safeUv(uv);
|
|
91
|
+
return vec4(
|
|
92
|
+
getFromColor(safeUv(uv + s)).r,
|
|
93
|
+
getFromColor(uv).g,
|
|
94
|
+
getFromColor(safeUv(uv - s)).b,
|
|
95
|
+
1.0
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
vec4 chromaTo(vec2 uv, vec2 s) {
|
|
100
|
+
uv = safeUv(uv);
|
|
101
|
+
return vec4(
|
|
102
|
+
getToColor(safeUv(uv - s)).r,
|
|
103
|
+
getToColor(uv).g,
|
|
104
|
+
getToColor(safeUv(uv + s)).b,
|
|
105
|
+
1.0
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
vec2 distortUv(vec2 uv, float dir, float b, float h, float v, float frame) {
|
|
110
|
+
float row = floor(uv.y * horizontalBars);
|
|
111
|
+
float col = floor(uv.x * verticalSlits);
|
|
112
|
+
|
|
113
|
+
float rowRnd = hash(vec2(row, frame));
|
|
114
|
+
float colRnd = hash(vec2(col, frame + 27.0));
|
|
115
|
+
|
|
116
|
+
float xTear = (rowRnd - 0.5) * 2.0 * tear * b * h;
|
|
117
|
+
xTear += sin(uv.y * 120.0 + progress * 95.0) * 0.006 * b;
|
|
118
|
+
|
|
119
|
+
float yDrag = (colRnd - 0.5) * 0.13 * b * v;
|
|
120
|
+
float micro = (hash(vec2(row, col + frame)) - 0.5) * 0.018 * b * max(h, v);
|
|
121
|
+
|
|
122
|
+
return uv + vec2(xTear * dir + micro, yDrag);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
vec4 transition(vec2 uv) {
|
|
126
|
+
if (progress <= 0.0) return getFromColor(uv);
|
|
127
|
+
if (progress >= 1.0) return getToColor(uv);
|
|
128
|
+
|
|
129
|
+
float b = burst();
|
|
130
|
+
float frame = floor(progress * 30.0);
|
|
131
|
+
|
|
132
|
+
float h = horizontalMask(uv, frame);
|
|
133
|
+
float v = verticalMask(uv, frame);
|
|
134
|
+
float glitch = sat(max(h, v * 0.75));
|
|
135
|
+
|
|
136
|
+
float row = floor(uv.y * horizontalBars);
|
|
137
|
+
float rowRnd = hash(vec2(row, frame + 5.0));
|
|
138
|
+
|
|
139
|
+
float bandDelay = (rowRnd - 0.5) * 0.30 * h;
|
|
140
|
+
float reveal = smoothstep(0.18, 0.84, progress + bandDelay);
|
|
141
|
+
|
|
142
|
+
vec2 split = vec2(chroma * b * (1.0 + 1.7 * glitch), chroma * 0.22 * b * v);
|
|
143
|
+
|
|
144
|
+
vec2 fromUv = distortUv(uv, 1.0, b, h, v, frame);
|
|
145
|
+
vec2 toUv = distortUv(uv, -1.0, b, h, v, frame);
|
|
146
|
+
|
|
147
|
+
vec4 color = mix(
|
|
148
|
+
chromaFrom(fromUv, split),
|
|
149
|
+
chromaTo(toUv, split),
|
|
150
|
+
reveal
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
// Horizontal time-slice residue: old/new frames dragged through uneven scan bands.
|
|
154
|
+
vec2 smearUv = uv;
|
|
155
|
+
smearUv.x += (rowRnd - 0.5) * 0.46 * b * h;
|
|
156
|
+
smearUv.y += (hash(vec2(row, frame + 31.0)) - 0.5) * 0.045 * b * h;
|
|
157
|
+
|
|
158
|
+
float sliceReveal = smoothstep(0.28, 0.78, progress + (rowRnd - 0.5) * 0.22);
|
|
159
|
+
vec4 sliceColor = mix(
|
|
160
|
+
chromaFrom(smearUv, split * 1.65),
|
|
161
|
+
chromaTo(smearUv - vec2((rowRnd - 0.5) * 0.18 * b, 0.0), split * 1.65),
|
|
162
|
+
sliceReveal
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
color = mix(color, sliceColor, h * b * residue);
|
|
166
|
+
|
|
167
|
+
// Thin scan sparks and broken white lines, like the reference clip's bright horizontal noise.
|
|
168
|
+
float hairLine = stripeY(uv, 190.0, frame + 55.0, 0.002, 0.012);
|
|
169
|
+
hairLine *= step(0.70, hash(vec2(floor(uv.y * 190.0), frame + 56.0)));
|
|
170
|
+
color.rgb += vec3(0.72, 0.90, 1.0) * hairLine * b * 0.28;
|
|
171
|
+
|
|
172
|
+
float scan = 0.5 + 0.5 * sin(uv.y * 980.0 + progress * 130.0);
|
|
173
|
+
color.rgb *= 1.0 - scanAmount * b * scan;
|
|
174
|
+
|
|
175
|
+
vec2 nCell = floor(uv * vec2(360.0 * ratio, 210.0));
|
|
176
|
+
float n = hash(nCell + vec2(frame * 7.0, frame * 13.0));
|
|
177
|
+
color.rgb += (n - 0.5) * noiseAmount * b * (0.55 + glitch);
|
|
178
|
+
|
|
179
|
+
// Slight desaturation during the damage peak makes it feel more like broadcast/video signal corruption.
|
|
180
|
+
float luma = dot(color.rgb, vec3(0.299, 0.587, 0.114));
|
|
181
|
+
color.rgb = mix(color.rgb, vec3(luma), 0.18 * b * glitch);
|
|
182
|
+
|
|
183
|
+
float strobe = step(0.78, hash(vec2(frame, 3.14))) * pow(b, 1.65);
|
|
184
|
+
color.rgb += vec3(strobe * flashAmount);
|
|
185
|
+
|
|
186
|
+
return vec4(clamp(color.rgb, vec3(0.0), vec3(1.0)), 1.0);
|
|
187
|
+
}
|
package/glsl3/Swirl.glsl
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Swirl — GLSL ES 3.00, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/Swirl.glsl
|
|
2
|
+
// License: MIT
|
|
3
|
+
// Author: Sergey Kosarevsky
|
|
4
|
+
// Description: Both images swirl around the center while crossfading
|
|
5
|
+
// Tags: swirl, rotate, blend
|
|
6
|
+
// ( http://www.linderdaum.com )
|
|
7
|
+
// ported by gre from https://gist.github.com/corporateshark/cacfedb8cca0f5ce3f7c
|
|
8
|
+
|
|
9
|
+
vec4 transition(vec2 UV)
|
|
10
|
+
{
|
|
11
|
+
float Radius = 1.0;
|
|
12
|
+
|
|
13
|
+
float T = progress;
|
|
14
|
+
|
|
15
|
+
UV -= vec2( 0.5, 0.5 );
|
|
16
|
+
|
|
17
|
+
float Dist = length(UV);
|
|
18
|
+
|
|
19
|
+
if ( Dist < Radius )
|
|
20
|
+
{
|
|
21
|
+
float Percent = (Radius - Dist) / Radius;
|
|
22
|
+
float A = ( T <= 0.5 ) ? mix( 0.0, 1.0, T/0.5 ) : mix( 1.0, 0.0, (T-0.5)/0.5 );
|
|
23
|
+
float Theta = Percent * Percent * A * 8.0 * 3.14159;
|
|
24
|
+
float S = sin( Theta );
|
|
25
|
+
float C = cos( Theta );
|
|
26
|
+
UV = vec2( dot(UV, vec2(C, -S)), dot(UV, vec2(S, C)) );
|
|
27
|
+
}
|
|
28
|
+
UV += vec2( 0.5, 0.5 );
|
|
29
|
+
|
|
30
|
+
vec4 C0 = getFromColor(UV);
|
|
31
|
+
vec4 C1 = getToColor(UV);
|
|
32
|
+
|
|
33
|
+
return mix( C0, C1, T );
|
|
34
|
+
}
|