UNPKG

gl-transitions

Version:

The open collection of GL Transitions

332 lines (313 loc) • 9.95 kB
// BowTieVertical — WGSL, generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/BowTieVertical.glsl // Author: huynx // License: MIT // Description: Two triangles grow from the top and bottom edges into a bow tie that reveals the incoming image // Bindings and uniform layout: see the gl-transitions package README struct Uniforms { progress: f32, ratio: 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 check(p1_: ptr<function, vec2<f32>>, p2_: ptr<function, vec2<f32>>, p3_: ptr<function, vec2<f32>>) -> f32 { let _e20 = (*p1_)[0u]; let _e22 = (*p3_)[0u]; let _e25 = (*p2_)[1u]; let _e27 = (*p3_)[1u]; let _e31 = (*p2_)[0u]; let _e33 = (*p3_)[0u]; let _e36 = (*p1_)[1u]; let _e38 = (*p3_)[1u]; return (((_e20 - _e22) * (_e25 - _e27)) - ((_e31 - _e33) * (_e36 - _e38))); } fn PointInTriangle(pt: ptr<function, vec2<f32>>, p1_1: ptr<function, vec2<f32>>, p2_1: ptr<function, vec2<f32>>, p3_1: ptr<function, vec2<f32>>) -> bool { var b1_: bool; var param: vec2<f32>; var param_1: vec2<f32>; var param_2: vec2<f32>; var b2_: bool; var param_3: vec2<f32>; var param_4: vec2<f32>; var param_5: vec2<f32>; var b3_: bool; var param_6: vec2<f32>; var param_7: vec2<f32>; var param_8: vec2<f32>; let _e32 = (*pt); param = _e32; let _e33 = (*p1_1); param_1 = _e33; let _e34 = (*p2_1); param_2 = _e34; let _e35 = check((&param), (&param_1), (&param_2)); b1_ = (_e35 < 0f); let _e37 = (*pt); param_3 = _e37; let _e38 = (*p2_1); param_4 = _e38; let _e39 = (*p3_1); param_5 = _e39; let _e40 = check((&param_3), (&param_4), (&param_5)); b2_ = (_e40 < 0f); let _e42 = (*pt); param_6 = _e42; let _e43 = (*p3_1); param_7 = _e43; let _e44 = (*p1_1); param_8 = _e44; let _e45 = check((&param_6), (&param_7), (&param_8)); b3_ = (_e45 < 0f); let _e47 = b1_; let _e48 = b2_; let _e50 = b2_; let _e51 = b3_; return ((_e47 == _e48) && (_e50 == _e51)); } fn in_bottom_triangle(p: ptr<function, vec2<f32>>) -> bool { var vertex1_: vec2<f32>; var vertex2_: vec2<f32>; var vertex3_: vec2<f32>; var param_9: vec2<f32>; var param_10: vec2<f32>; var param_11: vec2<f32>; var param_12: vec2<f32>; let _e25 = uniforms.progress; vertex1_ = vec2<f32>(0.5f, (1f - _e25)); let _e29 = uniforms.progress; vertex2_ = vec2<f32>((0.5f - _e29), 1f); let _e33 = uniforms.progress; vertex3_ = vec2<f32>((0.5f + _e33), 1f); let _e36 = (*p); param_9 = _e36; let _e37 = vertex1_; param_10 = _e37; let _e38 = vertex2_; param_11 = _e38; let _e39 = vertex3_; param_12 = _e39; let _e40 = PointInTriangle((&param_9), (&param_10), (&param_11), (&param_12)); if _e40 { return true; } return false; } fn blur_edge(bot1_: ptr<function, vec2<f32>>, bot2_: ptr<function, vec2<f32>>, top: ptr<function, vec2<f32>>, testPt: ptr<function, vec2<f32>>) -> f32 { var lineDir: vec2<f32>; var perpDir: vec2<f32>; var dirToPt1_: vec2<f32>; var dist1_: f32; var min_dist: f32; let _e25 = (*bot1_); let _e26 = (*top); lineDir = (_e25 - _e26); let _e29 = lineDir[1u]; let _e31 = lineDir[0u]; perpDir = vec2<f32>(_e29, -(_e31)); let _e34 = (*bot1_); let _e35 = (*testPt); dirToPt1_ = (_e34 - _e35); let _e37 = perpDir; let _e39 = dirToPt1_; dist1_ = abs(dot(normalize(_e37), _e39)); let _e42 = (*bot2_); let _e43 = (*top); lineDir = (_e42 - _e43); let _e46 = lineDir[1u]; let _e48 = lineDir[0u]; perpDir = vec2<f32>(_e46, -(_e48)); let _e51 = (*bot2_); let _e52 = (*testPt); dirToPt1_ = (_e51 - _e52); let _e54 = perpDir; let _e56 = dirToPt1_; let _e59 = dist1_; min_dist = min(abs(dot(normalize(_e54), _e56)), _e59); let _e61 = min_dist; if (_e61 < 0.005f) { let _e63 = min_dist; return (_e63 / 0.005f); } else { return 1f; } } fn getToColor(uv: ptr<function, vec2<f32>>) -> vec4<f32> { let _e18 = (*uv)[0u]; let _e20 = (*uv)[1u]; let _e23 = textureSampleLevel(_to, _sampler, vec2<f32>(_e18, (1f - _e20)), 0f); return _e23; } fn getFromColor(uv_1: ptr<function, vec2<f32>>) -> vec4<f32> { let _e18 = (*uv_1)[0u]; let _e20 = (*uv_1)[1u]; let _e23 = textureSampleLevel(_from, _sampler, vec2<f32>(_e18, (1f - _e20)), 0f); return _e23; } fn in_top_triangle(p_1: ptr<function, vec2<f32>>) -> bool { var vertex1_1: vec2<f32>; var vertex2_1: vec2<f32>; var vertex3_1: vec2<f32>; var param_13: vec2<f32>; var param_14: vec2<f32>; var param_15: vec2<f32>; var param_16: vec2<f32>; let _e25 = uniforms.progress; vertex1_1 = vec2<f32>(0.5f, _e25); let _e28 = uniforms.progress; vertex2_1 = vec2<f32>((0.5f - _e28), 0f); let _e32 = uniforms.progress; vertex3_1 = vec2<f32>((0.5f + _e32), 0f); let _e35 = (*p_1); param_13 = _e35; let _e36 = vertex1_1; param_14 = _e36; let _e37 = vertex2_1; param_15 = _e37; let _e38 = vertex3_1; param_16 = _e38; let _e39 = PointInTriangle((&param_13), (&param_14), (&param_15), (&param_16)); if _e39 { return true; } return false; } fn transition(uv_2: ptr<function, vec2<f32>>) -> vec4<f32> { var param_17: vec2<f32>; var param_18: vec2<f32>; var vertex1_2: vec2<f32>; var vertex2_2: vec2<f32>; var vertex3_2: vec2<f32>; var param_19: vec2<f32>; var param_20: vec2<f32>; var param_21: vec2<f32>; var param_22: vec2<f32>; var param_23: vec2<f32>; var param_24: vec2<f32>; var param_25: vec2<f32>; var param_26: vec2<f32>; var param_27: vec2<f32>; var vertex1_3: vec2<f32>; var vertex2_3: vec2<f32>; var vertex3_3: vec2<f32>; var param_28: vec2<f32>; var param_29: vec2<f32>; var param_30: vec2<f32>; var param_31: vec2<f32>; var param_32: vec2<f32>; var param_33: vec2<f32>; var param_34: vec2<f32>; var param_35: vec2<f32>; let _e42 = (*uv_2); param_17 = _e42; let _e43 = in_top_triangle((&param_17)); if _e43 { let _e45 = uniforms.progress; if (_e45 < 0.1f) { let _e47 = (*uv_2); param_18 = _e47; let _e48 = getFromColor((&param_18)); return _e48; } let _e50 = (*uv_2)[1u]; if (_e50 < 0.5f) { let _e53 = uniforms.progress; vertex1_2 = vec2<f32>(0.5f, _e53); let _e56 = uniforms.progress; vertex2_2 = vec2<f32>((0.5f - _e56), 0f); let _e60 = uniforms.progress; vertex3_2 = vec2<f32>((0.5f + _e60), 0f); let _e63 = (*uv_2); param_19 = _e63; let _e64 = getFromColor((&param_19)); let _e65 = (*uv_2); param_20 = _e65; let _e66 = getToColor((&param_20)); let _e67 = vertex2_2; param_21 = _e67; let _e68 = vertex3_2; param_22 = _e68; let _e69 = vertex1_2; param_23 = _e69; let _e70 = (*uv_2); param_24 = _e70; let _e71 = blur_edge((&param_21), (&param_22), (&param_23), (&param_24)); return mix(_e64, _e66, vec4(_e71)); } else { let _e75 = uniforms.progress; if (_e75 > 0f) { let _e77 = (*uv_2); param_25 = _e77; let _e78 = getToColor((&param_25)); return _e78; } else { let _e79 = (*uv_2); param_26 = _e79; let _e80 = getFromColor((&param_26)); return _e80; } } } else { let _e81 = (*uv_2); param_27 = _e81; let _e82 = in_bottom_triangle((&param_27)); if _e82 { let _e84 = (*uv_2)[1u]; if (_e84 >= 0.5f) { let _e87 = uniforms.progress; vertex1_3 = vec2<f32>(0.5f, (1f - _e87)); let _e91 = uniforms.progress; vertex2_3 = vec2<f32>((0.5f - _e91), 1f); let _e95 = uniforms.progress; vertex3_3 = vec2<f32>((0.5f + _e95), 1f); let _e98 = (*uv_2); param_28 = _e98; let _e99 = getFromColor((&param_28)); let _e100 = (*uv_2); param_29 = _e100; let _e101 = getToColor((&param_29)); let _e102 = vertex2_3; param_30 = _e102; let _e103 = vertex3_3; param_31 = _e103; let _e104 = vertex1_3; param_32 = _e104; let _e105 = (*uv_2); param_33 = _e105; let _e106 = blur_edge((&param_30), (&param_31), (&param_32), (&param_33)); return mix(_e99, _e101, vec4(_e106)); } else { let _e109 = (*uv_2); param_34 = _e109; let _e110 = getFromColor((&param_34)); return _e110; } } else { let _e111 = (*uv_2); param_35 = _e111; let _e112 = getFromColor((&param_35)); return _e112; } } } fn main_1() { var param_36: vec2<f32>; let _e17 = _uv_1; param_36 = _e17; let _e18 = transition((&param_36)); _fragColor = _e18; return; } @fragment fn main(@location(0) _uv: vec2<f32>) -> @location(0) vec4<f32> { _uv_1 = _uv; main_1(); let _e3 = _fragColor; return _e3; }