gl-transitions
Version:
The open collection of GL Transitions
175 lines (161 loc) • 4.28 kB
text/wgsl
// perlin — WGSL, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/perlin.glsl
// Author: Rich Harris
// License: MIT
// Description: The incoming image appears through blobs of Perlin noise
// Bindings and uniform layout: see the gl-transitions package README
struct Uniforms {
progress: f32,
ratio: f32,
scale: f32,
smoothness: f32,
seed: 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 random(co: ptr<function, vec2<f32>>) -> f32 {
var a: f32;
var b: f32;
var c: f32;
var dt: f32;
var sn: f32;
let _e29 = uniforms.seed;
a = _e29;
b = 78.233f;
c = 43758.547f;
let _e30 = (*co);
let _e31 = a;
let _e32 = b;
dt = dot(_e30, vec2<f32>(_e31, _e32));
let _e35 = dt;
sn = (_e35 - (floor((_e35 / 3.14f)) * 3.14f));
let _e40 = sn;
let _e42 = c;
return fract((sin(_e40) * _e42));
}
fn noise(st: ptr<function, vec2<f32>>) -> f32 {
var i: vec2<f32>;
var f: vec2<f32>;
var a_1: f32;
var param: vec2<f32>;
var b_1: f32;
var param_1: vec2<f32>;
var c_1: f32;
var param_2: vec2<f32>;
var d: f32;
var param_3: vec2<f32>;
var u: vec2<f32>;
let _e34 = (*st);
i = floor(_e34);
let _e36 = (*st);
f = fract(_e36);
let _e38 = i;
param = _e38;
let _e39 = random((¶m));
a_1 = _e39;
let _e40 = i;
param_1 = (_e40 + vec2<f32>(1f, 0f));
let _e42 = random((¶m_1));
b_1 = _e42;
let _e43 = i;
param_2 = (_e43 + vec2<f32>(0f, 1f));
let _e45 = random((¶m_2));
c_1 = _e45;
let _e46 = i;
param_3 = (_e46 + vec2<f32>(1f, 1f));
let _e48 = random((¶m_3));
d = _e48;
let _e49 = f;
let _e50 = f;
let _e52 = f;
u = ((_e49 * _e50) * (vec2(3f) - (_e52 * 2f)));
let _e57 = a_1;
let _e58 = b_1;
let _e60 = u[0u];
let _e62 = c_1;
let _e63 = a_1;
let _e66 = u[1u];
let _e69 = u[0u];
let _e73 = d;
let _e74 = b_1;
let _e77 = u[0u];
let _e80 = u[1u];
return ((mix(_e57, _e58, _e60) + (((_e62 - _e63) * _e66) * (1f - _e69))) + (((_e73 - _e74) * _e77) * _e80));
}
fn getToColor(uv: ptr<function, vec2<f32>>) -> vec4<f32> {
let _e24 = (*uv)[0u];
let _e26 = (*uv)[1u];
let _e29 = textureSampleLevel(_to, _sampler, vec2<f32>(_e24, (1f - _e26)), 0f);
return _e29;
}
fn getFromColor(uv_1: ptr<function, vec2<f32>>) -> vec4<f32> {
let _e24 = (*uv_1)[0u];
let _e26 = (*uv_1)[1u];
let _e29 = textureSampleLevel(_from, _sampler, vec2<f32>(_e24, (1f - _e26)), 0f);
return _e29;
}
fn transition(uv_2: ptr<function, vec2<f32>>) -> vec4<f32> {
var from_: vec4<f32>;
var param_4: vec2<f32>;
var to: vec4<f32>;
var param_5: vec2<f32>;
var n: f32;
var param_6: vec2<f32>;
var p: f32;
var lower: f32;
var higher: f32;
var q: f32;
let _e33 = (*uv_2);
param_4 = _e33;
let _e34 = getFromColor((¶m_4));
from_ = _e34;
let _e35 = (*uv_2);
param_5 = _e35;
let _e36 = getToColor((¶m_5));
to = _e36;
let _e37 = (*uv_2);
let _e39 = uniforms.scale;
param_6 = (_e37 * _e39);
let _e41 = noise((¶m_6));
n = _e41;
let _e43 = uniforms.smoothness;
let _e46 = uniforms.smoothness;
let _e49 = uniforms.progress;
p = mix(-(_e43), (1f + _e46), _e49);
let _e51 = p;
let _e53 = uniforms.smoothness;
lower = (_e51 - _e53);
let _e55 = p;
let _e57 = uniforms.smoothness;
higher = (_e55 + _e57);
let _e59 = lower;
let _e60 = higher;
let _e61 = n;
q = smoothstep(_e59, _e60, _e61);
let _e63 = from_;
let _e64 = to;
let _e65 = q;
return mix(_e63, _e64, vec4((1f - _e65)));
}
fn main_1() {
var param_7: vec2<f32>;
let _e23 = _uv_1;
param_7 = _e23;
let _e24 = transition((¶m_7));
_fragColor = _e24;
return;
}
fn main( _uv: vec2<f32>) -> vec4<f32> {
_uv_1 = _uv;
main_1();
let _e3 = _fragColor;
return _e3;
}