gl-transitions
Version:
The open collection of GL Transitions
328 lines (308 loc) • 8.66 kB
text/wgsl
// GlitchDisplace — WGSL, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/GlitchDisplace.glsl
// Author: Matt DesLauriers
// License: MIT
// Description: Blocks of the image are displaced in a glitch that flashes into the incoming image
// Bindings and uniform layout: see the gl-transitions package README
struct Uniforms {
progress: f32,
ratio: f32,
}
var _from: texture_2d<f32>;
var _sampler: sampler;
var _to: texture_2d<f32>;
var<uniform> uniforms: Uniforms;
var<private> _fragColor: vec4<f32>;
var<private> _uv_1: vec2<f32>;
fn ease2(t: ptr<function, f32>) -> f32 {
var local: f32;
let _e34 = (*t);
if (_e34 == 1f) {
let _e36 = (*t);
local = _e36;
} else {
let _e37 = (*t);
local = (1f - pow(2f, (-10f * _e37)));
}
let _e41 = local;
return _e41;
}
fn random(co: ptr<function, vec2<f32>>) -> f32 {
var a: f32;
var b: f32;
var c: f32;
var dt: f32;
var sn: f32;
a = 12.9898f;
b = 78.233f;
c = 43758.547f;
let _e38 = (*co);
let _e39 = a;
let _e40 = b;
dt = dot(_e38, vec2<f32>(_e39, _e40));
let _e43 = dt;
sn = (_e43 - (floor((_e43 / 3.14f)) * 3.14f));
let _e48 = sn;
let _e50 = c;
return fract((sin(_e48) * _e50));
}
fn voronoi(x: ptr<function, vec2<f32>>) -> f32 {
var p: vec2<f32>;
var f: vec2<f32>;
var res: f32;
var j: f32;
var i: f32;
var b_1: vec2<f32>;
var r: vec2<f32>;
var param: vec2<f32>;
var d: f32;
let _e42 = (*x);
p = floor(_e42);
let _e44 = (*x);
f = fract(_e44);
res = 8f;
j = -1f;
loop {
let _e46 = j;
if (_e46 <= 1f) {
i = -1f;
loop {
let _e48 = i;
if (_e48 <= 1f) {
let _e50 = i;
let _e51 = j;
b_1 = vec2<f32>(_e50, _e51);
let _e53 = b_1;
let _e54 = f;
let _e56 = p;
let _e57 = b_1;
param = (_e56 + _e57);
let _e59 = random((¶m));
r = ((_e53 - _e54) + vec2(_e59));
let _e62 = r;
let _e63 = r;
d = dot(_e62, _e63);
let _e65 = res;
let _e66 = d;
res = min(_e65, _e66);
continue;
} else {
break;
}
continuing {
let _e68 = i;
i = (_e68 + 1f);
}
}
continue;
} else {
break;
}
continuing {
let _e70 = j;
j = (_e70 + 1f);
}
}
let _e72 = res;
return sqrt(_e72);
}
fn displace(tex: ptr<function, vec4<f32>>, texCoord: ptr<function, vec2<f32>>, dotDepth: ptr<function, f32>, textureDepth: ptr<function, f32>, strength: ptr<function, f32>) -> vec2<f32> {
var b_2: f32;
var param_1: vec2<f32>;
var g: f32;
var param_2: vec2<f32>;
var r_1: f32;
var param_3: vec2<f32>;
var dt_1: vec4<f32>;
var dis: vec4<f32>;
var res_uv: vec2<f32>;
let _e46 = (*texCoord);
param_1 = ((_e46 * 0.003f) + vec2(2f));
let _e50 = voronoi((¶m_1));
b_2 = _e50;
let _e51 = (*texCoord);
param_2 = (_e51 * 0.2f);
let _e53 = voronoi((¶m_2));
g = _e53;
let _e54 = (*texCoord);
param_3 = (_e54 - vec2(1f));
let _e57 = voronoi((¶m_3));
r_1 = _e57;
let _e58 = (*tex);
dt_1 = (_e58 * 1f);
let _e60 = dt_1;
let _e61 = (*dotDepth);
let _e65 = (*tex);
let _e66 = (*textureDepth);
dis = (((_e60 * _e61) + vec4(1f)) - (_e65 * _e66));
let _e70 = dis[0u];
let _e72 = (*textureDepth);
let _e73 = (*dotDepth);
dis[0u] = ((_e70 - 1f) + (_e72 * _e73));
let _e78 = dis[1u];
let _e80 = (*textureDepth);
let _e81 = (*dotDepth);
dis[1u] = ((_e78 - 1f) + (_e80 * _e81));
let _e85 = (*strength);
let _e87 = dis[0u];
dis[0u] = (_e87 * _e85);
let _e90 = (*strength);
let _e92 = dis[1u];
dis[1u] = (_e92 * _e90);
let _e95 = (*texCoord);
res_uv = _e95;
let _e97 = res_uv[0u];
let _e99 = dis[0u];
res_uv[0u] = ((_e97 + _e99) - 0f);
let _e104 = res_uv[1u];
let _e106 = dis[1u];
res_uv[1u] = (_e104 + _e106);
let _e109 = res_uv;
return _e109;
}
fn ease1(t_1: ptr<function, f32>) -> f32 {
var local_1: f32;
var local_2: f32;
let _e35 = (*t_1);
let _e37 = (*t_1);
if ((_e35 == 0f) || (_e37 == 1f)) {
let _e40 = (*t_1);
local_1 = _e40;
} else {
let _e41 = (*t_1);
if (_e41 < 0.5f) {
let _e43 = (*t_1);
local_2 = (0.5f * pow(2f, ((20f * _e43) - 10f)));
} else {
let _e48 = (*t_1);
local_2 = ((-0.5f * pow(2f, (10f - (_e48 * 20f)))) + 1f);
}
let _e54 = local_2;
local_1 = _e54;
}
let _e55 = local_1;
return _e55;
}
fn getToColor(uv: ptr<function, vec2<f32>>) -> vec4<f32> {
let _e34 = (*uv)[0u];
let _e36 = (*uv)[1u];
let _e39 = textureSampleLevel(_to, _sampler, vec2<f32>(_e34, (1f - _e36)), 0f);
return _e39;
}
fn getFromColor(uv_1: ptr<function, vec2<f32>>) -> vec4<f32> {
let _e34 = (*uv_1)[0u];
let _e36 = (*uv_1)[1u];
let _e39 = textureSampleLevel(_from, _sampler, vec2<f32>(_e34, (1f - _e36)), 0f);
return _e39;
}
fn transition(uv_2: ptr<function, vec2<f32>>) -> vec4<f32> {
var p_1: vec2<f32>;
var color1_: vec4<f32>;
var param_4: vec2<f32>;
var color2_: vec4<f32>;
var param_5: vec2<f32>;
var disp: vec2<f32>;
var param_6: f32;
var param_7: vec4<f32>;
var param_8: vec2<f32>;
var param_9: f32;
var param_10: f32;
var param_11: f32;
var disp2_: vec2<f32>;
var param_12: f32;
var param_13: vec4<f32>;
var param_14: vec2<f32>;
var param_15: f32;
var param_16: f32;
var param_17: f32;
var dColor1_: vec4<f32>;
var param_18: vec2<f32>;
var dColor2_: vec4<f32>;
var param_19: vec2<f32>;
var val: f32;
var param_20: f32;
var gray: vec3<f32>;
let _e59 = (*uv_2);
p_1 = (_e59 / vec2<f32>(1f, 1f));
let _e61 = p_1;
param_4 = _e61;
let _e62 = getFromColor((¶m_4));
color1_ = _e62;
let _e63 = p_1;
param_5 = _e63;
let _e64 = getToColor((¶m_5));
color2_ = _e64;
let _e66 = uniforms.progress;
param_6 = _e66;
let _e67 = ease1((¶m_6));
let _e69 = color1_;
param_7 = _e69;
let _e70 = p_1;
param_8 = _e70;
param_9 = 0.33f;
param_10 = 0.7f;
param_11 = (1f - _e67);
let _e71 = displace((¶m_7), (¶m_8), (¶m_9), (¶m_10), (¶m_11));
disp = _e71;
let _e73 = uniforms.progress;
param_12 = _e73;
let _e74 = ease2((¶m_12));
let _e75 = color2_;
param_13 = _e75;
let _e76 = p_1;
param_14 = _e76;
param_15 = 0.33f;
param_16 = 0.5f;
param_17 = _e74;
let _e77 = displace((¶m_13), (¶m_14), (¶m_15), (¶m_16), (¶m_17));
disp2_ = _e77;
let _e78 = disp;
param_18 = _e78;
let _e79 = getToColor((¶m_18));
dColor1_ = _e79;
let _e80 = disp2_;
param_19 = _e80;
let _e81 = getFromColor((¶m_19));
dColor2_ = _e81;
let _e83 = uniforms.progress;
param_20 = _e83;
let _e84 = ease1((¶m_20));
val = _e84;
let _e85 = dColor2_;
let _e86 = dColor1_;
gray = vec3(dot(min(_e85, _e86).xyz, vec3<f32>(0.299f, 0.587f, 0.114f)));
let _e91 = gray;
dColor2_ = vec4<f32>(_e91.x, _e91.y, _e91.z, 1f);
let _e96 = dColor2_;
dColor2_ = (_e96 * 2f);
let _e98 = color1_;
let _e99 = dColor2_;
let _e101 = uniforms.progress;
color1_ = mix(_e98, _e99, vec4(smoothstep(0f, 0.5f, _e101)));
let _e105 = color2_;
let _e106 = dColor1_;
let _e108 = uniforms.progress;
color2_ = mix(_e105, _e106, vec4(smoothstep(1f, 0.5f, _e108)));
let _e112 = color1_;
let _e113 = color2_;
let _e114 = val;
return mix(_e112, _e113, vec4(_e114));
}
fn main_1() {
var param_21: vec2<f32>;
let _e33 = _uv_1;
param_21 = _e33;
let _e34 = transition((¶m_21));
_fragColor = _e34;
return;
}
fn main( _uv: vec2<f32>) -> vec4<f32> {
_uv_1 = _uv;
main_1();
let _e3 = _fragColor;
return _e3;
}