gl-transitions
Version:
The open collection of GL Transitions
239 lines (220 loc) • 6.1 kB
text/wgsl
// hexagonalize — WGSL, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/hexagonalize.glsl
// Author: Fernando Kuteken
// License: MIT
// Description: Both images turn into hexagons, crossfade, then sharpen again
// Bindings and uniform layout: see the gl-transitions package README
struct Hexagon {
q: f32,
r: f32,
s: f32,
}
struct Uniforms {
progress: f32,
ratio: f32,
steps: i32,
horizontalHexagons: 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 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 pointFromHexagon(hex: ptr<function, Hexagon>, size: ptr<function, f32>) -> vec2<f32> {
var x: f32;
var y: f32;
let _e27 = (*hex).q;
let _e30 = (*hex).r;
let _e33 = (*size);
x = ((((1.7320508f * _e27) + (0.8660254f * _e30)) * _e33) + 0.5f);
let _e37 = (*hex).q;
let _e40 = (*hex).r;
let _e43 = (*size);
y = ((((0f * _e37) + (1.5f * _e40)) * _e43) + 0.5f);
let _e46 = x;
let _e47 = y;
let _e49 = uniforms.ratio;
return vec2<f32>(_e46, (_e47 * _e49));
}
fn createHexagon(q: ptr<function, f32>, r: ptr<function, f32>) -> Hexagon {
var hex_1: Hexagon;
let _e25 = (*q);
hex_1.q = _e25;
let _e27 = (*r);
hex_1.r = _e27;
let _e29 = (*q);
let _e31 = (*r);
hex_1.s = (-(_e29) - _e31);
let _e34 = hex_1;
return _e34;
}
fn roundHexagon(hex_2: ptr<function, Hexagon>) -> Hexagon {
var q_1: f32;
var r_1: f32;
var s: f32;
var deltaQ: f32;
var deltaR: f32;
var deltaS: f32;
var param: f32;
var param_1: f32;
let _e32 = (*hex_2).q;
q_1 = floor((_e32 + 0.5f));
let _e36 = (*hex_2).r;
r_1 = floor((_e36 + 0.5f));
let _e40 = (*hex_2).s;
s = floor((_e40 + 0.5f));
let _e43 = q_1;
let _e45 = (*hex_2).q;
deltaQ = abs((_e43 - _e45));
let _e48 = r_1;
let _e50 = (*hex_2).r;
deltaR = abs((_e48 - _e50));
let _e53 = s;
let _e55 = (*hex_2).s;
deltaS = abs((_e53 - _e55));
let _e58 = deltaQ;
let _e59 = deltaR;
let _e61 = deltaQ;
let _e62 = deltaS;
if ((_e58 > _e59) && (_e61 > _e62)) {
let _e65 = r_1;
let _e67 = s;
q_1 = (-(_e65) - _e67);
} else {
let _e69 = deltaR;
let _e70 = deltaS;
if (_e69 > _e70) {
let _e72 = q_1;
let _e74 = s;
r_1 = (-(_e72) - _e74);
} else {
let _e76 = q_1;
let _e78 = r_1;
s = (-(_e76) - _e78);
}
}
let _e80 = q_1;
param = _e80;
let _e81 = r_1;
param_1 = _e81;
let _e82 = createHexagon((¶m), (¶m_1));
return _e82;
}
fn hexagonFromPoint(point: ptr<function, vec2<f32>>, size_1: ptr<function, f32>) -> Hexagon {
var q_2: f32;
var r_2: f32;
var hex_3: Hexagon;
var param_2: f32;
var param_3: f32;
var param_4: Hexagon;
let _e31 = uniforms.ratio;
let _e33 = (*point)[1u];
(*point)[1u] = (_e33 / _e31);
let _e36 = (*point);
let _e39 = (*size_1);
(*point) = ((_e36 - vec2(0.5f)) / vec2(_e39));
let _e43 = (*point)[0u];
let _e46 = (*point)[1u];
q_2 = ((0.57735026f * _e43) + (-0.33333334f * _e46));
let _e50 = (*point)[0u];
let _e53 = (*point)[1u];
r_2 = ((0f * _e50) + (0.6666667f * _e53));
let _e56 = q_2;
param_2 = _e56;
let _e57 = r_2;
param_3 = _e57;
let _e58 = createHexagon((¶m_2), (¶m_3));
hex_3 = _e58;
let _e59 = hex_3;
param_4 = _e59;
let _e60 = roundHexagon((¶m_4));
return _e60;
}
fn transition(uv_2: ptr<function, vec2<f32>>) -> vec4<f32> {
var dist: f32;
var local: f32;
var size_2: f32;
var point_1: vec2<f32>;
var local_1: vec2<f32>;
var param_5: vec2<f32>;
var param_6: f32;
var param_7: Hexagon;
var param_8: f32;
var param_9: vec2<f32>;
var param_10: vec2<f32>;
let _e35 = uniforms.progress;
let _e37 = uniforms.progress;
dist = (2f * min(_e35, (1f - _e37)));
let _e42 = uniforms.steps;
if (_e42 > 0i) {
let _e44 = dist;
let _e46 = uniforms.steps;
let _e51 = uniforms.steps;
local = (ceil((_e44 * f32(_e46))) / f32(_e51));
} else {
let _e54 = dist;
local = _e54;
}
let _e55 = local;
dist = _e55;
let _e56 = dist;
let _e59 = uniforms.horizontalHexagons;
size_2 = ((0.57735026f * _e56) / _e59);
let _e61 = dist;
if (_e61 > 0f) {
let _e63 = (*uv_2);
param_5 = _e63;
let _e64 = size_2;
param_6 = _e64;
let _e65 = hexagonFromPoint((¶m_5), (¶m_6));
param_7 = _e65;
let _e66 = size_2;
param_8 = _e66;
let _e67 = pointFromHexagon((¶m_7), (¶m_8));
local_1 = _e67;
} else {
let _e68 = (*uv_2);
local_1 = _e68;
}
let _e69 = local_1;
point_1 = _e69;
let _e70 = point_1;
param_9 = _e70;
let _e71 = getFromColor((¶m_9));
let _e72 = point_1;
param_10 = _e72;
let _e73 = getToColor((¶m_10));
let _e75 = uniforms.progress;
return mix(_e71, _e73, vec4(_e75));
}
fn main_1() {
var param_11: vec2<f32>;
let _e23 = _uv_1;
param_11 = _e23;
let _e24 = transition((¶m_11));
_fragColor = _e24;
return;
}
fn main( _uv: vec2<f32>) -> vec4<f32> {
_uv_1 = _uv;
main_1();
let _e3 = _fragColor;
return _e3;
}