gl-transitions
Version:
The open collection of GL Transitions
626 lines (594 loc) • 19 kB
text/wgsl
// StereoViewer — WGSL, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/StereoViewer.glsl
// Author: Ted Schundler
// License: BSD 2 Clause
// Description: Both images shrink into rounded cards that swap, like a stereo viewer toy
// Bindings and uniform layout: see the gl-transitions package README
struct Uniforms {
progress: f32,
ratio: f32,
zoom: f32,
corner_radius: f32,
}
@group(0) @binding(2)
var _from: texture_2d<f32>;
@group(0) @binding(1)
var _sampler: sampler;
@group(0) @binding(3)
var _to: texture_2d<f32>;
@group(0) @binding(0)
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 _e32 = (*uv)[0u];
let _e34 = (*uv)[1u];
let _e37 = textureSampleLevel(_to, _sampler, vec2<f32>(_e32, (1f - _e34)), 0f);
return _e37;
}
fn in_corner(p: ptr<function, vec2<f32>>, corner: ptr<function, vec2<f32>>, radius: ptr<function, vec2<f32>>) -> bool {
var axis: vec2<f32>;
var phi_156_: bool;
var phi_168_: bool;
var phi_169_: bool;
var phi_177_: bool;
let _e34 = (*corner);
let _e36 = (*corner);
axis = ((vec2<f32>(1f, 1f) - _e34) - _e36);
let _e38 = (*p);
let _e39 = (*corner);
let _e40 = axis;
let _e41 = (*radius);
(*p) = (_e38 - (_e39 + (_e40 * _e41)));
let _e45 = axis;
let _e46 = (*radius);
let _e48 = (*p);
(*p) = (_e48 * (_e45 / _e46));
let _e51 = (*p)[0u];
let _e52 = (_e51 > 0f);
phi_156_ = _e52;
if _e52 {
let _e54 = (*p)[1u];
phi_156_ = (_e54 > -1f);
}
let _e57 = phi_156_;
phi_169_ = _e57;
if !(_e57) {
let _e60 = (*p)[1u];
let _e61 = (_e60 > 0f);
phi_168_ = _e61;
if _e61 {
let _e63 = (*p)[0u];
phi_168_ = (_e63 > -1f);
}
let _e66 = phi_168_;
phi_169_ = _e66;
}
let _e68 = phi_169_;
phi_177_ = _e68;
if !(_e68) {
let _e70 = (*p);
let _e71 = (*p);
phi_177_ = (dot(_e70, _e71) < 1f);
}
let _e75 = phi_177_;
return _e75;
}
fn test_rounded_mask(p_1: ptr<function, vec2<f32>>, corner_size: ptr<function, vec2<f32>>) -> bool {
var param: vec2<f32>;
var param_1: vec2<f32>;
var param_2: vec2<f32>;
var param_3: vec2<f32>;
var param_4: vec2<f32>;
var param_5: vec2<f32>;
var param_6: vec2<f32>;
var param_7: vec2<f32>;
var param_8: vec2<f32>;
var param_9: vec2<f32>;
var param_10: vec2<f32>;
var param_11: vec2<f32>;
var phi_196_: bool;
var phi_206_: bool;
var phi_215_: bool;
let _e44 = (*p_1);
param = _e44;
param_1 = vec2<f32>(0f, 0f);
let _e45 = (*corner_size);
param_2 = _e45;
let _e46 = in_corner((¶m), (¶m_1), (¶m_2));
phi_196_ = _e46;
if _e46 {
let _e47 = (*p_1);
param_3 = _e47;
param_4 = vec2<f32>(0f, 1f);
let _e48 = (*corner_size);
param_5 = _e48;
let _e49 = in_corner((¶m_3), (¶m_4), (¶m_5));
phi_196_ = _e49;
}
let _e51 = phi_196_;
phi_206_ = _e51;
if _e51 {
let _e52 = (*p_1);
param_6 = _e52;
param_7 = vec2<f32>(1f, 0f);
let _e53 = (*corner_size);
param_8 = _e53;
let _e54 = in_corner((¶m_6), (¶m_7), (¶m_8));
phi_206_ = _e54;
}
let _e56 = phi_206_;
phi_215_ = _e56;
if _e56 {
let _e57 = (*p_1);
param_9 = _e57;
param_10 = vec2<f32>(1f, 1f);
let _e58 = (*corner_size);
param_11 = _e58;
let _e59 = in_corner((¶m_9), (¶m_10), (¶m_11));
phi_215_ = _e59;
}
let _e61 = phi_215_;
return _e61;
}
fn simple_sample_with_corners_to(p_2: ptr<function, vec2<f32>>, corner_size_1: ptr<function, vec2<f32>>, zoom_amt: ptr<function, f32>) -> vec4<f32> {
var param_12: vec2<f32>;
var param_13: vec2<f32>;
var param_14: vec2<f32>;
let _e36 = (*p_2);
let _e39 = (*zoom_amt);
let _e42 = uniforms.zoom;
let _e43 = (*zoom_amt);
(*p_2) = (((_e36 - vec2(0.5f)) / vec2(((1f - _e39) + (_e42 * _e43)))) + vec2(0.5f));
let _e50 = (*p_2);
param_12 = _e50;
let _e51 = (*corner_size_1);
param_13 = _e51;
let _e52 = test_rounded_mask((¶m_12), (¶m_13));
if !(_e52) {
return vec4<f32>(0f, 0f, 0f, 1f);
}
let _e54 = (*p_2);
param_14 = _e54;
let _e55 = getToColor((¶m_14));
return _e55;
}
fn screen(a: ptr<function, vec4<f32>>, b: ptr<function, vec4<f32>>) -> vec4<f32> {
let _e32 = (*a);
let _e35 = (*b);
return (vec4(1f) - ((vec4(1f) - _e32) * (vec4(1f) - _e35)));
}
fn unscreen(c: ptr<function, vec4<f32>>) -> vec4<f32> {
let _e31 = (*c);
return (vec4(1f) - sqrt((vec4(1f) - _e31)));
}
fn sample_with_corners_to(p_3: ptr<function, vec2<f32>>, corner_size_2: ptr<function, vec2<f32>>) -> vec4<f32> {
var param_15: vec2<f32>;
var param_16: vec2<f32>;
var param_17: vec2<f32>;
var param_18: vec4<f32>;
let _e36 = (*p_3);
let _e40 = uniforms.zoom;
(*p_3) = (((_e36 - vec2(0.5f)) / vec2(_e40)) + vec2(0.5f));
let _e45 = (*p_3);
param_15 = _e45;
let _e46 = (*corner_size_2);
param_16 = _e46;
let _e47 = test_rounded_mask((¶m_15), (¶m_16));
if !(_e47) {
return vec4<f32>(0f, 0f, 0f, 1f);
}
let _e49 = (*p_3);
param_17 = _e49;
let _e50 = getToColor((¶m_17));
param_18 = _e50;
let _e51 = unscreen((¶m_18));
return _e51;
}
fn rotate2d(angle: ptr<function, f32>, ratio: ptr<function, f32>) -> mat3x3<f32> {
var s: f32;
var c_1: f32;
let _e34 = (*angle);
s = sin(_e34);
let _e36 = (*angle);
c_1 = cos(_e36);
let _e38 = c_1;
let _e39 = s;
let _e40 = s;
let _e42 = c_1;
return mat3x3<f32>(vec3<f32>(_e38, _e39, 0f), vec3<f32>(-(_e40), _e42, 0f), vec3<f32>(0f, 0f, 1f));
}
fn scale2d(x: ptr<function, f32>, y: ptr<function, f32>) -> mat3x3<f32> {
let _e32 = (*x);
let _e33 = (*y);
return mat3x3<f32>(vec3<f32>(_e32, 0f, 0f), vec3<f32>(0f, _e33, 0f), vec3<f32>(0f, 0f, 1f));
}
fn translate2d(x_1: ptr<function, f32>, y_1: ptr<function, f32>) -> mat3x3<f32> {
let _e32 = (*x_1);
let _e34 = (*y_1);
return mat3x3<f32>(vec3<f32>(1f, 0f, 0f), vec3<f32>(0f, 1f, 0f), vec3<f32>(-(_e32), -(_e34), 1f));
}
fn get_cross_masked(p3_: ptr<function, vec3<f32>>, angle_1: ptr<function, f32>, corner_size_3: ptr<function, vec2<f32>>, ratio_1: ptr<function, f32>) -> vec4<f32> {
var center_and_scale: mat3x3<f32>;
var param_19: f32;
var param_20: f32;
var param_21: f32;
var param_22: f32;
var unscale_and_uncenter: mat3x3<f32>;
var param_23: f32;
var param_24: f32;
var param_25: f32;
var param_26: f32;
var slide_left: mat3x3<f32>;
var param_27: f32;
var param_28: f32;
var slide_right: mat3x3<f32>;
var param_29: f32;
var param_30: f32;
var rotate: mat3x3<f32>;
var param_31: f32;
var param_32: f32;
var op_a: mat3x3<f32>;
var op_b: mat3x3<f32>;
var mask_a: bool;
var param_33: vec2<f32>;
var param_34: vec2<f32>;
var mask_b: bool;
var param_35: vec2<f32>;
var param_36: vec2<f32>;
var img: vec4<f32>;
var param_37: vec2<f32>;
var param_38: vec2<f32>;
var param_39: vec4<f32>;
var param_40: vec4<f32>;
let _e66 = (*angle_1);
(*angle_1) = (1f - _e66);
let _e68 = (*angle_1);
let _e69 = (*angle_1);
(*angle_1) = (_e68 * _e69);
let _e71 = (*angle_1);
(*angle_1) = (_e71 / 2.4f);
param_19 = -0.5f;
param_20 = -0.5f;
let _e73 = translate2d((¶m_19), (¶m_20));
param_21 = 1f;
let _e74 = (*ratio_1);
param_22 = _e74;
let _e75 = scale2d((¶m_21), (¶m_22));
center_and_scale = (_e73 * _e75);
let _e78 = uniforms.zoom;
let _e81 = uniforms.zoom;
let _e82 = (*ratio_1);
param_23 = (1f / _e78);
param_24 = (1f / (_e81 * _e82));
let _e85 = scale2d((¶m_23), (¶m_24));
param_25 = 0.5f;
param_26 = 0.5f;
let _e86 = translate2d((¶m_25), (¶m_26));
unscale_and_uncenter = (_e85 * _e86);
param_27 = -2f;
param_28 = 0f;
let _e88 = translate2d((¶m_27), (¶m_28));
slide_left = _e88;
param_29 = 2f;
param_30 = 0f;
let _e89 = translate2d((¶m_29), (¶m_30));
slide_right = _e89;
let _e90 = (*angle_1);
param_31 = _e90;
let _e91 = (*ratio_1);
param_32 = _e91;
let _e92 = rotate2d((¶m_31), (¶m_32));
rotate = _e92;
let _e93 = center_and_scale;
let _e94 = slide_right;
let _e96 = rotate;
let _e98 = slide_left;
let _e100 = unscale_and_uncenter;
op_a = ((((_e93 * _e94) * _e96) * _e98) * _e100);
let _e102 = center_and_scale;
let _e103 = slide_left;
let _e105 = rotate;
let _e107 = slide_right;
let _e109 = unscale_and_uncenter;
op_b = ((((_e102 * _e103) * _e105) * _e107) * _e109);
let _e111 = op_a;
let _e112 = (*p3_);
param_33 = (_e111 * _e112).xy;
let _e115 = (*corner_size_3);
param_34 = _e115;
let _e116 = test_rounded_mask((¶m_33), (¶m_34));
mask_a = _e116;
let _e117 = op_b;
let _e118 = (*p3_);
param_35 = (_e117 * _e118).xy;
let _e121 = (*corner_size_3);
param_36 = _e121;
let _e122 = test_rounded_mask((¶m_35), (¶m_36));
mask_b = _e122;
let _e123 = mask_a;
let _e124 = mask_b;
if (_e123 || _e124) {
let _e126 = (*p3_);
param_37 = _e126.xy;
let _e128 = (*corner_size_3);
param_38 = _e128;
let _e129 = sample_with_corners_to((¶m_37), (¶m_38));
img = _e129;
let _e130 = mask_a;
let _e131 = img;
let _e134 = mask_b;
let _e135 = img;
param_39 = select(vec4<f32>(0f, 0f, 0f, 1f), _e131, vec4(_e130));
param_40 = select(vec4<f32>(0f, 0f, 0f, 1f), _e135, vec4(_e134));
let _e138 = screen((¶m_39), (¶m_40));
return _e138;
} else {
return vec4<f32>(0f, 0f, 0f, 1f);
}
}
fn getFromColor(uv_1: ptr<function, vec2<f32>>) -> vec4<f32> {
let _e32 = (*uv_1)[0u];
let _e34 = (*uv_1)[1u];
let _e37 = textureSampleLevel(_from, _sampler, vec2<f32>(_e32, (1f - _e34)), 0f);
return _e37;
}
fn sample_with_corners_from(p_4: ptr<function, vec2<f32>>, corner_size_4: ptr<function, vec2<f32>>) -> vec4<f32> {
var param_41: vec2<f32>;
var param_42: vec2<f32>;
var param_43: vec2<f32>;
var param_44: vec4<f32>;
let _e36 = (*p_4);
let _e40 = uniforms.zoom;
(*p_4) = (((_e36 - vec2(0.5f)) / vec2(_e40)) + vec2(0.5f));
let _e45 = (*p_4);
param_41 = _e45;
let _e46 = (*corner_size_4);
param_42 = _e46;
let _e47 = test_rounded_mask((¶m_41), (¶m_42));
if !(_e47) {
return vec4<f32>(0f, 0f, 0f, 1f);
}
let _e49 = (*p_4);
param_43 = _e49;
let _e50 = getFromColor((¶m_43));
param_44 = _e50;
let _e51 = unscreen((¶m_44));
return _e51;
}
fn get_cross_rotated(p3_1: ptr<function, vec3<f32>>, angle_2: ptr<function, f32>, corner_size_5: ptr<function, vec2<f32>>, ratio_2: ptr<function, f32>) -> vec4<f32> {
var center_and_scale_1: mat3x3<f32>;
var param_45: f32;
var param_46: f32;
var param_47: f32;
var param_48: f32;
var unscale_and_uncenter_1: mat3x3<f32>;
var param_49: f32;
var param_50: f32;
var param_51: f32;
var param_52: f32;
var slide_left_1: mat3x3<f32>;
var param_53: f32;
var param_54: f32;
var slide_right_1: mat3x3<f32>;
var param_55: f32;
var param_56: f32;
var rotate_1: mat3x3<f32>;
var param_57: f32;
var param_58: f32;
var op_a_1: mat3x3<f32>;
var op_b_1: mat3x3<f32>;
var a_1: vec4<f32>;
var param_59: vec2<f32>;
var param_60: vec2<f32>;
var b_1: vec4<f32>;
var param_61: vec2<f32>;
var param_62: vec2<f32>;
var param_63: vec4<f32>;
var param_64: vec4<f32>;
let _e63 = (*angle_2);
let _e64 = (*angle_2);
(*angle_2) = (_e63 * _e64);
let _e66 = (*angle_2);
(*angle_2) = (_e66 / 2.4f);
param_45 = -0.5f;
param_46 = -0.5f;
let _e68 = translate2d((¶m_45), (¶m_46));
param_47 = 1f;
let _e69 = (*ratio_2);
param_48 = _e69;
let _e70 = scale2d((¶m_47), (¶m_48));
center_and_scale_1 = (_e68 * _e70);
let _e72 = (*ratio_2);
param_49 = 1f;
param_50 = (1f / _e72);
let _e74 = scale2d((¶m_49), (¶m_50));
param_51 = 0.5f;
param_52 = 0.5f;
let _e75 = translate2d((¶m_51), (¶m_52));
unscale_and_uncenter_1 = (_e74 * _e75);
param_53 = -2f;
param_54 = 0f;
let _e77 = translate2d((¶m_53), (¶m_54));
slide_left_1 = _e77;
param_55 = 2f;
param_56 = 0f;
let _e78 = translate2d((¶m_55), (¶m_56));
slide_right_1 = _e78;
let _e79 = (*angle_2);
param_57 = _e79;
let _e80 = (*ratio_2);
param_58 = _e80;
let _e81 = rotate2d((¶m_57), (¶m_58));
rotate_1 = _e81;
let _e82 = center_and_scale_1;
let _e83 = slide_right_1;
let _e85 = rotate_1;
let _e87 = slide_left_1;
let _e89 = unscale_and_uncenter_1;
op_a_1 = ((((_e82 * _e83) * _e85) * _e87) * _e89);
let _e91 = center_and_scale_1;
let _e92 = slide_left_1;
let _e94 = rotate_1;
let _e96 = slide_right_1;
let _e98 = unscale_and_uncenter_1;
op_b_1 = ((((_e91 * _e92) * _e94) * _e96) * _e98);
let _e100 = op_a_1;
let _e101 = (*p3_1);
param_59 = (_e100 * _e101).xy;
let _e104 = (*corner_size_5);
param_60 = _e104;
let _e105 = sample_with_corners_from((¶m_59), (¶m_60));
a_1 = _e105;
let _e106 = op_b_1;
let _e107 = (*p3_1);
param_61 = (_e106 * _e107).xy;
let _e110 = (*corner_size_5);
param_62 = _e110;
let _e111 = sample_with_corners_from((¶m_61), (¶m_62));
b_1 = _e111;
let _e112 = a_1;
param_63 = _e112;
let _e113 = b_1;
param_64 = _e113;
let _e114 = screen((¶m_63), (¶m_64));
return _e114;
}
fn simple_sample_with_corners_from(p_5: ptr<function, vec2<f32>>, corner_size_6: ptr<function, vec2<f32>>, zoom_amt_1: ptr<function, f32>) -> vec4<f32> {
var param_65: vec2<f32>;
var param_66: vec2<f32>;
var param_67: vec2<f32>;
let _e36 = (*p_5);
let _e39 = (*zoom_amt_1);
let _e42 = uniforms.zoom;
let _e43 = (*zoom_amt_1);
(*p_5) = (((_e36 - vec2(0.5f)) / vec2(((1f - _e39) + (_e42 * _e43)))) + vec2(0.5f));
let _e50 = (*p_5);
param_65 = _e50;
let _e51 = (*corner_size_6);
param_66 = _e51;
let _e52 = test_rounded_mask((¶m_65), (¶m_66));
if !(_e52) {
return vec4<f32>(0f, 0f, 0f, 1f);
}
let _e54 = (*p_5);
param_67 = _e54;
let _e55 = getFromColor((¶m_67));
return _e55;
}
fn transition(uv_2: ptr<function, vec2<f32>>) -> vec4<f32> {
var p_6: vec2<f32>;
var p3_2: vec3<f32>;
var corner_size_7: vec2<f32>;
var param_68: vec2<f32>;
var a_2: f32;
var param_69: vec2<f32>;
var param_70: vec2<f32>;
var param_71: f32;
var param_72: vec3<f32>;
var param_73: f32;
var param_74: vec2<f32>;
var param_75: f32;
var param_76: vec3<f32>;
var param_77: f32;
var param_78: vec2<f32>;
var param_79: f32;
var param_80: vec2<f32>;
var param_81: vec2<f32>;
var param_82: f32;
var param_83: vec2<f32>;
let _e51 = (*uv_2);
p_6 = (_e51 / vec2<f32>(1f, 1f));
let _e53 = p_6;
p3_2 = vec3<f32>(_e53.x, _e53.y, 1f);
let _e58 = uniforms.corner_radius;
let _e60 = uniforms.ratio;
let _e63 = uniforms.corner_radius;
corner_size_7 = vec2<f32>((_e58 / _e60), _e63);
let _e66 = uniforms.progress;
if (_e66 <= 0f) {
let _e68 = p_6;
param_68 = _e68;
let _e69 = getFromColor((¶m_68));
return _e69;
} else {
let _e71 = uniforms.progress;
if (_e71 < 0.1f) {
let _e74 = uniforms.progress;
a_2 = (_e74 / 0.1f);
let _e76 = corner_size_7;
let _e77 = a_2;
let _e79 = p_6;
param_69 = _e79;
param_70 = (_e76 * _e77);
let _e80 = a_2;
param_71 = _e80;
let _e81 = simple_sample_with_corners_from((¶m_69), (¶m_70), (¶m_71));
return _e81;
} else {
let _e83 = uniforms.progress;
if (_e83 < 0.48f) {
let _e86 = uniforms.progress;
a_2 = ((_e86 - 0.1f) / 0.38f);
let _e89 = p3_2;
param_72 = _e89;
let _e90 = a_2;
param_73 = _e90;
let _e91 = corner_size_7;
param_74 = _e91;
let _e93 = uniforms.ratio;
param_75 = _e93;
let _e94 = get_cross_rotated((¶m_72), (¶m_73), (¶m_74), (¶m_75));
return _e94;
} else {
let _e96 = uniforms.progress;
if (_e96 < 0.9f) {
let _e99 = uniforms.progress;
let _e102 = p3_2;
param_76 = _e102;
param_77 = ((_e99 - 0.52f) / 0.38f);
let _e103 = corner_size_7;
param_78 = _e103;
let _e105 = uniforms.ratio;
param_79 = _e105;
let _e106 = get_cross_masked((¶m_76), (¶m_77), (¶m_78), (¶m_79));
return _e106;
} else {
let _e108 = uniforms.progress;
if (_e108 < 1f) {
let _e111 = uniforms.progress;
a_2 = ((1f - _e111) / 0.1f);
let _e114 = corner_size_7;
let _e115 = a_2;
let _e117 = p_6;
param_80 = _e117;
param_81 = (_e114 * _e115);
let _e118 = a_2;
param_82 = _e118;
let _e119 = simple_sample_with_corners_to((¶m_80), (¶m_81), (¶m_82));
return _e119;
} else {
let _e120 = p_6;
param_83 = _e120;
let _e121 = getToColor((¶m_83));
return _e121;
}
}
}
}
}
}
fn main_1() {
var param_84: vec2<f32>;
let _e31 = _uv_1;
param_84 = _e31;
let _e32 = transition((¶m_84));
_fragColor = _e32;
return;
}
@fragment
fn main(@location(0) _uv: vec2<f32>) -> @location(0) vec4<f32> {
_uv_1 = _uv;
main_1();
let _e3 = _fragColor;
return _e3;
}