From 0d761222dc89841de1031a360540b3699e00ab7d Mon Sep 17 00:00:00 2001 From: "fizzy-linux[bot]" <346940526+fizzy-linux[bot]@users.noreply.github.com> Date: Fri, 30 Oct 2026 18:40:10 -0500 Subject: [PATCH 1/2] glass: panel-seams (codex) Agent-Team: linux Worker: codex --- backend/src/glass/LiquidField.zig | 257 ++- backend/src/glass/liquid_field_tests.zig | 235 +++ .../compiled/dxil/liquid_glass.fragment.dxil | Bin 12784 -> 15728 bytes .../compiled/glsl/liquid_glass.fragment.glsl | 1673 +++++++++++------ .../compiled/msl/liquid_glass.fragment.msl | 1643 ++++++++++------ .../compiled/spv/liquid_glass.fragment.spv | Bin 27104 -> 38784 bytes .../glass/shaders/liquid_glass.fragment.hlsl | 68 +- 7 files changed, 2711 insertions(+), 1165 deletions(-) diff --git a/backend/src/glass/LiquidField.zig b/backend/src/glass/LiquidField.zig index b0d08cc3c..308f3eec1 100644 --- a/backend/src/glass/LiquidField.zig +++ b/backend/src/glass/LiquidField.zig @@ -62,6 +62,184 @@ pub const Shape = struct { } }; +pub const max_seams = 4; + +pub const Seam = struct { + /// Vertical is x = at; horizontal is y = at, in physical window pixels. + axis: enum { vertical, horizontal }, + at: f32, + /// Extent along the line; null crosses the parent. Hosts precede nested seams. + span: ?[2]f32 = null, + gap: f32 = 0, + reach: f32, + + pub fn between(axis: @FieldType(Seam, "axis"), lo: f32, hi: f32, span: ?[2]f32, reach: f32) Seam { + return .{ .axis = axis, .at = (lo + hi) / 2, .gap = @max(hi - lo, 0), .span = span, .reach = reach }; + } +}; + +pub const Panel = struct { + rect: dvui.Rect.Physical, + /// Top-left, top-right, bottom-right, bottom-left. + radii: [4]f32 = @splat(0), + /// Borrowed until drawing completes; at most max_seams, hosts first. + seams: []const Seam, +}; + +const ResolvedSeam = struct { + span: [2]f32, + radius: f32, + flags: u2 = 3, + host: ?usize = null, +}; + +fn resolveSeam(p: Panel, i: usize) ResolvedSeam { + const seam = p.seams[i]; + std.debug.assert(seam.reach > 0 and seam.gap >= 0); + const lo = if (seam.axis == .vertical) p.rect.y else p.rect.x; + const hi = lo + if (seam.axis == .vertical) p.rect.h else p.rect.w; + const radius = @min(@reduce(.Min, @as(@Vector(4, f32), p.radii)), @min(p.rect.w, p.rect.h) / 2); + var r: ResolvedSeam = .{ .span = seam.span orelse .{ lo, hi }, .radius = radius }; + std.debug.assert(r.span[0] < r.span[1]); + for (p.seams[0..i], 0..) |host, j| { + if (host.axis == seam.axis) continue; + if (r.span[0] != host.at and r.span[1] != host.at) continue; + r.host = j; + r.flags = if (r.span[0] == host.at) 2 else 1; + r.radius = std.math.lerp(radius, @min(radius, host.gap / 2), std.math.clamp(host.gap / host.reach, 0, 1)); + break; + } + return r; +} + +fn intersectRound(a: f32, b: f32, r: f32) f32 { + if (r == 0) return @max(a, b); + return @min(-r, @max(a, b)) + @sqrt(@max(r + a, 0) * @max(r + a, 0) + @max(r + b, 0) * @max(r + b, 0)); +} + +fn panelDistance(p: Panel, point: [2]f32, soft: f32, g: *[2]f32) f32 { + const c: [2]f32 = .{ p.rect.x + p.rect.w / 2, p.rect.y + p.rect.h / 2 }; + const half: [2]f32 = .{ p.rect.w / 2, p.rect.h / 2 }; + var rad = p.radii; + for (&rad) |*r| r.* = @min(r.*, @min(half[0], half[1])); + var d = if (soft > 0) softBox(point, c, half, soft, g) else roundBox(.{ point[0] - c[0], point[1] - c[1] }, half, rad, g); + for (p.seams, 0..) |seam, i| { + if (seam.gap == 0) continue; + const rs = resolveSeam(p, i); + const open = std.math.clamp(seam.gap / seam.reach, 0, 1); + const along = point[if (seam.axis == .vertical) 1 else 0]; + const v = point[if (seam.axis == .vertical) 0 else 1] - seam.at; + const half_gap = seam.gap / 2; + const len = rs.span[1] - rs.span[0]; + const advance = smoothstep(0, 0.6, open); // Pinch before the cut corners finish rounding. + var tip: f32 = 0; + var direction: f32 = 0; + if (rs.flags == 3) { + const u = along - (rs.span[0] + rs.span[1]) / 2; + tip = @max(len / 2 * (1 - advance) - @abs(u), 0); + direction = if (u < 0) 1 else -1; + } else { + const u = if (rs.flags == 1) along - rs.span[0] else rs.span[1] - along; + tip = @max(u - (len - half_gap) * advance, 0); + direction = if (rs.flags == 1) 1 else -1; + } + const length = @sqrt(v * v + tip * tip); + const slot = length - half_gap; + var slot_out: [2]f32 = .{ 0, 0 }; + if (length > 0) { + slot_out[if (seam.axis == .vertical) 0 else 1] = -v / length; + slot_out[if (seam.axis == .vertical) 1 else 0] = -tip * direction / length; + } + const radius = rs.radius * open; + const weights: [2]f32 = .{ @max(radius + d, 0), @max(radius - slot, 0) }; + const norm = @sqrt(weights[0] * weights[0] + weights[1] * weights[1]); + if (radius > 0 and norm > 0) { + g.* = .{ (weights[0] * g[0] + weights[1] * slot_out[0]) / norm, (weights[0] * g[1] + weights[1] * slot_out[1]) / norm }; + } else if (-slot > d) g.* = slot_out; + d = intersectRound(d, -slot, radius); + } + return d; +} + +/// Writes the layout rectangles and their corner radii into caller-owned out. +/// Asserts out can hold every piece (at most 1 + max_seams for non-crossing seams). +pub fn pieces(p: Panel, out: []Shape) []Shape { + std.debug.assert(p.seams.len <= max_seams and out.len > 0); + out[0] = .{ .rect = p.rect, .radii = p.radii }; + var n: usize = 1; + for (p.seams, 0..) |seam, si| { + const rs = resolveSeam(p, si); + const radius = rs.radius * std.math.clamp(seam.gap / seam.reach, 0, 1); + const count = n; + for (0..count) |i| { + const sh = out[i]; + const vertical = seam.axis == .vertical; + const lo = if (vertical) sh.rect.x else sh.rect.y; + const hi = lo + if (vertical) sh.rect.w else sh.rect.h; + const start = if (vertical) sh.rect.y else sh.rect.x; + const end = start + if (vertical) sh.rect.h else sh.rect.w; + if (seam.at <= lo or seam.at >= hi or end <= rs.span[0] or start >= rs.span[1]) continue; + std.debug.assert(n < out.len); + var a = sh; + var b = sh; + if (vertical) { + a.rect.w = @max(seam.at - seam.gap / 2 - lo, 0); + b.rect.x = seam.at + seam.gap / 2; + b.rect.w = @max(hi - b.rect.x, 0); + a.radii[1] = radius; + a.radii[2] = radius; + b.radii[0] = radius; + b.radii[3] = radius; + } else { + a.rect.h = @max(seam.at - seam.gap / 2 - lo, 0); + b.rect.y = seam.at + seam.gap / 2; + b.rect.h = @max(hi - b.rect.y, 0); + a.radii[2] = radius; + a.radii[3] = radius; + b.radii[0] = radius; + b.radii[1] = radius; + } + out[i] = a; + out[n] = b; + n += 1; + } + } + return out[0..n]; +} + +/// Strokes each piece and seam in physical pixels. Call after drawing the glass, in a frame. +pub fn drawOutlines(self: *const LiquidField, color: dvui.Color) void { + const opts: dvui.Path.StrokeOptions = .{ .thickness = 1.5, .color = .{ .color = color }, .closed = true }; + var storage: [1 << max_seams]Shape = undefined; + const parts = if (self.panel) |p| pieces(p, &storage) else self.shapes[0..self.len]; + for (parts) |part| part.rect.stroke(.{ + .tl = .round(part.radii[0]), + .tr = .round(part.radii[1]), + .br = .round(part.radii[2]), + .bl = .round(part.radii[3]), + }, opts); + if (self.panel) |p| for (p.seams, 0..) |seam, i| { + const rs = resolveSeam(p, i); + var path: dvui.Path.Builder = .init(dvui.currentWindow().lifo()); + defer path.deinit(); + for (rs.span) |end| path.addPoint(if (seam.axis == .vertical) .{ .x = seam.at, .y = end } else .{ .x = end, .y = seam.at }); + path.build().stroke(.{ .thickness = 1.5, .color = .{ .color = color } }); + }; +} + +fn shapeAt(self: *const LiquidField, i: usize) Shape { + if (i < self.len) return self.shapes[i]; + const p = self.panel.?; + const first: Shape = if (self.len > 0) self.shapes[0] else .{ .rect = p.rect }; + return .{ .rect = p.rect, .radii = p.radii, .blur = first.blur, .lens = first.lens }; +} + +fn shapeCount(self: *const LiquidField) usize { + return self.len + @intFromBool(self.panel != null); +} + +/// Mutually exclusive with edge. Reserves one slot plus one per seam. +panel: ?Panel = null, shapes: [max_shapes]Shape = undefined, len: usize = 0, /// The place the glass belongs to: a view's card, rounded or square. Its outside is one more @@ -125,6 +303,10 @@ pub const Edge = struct { const edge_gap: f32 = 1; pub fn add(self: *LiquidField, shape: Shape) void { + if (self.panel) |p| { + std.debug.assert(p.seams.len <= max_seams); + if (self.len >= max_shapes - 1 - p.seams.len) return; + } if (self.len >= max_shapes - 1 and self.edge != null) return; if (self.len >= max_shapes) return; self.shapes[self.len] = shape; @@ -135,6 +317,7 @@ pub fn add(self: *LiquidField, shape: Shape) void { pub fn bounds(self: *const LiquidField) dvui.Rect.Physical { var r: dvui.Rect.Physical = .{}; for (self.shapes[0..self.len], 0..) |s, i| r = if (i == 0) s.rect else r.unionWith(s.rect); + if (self.panel) |p| r = if (self.len == 0) p.rect else r.unionWith(p.rect); return self.withReach(r); } @@ -161,7 +344,7 @@ pub const Clusters = struct { pub fn clusters(self: *const LiquidField) Clusters { var parent: [max_shapes]u8 = undefined; - for (0..self.len) |i| parent[i] = @intCast(i); + for (0..self.shapeCount()) |i| parent[i] = @intCast(i); const find = struct { fn f(p: *[max_shapes]u8, i: u8) u8 { var x = i; @@ -170,21 +353,23 @@ pub fn clusters(self: *const LiquidField) Clusters { } }.f; const reach = self.merge_px * 0.5; - for (0..self.len) |i| for (i + 1..self.len) |j| { - const a = self.shapes[i].rect.outsetAll(reach); - const b = self.shapes[j].rect.outsetAll(reach); - if (a.intersect(b).empty()) continue; + for (0..self.shapeCount()) |i| for (i + 1..self.shapeCount()) |j| { + const a = self.shapeAt(i).rect.outsetAll(reach); + const b = self.shapeAt(j).rect.outsetAll(reach); + if (self.panel != null and (i == self.len or j == self.len)) { + if (a.x > b.x + b.w or b.x > a.x + a.w or a.y > b.y + b.h or b.y > a.y + a.h) continue; + } else if (a.intersect(b).empty()) continue; const ri = find(&parent, @intCast(i)); const rj = find(&parent, @intCast(j)); if (ri != rj) parent[rj] = ri; }; var out: Clusters = .{}; var n: u8 = 0; - for (0..self.len) |root| { + for (0..self.shapeCount()) |root| { if (find(&parent, @intCast(root)) != root) continue; out.first[out.count] = n; var size: u8 = 0; - for (0..self.len) |i| { + for (0..self.shapeCount()) |i| { if (find(&parent, @intCast(i)) != root) continue; out.order[n] = @intCast(i); n += 1; @@ -254,13 +439,14 @@ fn look(self: *const LiquidField) liquid_glass.Look { /// would be all rim. Every shape is glass whatever its size (`liquid_glass.fit`). fn rimScale(self: *const LiquidField, depth_px: f32) f32 { var f: f32 = 1; - for (self.shapes[0..self.len]) |sh| f = @min(f, liquid_glass.fit(sh.rect, depth_px)); + for (0..self.shapeCount()) |i| f = @min(f, liquid_glass.fit(self.shapeAt(i).rect, depth_px)); return self.scale * f; } /// The uniforms for drawing over `frost`, a picture of `covered`, the shapes in `order`: the /// field's own, so they are worked out with no window — what the window behind it is, `draw` adds. pub fn pack(self: *const LiquidField, covered: dvui.Rect.Physical, has_sharp: bool, order: []const u8) Uniforms { + std.debug.assert(self.panel == null or self.edge == null); const s = self.scale; const tint: [4]f32 = if (self.tint) |t| blk: { const a = @as(f32, @floatFromInt(t.a)) / 255; @@ -285,12 +471,12 @@ pub fn pack(self: *const LiquidField, covered: dvui.Rect.Physical, has_sharp: bo u.widths[1..4].* = lanes.widths; @memset(std.mem.asBytes(&u.shapes), 0); for (order, 0..) |i, slot| { - const sh = self.shapes[i]; + const sh = self.shapeAt(i); const r = sh.rect; u.shapes[slot] = .{ .{ r.x + r.w / 2, r.y + r.h / 2, r.w / 2, r.h / 2 }, sh.radii, - .{ sh.blur, sh.lens, sh.light, if (sh.round) 1 else 0 }, + .{ sh.blur, sh.lens, sh.light, if (i == self.len and self.panel != null) -1 else if (sh.round) 1 else 0 }, }; } if (self.edge) |e| { @@ -304,6 +490,25 @@ pub fn pack(self: *const LiquidField, covered: dvui.Rect.Physical, has_sharp: bo .{ first.blur, first.lens, 0, if (e.cut) 3 else 2 }, }; } + if (self.panel) |p| { + std.debug.assert(p.seams.len <= max_seams and self.len <= max_shapes - 1 - p.seams.len); + var open = false; + for (p.seams) |seam| open = open or seam.gap > 0; + const first = self.shapeAt(self.len); + u.shapes[max_shapes - 1] = .{ + .{ p.rect.x + p.rect.w / 2, p.rect.y + p.rect.h / 2, p.rect.w / 2, p.rect.h / 2 }, + p.radii, + .{ first.blur, first.lens, if (open) @floatFromInt(p.seams.len) else 0, 4 }, + }; + if (open) for (p.seams, 0..) |seam, i| { + const rs = resolveSeam(p, i); + u.shapes[max_shapes - 2 - i] = .{ + .{ if (seam.axis == .vertical) 0 else 1, seam.at, rs.span[0], rs.span[1] }, + .{ seam.gap, seam.reach, rs.radius, @floatFromInt(rs.flags) }, + .{ if (rs.host) |h| @floatFromInt(h + 1) else 0, 0, 0, 0 }, + }; + }; + } return u; } @@ -421,8 +626,10 @@ pub fn applyLook(self: *const LiquidField, u: *Uniforms, l: glass_look.Look) voi u.widths = .{ l.edge_dark, lanes.widths[0], lanes.widths[1], lanes.widths[2] }; u.light = lanes.light; u.edge = lanes.edge; - for (u.shapes[0..self.len]) |*sh| sh[2][0] *= l.frost; - if (self.edge != null) u.shapes[max_shapes - 1][2][0] *= l.frost; + const limit: usize = if (self.panel != null) max_shapes - 1 else max_shapes; + const count = @min(self.shapeCount(), limit); + for (u.shapes[0..count]) |*sh| sh[2][0] *= l.frost; + if (self.edge != null or self.panel != null) u.shapes[max_shapes - 1][2][0] *= l.frost; } /// Test seam: the testing backend has no glass program, so `ready` is false there and every @@ -450,12 +657,12 @@ pub fn ready() bool { /// covers, as a frost does, with an anti-aliased edge. False, having drawn nothing, where there /// is no program to draw with. pub fn draw(self: *const LiquidField, frost: dvui.Texture, covered: dvui.Rect.Physical, sharp: ?dvui.Texture) bool { - if (self.len == 0) return true; + if (self.shapeCount() == 0) return true; if (!enabled()) return false; const h = programs.hooks() orelse return false; const id = program.ready(h) orelse return false; const groups = self.clusters(); - var u = self.pack(covered, sharp != null, groups.order[0..self.len]); + var u = self.pack(covered, sharp != null, groups.order[0..self.shapeCount()]); // The window behind the glass, published for this frame. u.backdrop[0] = if (opaqueWindow() or self.solid) 1 else 0; // And the glass the app's look makes of it this frame (`core.material.publishLook`). @@ -483,7 +690,7 @@ pub fn draw(self: *const LiquidField, frost: dvui.Texture, covered: dvui.Rect.Ph /// until the frame ends. False, having queued nothing, where there is no glass program (`ready`): /// draw the picture some other way. pub fn drawPicture(self: *const LiquidField, picture: dvui.Texture, covered: dvui.Rect.Physical) bool { - if (self.len == 0) return true; + if (self.shapeCount() == 0) return true; if (!ready()) return false; const job = dvui.currentWindow().arena().create(PictureJob) catch return false; job.* = .{ .field = self.*, .picture = picture, .covered = covered }; @@ -501,7 +708,7 @@ pub fn drawPicture(self: *const LiquidField, picture: dvui.Texture, covered: dvu /// shapes' lenses. Apple's lens pulls only from inside the shape and needs none of it. pub fn pictureMargin(self: *const LiquidField) f32 { var lens: f32 = 0; - for (self.shapes[0..self.len]) |sh| lens = @max(lens, sh.lens); + for (0..self.shapeCount()) |i| lens = @max(lens, self.shapeAt(i).lens); return liquid_glass.margin(.{ .lens = lens, .refraction = self.refraction }, self.scale); } @@ -528,8 +735,8 @@ fn quads(self: *const LiquidField, groups: Clusters, glass: bool, frost: dvui.Te for (0..groups.count) |g| { const first = groups.first[g]; const n = groups.size[g]; - var r = self.shapes[groups.order[first]].rect; - for (groups.order[first..][0..n]) |i| r = r.unionWith(self.shapes[i].rect); + var r = self.shapeAt(groups.order[first]).rect; + for (groups.order[first..][0..n]) |i| r = r.unionWith(self.shapeAt(i).rect); r = self.withReach(r); if (r.empty()) continue; const col: dvui.Color.PMA = .{ .r = if (glass) 255 else 0, .g = first, .b = n, .a = 255 }; @@ -591,13 +798,16 @@ pub fn sampleWith(self: *const LiquidField, p: dvui.Point.Physical, l: glass_loo var al2: [2]f32 = @splat(0); const rim = self.rimScale(liquid_glass.depthPx(self.look(), self.scale)); const soft_k = liquid_glass.softness * rim; - for (self.shapes[0..self.len]) |sh| { + for (0..self.shapeCount()) |shape_index| { + const sh = self.shapeAt(shape_index); + const is_panel = shape_index == self.len and self.panel != null; const c: [2]f32 = .{ sh.rect.x + sh.rect.w / 2, sh.rect.y + sh.rect.h / 2 }; const half: [2]f32 = .{ sh.rect.w / 2, sh.rect.h / 2 }; var g: [2]f32 = undefined; const lim = @min(half[0], half[1]); const radii: [4]f32 = .{ @min(sh.radii[0], lim), @min(sh.radii[1], lim), @min(sh.radii[2], lim), @min(sh.radii[3], lim) }; - const d = roundBox(.{ p.x - c[0], p.y - c[1] }, half, radii, &g); + var d = roundBox(.{ p.x - c[0], p.y - c[1] }, half, radii, &g); + if (is_panel) d = panelDistance(self.panel.?, .{ p.x, p.y }, 0, &g); const mat: [3]f32 = .{ sh.blur, sh.lens, sh.light }; var al: [2]f32 = .{ 0, 0 }; if (lanes.edge[3] > 0) { @@ -621,7 +831,10 @@ pub fn sampleWith(self: *const LiquidField, p: dvui.Point.Physical, l: glass_loo al2 = al; } var o: [2]f32 = g; - const f = if (sh.round) d else softBox(.{ p.x, p.y }, c, half, soft_k, &o); + var f = if (sh.round) d else softBox(.{ p.x, p.y }, c, half, soft_k, &o); + if (is_panel) { + f = panelDistance(self.panel.?, .{ p.x, p.y }, soft_k, &o); + } if (f < f1) { f2 = f1; o2 = o1; @@ -751,7 +964,7 @@ fn alongEnd(p: [2]f32, box: [4]f32, rad: [4]f32, toward: [2]f32, ext: f32, ramp: /// Whether `p` is on the glass. pub fn hit(self: *const LiquidField, p: dvui.Point.Physical) bool { - return self.len > 0 and self.sample(p).d <= 0; + return self.shapeCount() > 0 and self.sample(p).d <= 0; } /// Signed distance to a box of half-size `b` at the origin with corner radii `r` (tl, tr, br, bl; diff --git a/backend/src/glass/liquid_field_tests.zig b/backend/src/glass/liquid_field_tests.zig index e904f0b7e..97d44590b 100644 --- a/backend/src/glass/liquid_field_tests.zig +++ b/backend/src/glass/liquid_field_tests.zig @@ -251,3 +251,238 @@ test "rim_falloff shapes the fade, rim_extent ends it" { } } } + +const Seam = LiquidField.Seam; +const Panel = LiquidField.Panel; +const panel_rect: dvui.Rect.Physical = .{ .x = 0, .y = 0, .w = 400, .h = 120 }; + +fn panelField(seams: []const Seam) LiquidField { + return .{ .panel = .{ .rect = panel_rect, .radii = @splat(20), .seams = seams } }; +} + +fn parentField(rect: dvui.Rect.Physical, radius: f32) LiquidField { + var f: LiquidField = .{}; + f.add(.{ .rect = rect, .radii = @splat(radius) }); + return f; +} + +fn panelSample(f: *const LiquidField, x: f32, y: f32) Sample { + return f.sampleWith(.{ .x = x, .y = y }, dropLook()); +} + +fn checkPieces(f: *const LiquidField) !void { + var storage: [16]Shape = undefined; + const parts = LiquidField.pieces(f.panel.?, &storage); + var expected: LiquidField = .{}; + for (parts) |part| expected.add(part); + // The contour and its anti-aliasing band, including every cut corner. + for (0..129) |yi| for (0..409) |xi| { + const x = @as(f32, @floatFromInt(xi)) - 4; + const y = @as(f32, @floatFromInt(yi)) - 4; + const a = panelSample(f, x, y); + const b = panelSample(&expected, x, y); + if (@abs(a.d) <= 1 or @abs(b.d) <= 1) try testing.expectApproxEqAbs(b.d, a.d, 0.25); + }; +} + +/// The narrowest remaining neck across 32 parallel rays through the seam's centre. +fn neckWidth(f: *const LiquidField, at: f32, height: f32) f32 { + var width: f32 = height; + for (0..32) |ray| { + const x = at + (@as(f32, @floatFromInt(ray)) / 31 - 0.5) * 0.5; + var run: f32 = 0; + var longest: f32 = 0; + var y: f32 = 0; + while (y < height) : (y += 0.25) { + if (panelSample(f, x, y).coverage >= 0.5) { + run += 0.25; + longest = @max(longest, run); + } else run = 0; + } + width = @min(width, longest); + } + return width; +} + +fn checkNeck(nested: bool) !void { + var seams = [_]Seam{ + .{ .axis = .horizontal, .at = 60, .reach = 12 }, + .{ .axis = .vertical, .at = 200, .span = .{ 0, 60 }, .reach = 12 }, + }; + if (!nested) seams[1].span = null; + var previous: f32 = if (nested) 60 else 120; + const total = previous; + for (0..61) |step| { + seams[1].gap = @as(f32, @floatFromInt(step)) / 60 * 12; + const f = panelField(if (nested) &seams else seams[1..]); + const width = neckWidth(&f, 200, total); + try testing.expect(width <= previous + 0.25); + try testing.expect(previous - width <= total * 0.15); + previous = width; + } + try testing.expectEqual(@as(f32, 0), previous); +} + +/// Opt-in headless evidence; ordinary test runs write no files. +fn dumpPanelCoverage() !void { + const destination = testing.environ.getAlloc(testing.allocator, "FIZZY_PANEL_DUMPS") catch |err| switch (err) { + error.EnvironmentVariableMissing => return, + else => return err, + }; + defer testing.allocator.free(destination); + var dir = try std.Io.Dir.cwd().openDir(testing.io, destination, .{}); + defer dir.close(testing.io); + const width = 408; + const height = 128; + const header = "P5\n408 128\n255\n"; + const bytes = try testing.allocator.alloc(u8, header.len + width * height); + defer testing.allocator.free(bytes); + @memcpy(bytes[0..header.len], header); + for (0..5) |step| { + const gap = @as(f32, @floatFromInt(step)) * 3; + const seams = [_]Seam{ + .{ .axis = .horizontal, .at = 60, .gap = gap, .reach = 12 }, + .{ .axis = .vertical, .at = 200, .span = .{ 0, 60 }, .gap = gap, .reach = 12 }, + }; + const f = panelField(&seams); + for (0..height) |y| for (0..width) |x| { + const coverage = panelSample(&f, @as(f32, @floatFromInt(x)) - 4, @as(f32, @floatFromInt(y)) - 4).coverage; + bytes[header.len + y * width + x] = @intFromFloat(coverage * 255); + }; + var name: [32]u8 = undefined; + const filename = try std.mem.print(&name, "panel-{d}.pgm", .{step}); + try dir.writeFile(testing.io, .{ .sub_path = filename, .data = bytes }); + } +} + +test "a closed panel is its parent" { + comptime { + _ = &LiquidField.drawOutlines; + } + const seams = [_]Seam{ + .{ .axis = .horizontal, .at = 30, .reach = 12 }, + .{ .axis = .vertical, .at = 150, .reach = 12 }, + .{ .axis = .vertical, .at = 270, .span = .{ 0, 30 }, .reach = 12 }, + }; + const rect: dvui.Rect.Physical = .{ .x = 0, .y = 0, .w = 400, .h = 60 }; + const f: LiquidField = .{ .panel = .{ .rect = rect, .radii = @splat(30), .seams = &seams } }; + const parent = parentField(rect, 30); + for (0..69) |yi| for (0..409) |xi| { + const x = @as(f32, @floatFromInt(xi)) - 4; + const y = @as(f32, @floatFromInt(yi)) - 4; + const a = panelSample(&f, x, y); + const b = panelSample(&parent, x, y); + try testing.expectApproxEqAbs(b.coverage, a.coverage, 0.25); + try testing.expectApproxEqAbs(b.d, a.d, 0.25); + }; + const groups = f.clusters(); + try testing.expectEqual(@as(usize, 1), groups.count); + try testing.expectEqual(@as(u8, 1), groups.size[0]); + const uniforms = f.pack(rect, false, groups.order[0..1]); + try testing.expectEqual(@as(f32, 0), uniforms.shapes[15][2][2]); + try testing.expectEqual(@as(f32, 4), uniforms.shapes[15][2][3]); +} + +test "no bump at the seam while it opens" { + var seams = [_]Seam{.{ .axis = .vertical, .at = 200, .reach = 12 }}; + const parent = parentField(panel_rect, 20); + for (0..19) |step| { + seams[0].gap = @as(f32, @floatFromInt(step)) / 60 * 12; + const f = panelField(&seams); + for (0..41) |xi| { + const x = 180 + @as(f32, @floatFromInt(xi)); + try testing.expect(panelSample(&f, x, 0).d >= panelSample(&parent, x, 0).d - 0.01); + } + } +} + +test "a through seam's pieces are rounded rects" { + try dumpPanelCoverage(); + const seams = [_]Seam{.{ .axis = .vertical, .at = 200, .gap = 12, .reach = 12 }}; + const f = panelField(&seams); + try checkPieces(&f); +} + +test "the neck moves smoothly" { + try checkNeck(false); +} + +test "2D: closed is the parent" { + var seams = [_]Seam{ + .{ .axis = .horizontal, .at = 60, .reach = 12 }, + .{ .axis = .vertical, .at = 200, .span = .{ 0, 60 }, .reach = 12 }, + }; + const parent = parentField(panel_rect, 20); + for ([_]f32{ 0, 1e-6 }) |gap| { + for (&seams) |*seam| seam.gap = gap; + const f = panelField(&seams); + for (0..129) |yi| for (0..409) |xi| { + const x = @as(f32, @floatFromInt(xi)) - 4; + const y = @as(f32, @floatFromInt(yi)) - 4; + try testing.expectApproxEqAbs(panelSample(&parent, x, y).d, panelSample(&f, x, y).d, 0.01); + }; + } +} + +test "2D: three rounded pieces" { + const seams = [_]Seam{ + .{ .axis = .horizontal, .at = 60, .gap = 12, .reach = 12 }, + .{ .axis = .vertical, .at = 200, .span = .{ 0, 60 }, .gap = 12, .reach = 12 }, + }; + const f = panelField(&seams); + try checkPieces(&f); + const groups = f.clusters(); + const u = f.pack(panel_rect, false, groups.order[0..1]); + try testing.expectEqual(@as(f32, 2), u.shapes[15][2][2]); + try testing.expectEqual([4]f32{ 12, 12, 6, 1 }, u.shapes[13][1]); + try testing.expectEqual(@as(f32, 1), u.shapes[13][2][0]); +} + +test "2D: pills part, the brief stays whole" { + const seams = [_]Seam{ + .{ .axis = .horizontal, .at = 60, .reach = 12 }, + .{ .axis = .vertical, .at = 200, .span = .{ 0, 60 }, .gap = 12, .reach = 12 }, + }; + const f = panelField(&seams); + const parent = parentField(panel_rect, 20); + var storage: [8]Shape = undefined; + const parts = LiquidField.pieces(f.panel.?, &storage); + try testing.expectEqual(@as(f32, 20), parts[0].radii[2]); + // The half-pixel below the host belongs to the continuous antialiasing band. + for (0..120) |yi| for (0..401) |xi| { + const x: f32 = @floatFromInt(xi); + const y = 60.5 + @as(f32, @floatFromInt(yi)) * 0.5; + try testing.expectApproxEqAbs(panelSample(&parent, x, y).coverage, panelSample(&f, x, y).coverage, 0.001); + }; + try checkNeck(true); +} + +test "pieces() is the console's model" { + const seams = [_]Seam{ + .{ .axis = .horizontal, .at = 60, .reach = 12 }, + Seam.between(.vertical, 197, 203, .{ 0, 60 }, 12), + }; + const f = panelField(&seams); + var storage: [8]Shape = undefined; + const parts = LiquidField.pieces(f.panel.?, &storage); + try testing.expectEqual(@as(usize, 3), parts.len); + try testing.expectEqual(@as(f32, 10), parts[0].radii[1]); + try testing.expectEqual(@as(f32, 10), parts[0].radii[2]); + try testing.expectEqual(@as(f32, 10), parts[2].radii[0]); + try testing.expectEqual(@as(f32, 10), parts[2].radii[3]); + var area: f32 = 0; + for (parts) |part| area += part.rect.w * part.rect.h; + try testing.expectEqual(@as(f32, 400 * 120 - 6 * 60), area); +} + +test "a drop still runs into a panel" { + var f = panelField(&.{}); + f.merge_px = 16; + f.add(Shape.circle(.{ .x = 200, .y = -18 }, 10)); + // At exactly half the merge width the quadratic minimum is tangent at coverage 0.5. + try testing.expectApproxEqAbs(@as(f32, 0.5), panelSample(&f, 200, -4).coverage, 0.001); + f.shapes[0].rect.y += 0.1; + try testing.expect(panelSample(&f, 200, -4).coverage > 0.5); + f.merge_px = 0; + try testing.expectEqual(@as(f32, 0), panelSample(&f, 200, -4).coverage); +} diff --git a/backend/src/glass/shaders/compiled/dxil/liquid_glass.fragment.dxil b/backend/src/glass/shaders/compiled/dxil/liquid_glass.fragment.dxil index 427649d19b374ceb76f49c0e1bc8c54ed0da78f8..9ad1c0a1a915b96cf700776df2eeae4470676528 100644 GIT binary patch literal 15728 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 M-!0b?@8Qt@0U> 0.0; - highp vec2 _138; - highp float _141; - highp vec2 _143; - highp vec2 _145; - highp vec4 _147; - highp vec2 _149; - highp float _151; - highp float _153; - highp vec2 _155; - highp vec2 _157; - highp vec4 _159; - highp float _161; - highp float _163; - highp float _165; - _138 = vec2(0.0, 1.0); - _141 = 1000000000.0; - _143 = vec2(0.0); - _145 = vec2(0.0); - _147 = vec4(0.0); - _149 = vec2(0.0); - _151 = 1000000000.0; - _153 = 1000000000.0; - _155 = vec2(0.0); - _157 = vec2(0.0, 1.0); - _159 = vec4(0.0); - _161 = 1000000000.0; - _163 = 1000000000.0; - _165 = 1000000000.0; - highp vec2 _150; + int _110 = int((vColor.y * 255.0) + 0.5); + int _115 = int((vColor.z * 255.0) + 0.5); + bool _139 = uData[5].y > 0.0; + highp vec2 _141; + highp float _144; + highp vec2 _146; + highp vec2 _148; + highp vec4 _150; + highp vec2 _152; highp float _154; - highp vec2 _156; - highp vec4 _160; + highp float _156; + highp vec2 _158; + highp vec2 _160; + highp vec4 _162; highp float _164; highp float _166; - highp vec2 _139; - highp float _142; - highp vec2 _144; - highp vec2 _146; - highp vec4 _148; - highp float _152; - highp vec2 _158; - highp float _162; - int _167 = _107; + highp float _168; + _141 = vec2(0.0, 1.0); + _144 = 1000000000.0; + _146 = vec2(0.0); + _148 = vec2(0.0); + _150 = vec4(0.0); + _152 = vec2(0.0); + _154 = 1000000000.0; + _156 = 1000000000.0; + _158 = vec2(0.0); + _160 = vec2(0.0, 1.0); + _162 = vec4(0.0); + _164 = 1000000000.0; + _166 = 1000000000.0; + _168 = 1000000000.0; + highp vec2 _153; + highp float _157; + highp vec2 _159; + highp vec4 _163; + highp float _167; + highp float _169; + highp vec2 _142; + highp float _145; + highp vec2 _147; + highp vec2 _149; + highp vec4 _151; + highp float _155; + highp vec2 _161; + highp float _165; + int _170 = _110; for (;;) { - bool _176; - if (_167 < (_107 + _112)) + bool _179; + if (_170 < (_110 + _115)) { - _176 = _167 < 16; + _179 = _170 < 16; } else { - _176 = false; + _179 = false; } - if (_176) + if (_179) { - int _178 = 3 * _167; - int _179 = 11 + _178; - int _185 = _178 + 13; - highp float _190 = min(uData[_179 * 1 + 0].z, uData[_179 * 1 + 0].w); - highp vec4 _192 = min(uData[(_178 + 12) * 1 + 0], vec4(_190)); - highp vec2 _194 = vTextureCoord - uData[_179 * 1 + 0].xy; - highp float _196 = _194.x; - highp float _217; - if (_196 > 0.0) - { - highp float _208; - if (_194.y > 0.0) + int _181 = 3 * _170; + int _188 = _181 + 13; + bool _196; + if (uData[_188 * 1 + 0].w >= (-0.5)) + { + _196 = uData[_188 * 1 + 0].w > 3.5; + } + else + { + _196 = true; + } + highp vec4 _206; + highp vec4 _207; + highp vec4 _208; + if (_196) + { + highp vec4 _204 = uData[58]; + _204.z = 0.0; + _206 = _204; + _207 = uData[56]; + _208 = uData[57]; + } + else + { + _206 = uData[_188 * 1 + 0]; + _207 = uData[(11 + _181) * 1 + 0]; + _208 = uData[(_181 + 12) * 1 + 0]; + } + highp float _211 = min(_207.z, _207.w); + highp vec4 _213 = min(_208, vec4(_211)); + highp vec2 _215 = vTextureCoord - _207.xy; + highp float _217 = _215.x; + highp float _238; + if (_217 > 0.0) + { + highp float _237; + if (_215.y > 0.0) { - _208 = _192.z; + _237 = _213.z; } else { - _208 = _192.y; + _237 = _213.y; } - _217 = _208; + _238 = _237; } else { - highp float _216; - if (_194.y > 0.0) + highp float _229; + if (_215.y > 0.0) { - _216 = _192.w; + _229 = _213.w; } else { - _216 = _192.x; + _229 = _213.x; } - _217 = _216; + _238 = _229; } - highp vec2 _221 = (abs(_194) - uData[_179 * 1 + 0].zw) + vec2(_217); - highp float _223 = (_196 < 0.0) ? (-1.0) : 1.0; - highp float _226 = (_194.y < 0.0) ? (-1.0) : 1.0; - highp float _228 = _221.x; - bool _234; - if (_228 > 0.0) + highp vec2 _242 = (abs(_215) - _207.zw) + vec2(_238); + highp float _244 = (_217 < 0.0) ? (-1.0) : 1.0; + highp float _247 = (_215.y < 0.0) ? (-1.0) : 1.0; + highp float _249 = _242.x; + bool _255; + if (_249 > 0.0) { - _234 = _221.y > 0.0; + _255 = _242.y > 0.0; } else { - _234 = false; + _255 = false; } - highp vec2 _248; - if (_234) + highp vec2 _269; + if (_255) { - _248 = normalize(_221) * vec2(_223, _226); + _269 = normalize(_242) * vec2(_244, _247); } else { - highp vec2 _247; - if (_228 > _221.y) + highp vec2 _266; + if (_249 > _242.y) + { + _266 = vec2(_244, 0.0); + } + else + { + _266 = vec2(0.0, _247); + } + _269 = _266; + } + highp vec2 _497; + highp float _498; + if (_196) + { + highp vec4 _287 = min(uData[57], vec4(min(uData[56].z, uData[56].w))); + int _290 = int(uData[58].z); + highp vec2 _292 = vTextureCoord - uData[56].xy; + highp float _294 = _292.x; + highp float _315; + if (_294 > 0.0) + { + highp float _314; + if (_292.y > 0.0) + { + _314 = _287.z; + } + else + { + _314 = _287.y; + } + _315 = _314; + } + else { - _247 = vec2(_223, 0.0); + highp float _306; + if (_292.y > 0.0) + { + _306 = _287.w; + } + else + { + _306 = _287.x; + } + _315 = _306; + } + highp vec2 _319 = (abs(_292) - uData[56].zw) + vec2(_315); + highp float _321 = (_294 < 0.0) ? (-1.0) : 1.0; + highp float _324 = (_292.y < 0.0) ? (-1.0) : 1.0; + highp float _326 = _319.x; + bool _332; + if (_326 > 0.0) + { + _332 = _319.y > 0.0; } else { - _247 = vec2(0.0, _226); + _332 = false; } - _248 = _247; + highp vec2 _346; + if (_332) + { + _346 = normalize(_319) * vec2(_321, _324); + } + else + { + highp vec2 _343; + if (_326 > _319.y) + { + _343 = vec2(_321, 0.0); + } + else + { + _343 = vec2(0.0, _324); + } + _346 = _343; + } + highp vec2 _355; + highp float _358; + _355 = _346; + _358 = (min(max(_326, _319.y), 0.0) + length(max(_319, vec2(0.0)))) - _315; + highp vec2 _356; + highp float _359; + int _360 = 0; + for (;;) + { + bool _368; + if (_360 < _290) + { + _368 = _360 < 4; + } + else + { + _368 = false; + } + if (_368) + { + int _370 = 14 - _360; + int _371 = 3 * _370; + int _372 = 11 + _371; + int _375 = _371 + 12; + if (uData[_375 * 1 + 0].x == 0.0) + { + _356 = _355; + _359 = _358; + int _361 = _360 + 1; + _355 = _356; + _358 = _359; + _360 = _361; + continue; + } + highp float _384 = clamp(uData[_375 * 1 + 0].x / uData[_375 * 1 + 0].y, 0.0, 1.0); + bool _386 = uData[_372 * 1 + 0].x < 0.5; + highp float _394; + if (_386) + { + _394 = vTextureCoord.y; + } + else + { + _394 = vTextureCoord.x; + } + highp float _402; + if (_386) + { + _402 = vTextureCoord.x; + } + else + { + _402 = vTextureCoord.y; + } + highp float _404 = _402 - uData[_372 * 1 + 0].y; + highp float _405 = uData[_375 * 1 + 0].x * 0.5; + highp float _408 = uData[_372 * 1 + 0].w - uData[_372 * 1 + 0].z; + highp float _409 = smoothstep(0.0, 0.60000002384185791015625, _384); + highp float _438; + highp float _439; + if (uData[_375 * 1 + 0].w > 2.5) + { + highp float _429 = _394 - ((uData[_372 * 1 + 0].z + uData[_372 * 1 + 0].w) * 0.5); + _438 = (_429 < 0.0) ? 1.0 : (-1.0); + _439 = max(((_408 * 0.5) * (1.0 - _409)) - abs(_429), 0.0); + } + else + { + bool _415 = uData[_375 * 1 + 0].w < 1.5; + highp float _421; + if (_415) + { + _421 = _394 - uData[_372 * 1 + 0].z; + } + else + { + _421 = uData[_372 * 1 + 0].w - _394; + } + _438 = _415 ? 1.0 : (-1.0); + _439 = max(_421 - ((_408 - _405) * _409), 0.0); + } + highp float _441 = length(vec2(_404, _439)); + highp float _442 = _441 - _405; + highp vec2 _457; + if (_441 > 0.0) + { + highp vec2 _451 = vec2(-_404, (-_439) * _438) / vec2(_441); + highp vec2 _456; + if (uData[_372 * 1 + 0].x > 0.5) + { + _456 = _451.yx; + } + else + { + _456 = _451; + } + _457 = _456; + } + else + { + _457 = vec2(0.0); + } + highp float _459 = uData[_375 * 1 + 0].z * _384; + highp vec2 _463 = max(vec2(_459 + _358, _459 - _442), vec2(0.0)); + highp float _464 = length(_463); + bool _469; + if (_459 > 0.0) + { + _469 = _464 > 0.0; + } + else + { + _469 = false; + } + highp vec2 _484; + if (_469) + { + _484 = ((_355 * _463.x) + (_457 * _463.y)) / vec2(_464); + } + else + { + bvec2 _475 = bvec2((-_442) > _358); + _484 = vec2(_475.x ? _457.x : _355.x, _475.y ? _457.y : _355.y); + } + highp float _485 = -_442; + highp float _496; + do + { + if (_459 == 0.0) + { + _496 = max(_358, _485); + break; + } + _496 = min(-_459, max(_358, _485)) + _464; + break; + } while(false); + _356 = _484; + _359 = _496; + int _361 = _360 + 1; + _355 = _356; + _358 = _359; + _360 = _361; + continue; + } + else + { + break; + } + } + _497 = _355; + _498 = _358; } - highp float _255 = (min(max(_228, _221.y), 0.0) + length(max(_221, vec2(0.0)))) - _217; - highp vec2 _401; + else + { + _497 = _269; + _498 = (min(max(_249, _242.y), 0.0) + length(max(_242, vec2(0.0)))) - _238; + } + highp vec2 _644; if (uData[10].w > 0.0) { - highp float _264 = (uData[9].x < 0.0) ? (-1.0) : 1.0; - highp float _267 = (uData[9].y < 0.0) ? (-1.0) : 1.0; - highp float _287; - if (_264 < 0.0) + highp float _507 = (uData[9].x < 0.0) ? (-1.0) : 1.0; + highp float _510 = (uData[9].y < 0.0) ? (-1.0) : 1.0; + highp float _530; + if (_507 < 0.0) { - highp float _279; - if (_267 < 0.0) + highp float _529; + if (_510 < 0.0) { - _279 = _192.x; + _529 = _213.x; } else { - _279 = _192.w; + _529 = _213.w; } - _287 = _279; + _530 = _529; } else { - highp float _286; - if (_267 < 0.0) + highp float _522; + if (_510 < 0.0) { - _286 = _192.y; + _522 = _213.y; } else { - _286 = _192.z; + _522 = _213.z; } - _287 = _286; + _530 = _522; } - highp vec2 _290 = max(uData[_179 * 1 + 0].zw - vec2(_287), vec2(0.0)); - highp vec2 _294 = (uData[_179 * 1 + 0].xy + (vec2(_264, _267) * _290)) + (uData[9].xy * _287); - highp vec2 _309; + highp vec2 _533 = max(_207.zw - vec2(_530), vec2(0.0)); + highp vec2 _537 = (_207.xy + (vec2(_507, _510) * _533)) + (uData[9].xy * _530); + highp vec2 _552; if (abs(uData[9].x) < 0.001000000047497451305389404296875) { - highp float _302 = _290.x; - highp vec2 _308 = _294; - _308.x = clamp(vTextureCoord.x, uData[_179 * 1 + 0].x - _302, uData[_179 * 1 + 0].x + _302) + (_287 * uData[9].x); - _309 = _308; + highp float _545 = _533.x; + highp vec2 _551 = _537; + _551.x = clamp(vTextureCoord.x, _207.x - _545, _207.x + _545) + (_530 * uData[9].x); + _552 = _551; } else { - _309 = _294; + _552 = _537; } - highp vec2 _324; + highp vec2 _567; if (abs(uData[9].y) < 0.001000000047497451305389404296875) { - highp float _317 = _290.y; - highp vec2 _323 = _309; - _323.y = clamp(vTextureCoord.y, uData[_179 * 1 + 0].y - _317, uData[_179 * 1 + 0].y + _317) + (_287 * uData[9].y); - _324 = _323; + highp float _560 = _533.y; + highp vec2 _566 = _552; + _566.y = clamp(vTextureCoord.y, _207.y - _560, _207.y + _560) + (_530 * uData[9].y); + _567 = _566; } else { - _324 = _309; + _567 = _552; } - highp float _327 = max(uData[10].w - max(uData[8].w, 1.0), 0.0); - highp vec2 _332 = -uData[9].xy; - highp float _333 = _332.x; - highp float _335 = (_333 < 0.0) ? (-1.0) : 1.0; - highp float _336 = _332.y; - highp float _338 = (_336 < 0.0) ? (-1.0) : 1.0; - highp float _358; - if (_335 < 0.0) + highp float _570 = max(uData[10].w - max(uData[8].w, 1.0), 0.0); + highp vec2 _575 = -uData[9].xy; + highp float _576 = _575.x; + highp float _578 = (_576 < 0.0) ? (-1.0) : 1.0; + highp float _579 = _575.y; + highp float _581 = (_579 < 0.0) ? (-1.0) : 1.0; + highp float _601; + if (_578 < 0.0) { - highp float _350; - if (_338 < 0.0) + highp float _600; + if (_581 < 0.0) { - _350 = _192.x; + _600 = _213.x; } else { - _350 = _192.w; + _600 = _213.w; } - _358 = _350; + _601 = _600; } else { - highp float _357; - if (_338 < 0.0) + highp float _593; + if (_581 < 0.0) { - _357 = _192.y; + _593 = _213.y; } else { - _357 = _192.z; + _593 = _213.z; } - _358 = _357; + _601 = _593; } - highp vec2 _361 = max(uData[_179 * 1 + 0].zw - vec2(_358), vec2(0.0)); - highp vec2 _365 = (uData[_179 * 1 + 0].xy + (vec2(_335, _338) * _361)) + (_332 * _358); - highp vec2 _380; - if (abs(_333) < 0.001000000047497451305389404296875) + highp vec2 _604 = max(_207.zw - vec2(_601), vec2(0.0)); + highp vec2 _608 = (_207.xy + (vec2(_578, _581) * _604)) + (_575 * _601); + highp vec2 _623; + if (abs(_576) < 0.001000000047497451305389404296875) { - highp float _373 = _361.x; - highp vec2 _379 = _365; - _379.x = clamp(vTextureCoord.x, uData[_179 * 1 + 0].x - _373, uData[_179 * 1 + 0].x + _373) + (_358 * _333); - _380 = _379; + highp float _616 = _604.x; + highp vec2 _622 = _608; + _622.x = clamp(vTextureCoord.x, _207.x - _616, _207.x + _616) + (_601 * _576); + _623 = _622; } else { - _380 = _365; + _623 = _608; } - highp vec2 _395; - if (abs(_336) < 0.001000000047497451305389404296875) + highp vec2 _638; + if (abs(_579) < 0.001000000047497451305389404296875) { - highp float _388 = _361.y; - highp vec2 _394 = _380; - _394.y = clamp(vTextureCoord.y, uData[_179 * 1 + 0].y - _388, uData[_179 * 1 + 0].y + _388) + (_358 * _336); - _395 = _394; + highp float _631 = _604.y; + highp vec2 _637 = _623; + _637.y = clamp(vTextureCoord.y, _207.y - _631, _207.y + _631) + (_601 * _579); + _638 = _637; } else { - _395 = _380; + _638 = _623; } - _401 = vec2(1.0 - smoothstep(_327, uData[10].w, length(vTextureCoord - _324)), 1.0 - smoothstep(_327, uData[10].w, length(vTextureCoord - _395))); + _644 = vec2(1.0 - smoothstep(_570, uData[10].w, length(vTextureCoord - _567)), 1.0 - smoothstep(_570, uData[10].w, length(vTextureCoord - _638))); } else { - _401 = vec2(0.0); + _644 = vec2(0.0); } - bool _402 = _255 < _163; - if (_402) + bool _645 = _498 < _166; + if (_645) { - _139 = _157; - _142 = _165; - _144 = _155; - _148 = _159; - _158 = uData[_179 * 1 + 0].yw; - _162 = _163; + _142 = _160; + _145 = _168; + _147 = _158; + _151 = _162; + _161 = _207.yw; + _165 = _166; } else { - bool _407 = _255 < _161; - highp vec2 _411; - if (_407) + bool _649 = _498 < _164; + highp vec2 _653; + if (_649) { - _411 = uData[_179 * 1 + 0].yw; + _653 = _207.yw; } else { - _411 = _138; + _653 = _141; } - bvec2 _413 = bvec2(_407); - bvec4 _415 = bvec4(_407); - _139 = _411; - _142 = _407 ? _190 : _141; - _144 = vec2(_413.x ? _401.x : _143.x, _413.y ? _401.y : _143.y); - _148 = vec4(_415.x ? uData[_185 * 1 + 0].x : _147.x, _415.y ? uData[_185 * 1 + 0].y : _147.y, _415.z ? uData[_185 * 1 + 0].z : _147.z, _415.w ? uData[_185 * 1 + 0].w : _147.w); - _158 = _157; - _162 = _407 ? _255 : _161; - } - bvec2 _418 = bvec2(_402); - _156 = vec2(_418.x ? _401.x : _155.x, _418.y ? _401.y : _155.y); - bvec4 _419 = bvec4(_402); - _160 = vec4(_419.x ? uData[_185 * 1 + 0].x : _159.x, _419.y ? uData[_185 * 1 + 0].y : _159.y, _419.z ? uData[_185 * 1 + 0].z : _159.z, _419.w ? uData[_185 * 1 + 0].w : _159.w); - _164 = _402 ? _255 : _163; - _166 = _402 ? _190 : _165; - highp vec2 _464; - highp float _465; - if (uData[_185 * 1 + 0].w < 0.5) - { - highp float _430 = (vTextureCoord.x - uData[_179 * 1 + 0].x) + uData[_179 * 1 + 0].z; - highp float _432 = (uData[_179 * 1 + 0].x + uData[_179 * 1 + 0].z) - vTextureCoord.x; - highp float _437 = (vTextureCoord.y - uData[_179 * 1 + 0].y) + uData[_179 * 1 + 0].w; - highp float _439 = (uData[_179 * 1 + 0].y + uData[_179 * 1 + 0].w) - vTextureCoord.y; - highp float _443 = min(min(_430, _432), min(_437, _439)); - highp vec4 _448 = exp((vec4(_443) - vec4(_430, _432, _437, _439)) / vec4(uData[1].y)); - highp float _449 = _448.x; - highp float _450 = _448.y; - highp float _452 = _448.z; - highp float _454 = _448.w; - highp float _455 = ((_449 + _450) + _452) + _454; - _464 = vec2(_450 - _449, _454 - _452) / vec2(_455); - _465 = (uData[1].y * log(_455)) - _443; + bvec2 _655 = bvec2(_649); + bvec4 _657 = bvec4(_649); + _142 = _653; + _145 = _649 ? _211 : _144; + _147 = vec2(_655.x ? _644.x : _146.x, _655.y ? _644.y : _146.y); + _151 = vec4(_657.x ? _206.x : _150.x, _657.y ? _206.y : _150.y, _657.z ? _206.z : _150.z, _657.w ? _206.w : _150.w); + _161 = _160; + _165 = _649 ? _498 : _164; + } + bvec2 _661 = bvec2(_645); + _159 = vec2(_661.x ? _644.x : _158.x, _661.y ? _644.y : _158.y); + bvec4 _662 = bvec4(_645); + _163 = vec4(_662.x ? _206.x : _162.x, _662.y ? _206.y : _162.y, _662.z ? _206.z : _162.z, _662.w ? _206.w : _162.w); + _167 = _645 ? _498 : _166; + _169 = _645 ? _211 : _168; + highp vec2 _707; + highp float _708; + if (_206.w < 0.5) + { + highp float _673 = (vTextureCoord.x - _207.x) + _207.z; + highp float _675 = (_207.x + _207.z) - vTextureCoord.x; + highp float _680 = (vTextureCoord.y - _207.y) + _207.w; + highp float _682 = (_207.y + _207.w) - vTextureCoord.y; + highp float _686 = min(min(_673, _675), min(_680, _682)); + highp vec4 _691 = exp((vec4(_686) - vec4(_673, _675, _680, _682)) / vec4(uData[1].y)); + highp float _692 = _691.x; + highp float _693 = _691.y; + highp float _695 = _691.z; + highp float _697 = _691.w; + highp float _698 = ((_692 + _693) + _695) + _697; + _707 = vec2(_693 - _692, _697 - _695) / vec2(_698); + _708 = (uData[1].y * log(_698)) - _686; } else { - _464 = _248; - _465 = _255; + _707 = _497; + _708 = _498; } - bool _466 = _465 < _153; - if (_466) + highp vec2 _974; + highp float _975; + if (_196) { - _146 = _149; - _152 = _153; + highp vec4 _720 = min(uData[57], vec4(min(uData[56].z, uData[56].w))); + int _723 = int(uData[58].z); + highp vec2 _829; + highp float _830; + if (uData[1].y > 0.0) + { + highp float _795 = (vTextureCoord.x - uData[56].x) + uData[56].z; + highp float _797 = (uData[56].x + uData[56].z) - vTextureCoord.x; + highp float _802 = (vTextureCoord.y - uData[56].y) + uData[56].w; + highp float _804 = (uData[56].y + uData[56].w) - vTextureCoord.y; + highp float _808 = min(min(_795, _797), min(_802, _804)); + highp vec4 _813 = exp((vec4(_808) - vec4(_795, _797, _802, _804)) / vec4(uData[1].y)); + highp float _814 = _813.x; + highp float _815 = _813.y; + highp float _817 = _813.z; + highp float _819 = _813.w; + highp float _820 = ((_814 + _815) + _817) + _819; + _829 = vec2(_815 - _814, _819 - _817) / vec2(_820); + _830 = (uData[1].y * log(_820)) - _808; + } + else + { + highp vec2 _729 = vTextureCoord - uData[56].xy; + highp float _731 = _729.x; + highp float _752; + if (_731 > 0.0) + { + highp float _751; + if (_729.y > 0.0) + { + _751 = _720.z; + } + else + { + _751 = _720.y; + } + _752 = _751; + } + else + { + highp float _743; + if (_729.y > 0.0) + { + _743 = _720.w; + } + else + { + _743 = _720.x; + } + _752 = _743; + } + highp vec2 _756 = (abs(_729) - uData[56].zw) + vec2(_752); + highp float _758 = (_731 < 0.0) ? (-1.0) : 1.0; + highp float _761 = (_729.y < 0.0) ? (-1.0) : 1.0; + highp float _763 = _756.x; + bool _769; + if (_763 > 0.0) + { + _769 = _756.y > 0.0; + } + else + { + _769 = false; + } + highp vec2 _783; + if (_769) + { + _783 = normalize(_756) * vec2(_758, _761); + } + else + { + highp vec2 _780; + if (_763 > _756.y) + { + _780 = vec2(_758, 0.0); + } + else + { + _780 = vec2(0.0, _761); + } + _783 = _780; + } + _829 = _783; + _830 = (min(max(_763, _756.y), 0.0) + length(max(_756, vec2(0.0)))) - _752; + } + highp vec2 _832; + highp float _835; + _832 = _829; + _835 = _830; + highp vec2 _833; + highp float _836; + int _837 = 0; + for (;;) + { + bool _845; + if (_837 < _723) + { + _845 = _837 < 4; + } + else + { + _845 = false; + } + if (_845) + { + int _847 = 14 - _837; + int _848 = 3 * _847; + int _849 = 11 + _848; + int _852 = _848 + 12; + if (uData[_852 * 1 + 0].x == 0.0) + { + _833 = _832; + _836 = _835; + int _838 = _837 + 1; + _832 = _833; + _835 = _836; + _837 = _838; + continue; + } + highp float _861 = clamp(uData[_852 * 1 + 0].x / uData[_852 * 1 + 0].y, 0.0, 1.0); + bool _863 = uData[_849 * 1 + 0].x < 0.5; + highp float _871; + if (_863) + { + _871 = vTextureCoord.y; + } + else + { + _871 = vTextureCoord.x; + } + highp float _879; + if (_863) + { + _879 = vTextureCoord.x; + } + else + { + _879 = vTextureCoord.y; + } + highp float _881 = _879 - uData[_849 * 1 + 0].y; + highp float _882 = uData[_852 * 1 + 0].x * 0.5; + highp float _885 = uData[_849 * 1 + 0].w - uData[_849 * 1 + 0].z; + highp float _886 = smoothstep(0.0, 0.60000002384185791015625, _861); + highp float _915; + highp float _916; + if (uData[_852 * 1 + 0].w > 2.5) + { + highp float _906 = _871 - ((uData[_849 * 1 + 0].z + uData[_849 * 1 + 0].w) * 0.5); + _915 = (_906 < 0.0) ? 1.0 : (-1.0); + _916 = max(((_885 * 0.5) * (1.0 - _886)) - abs(_906), 0.0); + } + else + { + bool _892 = uData[_852 * 1 + 0].w < 1.5; + highp float _898; + if (_892) + { + _898 = _871 - uData[_849 * 1 + 0].z; + } + else + { + _898 = uData[_849 * 1 + 0].w - _871; + } + _915 = _892 ? 1.0 : (-1.0); + _916 = max(_898 - ((_885 - _882) * _886), 0.0); + } + highp float _918 = length(vec2(_881, _916)); + highp float _919 = _918 - _882; + highp vec2 _934; + if (_918 > 0.0) + { + highp vec2 _928 = vec2(-_881, (-_916) * _915) / vec2(_918); + highp vec2 _933; + if (uData[_849 * 1 + 0].x > 0.5) + { + _933 = _928.yx; + } + else + { + _933 = _928; + } + _934 = _933; + } + else + { + _934 = vec2(0.0); + } + highp float _936 = uData[_852 * 1 + 0].z * _861; + highp vec2 _940 = max(vec2(_936 + _835, _936 - _919), vec2(0.0)); + highp float _941 = length(_940); + bool _946; + if (_936 > 0.0) + { + _946 = _941 > 0.0; + } + else + { + _946 = false; + } + highp vec2 _961; + if (_946) + { + _961 = ((_832 * _940.x) + (_934 * _940.y)) / vec2(_941); + } + else + { + bvec2 _952 = bvec2((-_919) > _835); + _961 = vec2(_952.x ? _934.x : _832.x, _952.y ? _934.y : _832.y); + } + highp float _962 = -_919; + highp float _973; + do + { + if (_936 == 0.0) + { + _973 = max(_835, _962); + break; + } + _973 = min(-_936, max(_835, _962)) + _941; + break; + } while(false); + _833 = _961; + _836 = _973; + int _838 = _837 + 1; + _832 = _833; + _835 = _836; + _837 = _838; + continue; + } + else + { + break; + } + } + _974 = _832; + _975 = _835; + } + else + { + _974 = _707; + _975 = _708; + } + bool _976 = _975 < _156; + if (_976) + { + _149 = _152; + _155 = _156; } else { - bool _470 = _465 < _151; - bvec2 _471 = bvec2(_470); - _146 = vec2(_471.x ? _464.x : _145.x, _471.y ? _464.y : _145.y); - _152 = _470 ? _465 : _151; + bool _980 = _975 < _154; + bvec2 _981 = bvec2(_980); + _149 = vec2(_981.x ? _974.x : _148.x, _981.y ? _974.y : _148.y); + _155 = _980 ? _975 : _154; } - bvec2 _474 = bvec2(_466); - _150 = vec2(_474.x ? _464.x : _149.x, _474.y ? _464.y : _149.y); - _154 = _466 ? _465 : _153; - _138 = _139; + bvec2 _984 = bvec2(_976); + _153 = vec2(_984.x ? _974.x : _152.x, _984.y ? _974.y : _152.y); + _157 = _976 ? _975 : _156; _141 = _142; - _143 = _144; - _145 = _146; - _147 = _148; - _149 = _150; - _151 = _152; - _153 = _154; - _155 = _156; - _157 = _158; - _159 = _160; - _161 = _162; - _163 = _164; - _165 = _166; - _167++; + _144 = _145; + _146 = _147; + _148 = _149; + _150 = _151; + _152 = _153; + _154 = _155; + _156 = _157; + _158 = _159; + _160 = _161; + _162 = _163; + _164 = _165; + _166 = _167; + _168 = _169; + _170++; continue; } else @@ -361,582 +854,608 @@ void main() break; } } - bool _480 = uData[58].w > 2.5; - bool _481 = uData[58].w > 1.5; - highp float _554; - highp vec2 _555; - if (_481) - { - highp vec2 _487 = vTextureCoord - uData[56].xy; - highp vec4 _493 = min(uData[57], vec4(min(uData[56].z, uData[56].w))); - highp float _494 = _487.x; - highp float _515; - if (_494 > 0.0) + bool _994; + if (uData[58].w > 2.5) + { + _994 = uData[58].w < 3.5; + } + else + { + _994 = false; + } + bool _995 = uData[58].w > 1.5; + bool _999; + if (_995) + { + _999 = uData[58].w < 3.5; + } + else + { + _999 = false; + } + highp float _1072; + highp vec2 _1073; + if (_999) + { + highp vec2 _1005 = vTextureCoord - uData[56].xy; + highp vec4 _1011 = min(uData[57], vec4(min(uData[56].z, uData[56].w))); + highp float _1012 = _1005.x; + highp float _1033; + if (_1012 > 0.0) { - highp float _506; - if (_487.y > 0.0) + highp float _1032; + if (_1005.y > 0.0) { - _506 = _493.z; + _1032 = _1011.z; } else { - _506 = _493.y; + _1032 = _1011.y; } - _515 = _506; + _1033 = _1032; } else { - highp float _514; - if (_487.y > 0.0) + highp float _1024; + if (_1005.y > 0.0) { - _514 = _493.w; + _1024 = _1011.w; } else { - _514 = _493.x; + _1024 = _1011.x; } - _515 = _514; + _1033 = _1024; } - highp vec2 _519 = (abs(_487) - uData[56].zw) + vec2(_515); - highp float _521 = (_494 < 0.0) ? (-1.0) : 1.0; - highp float _524 = (_487.y < 0.0) ? (-1.0) : 1.0; - highp float _526 = _519.x; - bool _532; - if (_526 > 0.0) + highp vec2 _1037 = (abs(_1005) - uData[56].zw) + vec2(_1033); + highp float _1039 = (_1012 < 0.0) ? (-1.0) : 1.0; + highp float _1042 = (_1005.y < 0.0) ? (-1.0) : 1.0; + highp float _1044 = _1037.x; + bool _1050; + if (_1044 > 0.0) { - _532 = _519.y > 0.0; + _1050 = _1037.y > 0.0; } else { - _532 = false; + _1050 = false; } - highp vec2 _546; - if (_532) + highp vec2 _1064; + if (_1050) { - _546 = normalize(_519) * vec2(_521, _524); + _1064 = normalize(_1037) * vec2(_1039, _1042); } else { - highp vec2 _545; - if (_526 > _519.y) + highp vec2 _1061; + if (_1044 > _1037.y) { - _545 = vec2(_521, 0.0); + _1061 = vec2(_1039, 0.0); } else { - _545 = vec2(0.0, _524); + _1061 = vec2(0.0, _1042); } - _546 = _545; + _1064 = _1061; } - _554 = (min(max(_526, _519.y), 0.0) + length(max(_519, vec2(0.0)))) - _515; - _555 = _546; + _1072 = (min(max(_1044, _1037.y), 0.0) + length(max(_1037, vec2(0.0)))) - _1033; + _1073 = _1064; + } + else + { + _1072 = -1000000000.0; + _1073 = vec2(0.0); + } + bool _1077; + if (_995) + { + _1077 = uData[58].w < 3.5; } else { - _554 = -1000000000.0; - _555 = vec2(0.0); + _1077 = false; } - bool _559; - if (_481) + bool _1081; + if (_1077) { - _559 = !_480; + _1081 = !_994; } else { - _559 = false; - } - highp vec2 _604; - highp vec2 _605; - highp float _606; - highp vec2 _607; - highp vec2 _608; - highp vec2 _609; - highp vec2 _610; - highp vec4 _611; - highp vec4 _612; - highp float _613; - highp float _614; - highp float _615; - highp float _616; - if (_559) - { - highp float _562 = 1.0 - _554; - bool _563 = _562 < _163; - highp vec2 _579; - highp vec2 _580; - highp float _581; - highp vec2 _582; - highp vec4 _583; - highp float _584; - if (_563) + _1081 = false; + } + highp vec2 _1126; + highp vec2 _1127; + highp float _1128; + highp vec2 _1129; + highp vec2 _1130; + highp vec2 _1131; + highp vec2 _1132; + highp vec4 _1133; + highp vec4 _1134; + highp float _1135; + highp float _1136; + highp float _1137; + highp float _1138; + if (_1081) + { + highp float _1084 = 1.0 - _1072; + bool _1085 = _1084 < _166; + highp vec2 _1101; + highp vec2 _1102; + highp float _1103; + highp vec2 _1104; + highp vec4 _1105; + highp float _1106; + if (_1085) { - _579 = _157; - _580 = uData[56].yw; - _581 = _165; - _582 = _155; - _583 = _159; - _584 = _163; + _1101 = _160; + _1102 = uData[56].yw; + _1103 = _168; + _1104 = _158; + _1105 = _162; + _1106 = _166; } else { - bool _568 = _562 < _161; - highp vec2 _572; - if (_568) + bool _1089 = _1084 < _164; + highp vec2 _1093; + if (_1089) { - _572 = uData[56].yw; + _1093 = uData[56].yw; } else { - _572 = _138; + _1093 = _141; } - bvec2 _574 = bvec2(_568); - bvec4 _576 = bvec4(_568); - _579 = _572; - _580 = _157; - _581 = _568 ? _165 : _141; - _582 = vec2(_574.x ? vec2(0.0).x : _143.x, _574.y ? vec2(0.0).y : _143.y); - _583 = vec4(_576.x ? uData[58].x : _147.x, _576.y ? uData[58].y : _147.y, _576.z ? uData[58].z : _147.z, _576.w ? uData[58].w : _147.w); - _584 = _568 ? _562 : _161; + bvec2 _1095 = bvec2(_1089); + bvec4 _1097 = bvec4(_1089); + _1101 = _1093; + _1102 = _160; + _1103 = _1089 ? _168 : _144; + _1104 = vec2(_1095.x ? vec2(0.0).x : _146.x, _1095.y ? vec2(0.0).y : _146.y); + _1105 = vec4(_1097.x ? uData[58].x : _150.x, _1097.y ? uData[58].y : _150.y, _1097.z ? uData[58].z : _150.z, _1097.w ? uData[58].w : _150.w); + _1106 = _1089 ? _1084 : _164; } - bvec2 _585 = bvec2(_563); - bvec4 _587 = bvec4(_563); - highp vec2 _590 = -_555; - bool _591 = _562 < _153; - highp vec2 _599; - highp float _600; - if (_591) + bvec2 _1107 = bvec2(_1085); + bvec4 _1109 = bvec4(_1085); + highp vec2 _1112 = -_1073; + bool _1113 = _1084 < _156; + highp vec2 _1121; + highp float _1122; + if (_1113) { - _599 = _149; - _600 = _153; + _1121 = _152; + _1122 = _156; } else { - bool _595 = _562 < _151; - bvec2 _596 = bvec2(_595); - _599 = vec2(_596.x ? _590.x : _145.x, _596.y ? _590.y : _145.y); - _600 = _595 ? _562 : _151; + bool _1117 = _1084 < _154; + bvec2 _1118 = bvec2(_1117); + _1121 = vec2(_1118.x ? _1112.x : _148.x, _1118.y ? _1112.y : _148.y); + _1122 = _1117 ? _1084 : _154; } - bvec2 _601 = bvec2(_591); - _604 = _579; - _605 = _580; - _606 = _581; - _607 = _582; - _608 = vec2(_585.x ? vec2(0.0).x : _155.x, _585.y ? vec2(0.0).y : _155.y); - _609 = _599; - _610 = vec2(_601.x ? _590.x : _149.x, _601.y ? _590.y : _149.y); - _611 = _583; - _612 = vec4(_587.x ? uData[58].x : _159.x, _587.y ? uData[58].y : _159.y, _587.z ? uData[58].z : _159.z, _587.w ? uData[58].w : _159.w); - _613 = _600; - _614 = _591 ? _562 : _153; - _615 = _584; - _616 = _563 ? _562 : _163; + bvec2 _1123 = bvec2(_1113); + _1126 = _1101; + _1127 = _1102; + _1128 = _1103; + _1129 = _1104; + _1130 = vec2(_1107.x ? vec2(0.0).x : _158.x, _1107.y ? vec2(0.0).y : _158.y); + _1131 = _1121; + _1132 = vec2(_1123.x ? _1112.x : _152.x, _1123.y ? _1112.y : _152.y); + _1133 = _1105; + _1134 = vec4(_1109.x ? uData[58].x : _162.x, _1109.y ? uData[58].y : _162.y, _1109.z ? uData[58].z : _162.z, _1109.w ? uData[58].w : _162.w); + _1135 = _1122; + _1136 = _1113 ? _1084 : _156; + _1137 = _1106; + _1138 = _1085 ? _1084 : _166; } else { - _604 = _138; - _605 = _157; - _606 = _141; - _607 = _143; - _608 = _155; - _609 = _145; - _610 = _149; - _611 = _147; - _612 = _159; - _613 = _151; - _614 = _153; - _615 = _161; - _616 = _163; - } - highp float _618 = max(uData[1].x, 9.9999997473787516355514526367188e-05); - highp float _623 = max(_618 - abs(_616 - _615), 0.0) / _618; - highp float _624 = _623 * _623; - highp float _625 = _624 * 0.5; - highp float _630; - if (_615 < _616) - { - _630 = 1.0 - _625; + _1126 = _141; + _1127 = _160; + _1128 = _144; + _1129 = _146; + _1130 = _158; + _1131 = _148; + _1132 = _152; + _1133 = _150; + _1134 = _162; + _1135 = _154; + _1136 = _156; + _1137 = _164; + _1138 = _166; + } + highp float _1140 = max(uData[1].x, 9.9999997473787516355514526367188e-05); + highp float _1145 = max(_1140 - abs(_1138 - _1137), 0.0) / _1140; + highp float _1146 = _1145 * _1145; + highp float _1147 = _1146 * 0.5; + highp float _1152; + if (_1137 < _1138) + { + _1152 = 1.0 - _1147; } else { - _630 = _625; + _1152 = _1147; } - highp float _634 = min(_616, _615) - ((_624 * _618) * 0.25); - highp float _639 = max(_618 - abs(_614 - _613), 0.0) / _618; - highp float _640 = _639 * _639; - highp float _641 = _640 * 0.5; - highp float _646; - if (_613 < _614) + highp float _1156 = min(_1138, _1137) - ((_1146 * _1140) * 0.25); + highp float _1161 = max(_1140 - abs(_1136 - _1135), 0.0) / _1140; + highp float _1162 = _1161 * _1161; + highp float _1163 = _1162 * 0.5; + highp float _1168; + if (_1135 < _1136) { - _646 = 1.0 - _641; + _1168 = 1.0 - _1163; } else { - _646 = _641; + _1168 = _1163; } - highp float _650 = min(_614, _613) - ((_640 * _618) * 0.25); - highp float _654; - if (_480) + highp float _1172 = min(_1136, _1135) - ((_1162 * _1140) * 0.25); + highp float _1176; + if (_994) { - _654 = max(_634, _554); + _1176 = max(_1156, _1072); } else { - _654 = _634; + _1176 = _1156; } - highp float _657 = clamp(0.5 - max(_654, _554), 0.0, 1.0); - if (_657 <= 0.0) + highp float _1179 = clamp(0.5 - max(_1176, _1072), 0.0, 1.0); + if (_1179 <= 0.0) { discard; } if (vColor.x < 0.5) { - _1186 = vec4(0.0, 0.0, 0.0, _657); + _1708 = vec4(0.0, 0.0, 0.0, _1179); break; } - highp vec4 _668 = mix(_612, _611, vec4(_630)); - highp vec2 _670 = mix(_610, _609, vec2(_646)); - bool _674; - if (_480) + highp vec4 _1190 = mix(_1134, _1133, vec4(_1152)); + highp vec2 _1192 = mix(_1132, _1131, vec2(_1168)); + bool _1196; + if (_994) { - _674 = _554 > _650; + _1196 = _1072 > _1172; } else { - _674 = false; - } - bvec2 _676 = bvec2(_674); - highp vec2 _677 = vec2(_676.x ? _555.x : _670.x, _676.y ? _555.y : _670.y); - highp vec2 _678 = vec2(_630); - highp vec2 _682 = mix(_608, _607, _678) * min(length(_677), 1.0); - highp float _684 = max(0.0, -(_674 ? _554 : _650)); - highp float _685 = -_684; - highp float _688 = exp(_685 / uData[1].z); - highp float _694 = _668.y; - highp float _728; - highp float _729; - highp vec2 _730; - if (_136) - { - highp float _702 = max(min(uData[5].y * mix(_165, _606, _630), uData[6].w), 1.0); - highp float _705 = clamp(1.0 - (_684 / _702), 0.0, 1.0); - highp float _710 = (((uData[5].z * _702) * _694) * _705) * _705; - _728 = _705; - _729 = _710; - _730 = clamp(((vTextureCoord - (_677 * _710)) - uData[0].xy) * uData[0].zw, vec2(0.0), vec2(1.0)); + _1196 = false; + } + bvec2 _1198 = bvec2(_1196); + highp vec2 _1199 = vec2(_1198.x ? _1073.x : _1192.x, _1198.y ? _1073.y : _1192.y); + highp vec2 _1200 = vec2(_1152); + highp vec2 _1204 = mix(_1130, _1129, _1200) * min(length(_1199), 1.0); + highp float _1206 = max(0.0, -(_1196 ? _1072 : _1172)); + highp float _1207 = -_1206; + highp float _1210 = exp(_1207 / uData[1].z); + highp float _1216 = _1190.y; + highp float _1250; + highp float _1251; + highp vec2 _1252; + if (_139) + { + highp float _1234 = max(min(uData[5].y * mix(_168, _1128, _1152), uData[6].w), 1.0); + highp float _1237 = clamp(1.0 - (_1206 / _1234), 0.0, 1.0); + highp float _1242 = (((uData[5].z * _1234) * _1216) * _1237) * _1237; + _1250 = _1237; + _1251 = _1242; + _1252 = clamp(((vTextureCoord - (_1199 * _1242)) - uData[0].xy) * uData[0].zw, vec2(0.0), vec2(1.0)); } else { - _728 = 0.0; - _729 = 0.0; - _730 = clamp(((vTextureCoord + (_677 * ((uData[2].x * _694) * _688))) - uData[0].xy) * uData[0].zw, vec2(0.0), vec2(1.0)); + _1250 = 0.0; + _1251 = 0.0; + _1252 = clamp(((vTextureCoord + (_1199 * ((uData[2].x * _1216) * _1210))) - uData[0].xy) * uData[0].zw, vec2(0.0), vec2(1.0)); } - highp vec4 _734 = textureLod(uSampler, _730, 0.0); - bool _736 = uData[4].w > 0.5; - highp vec4 _744; - if (_736) + highp vec4 _1256 = textureLod(uSampler, _1252, 0.0); + bool _1258 = uData[4].w > 0.5; + highp vec4 _1266; + if (_1258) { - _744 = textureLod(uTex1, _730, 0.0); + _1266 = textureLod(uTex1, _1252, 0.0); } else { - _744 = _734; + _1266 = _1256; } - bool _749; - if (_136) + bool _1271; + if (_139) { - _749 = uData[6].y > 0.0; + _1271 = uData[6].y > 0.0; } else { - _749 = false; + _1271 = false; } - bool _753; - if (_749) + bool _1275; + if (_1271) { - _753 = _729 > 0.5; + _1275 = _1251 > 0.5; } else { - _753 = false; - } - highp vec4 _814; - highp vec4 _815; - if (_753) - { - highp vec2 _761 = (_677 * ((_729 * 0.039999999105930328369140625) * uData[6].y)) * uData[0].zw; - highp vec2 _763 = clamp(_730 + _761, vec2(0.0), vec2(1.0)); - highp vec2 _765 = clamp(_730 - _761, vec2(0.0), vec2(1.0)); - highp vec4 _769 = textureLod(uSampler, _763, 0.0); - highp float _774 = _734.w; - highp float _775 = (_769.x / max(_769.w, 9.9999997473787516355514526367188e-05)) * _774; - highp vec4 _776 = _734; - _776.x = _775; - highp vec4 _780 = textureLod(uSampler, _765, 0.0); - highp float _785 = (_780.z / max(_780.w, 9.9999997473787516355514526367188e-05)) * _774; - _776.z = _785; - highp vec4 _813; - if (_736) + _1275 = false; + } + highp vec4 _1336; + highp vec4 _1337; + if (_1275) + { + highp vec2 _1283 = (_1199 * ((_1251 * 0.039999999105930328369140625) * uData[6].y)) * uData[0].zw; + highp vec2 _1285 = clamp(_1252 + _1283, vec2(0.0), vec2(1.0)); + highp vec2 _1287 = clamp(_1252 - _1283, vec2(0.0), vec2(1.0)); + highp vec4 _1291 = textureLod(uSampler, _1285, 0.0); + highp float _1296 = _1256.w; + highp float _1297 = (_1291.x / max(_1291.w, 9.9999997473787516355514526367188e-05)) * _1296; + highp vec4 _1298 = _1256; + _1298.x = _1297; + highp vec4 _1302 = textureLod(uSampler, _1287, 0.0); + highp float _1307 = (_1302.z / max(_1302.w, 9.9999997473787516355514526367188e-05)) * _1296; + _1298.z = _1307; + highp vec4 _1335; + if (_1258) { - highp vec4 _793 = textureLod(uTex1, _763, 0.0); - highp vec4 _800 = _744; - _800.x = (_793.x / max(_793.w, 9.9999997473787516355514526367188e-05)) * _744.w; - highp vec4 _804 = textureLod(uTex1, _765, 0.0); - _800.z = (_804.z / max(_804.w, 9.9999997473787516355514526367188e-05)) * _744.w; - _813 = _800; + highp vec4 _1317 = textureLod(uTex1, _1285, 0.0); + highp vec4 _1324 = _1266; + _1324.x = (_1317.x / max(_1317.w, 9.9999997473787516355514526367188e-05)) * _1266.w; + highp vec4 _1328 = textureLod(uTex1, _1287, 0.0); + _1324.z = (_1328.z / max(_1328.w, 9.9999997473787516355514526367188e-05)) * _1266.w; + _1335 = _1324; } else { - highp vec4 _811 = _744; - _811.x = _775; - _811.z = _785; - _813 = _811; + highp vec4 _1312 = _1266; + _1312.x = _1297; + _1312.z = _1307; + _1335 = _1312; } - _814 = _813; - _815 = _776; + _1336 = _1335; + _1337 = _1298; } else { - _814 = _744; - _815 = _734; + _1336 = _1266; + _1337 = _1256; } - bool _817 = uData[4].x > 1.5; - highp float _831; - if (_817) + bool _1339 = uData[4].x > 1.5; + highp float _1353; + if (_1339) { - _831 = uData[3].w; + _1353 = uData[3].w; } else { - highp float _830; + highp float _1351; if ((uData[6].x - 2.0 * trunc(uData[6].x / 2.0)) > 0.5) { - _830 = 1.0; + _1351 = 1.0; } else { - _830 = _815.w; + _1351 = _1337.w; } - _831 = _830; + _1353 = _1351; } - highp vec4 _840 = vec4(_815.xyz / vec3(max(_815.w, 9.9999997473787516355514526367188e-05)), 1.0); - highp vec4 _849 = vec4(_814.xyz / vec3(max(_814.w, 9.9999997473787516355514526367188e-05)), 1.0); - highp float _856; - if (_817) + highp vec4 _1362 = vec4(_1337.xyz / vec3(max(_1337.w, 9.9999997473787516355514526367188e-05)), 1.0); + highp vec4 _1371 = vec4(_1336.xyz / vec3(max(_1336.w, 9.9999997473787516355514526367188e-05)), 1.0); + highp float _1378; + if (_1339) { - _856 = 1.0; + _1378 = 1.0; } else { - _856 = (uData[4].z > 0.5) ? uData[4].x : 0.0; + _1378 = (uData[4].z > 0.5) ? uData[4].x : 0.0; } - bool _860; - if (_136) + bool _1382; + if (_139) { - _860 = !_817; + _1382 = !_1339; } else { - _860 = false; + _1382 = false; } - highp float _869; - if (_860) + highp float _1391; + if (_1382) { - _869 = _856 * (1.0 - ((_728 * _728) * (1.0 - smoothstep(0.800000011920928955078125, 1.0, _856)))); + _1391 = _1378 * (1.0 - ((_1250 * _1250) * (1.0 - smoothstep(0.800000011920928955078125, 1.0, _1378)))); } else { - _869 = _856; + _1391 = _1378; } - highp float _872 = 1.0 - _869; - highp float _880; - if (_136) + highp float _1394 = 1.0 - _1391; + highp float _1402; + if (_139) { - _880 = _728; + _1402 = _1250; } else { - _880 = _688 * _688; + _1402 = _1210 * _1210; } - highp float _883 = clamp(((uData[2].y * _694) * _880) * _872, 0.0, 1.0); - highp vec4 _889 = ((_849 * _883) + ((mix(_849, _840, vec4(clamp(_668.x, 0.0, 1.0))) * _872) * (1.0 - _883))) + (uData[3] * _869); - highp vec4 _932; - if (_817) + highp float _1405 = clamp(((uData[2].y * _1216) * _1402) * _1394, 0.0, 1.0); + highp vec4 _1411 = ((_1371 * _1405) + ((mix(_1371, _1362, vec4(clamp(_1190.x, 0.0, 1.0))) * _1394) * (1.0 - _1405))) + (uData[3] * _1391); + highp vec4 _1454; + if (_1339) { - _932 = vec4(uData[3].xyz / vec3(max(uData[3].w, 9.9999997473787516355514526367188e-05)), 1.0); + _1454 = vec4(uData[3].xyz / vec3(max(uData[3].w, 9.9999997473787516355514526367188e-05)), 1.0); } else { - highp vec4 _905 = _889 + (_840 * (1.0 - _889.w)); - highp vec4 _931; + highp vec4 _1418 = _1411 + (_1362 * (1.0 - _1411.w)); + highp vec4 _1444; if (uData[7].w < 1.0) { - highp vec3 _910 = _905.xyz; - highp float _911 = dot(_910, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); - highp float _912 = 0.60000002384185791015625 * uData[7].w; - highp float _914 = max(uData[7].w - _912, 9.9999997473787516355514526367188e-05); - highp float _926; - if (_911 <= _912) + highp vec3 _1423 = _1418.xyz; + highp float _1424 = dot(_1423, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + highp float _1425 = 0.60000002384185791015625 * uData[7].w; + highp float _1427 = max(uData[7].w - _1425, 9.9999997473787516355514526367188e-05); + highp float _1439; + if (_1424 <= _1425) { - _926 = _911; + _1439 = _1424; } else { - _926 = _912 + (_914 * (1.0 - exp((-(_911 - _912)) / _914))); + _1439 = _1425 + (_1427 * (1.0 - exp((-(_1424 - _1425)) / _1427))); } - highp vec3 _929 = _910 * (_926 / max(_911, 9.9999997473787516355514526367188e-05)); - _931 = vec4(_929.x, _929.y, _929.z, _905.w); + highp vec3 _1442 = _1423 * (_1439 / max(_1424, 9.9999997473787516355514526367188e-05)); + _1444 = vec4(_1442.x, _1442.y, _1442.z, _1418.w); } else { - _931 = _905; + _1444 = _1418; } - _932 = _931; + _1454 = _1444; } - highp float _935 = dot(_677, uData[9].xy); - highp float _936 = max(_935, 0.0); - highp float _938 = max(-_935, 0.0); - highp float _941 = abs(_935); - bool _945; - if (_136) + highp float _1457 = dot(_1199, uData[9].xy); + highp float _1458 = max(_1457, 0.0); + highp float _1460 = max(-_1457, 0.0); + highp float _1463 = abs(_1457); + bool _1467; + if (_139) { - _945 = uData[6].z > 0.0; + _1467 = uData[6].z > 0.0; } else { - _945 = false; + _1467 = false; } - bool _947 = uData[10].x > 0.0; - highp float _971; - if (_947) + bool _1469 = uData[10].x > 0.0; + highp float _1493; + if (_1469) { - _971 = 0.0; + _1493 = 0.0; } else { - highp float _970; - if (_945) + highp float _1492; + if (_1467) { - _970 = (uData[6].z * (1.0 - smoothstep(0.20000000298023223876953125, 0.699999988079071044921875, _941))) * exp((-max(0.0, -_654)) / (uData[2].z * 2.5)); + _1492 = (uData[6].z * (1.0 - smoothstep(0.20000000298023223876953125, 0.699999988079071044921875, _1463))) * exp((-max(0.0, -_1176)) / (uData[2].z * 2.5)); } else { - _970 = uData[8].x * (1.0 - smoothstep(0.0, uData[2].z * 0.625, -_654)); + _1492 = uData[8].x * (1.0 - smoothstep(0.0, uData[2].z * 0.625, -_1176)); } - _971 = _970; + _1493 = _1492; } - highp float _981; - if (_136) + highp float _1503; + if (_139) { - _981 = max((uData[5].w * _728) * _728, _971) * min(_694, 1.0); + _1503 = max((uData[5].w * _1250) * _1250, _1493) * min(_1216, 1.0); } else { - _981 = 0.0; + _1503 = 0.0; } - highp float _984 = _831 * (1.0 - _981); - highp vec4 _990 = vec4(_932.xyz * _984, _984 + _981); - highp float _1012; - if (_136) + highp float _1506 = _1353 * (1.0 - _1503); + highp vec4 _1512 = vec4(_1454.xyz * _1506, _1506 + _1503); + highp float _1534; + if (_139) { - highp float _1003; - if (_945) + highp float _1533; + if (_1467) { - _1003 = uData[6].z * max(smoothstep(0.75, 1.0, _941), max(_682.x, _682.y)); + _1533 = uData[6].z * max(smoothstep(0.75, 1.0, _1463), max(_1204.x, _1204.y)); } else { - _1003 = 0.25; + _1533 = 0.25; } - _1012 = _1003; + _1534 = _1533; } else { - _1012 = (0.449999988079071044921875 * ((_936 * sqrt(_936)) + ((0.75 * _938) * sqrt(_938)))) + 0.0599999986588954925537109375; + _1534 = (0.449999988079071044921875 * ((_1458 * sqrt(_1458)) + ((0.75 * _1460) * sqrt(_1460)))) + 0.0599999986588954925537109375; } - highp float _1039; - if (_945) + highp float _1561; + if (_1467) { - _1039 = exp((-max(0.0, -_654)) / (uData[2].z * 1.25)); + _1561 = exp((-max(0.0, -_1176)) / (uData[2].z * 1.25)); } else { - highp float _1038; - if (_136) + highp float _1555; + if (_139) { - highp float _1026 = -_654; - _1038 = smoothstep(uData[2].z * 0.3125, uData[2].z * 0.625, _1026) * (1.0 - smoothstep(uData[2].z * 1.5, uData[2].z * 2.0, _1026)); + highp float _1548 = -_1176; + _1555 = smoothstep(uData[2].z * 0.3125, uData[2].z * 0.625, _1548) * (1.0 - smoothstep(uData[2].z * 1.5, uData[2].z * 2.0, _1548)); } else { - _1038 = exp((-max(0.0, -_654)) / uData[2].z); + _1555 = exp((-max(0.0, -_1176)) / uData[2].z); } - _1039 = _1038; + _1561 = _1555; } - highp float _1051; - if (_947) + highp float _1573; + if (_1469) { - _1051 = 0.0; + _1573 = 0.0; } else { - highp float _1049; - if (_136) + highp float _1571; + if (_139) { - _1049 = 0.0; + _1571 = 0.0; } else { - _1049 = (0.039999999105930328369140625 * exp(_685 / uData[1].w)) * _936; + _1571 = (0.039999999105930328369140625 * exp(_1207 / uData[1].w)) * _1458; } - _1051 = (_1039 * _1012) + _1049; + _1573 = (_1561 * _1534) + _1571; } - highp vec2 _1052 = mix(_605, _604, _678); - highp float _1056 = _1052.y; - highp float _1062 = clamp((vTextureCoord.y - (_1052.x - _1056)) / max(2.0 * _1056, 9.9999997473787516355514526367188e-05), 0.0, 1.0); - highp float _1080; + highp vec2 _1574 = mix(_1127, _1126, _1200); + highp float _1578 = _1574.y; + highp float _1584 = clamp((vTextureCoord.y - (_1574.x - _1578)) / max(2.0 * _1578, 9.9999997473787516355514526367188e-05), 0.0, 1.0); + highp float _1602; if (uData[4].z > 0.5) { - _1080 = uData[4].y + ((uData[7].x + ((uData[7].y - uData[7].x) * _1062)) + (uData[7].z * (1.0 - smoothstep(0.0, 0.37999999523162841796875, _1062)))); + _1602 = uData[4].y + ((uData[7].x + ((uData[7].y - uData[7].x) * _1584)) + (uData[7].z * (1.0 - smoothstep(0.0, 0.37999999523162841796875, _1584)))); } else { - _1080 = 0.0; + _1602 = 0.0; } - highp vec3 _1090 = _990.xyz + vec3(clamp((_1080 + _668.z) + ((_694 * uData[2].w) * _1051), 0.0, 1.0)); - highp vec4 _1162; - if (_947) + highp vec3 _1612 = _1512.xyz + vec3(clamp((_1602 + _1190.z) + ((_1216 * uData[2].w) * _1573), 0.0, 1.0)); + highp vec4 _1684; + if (_1469) { - highp vec2 _1100; - if (dot(_677, _677) > 9.9999999392252902907785028219223e-09) + highp vec2 _1622; + if (dot(_1199, _1199) > 9.9999999392252902907785028219223e-09) { - _1100 = normalize(_677); + _1622 = normalize(_1199); } else { - _1100 = vec2(0.0); + _1622 = vec2(0.0); } - highp float _1101 = dot(_1100, uData[9].xy); - highp float _1103 = mix(8.0, 1.0, uData[9].z); - highp float _1111 = pow(max(_1101, 0.0), _1103) + (uData[9].w * pow(max(-_1101, 0.0), _1103)); - highp float _1112 = min(_694, 1.0); - highp float _1119 = -_654; - highp float _1121 = smoothstep(-0.5, 0.5, _1119); - highp float _1123 = -max(0.0, _1119); - highp vec3 _1160 = (_1090.xyz * (1.0 - (((uData[10].z * (1.0 - abs(_1101))) * (_1121 * exp(_1123 / max(uData[2].z * 2.5, 0.001000000047497451305389404296875)))) * _1112))) + vec3(_1112 * (((uData[10].x * max(_1111, max(_682.x, uData[9].w * _682.y))) * (_1121 * exp(_1123 / max(uData[8].y, 0.001000000047497451305389404296875)))) + ((uData[10].y * _1111) * (smoothstep(uData[8].y - 0.5, uData[8].y + 0.5, _1119) * exp((-max(0.0, _1119 - uData[8].y)) / max(uData[8].z, 0.001000000047497451305389404296875)))))); - _1162 = vec4(_1160.x, _1160.y, _1160.z, _990.w); + highp float _1623 = dot(_1622, uData[9].xy); + highp float _1625 = mix(8.0, 1.0, uData[9].z); + highp float _1633 = pow(max(_1623, 0.0), _1625) + (uData[9].w * pow(max(-_1623, 0.0), _1625)); + highp float _1634 = min(_1216, 1.0); + highp float _1641 = -_1176; + highp float _1643 = smoothstep(-0.5, 0.5, _1641); + highp float _1645 = -max(0.0, _1641); + highp vec3 _1682 = (_1612.xyz * (1.0 - (((uData[10].z * (1.0 - abs(_1623))) * (_1643 * exp(_1645 / max(uData[2].z * 2.5, 0.001000000047497451305389404296875)))) * _1634))) + vec3(_1634 * (((uData[10].x * max(_1633, max(_1204.x, uData[9].w * _1204.y))) * (_1643 * exp(_1645 / max(uData[8].y, 0.001000000047497451305389404296875)))) + ((uData[10].y * _1633) * (smoothstep(uData[8].y - 0.5, uData[8].y + 0.5, _1641) * exp((-max(0.0, _1641 - uData[8].y)) / max(uData[8].z, 0.001000000047497451305389404296875)))))); + _1684 = vec4(_1682.x, _1682.y, _1682.z, _1512.w); } else { - _1162 = vec4(_1090.x, _1090.y, _1090.z, _990.w); + _1684 = vec4(_1612.x, _1612.y, _1612.z, _1512.w); } - highp vec4 _1163 = clamp(_1162, vec4(0.0), vec4(1.0)); - highp float _1170 = max(_1163.w, max(_1163.x, max(_1163.y, _1163.z))); - highp vec4 _1171 = _1163; - _1171.w = _1170; - highp vec3 _1182 = _1171.xyz + vec3(((fract(52.98291778564453125 * fract(dot(vTextureCoord, vec2(0.067110560834407806396484375, 0.005837149918079376220703125)))) - 0.5) * uData[5].x) * _1170); - _1186 = clamp(vec4(_1182.x, _1182.y, _1182.z, _1171.w), vec4(0.0), vec4(1.0)) * _657; + highp vec4 _1685 = clamp(_1684, vec4(0.0), vec4(1.0)); + highp float _1692 = max(_1685.w, max(_1685.x, max(_1685.y, _1685.z))); + highp vec4 _1693 = _1685; + _1693.w = _1692; + highp vec3 _1704 = _1693.xyz + vec3(((fract(52.98291778564453125 * fract(dot(vTextureCoord, vec2(0.067110560834407806396484375, 0.005837149918079376220703125)))) - 0.5) * uData[5].x) * _1692); + _1708 = clamp(vec4(_1704.x, _1704.y, _1704.z, _1693.w), vec4(0.0), vec4(1.0)) * _1179; break; } while(false); - out_var_SV_Target0 = _1186; + out_var_SV_Target0 = _1708; } diff --git a/backend/src/glass/shaders/compiled/msl/liquid_glass.fragment.msl b/backend/src/glass/shaders/compiled/msl/liquid_glass.fragment.msl index 858737e21..518ec2456 100644 --- a/backend/src/glass/shaders/compiled/msl/liquid_glass.fragment.msl +++ b/backend/src/glass/shaders/compiled/msl/liquid_glass.fragment.msl @@ -22,342 +22,833 @@ struct main0_in fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], texture2d Frost [[texture(0)]], texture2d Sharp [[texture(1)]], sampler FrostSampler [[sampler(0)]], sampler SharpSampler [[sampler(1)]]) { main0_out out = {}; - float4 _1186; + float4 _1708; do { - int _107 = int((in.in_var_COLOR.y * 255.0) + 0.5); - int _112 = int((in.in_var_COLOR.z * 255.0) + 0.5); - bool _136 = Uniforms.uData[5].y > 0.0; - float2 _138; - float _141; - float2 _143; - float2 _145; - float4 _147; - float2 _149; - float _151; - float _153; - float2 _155; - float2 _157; - float4 _159; - float _161; - float _163; - float _165; - _138 = float2(0.0, 1.0); - _141 = 1000000000.0; - _143 = float2(0.0); - _145 = float2(0.0); - _147 = float4(0.0); - _149 = float2(0.0); - _151 = 1000000000.0; - _153 = 1000000000.0; - _155 = float2(0.0); - _157 = float2(0.0, 1.0); - _159 = float4(0.0); - _161 = 1000000000.0; - _163 = 1000000000.0; - _165 = 1000000000.0; - float2 _150; + int _110 = int((in.in_var_COLOR.y * 255.0) + 0.5); + int _115 = int((in.in_var_COLOR.z * 255.0) + 0.5); + bool _139 = Uniforms.uData[5].y > 0.0; + float2 _141; + float _144; + float2 _146; + float2 _148; + float4 _150; + float2 _152; float _154; - float2 _156; - float4 _160; + float _156; + float2 _158; + float2 _160; + float4 _162; float _164; float _166; - float2 _139; - float _142; - float2 _144; - float2 _146; - float4 _148; - float _152; - float2 _158; - float _162; - int _167 = _107; + float _168; + _141 = float2(0.0, 1.0); + _144 = 1000000000.0; + _146 = float2(0.0); + _148 = float2(0.0); + _150 = float4(0.0); + _152 = float2(0.0); + _154 = 1000000000.0; + _156 = 1000000000.0; + _158 = float2(0.0); + _160 = float2(0.0, 1.0); + _162 = float4(0.0); + _164 = 1000000000.0; + _166 = 1000000000.0; + _168 = 1000000000.0; + float2 _153; + float _157; + float2 _159; + float4 _163; + float _167; + float _169; + float2 _142; + float _145; + float2 _147; + float2 _149; + float4 _151; + float _155; + float2 _161; + float _165; + int _170 = _110; for (;;) { - bool _176; - if (_167 < (_107 + _112)) + bool _179; + if (_170 < (_110 + _115)) { - _176 = _167 < 16; + _179 = _170 < 16; } else { - _176 = false; + _179 = false; } - if (_176) + if (_179) { - int _178 = 3 * _167; - int _179 = 11 + _178; - int _185 = _178 + 13; - float _190 = precise::min(Uniforms.uData[_179].z, Uniforms.uData[_179].w); - float4 _192 = precise::min(Uniforms.uData[_178 + 12], float4(_190)); - float2 _194 = in.in_var_TEXCOORD0 - Uniforms.uData[_179].xy; - float _196 = _194.x; - float _217; - if (_196 > 0.0) - { - float _208; - if (_194.y > 0.0) + int _181 = 3 * _170; + int _188 = _181 + 13; + bool _196; + if ((isunordered(Uniforms.uData[_188].w, (-0.5)) || Uniforms.uData[_188].w >= (-0.5))) + { + _196 = Uniforms.uData[_188].w > 3.5; + } + else + { + _196 = true; + } + float4 _206; + float4 _207; + float4 _208; + if (_196) + { + float4 _204 = Uniforms.uData[58]; + _204.z = 0.0; + _206 = _204; + _207 = Uniforms.uData[56]; + _208 = Uniforms.uData[57]; + } + else + { + _206 = Uniforms.uData[_188]; + _207 = Uniforms.uData[11 + _181]; + _208 = Uniforms.uData[_181 + 12]; + } + float _211 = precise::min(_207.z, _207.w); + float4 _213 = precise::min(_208, float4(_211)); + float2 _215 = in.in_var_TEXCOORD0 - _207.xy; + float _217 = _215.x; + float _238; + if (_217 > 0.0) + { + float _237; + if (_215.y > 0.0) { - _208 = _192.z; + _237 = _213.z; } else { - _208 = _192.y; + _237 = _213.y; } - _217 = _208; + _238 = _237; } else { - float _216; - if (_194.y > 0.0) + float _229; + if (_215.y > 0.0) { - _216 = _192.w; + _229 = _213.w; } else { - _216 = _192.x; + _229 = _213.x; } - _217 = _216; + _238 = _229; } - float2 _221 = (abs(_194) - Uniforms.uData[_179].zw) + float2(_217); - float _223 = (_196 < 0.0) ? (-1.0) : 1.0; - float _226 = (_194.y < 0.0) ? (-1.0) : 1.0; - float _228 = _221.x; - bool _234; - if (_228 > 0.0) + float2 _242 = (abs(_215) - _207.zw) + float2(_238); + float _244 = (_217 < 0.0) ? (-1.0) : 1.0; + float _247 = (_215.y < 0.0) ? (-1.0) : 1.0; + float _249 = _242.x; + bool _255; + if (_249 > 0.0) { - _234 = _221.y > 0.0; + _255 = _242.y > 0.0; } else { - _234 = false; + _255 = false; } - float2 _248; - if (_234) + float2 _269; + if (_255) { - _248 = fast::normalize(_221) * float2(_223, _226); + _269 = fast::normalize(_242) * float2(_244, _247); } else { - float2 _247; - if (_228 > _221.y) + float2 _266; + if (_249 > _242.y) + { + _266 = float2(_244, 0.0); + } + else + { + _266 = float2(0.0, _247); + } + _269 = _266; + } + float2 _497; + float _498; + if (_196) + { + float4 _287 = precise::min(Uniforms.uData[57], float4(precise::min(Uniforms.uData[56].z, Uniforms.uData[56].w))); + int _290 = int(Uniforms.uData[58].z); + float2 _292 = in.in_var_TEXCOORD0 - Uniforms.uData[56].xy; + float _294 = _292.x; + float _315; + if (_294 > 0.0) + { + float _314; + if (_292.y > 0.0) + { + _314 = _287.z; + } + else + { + _314 = _287.y; + } + _315 = _314; + } + else { - _247 = float2(_223, 0.0); + float _306; + if (_292.y > 0.0) + { + _306 = _287.w; + } + else + { + _306 = _287.x; + } + _315 = _306; + } + float2 _319 = (abs(_292) - Uniforms.uData[56].zw) + float2(_315); + float _321 = (_294 < 0.0) ? (-1.0) : 1.0; + float _324 = (_292.y < 0.0) ? (-1.0) : 1.0; + float _326 = _319.x; + bool _332; + if (_326 > 0.0) + { + _332 = _319.y > 0.0; } else { - _247 = float2(0.0, _226); + _332 = false; } - _248 = _247; + float2 _346; + if (_332) + { + _346 = fast::normalize(_319) * float2(_321, _324); + } + else + { + float2 _343; + if (_326 > _319.y) + { + _343 = float2(_321, 0.0); + } + else + { + _343 = float2(0.0, _324); + } + _346 = _343; + } + float2 _355; + float _358; + _355 = _346; + _358 = (precise::min(precise::max(_326, _319.y), 0.0) + length(precise::max(_319, float2(0.0)))) - _315; + float2 _356; + float _359; + int _360 = 0; + for (;;) + { + bool _368; + if (_360 < _290) + { + _368 = _360 < 4; + } + else + { + _368 = false; + } + if (_368) + { + int _370 = 14 - _360; + int _371 = 3 * _370; + int _372 = 11 + _371; + int _375 = _371 + 12; + if (Uniforms.uData[_375].x == 0.0) + { + _356 = _355; + _359 = _358; + int _361 = _360 + 1; + _355 = _356; + _358 = _359; + _360 = _361; + continue; + } + float _384 = fast::clamp(Uniforms.uData[_375].x / Uniforms.uData[_375].y, 0.0, 1.0); + bool _386 = Uniforms.uData[_372].x < 0.5; + float _394; + if (_386) + { + _394 = in.in_var_TEXCOORD0.y; + } + else + { + _394 = in.in_var_TEXCOORD0.x; + } + float _402; + if (_386) + { + _402 = in.in_var_TEXCOORD0.x; + } + else + { + _402 = in.in_var_TEXCOORD0.y; + } + float _404 = _402 - Uniforms.uData[_372].y; + float _405 = Uniforms.uData[_375].x * 0.5; + float _408 = Uniforms.uData[_372].w - Uniforms.uData[_372].z; + float _409 = smoothstep(0.0, 0.60000002384185791015625, _384); + float _438; + float _439; + if (Uniforms.uData[_375].w > 2.5) + { + float _429 = _394 - ((Uniforms.uData[_372].z + Uniforms.uData[_372].w) * 0.5); + _438 = (_429 < 0.0) ? 1.0 : (-1.0); + _439 = precise::max(((_408 * 0.5) * (1.0 - _409)) - abs(_429), 0.0); + } + else + { + bool _415 = Uniforms.uData[_375].w < 1.5; + float _421; + if (_415) + { + _421 = _394 - Uniforms.uData[_372].z; + } + else + { + _421 = Uniforms.uData[_372].w - _394; + } + _438 = _415 ? 1.0 : (-1.0); + _439 = precise::max(_421 - ((_408 - _405) * _409), 0.0); + } + float _441 = length(float2(_404, _439)); + float _442 = _441 - _405; + float2 _457; + if (_441 > 0.0) + { + float2 _451 = float2(-_404, (-_439) * _438) / float2(_441); + float2 _456; + if (Uniforms.uData[_372].x > 0.5) + { + _456 = _451.yx; + } + else + { + _456 = _451; + } + _457 = _456; + } + else + { + _457 = float2(0.0); + } + float _459 = Uniforms.uData[_375].z * _384; + float2 _463 = precise::max(float2(_459 + _358, _459 - _442), float2(0.0)); + float _464 = length(_463); + bool _469; + if (_459 > 0.0) + { + _469 = _464 > 0.0; + } + else + { + _469 = false; + } + float2 _484; + if (_469) + { + _484 = ((_355 * _463.x) + (_457 * _463.y)) / float2(_464); + } + else + { + _484 = select(_355, _457, bool2((-_442) > _358)); + } + float _485 = -_442; + float _496; + do + { + if (_459 == 0.0) + { + _496 = precise::max(_358, _485); + break; + } + _496 = precise::min(-_459, precise::max(_358, _485)) + _464; + break; + } while(false); + _356 = _484; + _359 = _496; + int _361 = _360 + 1; + _355 = _356; + _358 = _359; + _360 = _361; + continue; + } + else + { + break; + } + } + _497 = _355; + _498 = _358; } - float _255 = (precise::min(precise::max(_228, _221.y), 0.0) + length(precise::max(_221, float2(0.0)))) - _217; - float2 _401; + else + { + _497 = _269; + _498 = (precise::min(precise::max(_249, _242.y), 0.0) + length(precise::max(_242, float2(0.0)))) - _238; + } + float2 _644; if (Uniforms.uData[10].w > 0.0) { - float _264 = (Uniforms.uData[9].x < 0.0) ? (-1.0) : 1.0; - float _267 = (Uniforms.uData[9].y < 0.0) ? (-1.0) : 1.0; - float _287; - if (_264 < 0.0) + float _507 = (Uniforms.uData[9].x < 0.0) ? (-1.0) : 1.0; + float _510 = (Uniforms.uData[9].y < 0.0) ? (-1.0) : 1.0; + float _530; + if (_507 < 0.0) { - float _279; - if (_267 < 0.0) + float _529; + if (_510 < 0.0) { - _279 = _192.x; + _529 = _213.x; } else { - _279 = _192.w; + _529 = _213.w; } - _287 = _279; + _530 = _529; } else { - float _286; - if (_267 < 0.0) + float _522; + if (_510 < 0.0) { - _286 = _192.y; + _522 = _213.y; } else { - _286 = _192.z; + _522 = _213.z; } - _287 = _286; + _530 = _522; } - float2 _290 = precise::max(Uniforms.uData[_179].zw - float2(_287), float2(0.0)); - float2 _294 = (Uniforms.uData[_179].xy + (float2(_264, _267) * _290)) + (Uniforms.uData[9].xy * _287); - float2 _309; + float2 _533 = precise::max(_207.zw - float2(_530), float2(0.0)); + float2 _537 = (_207.xy + (float2(_507, _510) * _533)) + (Uniforms.uData[9].xy * _530); + float2 _552; if (abs(Uniforms.uData[9].x) < 0.001000000047497451305389404296875) { - float _302 = _290.x; - float2 _308 = _294; - _308.x = fast::clamp(in.in_var_TEXCOORD0.x, Uniforms.uData[_179].x - _302, Uniforms.uData[_179].x + _302) + (_287 * Uniforms.uData[9].x); - _309 = _308; + float _545 = _533.x; + float2 _551 = _537; + _551.x = fast::clamp(in.in_var_TEXCOORD0.x, _207.x - _545, _207.x + _545) + (_530 * Uniforms.uData[9].x); + _552 = _551; } else { - _309 = _294; + _552 = _537; } - float2 _324; + float2 _567; if (abs(Uniforms.uData[9].y) < 0.001000000047497451305389404296875) { - float _317 = _290.y; - float2 _323 = _309; - _323.y = fast::clamp(in.in_var_TEXCOORD0.y, Uniforms.uData[_179].y - _317, Uniforms.uData[_179].y + _317) + (_287 * Uniforms.uData[9].y); - _324 = _323; + float _560 = _533.y; + float2 _566 = _552; + _566.y = fast::clamp(in.in_var_TEXCOORD0.y, _207.y - _560, _207.y + _560) + (_530 * Uniforms.uData[9].y); + _567 = _566; } else { - _324 = _309; + _567 = _552; } - float _327 = precise::max(Uniforms.uData[10].w - precise::max(Uniforms.uData[8].w, 1.0), 0.0); - float2 _332 = -Uniforms.uData[9].xy; - float _333 = _332.x; - float _335 = (_333 < 0.0) ? (-1.0) : 1.0; - float _336 = _332.y; - float _338 = (_336 < 0.0) ? (-1.0) : 1.0; - float _358; - if (_335 < 0.0) + float _570 = precise::max(Uniforms.uData[10].w - precise::max(Uniforms.uData[8].w, 1.0), 0.0); + float2 _575 = -Uniforms.uData[9].xy; + float _576 = _575.x; + float _578 = (_576 < 0.0) ? (-1.0) : 1.0; + float _579 = _575.y; + float _581 = (_579 < 0.0) ? (-1.0) : 1.0; + float _601; + if (_578 < 0.0) { - float _350; - if (_338 < 0.0) + float _600; + if (_581 < 0.0) { - _350 = _192.x; + _600 = _213.x; } else { - _350 = _192.w; + _600 = _213.w; } - _358 = _350; + _601 = _600; } else { - float _357; - if (_338 < 0.0) + float _593; + if (_581 < 0.0) { - _357 = _192.y; + _593 = _213.y; } else { - _357 = _192.z; + _593 = _213.z; } - _358 = _357; + _601 = _593; } - float2 _361 = precise::max(Uniforms.uData[_179].zw - float2(_358), float2(0.0)); - float2 _365 = (Uniforms.uData[_179].xy + (float2(_335, _338) * _361)) + (_332 * _358); - float2 _380; - if (abs(_333) < 0.001000000047497451305389404296875) + float2 _604 = precise::max(_207.zw - float2(_601), float2(0.0)); + float2 _608 = (_207.xy + (float2(_578, _581) * _604)) + (_575 * _601); + float2 _623; + if (abs(_576) < 0.001000000047497451305389404296875) { - float _373 = _361.x; - float2 _379 = _365; - _379.x = fast::clamp(in.in_var_TEXCOORD0.x, Uniforms.uData[_179].x - _373, Uniforms.uData[_179].x + _373) + (_358 * _333); - _380 = _379; + float _616 = _604.x; + float2 _622 = _608; + _622.x = fast::clamp(in.in_var_TEXCOORD0.x, _207.x - _616, _207.x + _616) + (_601 * _576); + _623 = _622; } else { - _380 = _365; + _623 = _608; } - float2 _395; - if (abs(_336) < 0.001000000047497451305389404296875) + float2 _638; + if (abs(_579) < 0.001000000047497451305389404296875) { - float _388 = _361.y; - float2 _394 = _380; - _394.y = fast::clamp(in.in_var_TEXCOORD0.y, Uniforms.uData[_179].y - _388, Uniforms.uData[_179].y + _388) + (_358 * _336); - _395 = _394; + float _631 = _604.y; + float2 _637 = _623; + _637.y = fast::clamp(in.in_var_TEXCOORD0.y, _207.y - _631, _207.y + _631) + (_601 * _579); + _638 = _637; } else { - _395 = _380; + _638 = _623; } - _401 = float2(1.0 - smoothstep(_327, Uniforms.uData[10].w, length(in.in_var_TEXCOORD0 - _324)), 1.0 - smoothstep(_327, Uniforms.uData[10].w, length(in.in_var_TEXCOORD0 - _395))); + _644 = float2(1.0 - smoothstep(_570, Uniforms.uData[10].w, length(in.in_var_TEXCOORD0 - _567)), 1.0 - smoothstep(_570, Uniforms.uData[10].w, length(in.in_var_TEXCOORD0 - _638))); } else { - _401 = float2(0.0); + _644 = float2(0.0); } - bool _402 = _255 < _163; - if (_402) + bool _645 = _498 < _166; + if (_645) { - _139 = _157; - _142 = _165; - _144 = _155; - _148 = _159; - _158 = Uniforms.uData[_179].yw; - _162 = _163; + _142 = _160; + _145 = _168; + _147 = _158; + _151 = _162; + _161 = _207.yw; + _165 = _166; } else { - bool _407 = _255 < _161; - float2 _411; - if (_407) + bool _649 = _498 < _164; + float2 _653; + if (_649) { - _411 = Uniforms.uData[_179].yw; + _653 = _207.yw; } else { - _411 = _138; + _653 = _141; } - _139 = _411; - _142 = _407 ? _190 : _141; - _144 = select(_143, _401, bool2(_407)); - _148 = select(_147, Uniforms.uData[_185], bool4(_407)); - _158 = _157; - _162 = _407 ? _255 : _161; - } - _156 = select(_155, _401, bool2(_402)); - _160 = select(_159, Uniforms.uData[_185], bool4(_402)); - _164 = _402 ? _255 : _163; - _166 = _402 ? _190 : _165; - float2 _464; - float _465; - if (Uniforms.uData[_185].w < 0.5) - { - float _430 = (in.in_var_TEXCOORD0.x - Uniforms.uData[_179].x) + Uniforms.uData[_179].z; - float _432 = (Uniforms.uData[_179].x + Uniforms.uData[_179].z) - in.in_var_TEXCOORD0.x; - float _437 = (in.in_var_TEXCOORD0.y - Uniforms.uData[_179].y) + Uniforms.uData[_179].w; - float _439 = (Uniforms.uData[_179].y + Uniforms.uData[_179].w) - in.in_var_TEXCOORD0.y; - float _443 = precise::min(precise::min(_430, _432), precise::min(_437, _439)); - float4 _448 = exp((float4(_443) - float4(_430, _432, _437, _439)) / float4(Uniforms.uData[1].y)); - float _449 = _448.x; - float _450 = _448.y; - float _452 = _448.z; - float _454 = _448.w; - float _455 = ((_449 + _450) + _452) + _454; - _464 = float2(_450 - _449, _454 - _452) / float2(_455); - _465 = (Uniforms.uData[1].y * log(_455)) - _443; + _142 = _653; + _145 = _649 ? _211 : _144; + _147 = select(_146, _644, bool2(_649)); + _151 = select(_150, _206, bool4(_649)); + _161 = _160; + _165 = _649 ? _498 : _164; + } + _159 = select(_158, _644, bool2(_645)); + _163 = select(_162, _206, bool4(_645)); + _167 = _645 ? _498 : _166; + _169 = _645 ? _211 : _168; + float2 _707; + float _708; + if (_206.w < 0.5) + { + float _673 = (in.in_var_TEXCOORD0.x - _207.x) + _207.z; + float _675 = (_207.x + _207.z) - in.in_var_TEXCOORD0.x; + float _680 = (in.in_var_TEXCOORD0.y - _207.y) + _207.w; + float _682 = (_207.y + _207.w) - in.in_var_TEXCOORD0.y; + float _686 = precise::min(precise::min(_673, _675), precise::min(_680, _682)); + float4 _691 = exp((float4(_686) - float4(_673, _675, _680, _682)) / float4(Uniforms.uData[1].y)); + float _692 = _691.x; + float _693 = _691.y; + float _695 = _691.z; + float _697 = _691.w; + float _698 = ((_692 + _693) + _695) + _697; + _707 = float2(_693 - _692, _697 - _695) / float2(_698); + _708 = (Uniforms.uData[1].y * log(_698)) - _686; } else { - _464 = _248; - _465 = _255; + _707 = _497; + _708 = _498; } - bool _466 = _465 < _153; - if (_466) + float2 _974; + float _975; + if (_196) { - _146 = _149; - _152 = _153; + float4 _720 = precise::min(Uniforms.uData[57], float4(precise::min(Uniforms.uData[56].z, Uniforms.uData[56].w))); + int _723 = int(Uniforms.uData[58].z); + float2 _829; + float _830; + if (Uniforms.uData[1].y > 0.0) + { + float _795 = (in.in_var_TEXCOORD0.x - Uniforms.uData[56].x) + Uniforms.uData[56].z; + float _797 = (Uniforms.uData[56].x + Uniforms.uData[56].z) - in.in_var_TEXCOORD0.x; + float _802 = (in.in_var_TEXCOORD0.y - Uniforms.uData[56].y) + Uniforms.uData[56].w; + float _804 = (Uniforms.uData[56].y + Uniforms.uData[56].w) - in.in_var_TEXCOORD0.y; + float _808 = precise::min(precise::min(_795, _797), precise::min(_802, _804)); + float4 _813 = exp((float4(_808) - float4(_795, _797, _802, _804)) / float4(Uniforms.uData[1].y)); + float _814 = _813.x; + float _815 = _813.y; + float _817 = _813.z; + float _819 = _813.w; + float _820 = ((_814 + _815) + _817) + _819; + _829 = float2(_815 - _814, _819 - _817) / float2(_820); + _830 = (Uniforms.uData[1].y * log(_820)) - _808; + } + else + { + float2 _729 = in.in_var_TEXCOORD0 - Uniforms.uData[56].xy; + float _731 = _729.x; + float _752; + if (_731 > 0.0) + { + float _751; + if (_729.y > 0.0) + { + _751 = _720.z; + } + else + { + _751 = _720.y; + } + _752 = _751; + } + else + { + float _743; + if (_729.y > 0.0) + { + _743 = _720.w; + } + else + { + _743 = _720.x; + } + _752 = _743; + } + float2 _756 = (abs(_729) - Uniforms.uData[56].zw) + float2(_752); + float _758 = (_731 < 0.0) ? (-1.0) : 1.0; + float _761 = (_729.y < 0.0) ? (-1.0) : 1.0; + float _763 = _756.x; + bool _769; + if (_763 > 0.0) + { + _769 = _756.y > 0.0; + } + else + { + _769 = false; + } + float2 _783; + if (_769) + { + _783 = fast::normalize(_756) * float2(_758, _761); + } + else + { + float2 _780; + if (_763 > _756.y) + { + _780 = float2(_758, 0.0); + } + else + { + _780 = float2(0.0, _761); + } + _783 = _780; + } + _829 = _783; + _830 = (precise::min(precise::max(_763, _756.y), 0.0) + length(precise::max(_756, float2(0.0)))) - _752; + } + float2 _832; + float _835; + _832 = _829; + _835 = _830; + float2 _833; + float _836; + int _837 = 0; + for (;;) + { + bool _845; + if (_837 < _723) + { + _845 = _837 < 4; + } + else + { + _845 = false; + } + if (_845) + { + int _847 = 14 - _837; + int _848 = 3 * _847; + int _849 = 11 + _848; + int _852 = _848 + 12; + if (Uniforms.uData[_852].x == 0.0) + { + _833 = _832; + _836 = _835; + int _838 = _837 + 1; + _832 = _833; + _835 = _836; + _837 = _838; + continue; + } + float _861 = fast::clamp(Uniforms.uData[_852].x / Uniforms.uData[_852].y, 0.0, 1.0); + bool _863 = Uniforms.uData[_849].x < 0.5; + float _871; + if (_863) + { + _871 = in.in_var_TEXCOORD0.y; + } + else + { + _871 = in.in_var_TEXCOORD0.x; + } + float _879; + if (_863) + { + _879 = in.in_var_TEXCOORD0.x; + } + else + { + _879 = in.in_var_TEXCOORD0.y; + } + float _881 = _879 - Uniforms.uData[_849].y; + float _882 = Uniforms.uData[_852].x * 0.5; + float _885 = Uniforms.uData[_849].w - Uniforms.uData[_849].z; + float _886 = smoothstep(0.0, 0.60000002384185791015625, _861); + float _915; + float _916; + if (Uniforms.uData[_852].w > 2.5) + { + float _906 = _871 - ((Uniforms.uData[_849].z + Uniforms.uData[_849].w) * 0.5); + _915 = (_906 < 0.0) ? 1.0 : (-1.0); + _916 = precise::max(((_885 * 0.5) * (1.0 - _886)) - abs(_906), 0.0); + } + else + { + bool _892 = Uniforms.uData[_852].w < 1.5; + float _898; + if (_892) + { + _898 = _871 - Uniforms.uData[_849].z; + } + else + { + _898 = Uniforms.uData[_849].w - _871; + } + _915 = _892 ? 1.0 : (-1.0); + _916 = precise::max(_898 - ((_885 - _882) * _886), 0.0); + } + float _918 = length(float2(_881, _916)); + float _919 = _918 - _882; + float2 _934; + if (_918 > 0.0) + { + float2 _928 = float2(-_881, (-_916) * _915) / float2(_918); + float2 _933; + if (Uniforms.uData[_849].x > 0.5) + { + _933 = _928.yx; + } + else + { + _933 = _928; + } + _934 = _933; + } + else + { + _934 = float2(0.0); + } + float _936 = Uniforms.uData[_852].z * _861; + float2 _940 = precise::max(float2(_936 + _835, _936 - _919), float2(0.0)); + float _941 = length(_940); + bool _946; + if (_936 > 0.0) + { + _946 = _941 > 0.0; + } + else + { + _946 = false; + } + float2 _961; + if (_946) + { + _961 = ((_832 * _940.x) + (_934 * _940.y)) / float2(_941); + } + else + { + _961 = select(_832, _934, bool2((-_919) > _835)); + } + float _962 = -_919; + float _973; + do + { + if (_936 == 0.0) + { + _973 = precise::max(_835, _962); + break; + } + _973 = precise::min(-_936, precise::max(_835, _962)) + _941; + break; + } while(false); + _833 = _961; + _836 = _973; + int _838 = _837 + 1; + _832 = _833; + _835 = _836; + _837 = _838; + continue; + } + else + { + break; + } + } + _974 = _832; + _975 = _835; + } + else + { + _974 = _707; + _975 = _708; + } + bool _976 = _975 < _156; + if (_976) + { + _149 = _152; + _155 = _156; } else { - bool _470 = _465 < _151; - _146 = select(_145, _464, bool2(_470)); - _152 = _470 ? _465 : _151; + bool _980 = _975 < _154; + _149 = select(_148, _974, bool2(_980)); + _155 = _980 ? _975 : _154; } - _150 = select(_149, _464, bool2(_466)); - _154 = _466 ? _465 : _153; - _138 = _139; + _153 = select(_152, _974, bool2(_976)); + _157 = _976 ? _975 : _156; _141 = _142; - _143 = _144; - _145 = _146; - _147 = _148; - _149 = _150; - _151 = _152; - _153 = _154; - _155 = _156; - _157 = _158; - _159 = _160; - _161 = _162; - _163 = _164; - _165 = _166; - _167++; + _144 = _145; + _146 = _147; + _148 = _149; + _150 = _151; + _152 = _153; + _154 = _155; + _156 = _157; + _158 = _159; + _160 = _161; + _162 = _163; + _164 = _165; + _166 = _167; + _168 = _169; + _170++; continue; } else @@ -365,575 +856,601 @@ fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Unifo break; } } - bool _480 = Uniforms.uData[58].w > 2.5; - bool _481 = Uniforms.uData[58].w > 1.5; - float _554; - float2 _555; - if (_481) - { - float2 _487 = in.in_var_TEXCOORD0 - Uniforms.uData[56].xy; - float4 _493 = precise::min(Uniforms.uData[57], float4(precise::min(Uniforms.uData[56].z, Uniforms.uData[56].w))); - float _494 = _487.x; - float _515; - if (_494 > 0.0) + bool _994; + if (Uniforms.uData[58].w > 2.5) + { + _994 = Uniforms.uData[58].w < 3.5; + } + else + { + _994 = false; + } + bool _995 = Uniforms.uData[58].w > 1.5; + bool _999; + if (_995) + { + _999 = Uniforms.uData[58].w < 3.5; + } + else + { + _999 = false; + } + float _1072; + float2 _1073; + if (_999) + { + float2 _1005 = in.in_var_TEXCOORD0 - Uniforms.uData[56].xy; + float4 _1011 = precise::min(Uniforms.uData[57], float4(precise::min(Uniforms.uData[56].z, Uniforms.uData[56].w))); + float _1012 = _1005.x; + float _1033; + if (_1012 > 0.0) { - float _506; - if (_487.y > 0.0) + float _1032; + if (_1005.y > 0.0) { - _506 = _493.z; + _1032 = _1011.z; } else { - _506 = _493.y; + _1032 = _1011.y; } - _515 = _506; + _1033 = _1032; } else { - float _514; - if (_487.y > 0.0) + float _1024; + if (_1005.y > 0.0) { - _514 = _493.w; + _1024 = _1011.w; } else { - _514 = _493.x; + _1024 = _1011.x; } - _515 = _514; + _1033 = _1024; } - float2 _519 = (abs(_487) - Uniforms.uData[56].zw) + float2(_515); - float _521 = (_494 < 0.0) ? (-1.0) : 1.0; - float _524 = (_487.y < 0.0) ? (-1.0) : 1.0; - float _526 = _519.x; - bool _532; - if (_526 > 0.0) + float2 _1037 = (abs(_1005) - Uniforms.uData[56].zw) + float2(_1033); + float _1039 = (_1012 < 0.0) ? (-1.0) : 1.0; + float _1042 = (_1005.y < 0.0) ? (-1.0) : 1.0; + float _1044 = _1037.x; + bool _1050; + if (_1044 > 0.0) { - _532 = _519.y > 0.0; + _1050 = _1037.y > 0.0; } else { - _532 = false; + _1050 = false; } - float2 _546; - if (_532) + float2 _1064; + if (_1050) { - _546 = fast::normalize(_519) * float2(_521, _524); + _1064 = fast::normalize(_1037) * float2(_1039, _1042); } else { - float2 _545; - if (_526 > _519.y) + float2 _1061; + if (_1044 > _1037.y) { - _545 = float2(_521, 0.0); + _1061 = float2(_1039, 0.0); } else { - _545 = float2(0.0, _524); + _1061 = float2(0.0, _1042); } - _546 = _545; + _1064 = _1061; } - _554 = (precise::min(precise::max(_526, _519.y), 0.0) + length(precise::max(_519, float2(0.0)))) - _515; - _555 = _546; + _1072 = (precise::min(precise::max(_1044, _1037.y), 0.0) + length(precise::max(_1037, float2(0.0)))) - _1033; + _1073 = _1064; + } + else + { + _1072 = -1000000000.0; + _1073 = float2(0.0); + } + bool _1077; + if (_995) + { + _1077 = Uniforms.uData[58].w < 3.5; } else { - _554 = -1000000000.0; - _555 = float2(0.0); + _1077 = false; } - bool _559; - if (_481) + bool _1081; + if (_1077) { - _559 = !_480; + _1081 = !_994; } else { - _559 = false; - } - float2 _604; - float2 _605; - float _606; - float2 _607; - float2 _608; - float2 _609; - float2 _610; - float4 _611; - float4 _612; - float _613; - float _614; - float _615; - float _616; - if (_559) - { - float _562 = 1.0 - _554; - bool _563 = _562 < _163; - float2 _579; - float2 _580; - float _581; - float2 _582; - float4 _583; - float _584; - if (_563) + _1081 = false; + } + float2 _1126; + float2 _1127; + float _1128; + float2 _1129; + float2 _1130; + float2 _1131; + float2 _1132; + float4 _1133; + float4 _1134; + float _1135; + float _1136; + float _1137; + float _1138; + if (_1081) + { + float _1084 = 1.0 - _1072; + bool _1085 = _1084 < _166; + float2 _1101; + float2 _1102; + float _1103; + float2 _1104; + float4 _1105; + float _1106; + if (_1085) { - _579 = _157; - _580 = Uniforms.uData[56].yw; - _581 = _165; - _582 = _155; - _583 = _159; - _584 = _163; + _1101 = _160; + _1102 = Uniforms.uData[56].yw; + _1103 = _168; + _1104 = _158; + _1105 = _162; + _1106 = _166; } else { - bool _568 = _562 < _161; - float2 _572; - if (_568) + bool _1089 = _1084 < _164; + float2 _1093; + if (_1089) { - _572 = Uniforms.uData[56].yw; + _1093 = Uniforms.uData[56].yw; } else { - _572 = _138; + _1093 = _141; } - _579 = _572; - _580 = _157; - _581 = _568 ? _165 : _141; - _582 = select(_143, float2(0.0), bool2(_568)); - _583 = select(_147, Uniforms.uData[58], bool4(_568)); - _584 = _568 ? _562 : _161; + _1101 = _1093; + _1102 = _160; + _1103 = _1089 ? _168 : _144; + _1104 = select(_146, float2(0.0), bool2(_1089)); + _1105 = select(_150, Uniforms.uData[58], bool4(_1089)); + _1106 = _1089 ? _1084 : _164; } - float2 _590 = -_555; - bool _591 = _562 < _153; - float2 _599; - float _600; - if (_591) + float2 _1112 = -_1073; + bool _1113 = _1084 < _156; + float2 _1121; + float _1122; + if (_1113) { - _599 = _149; - _600 = _153; + _1121 = _152; + _1122 = _156; } else { - bool _595 = _562 < _151; - _599 = select(_145, _590, bool2(_595)); - _600 = _595 ? _562 : _151; + bool _1117 = _1084 < _154; + _1121 = select(_148, _1112, bool2(_1117)); + _1122 = _1117 ? _1084 : _154; } - _604 = _579; - _605 = _580; - _606 = _581; - _607 = _582; - _608 = select(_155, float2(0.0), bool2(_563)); - _609 = _599; - _610 = select(_149, _590, bool2(_591)); - _611 = _583; - _612 = select(_159, Uniforms.uData[58], bool4(_563)); - _613 = _600; - _614 = _591 ? _562 : _153; - _615 = _584; - _616 = _563 ? _562 : _163; + _1126 = _1101; + _1127 = _1102; + _1128 = _1103; + _1129 = _1104; + _1130 = select(_158, float2(0.0), bool2(_1085)); + _1131 = _1121; + _1132 = select(_152, _1112, bool2(_1113)); + _1133 = _1105; + _1134 = select(_162, Uniforms.uData[58], bool4(_1085)); + _1135 = _1122; + _1136 = _1113 ? _1084 : _156; + _1137 = _1106; + _1138 = _1085 ? _1084 : _166; } else { - _604 = _138; - _605 = _157; - _606 = _141; - _607 = _143; - _608 = _155; - _609 = _145; - _610 = _149; - _611 = _147; - _612 = _159; - _613 = _151; - _614 = _153; - _615 = _161; - _616 = _163; - } - float _618 = precise::max(Uniforms.uData[1].x, 9.9999997473787516355514526367188e-05); - float _623 = precise::max(_618 - abs(_616 - _615), 0.0) / _618; - float _624 = _623 * _623; - float _625 = _624 * 0.5; - float _630; - if (_615 < _616) - { - _630 = 1.0 - _625; + _1126 = _141; + _1127 = _160; + _1128 = _144; + _1129 = _146; + _1130 = _158; + _1131 = _148; + _1132 = _152; + _1133 = _150; + _1134 = _162; + _1135 = _154; + _1136 = _156; + _1137 = _164; + _1138 = _166; + } + float _1140 = precise::max(Uniforms.uData[1].x, 9.9999997473787516355514526367188e-05); + float _1145 = precise::max(_1140 - abs(_1138 - _1137), 0.0) / _1140; + float _1146 = _1145 * _1145; + float _1147 = _1146 * 0.5; + float _1152; + if (_1137 < _1138) + { + _1152 = 1.0 - _1147; } else { - _630 = _625; + _1152 = _1147; } - float _634 = precise::min(_616, _615) - ((_624 * _618) * 0.25); - float _639 = precise::max(_618 - abs(_614 - _613), 0.0) / _618; - float _640 = _639 * _639; - float _641 = _640 * 0.5; - float _646; - if (_613 < _614) + float _1156 = precise::min(_1138, _1137) - ((_1146 * _1140) * 0.25); + float _1161 = precise::max(_1140 - abs(_1136 - _1135), 0.0) / _1140; + float _1162 = _1161 * _1161; + float _1163 = _1162 * 0.5; + float _1168; + if (_1135 < _1136) { - _646 = 1.0 - _641; + _1168 = 1.0 - _1163; } else { - _646 = _641; + _1168 = _1163; } - float _650 = precise::min(_614, _613) - ((_640 * _618) * 0.25); - float _654; - if (_480) + float _1172 = precise::min(_1136, _1135) - ((_1162 * _1140) * 0.25); + float _1176; + if (_994) { - _654 = precise::max(_634, _554); + _1176 = precise::max(_1156, _1072); } else { - _654 = _634; + _1176 = _1156; } - float _657 = fast::clamp(0.5 - precise::max(_654, _554), 0.0, 1.0); - if (_657 <= 0.0) + float _1179 = fast::clamp(0.5 - precise::max(_1176, _1072), 0.0, 1.0); + if (_1179 <= 0.0) { discard_fragment(); } if (in.in_var_COLOR.x < 0.5) { - _1186 = float4(0.0, 0.0, 0.0, _657); + _1708 = float4(0.0, 0.0, 0.0, _1179); break; } - float4 _668 = mix(_612, _611, float4(_630)); - bool _674; - if (_480) + float4 _1190 = mix(_1134, _1133, float4(_1152)); + bool _1196; + if (_994) { - _674 = _554 > _650; + _1196 = _1072 > _1172; } else { - _674 = false; - } - float2 _677 = select(mix(_610, _609, float2(_646)), _555, bool2(_674)); - float2 _678 = float2(_630); - float2 _682 = mix(_608, _607, _678) * precise::min(length(_677), 1.0); - float _684 = precise::max(0.0, -(_674 ? _554 : _650)); - float _685 = -_684; - float _688 = exp(_685 / Uniforms.uData[1].z); - float _694 = _668.y; - float _728; - float _729; - float2 _730; - if (_136) - { - float _702 = precise::max(precise::min(Uniforms.uData[5].y * mix(_165, _606, _630), Uniforms.uData[6].w), 1.0); - float _705 = fast::clamp(1.0 - (_684 / _702), 0.0, 1.0); - float _710 = (((Uniforms.uData[5].z * _702) * _694) * _705) * _705; - _728 = _705; - _729 = _710; - _730 = fast::clamp(((in.in_var_TEXCOORD0 - (_677 * _710)) - Uniforms.uData[0].xy) * Uniforms.uData[0].zw, float2(0.0), float2(1.0)); + _1196 = false; + } + float2 _1199 = select(mix(_1132, _1131, float2(_1168)), _1073, bool2(_1196)); + float2 _1200 = float2(_1152); + float2 _1204 = mix(_1130, _1129, _1200) * precise::min(length(_1199), 1.0); + float _1206 = precise::max(0.0, -(_1196 ? _1072 : _1172)); + float _1207 = -_1206; + float _1210 = exp(_1207 / Uniforms.uData[1].z); + float _1216 = _1190.y; + float _1250; + float _1251; + float2 _1252; + if (_139) + { + float _1234 = precise::max(precise::min(Uniforms.uData[5].y * mix(_168, _1128, _1152), Uniforms.uData[6].w), 1.0); + float _1237 = fast::clamp(1.0 - (_1206 / _1234), 0.0, 1.0); + float _1242 = (((Uniforms.uData[5].z * _1234) * _1216) * _1237) * _1237; + _1250 = _1237; + _1251 = _1242; + _1252 = fast::clamp(((in.in_var_TEXCOORD0 - (_1199 * _1242)) - Uniforms.uData[0].xy) * Uniforms.uData[0].zw, float2(0.0), float2(1.0)); } else { - _728 = 0.0; - _729 = 0.0; - _730 = fast::clamp(((in.in_var_TEXCOORD0 + (_677 * ((Uniforms.uData[2].x * _694) * _688))) - Uniforms.uData[0].xy) * Uniforms.uData[0].zw, float2(0.0), float2(1.0)); + _1250 = 0.0; + _1251 = 0.0; + _1252 = fast::clamp(((in.in_var_TEXCOORD0 + (_1199 * ((Uniforms.uData[2].x * _1216) * _1210))) - Uniforms.uData[0].xy) * Uniforms.uData[0].zw, float2(0.0), float2(1.0)); } - float4 _734 = Frost.sample(FrostSampler, _730, level(0.0)); - bool _736 = Uniforms.uData[4].w > 0.5; - float4 _744; - if (_736) + float4 _1256 = Frost.sample(FrostSampler, _1252, level(0.0)); + bool _1258 = Uniforms.uData[4].w > 0.5; + float4 _1266; + if (_1258) { - _744 = Sharp.sample(SharpSampler, _730, level(0.0)); + _1266 = Sharp.sample(SharpSampler, _1252, level(0.0)); } else { - _744 = _734; + _1266 = _1256; } - bool _749; - if (_136) + bool _1271; + if (_139) { - _749 = Uniforms.uData[6].y > 0.0; + _1271 = Uniforms.uData[6].y > 0.0; } else { - _749 = false; + _1271 = false; } - bool _753; - if (_749) + bool _1275; + if (_1271) { - _753 = _729 > 0.5; + _1275 = _1251 > 0.5; } else { - _753 = false; - } - float4 _814; - float4 _815; - if (_753) - { - float2 _761 = (_677 * ((_729 * 0.039999999105930328369140625) * Uniforms.uData[6].y)) * Uniforms.uData[0].zw; - float2 _763 = fast::clamp(_730 + _761, float2(0.0), float2(1.0)); - float2 _765 = fast::clamp(_730 - _761, float2(0.0), float2(1.0)); - float4 _769 = Frost.sample(FrostSampler, _763, level(0.0)); - float _774 = _734.w; - float _775 = (_769.x / precise::max(_769.w, 9.9999997473787516355514526367188e-05)) * _774; - float4 _776 = _734; - _776.x = _775; - float4 _780 = Frost.sample(FrostSampler, _765, level(0.0)); - float _785 = (_780.z / precise::max(_780.w, 9.9999997473787516355514526367188e-05)) * _774; - _776.z = _785; - float4 _813; - if (_736) + _1275 = false; + } + float4 _1336; + float4 _1337; + if (_1275) + { + float2 _1283 = (_1199 * ((_1251 * 0.039999999105930328369140625) * Uniforms.uData[6].y)) * Uniforms.uData[0].zw; + float2 _1285 = fast::clamp(_1252 + _1283, float2(0.0), float2(1.0)); + float2 _1287 = fast::clamp(_1252 - _1283, float2(0.0), float2(1.0)); + float4 _1291 = Frost.sample(FrostSampler, _1285, level(0.0)); + float _1296 = _1256.w; + float _1297 = (_1291.x / precise::max(_1291.w, 9.9999997473787516355514526367188e-05)) * _1296; + float4 _1298 = _1256; + _1298.x = _1297; + float4 _1302 = Frost.sample(FrostSampler, _1287, level(0.0)); + float _1307 = (_1302.z / precise::max(_1302.w, 9.9999997473787516355514526367188e-05)) * _1296; + _1298.z = _1307; + float4 _1335; + if (_1258) { - float4 _793 = Sharp.sample(SharpSampler, _763, level(0.0)); - float4 _800 = _744; - _800.x = (_793.x / precise::max(_793.w, 9.9999997473787516355514526367188e-05)) * _744.w; - float4 _804 = Sharp.sample(SharpSampler, _765, level(0.0)); - _800.z = (_804.z / precise::max(_804.w, 9.9999997473787516355514526367188e-05)) * _744.w; - _813 = _800; + float4 _1317 = Sharp.sample(SharpSampler, _1285, level(0.0)); + float4 _1324 = _1266; + _1324.x = (_1317.x / precise::max(_1317.w, 9.9999997473787516355514526367188e-05)) * _1266.w; + float4 _1328 = Sharp.sample(SharpSampler, _1287, level(0.0)); + _1324.z = (_1328.z / precise::max(_1328.w, 9.9999997473787516355514526367188e-05)) * _1266.w; + _1335 = _1324; } else { - float4 _811 = _744; - _811.x = _775; - _811.z = _785; - _813 = _811; + float4 _1312 = _1266; + _1312.x = _1297; + _1312.z = _1307; + _1335 = _1312; } - _814 = _813; - _815 = _776; + _1336 = _1335; + _1337 = _1298; } else { - _814 = _744; - _815 = _734; + _1336 = _1266; + _1337 = _1256; } - bool _817 = Uniforms.uData[4].x > 1.5; - float _831; - if (_817) + bool _1339 = Uniforms.uData[4].x > 1.5; + float _1353; + if (_1339) { - _831 = Uniforms.uData[3].w; + _1353 = Uniforms.uData[3].w; } else { - float _830; + float _1351; if (fmod(Uniforms.uData[6].x, 2.0) > 0.5) { - _830 = 1.0; + _1351 = 1.0; } else { - _830 = _815.w; + _1351 = _1337.w; } - _831 = _830; + _1353 = _1351; } - float4 _840 = float4(_815.xyz / float3(precise::max(_815.w, 9.9999997473787516355514526367188e-05)), 1.0); - float4 _849 = float4(_814.xyz / float3(precise::max(_814.w, 9.9999997473787516355514526367188e-05)), 1.0); - float _856; - if (_817) + float4 _1362 = float4(_1337.xyz / float3(precise::max(_1337.w, 9.9999997473787516355514526367188e-05)), 1.0); + float4 _1371 = float4(_1336.xyz / float3(precise::max(_1336.w, 9.9999997473787516355514526367188e-05)), 1.0); + float _1378; + if (_1339) { - _856 = 1.0; + _1378 = 1.0; } else { - _856 = (Uniforms.uData[4].z > 0.5) ? Uniforms.uData[4].x : 0.0; + _1378 = (Uniforms.uData[4].z > 0.5) ? Uniforms.uData[4].x : 0.0; } - bool _860; - if (_136) + bool _1382; + if (_139) { - _860 = !_817; + _1382 = !_1339; } else { - _860 = false; + _1382 = false; } - float _869; - if (_860) + float _1391; + if (_1382) { - _869 = _856 * (1.0 - ((_728 * _728) * (1.0 - smoothstep(0.800000011920928955078125, 1.0, _856)))); + _1391 = _1378 * (1.0 - ((_1250 * _1250) * (1.0 - smoothstep(0.800000011920928955078125, 1.0, _1378)))); } else { - _869 = _856; + _1391 = _1378; } - float _872 = 1.0 - _869; - float _880; - if (_136) + float _1394 = 1.0 - _1391; + float _1402; + if (_139) { - _880 = _728; + _1402 = _1250; } else { - _880 = _688 * _688; + _1402 = _1210 * _1210; } - float _883 = fast::clamp(((Uniforms.uData[2].y * _694) * _880) * _872, 0.0, 1.0); - float4 _889 = ((_849 * _883) + ((mix(_849, _840, float4(fast::clamp(_668.x, 0.0, 1.0))) * _872) * (1.0 - _883))) + (Uniforms.uData[3] * _869); - float4 _932; - if (_817) + float _1405 = fast::clamp(((Uniforms.uData[2].y * _1216) * _1402) * _1394, 0.0, 1.0); + float4 _1411 = ((_1371 * _1405) + ((mix(_1371, _1362, float4(fast::clamp(_1190.x, 0.0, 1.0))) * _1394) * (1.0 - _1405))) + (Uniforms.uData[3] * _1391); + float4 _1454; + if (_1339) { - _932 = float4(Uniforms.uData[3].xyz / float3(precise::max(Uniforms.uData[3].w, 9.9999997473787516355514526367188e-05)), 1.0); + _1454 = float4(Uniforms.uData[3].xyz / float3(precise::max(Uniforms.uData[3].w, 9.9999997473787516355514526367188e-05)), 1.0); } else { - float4 _905 = _889 + (_840 * (1.0 - _889.w)); - float4 _931; + float4 _1418 = _1411 + (_1362 * (1.0 - _1411.w)); + float4 _1444; if (Uniforms.uData[7].w < 1.0) { - float3 _910 = _905.xyz; - float _911 = dot(_910, float3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); - float _912 = 0.60000002384185791015625 * Uniforms.uData[7].w; - float _914 = precise::max(Uniforms.uData[7].w - _912, 9.9999997473787516355514526367188e-05); - float _926; - if (_911 <= _912) + float3 _1423 = _1418.xyz; + float _1424 = dot(_1423, float3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + float _1425 = 0.60000002384185791015625 * Uniforms.uData[7].w; + float _1427 = precise::max(Uniforms.uData[7].w - _1425, 9.9999997473787516355514526367188e-05); + float _1439; + if (_1424 <= _1425) { - _926 = _911; + _1439 = _1424; } else { - _926 = _912 + (_914 * (1.0 - exp((-(_911 - _912)) / _914))); + _1439 = _1425 + (_1427 * (1.0 - exp((-(_1424 - _1425)) / _1427))); } - float3 _929 = _910 * (_926 / precise::max(_911, 9.9999997473787516355514526367188e-05)); - _931 = float4(_929.x, _929.y, _929.z, _905.w); + float3 _1442 = _1423 * (_1439 / precise::max(_1424, 9.9999997473787516355514526367188e-05)); + _1444 = float4(_1442.x, _1442.y, _1442.z, _1418.w); } else { - _931 = _905; + _1444 = _1418; } - _932 = _931; + _1454 = _1444; } - float _935 = dot(_677, Uniforms.uData[9].xy); - float _936 = precise::max(_935, 0.0); - float _938 = precise::max(-_935, 0.0); - float _941 = abs(_935); - bool _945; - if (_136) + float _1457 = dot(_1199, Uniforms.uData[9].xy); + float _1458 = precise::max(_1457, 0.0); + float _1460 = precise::max(-_1457, 0.0); + float _1463 = abs(_1457); + bool _1467; + if (_139) { - _945 = Uniforms.uData[6].z > 0.0; + _1467 = Uniforms.uData[6].z > 0.0; } else { - _945 = false; + _1467 = false; } - bool _947 = Uniforms.uData[10].x > 0.0; - float _971; - if (_947) + bool _1469 = Uniforms.uData[10].x > 0.0; + float _1493; + if (_1469) { - _971 = 0.0; + _1493 = 0.0; } else { - float _970; - if (_945) + float _1492; + if (_1467) { - _970 = (Uniforms.uData[6].z * (1.0 - smoothstep(0.20000000298023223876953125, 0.699999988079071044921875, _941))) * exp((-precise::max(0.0, -_654)) / (Uniforms.uData[2].z * 2.5)); + _1492 = (Uniforms.uData[6].z * (1.0 - smoothstep(0.20000000298023223876953125, 0.699999988079071044921875, _1463))) * exp((-precise::max(0.0, -_1176)) / (Uniforms.uData[2].z * 2.5)); } else { - _970 = Uniforms.uData[8].x * (1.0 - smoothstep(0.0, Uniforms.uData[2].z * 0.625, -_654)); + _1492 = Uniforms.uData[8].x * (1.0 - smoothstep(0.0, Uniforms.uData[2].z * 0.625, -_1176)); } - _971 = _970; + _1493 = _1492; } - float _981; - if (_136) + float _1503; + if (_139) { - _981 = precise::max((Uniforms.uData[5].w * _728) * _728, _971) * precise::min(_694, 1.0); + _1503 = precise::max((Uniforms.uData[5].w * _1250) * _1250, _1493) * precise::min(_1216, 1.0); } else { - _981 = 0.0; + _1503 = 0.0; } - float _984 = _831 * (1.0 - _981); - float4 _990 = float4(_932.xyz * _984, _984 + _981); - float _1012; - if (_136) + float _1506 = _1353 * (1.0 - _1503); + float4 _1512 = float4(_1454.xyz * _1506, _1506 + _1503); + float _1534; + if (_139) { - float _1003; - if (_945) + float _1533; + if (_1467) { - _1003 = Uniforms.uData[6].z * precise::max(smoothstep(0.75, 1.0, _941), precise::max(_682.x, _682.y)); + _1533 = Uniforms.uData[6].z * precise::max(smoothstep(0.75, 1.0, _1463), precise::max(_1204.x, _1204.y)); } else { - _1003 = 0.25; + _1533 = 0.25; } - _1012 = _1003; + _1534 = _1533; } else { - _1012 = (0.449999988079071044921875 * ((_936 * sqrt(_936)) + ((0.75 * _938) * sqrt(_938)))) + 0.0599999986588954925537109375; + _1534 = (0.449999988079071044921875 * ((_1458 * sqrt(_1458)) + ((0.75 * _1460) * sqrt(_1460)))) + 0.0599999986588954925537109375; } - float _1039; - if (_945) + float _1561; + if (_1467) { - _1039 = exp((-precise::max(0.0, -_654)) / (Uniforms.uData[2].z * 1.25)); + _1561 = exp((-precise::max(0.0, -_1176)) / (Uniforms.uData[2].z * 1.25)); } else { - float _1038; - if (_136) + float _1555; + if (_139) { - float _1026 = -_654; - _1038 = smoothstep(Uniforms.uData[2].z * 0.3125, Uniforms.uData[2].z * 0.625, _1026) * (1.0 - smoothstep(Uniforms.uData[2].z * 1.5, Uniforms.uData[2].z * 2.0, _1026)); + float _1548 = -_1176; + _1555 = smoothstep(Uniforms.uData[2].z * 0.3125, Uniforms.uData[2].z * 0.625, _1548) * (1.0 - smoothstep(Uniforms.uData[2].z * 1.5, Uniforms.uData[2].z * 2.0, _1548)); } else { - _1038 = exp((-precise::max(0.0, -_654)) / Uniforms.uData[2].z); + _1555 = exp((-precise::max(0.0, -_1176)) / Uniforms.uData[2].z); } - _1039 = _1038; + _1561 = _1555; } - float _1051; - if (_947) + float _1573; + if (_1469) { - _1051 = 0.0; + _1573 = 0.0; } else { - float _1049; - if (_136) + float _1571; + if (_139) { - _1049 = 0.0; + _1571 = 0.0; } else { - _1049 = (0.039999999105930328369140625 * exp(_685 / Uniforms.uData[1].w)) * _936; + _1571 = (0.039999999105930328369140625 * exp(_1207 / Uniforms.uData[1].w)) * _1458; } - _1051 = (_1039 * _1012) + _1049; + _1573 = (_1561 * _1534) + _1571; } - float2 _1052 = mix(_605, _604, _678); - float _1056 = _1052.y; - float _1062 = fast::clamp((in.in_var_TEXCOORD0.y - (_1052.x - _1056)) / precise::max(2.0 * _1056, 9.9999997473787516355514526367188e-05), 0.0, 1.0); - float _1080; + float2 _1574 = mix(_1127, _1126, _1200); + float _1578 = _1574.y; + float _1584 = fast::clamp((in.in_var_TEXCOORD0.y - (_1574.x - _1578)) / precise::max(2.0 * _1578, 9.9999997473787516355514526367188e-05), 0.0, 1.0); + float _1602; if (Uniforms.uData[4].z > 0.5) { - _1080 = Uniforms.uData[4].y + ((Uniforms.uData[7].x + ((Uniforms.uData[7].y - Uniforms.uData[7].x) * _1062)) + (Uniforms.uData[7].z * (1.0 - smoothstep(0.0, 0.37999999523162841796875, _1062)))); + _1602 = Uniforms.uData[4].y + ((Uniforms.uData[7].x + ((Uniforms.uData[7].y - Uniforms.uData[7].x) * _1584)) + (Uniforms.uData[7].z * (1.0 - smoothstep(0.0, 0.37999999523162841796875, _1584)))); } else { - _1080 = 0.0; + _1602 = 0.0; } - float3 _1090 = _990.xyz + float3(fast::clamp((_1080 + _668.z) + ((_694 * Uniforms.uData[2].w) * _1051), 0.0, 1.0)); - float4 _1162; - if (_947) + float3 _1612 = _1512.xyz + float3(fast::clamp((_1602 + _1190.z) + ((_1216 * Uniforms.uData[2].w) * _1573), 0.0, 1.0)); + float4 _1684; + if (_1469) { - float2 _1100; - if (dot(_677, _677) > 9.9999999392252902907785028219223e-09) + float2 _1622; + if (dot(_1199, _1199) > 9.9999999392252902907785028219223e-09) { - _1100 = fast::normalize(_677); + _1622 = fast::normalize(_1199); } else { - _1100 = float2(0.0); + _1622 = float2(0.0); } - float _1101 = dot(_1100, Uniforms.uData[9].xy); - float _1103 = mix(8.0, 1.0, Uniforms.uData[9].z); - float _1111 = powr(precise::max(_1101, 0.0), _1103) + (Uniforms.uData[9].w * powr(precise::max(-_1101, 0.0), _1103)); - float _1112 = precise::min(_694, 1.0); - float _1119 = -_654; - float _1121 = smoothstep(-0.5, 0.5, _1119); - float _1123 = -precise::max(0.0, _1119); - float3 _1160 = (_1090.xyz * (1.0 - (((Uniforms.uData[10].z * (1.0 - abs(_1101))) * (_1121 * exp(_1123 / precise::max(Uniforms.uData[2].z * 2.5, 0.001000000047497451305389404296875)))) * _1112))) + float3(_1112 * (((Uniforms.uData[10].x * precise::max(_1111, precise::max(_682.x, Uniforms.uData[9].w * _682.y))) * (_1121 * exp(_1123 / precise::max(Uniforms.uData[8].y, 0.001000000047497451305389404296875)))) + ((Uniforms.uData[10].y * _1111) * (smoothstep(Uniforms.uData[8].y - 0.5, Uniforms.uData[8].y + 0.5, _1119) * exp((-precise::max(0.0, _1119 - Uniforms.uData[8].y)) / precise::max(Uniforms.uData[8].z, 0.001000000047497451305389404296875)))))); - _1162 = float4(_1160.x, _1160.y, _1160.z, _990.w); + float _1623 = dot(_1622, Uniforms.uData[9].xy); + float _1625 = mix(8.0, 1.0, Uniforms.uData[9].z); + float _1633 = powr(precise::max(_1623, 0.0), _1625) + (Uniforms.uData[9].w * powr(precise::max(-_1623, 0.0), _1625)); + float _1634 = precise::min(_1216, 1.0); + float _1641 = -_1176; + float _1643 = smoothstep(-0.5, 0.5, _1641); + float _1645 = -precise::max(0.0, _1641); + float3 _1682 = (_1612.xyz * (1.0 - (((Uniforms.uData[10].z * (1.0 - abs(_1623))) * (_1643 * exp(_1645 / precise::max(Uniforms.uData[2].z * 2.5, 0.001000000047497451305389404296875)))) * _1634))) + float3(_1634 * (((Uniforms.uData[10].x * precise::max(_1633, precise::max(_1204.x, Uniforms.uData[9].w * _1204.y))) * (_1643 * exp(_1645 / precise::max(Uniforms.uData[8].y, 0.001000000047497451305389404296875)))) + ((Uniforms.uData[10].y * _1633) * (smoothstep(Uniforms.uData[8].y - 0.5, Uniforms.uData[8].y + 0.5, _1641) * exp((-precise::max(0.0, _1641 - Uniforms.uData[8].y)) / precise::max(Uniforms.uData[8].z, 0.001000000047497451305389404296875)))))); + _1684 = float4(_1682.x, _1682.y, _1682.z, _1512.w); } else { - _1162 = float4(_1090.x, _1090.y, _1090.z, _990.w); + _1684 = float4(_1612.x, _1612.y, _1612.z, _1512.w); } - float4 _1163 = fast::clamp(_1162, float4(0.0), float4(1.0)); - float _1170 = precise::max(_1163.w, precise::max(_1163.x, precise::max(_1163.y, _1163.z))); - float4 _1171 = _1163; - _1171.w = _1170; - float3 _1182 = _1171.xyz + float3(((fract(52.98291778564453125 * fract(dot(in.in_var_TEXCOORD0, float2(0.067110560834407806396484375, 0.005837149918079376220703125)))) - 0.5) * Uniforms.uData[5].x) * _1170); - _1186 = fast::clamp(float4(_1182.x, _1182.y, _1182.z, _1171.w), float4(0.0), float4(1.0)) * _657; + float4 _1685 = fast::clamp(_1684, float4(0.0), float4(1.0)); + float _1692 = precise::max(_1685.w, precise::max(_1685.x, precise::max(_1685.y, _1685.z))); + float4 _1693 = _1685; + _1693.w = _1692; + float3 _1704 = _1693.xyz + float3(((fract(52.98291778564453125 * fract(dot(in.in_var_TEXCOORD0, float2(0.067110560834407806396484375, 0.005837149918079376220703125)))) - 0.5) * Uniforms.uData[5].x) * _1692); + _1708 = fast::clamp(float4(_1704.x, _1704.y, _1704.z, _1693.w), float4(0.0), float4(1.0)) * _1179; break; } while(false); - out.out_var_SV_Target0 = _1186; + out.out_var_SV_Target0 = _1708; return out; } diff --git a/backend/src/glass/shaders/compiled/spv/liquid_glass.fragment.spv b/backend/src/glass/shaders/compiled/spv/liquid_glass.fragment.spv index 06defbd7ad01c6706d90393f71f3b600b403bac9..1647a08d71f055e4dfd4ec41d129f840497e6444 100644 GIT binary patch literal 38784 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

Q;;c7&!>Xh zzAvUBvnEHL$)n)4RhN6|=t7of`xs>WRri}~>8D-pw`0Nf!TJ*CIIw=|a=#r9R&Jjh z?r~~#&i!^mZR5V{WBuvpiD3S!9t;PhpC^IUrJpBj#IT?0rbEi?r#SsQ1#Cad_r(lk z%G1wN!EN6cGm+&SrJtuE(^g&jaC#w2KhHqMU)4|7(oehea~9ZsT3_Ov3D!?t`gs;u zx&7j=>StTJ>{?#l@!F>T^T6Km+U1!% zAG{-^&i!uB>>fBLzYD-VgMRnY-rTdV7lMC4egowFI|tt3zN)(jx)?I1INwz+0lR0} zx7?NbYpYMzxD@Of*Fmmv8N9xj-=&xfw4b>?qjSCM zAHxpwXm_Pn~o!{31>E%;k zb&klMu4RhT%V%J;RTsOTgZ1_ESnPfQudTY+Jqy;(vm3i#!fUH8`|upt_^uP#^I&a^ zm-oQ0z}l*d?AKspO7_8L{{^tN>heB%5zHU|okOc_-jgpOw3q6$_HV$--4pLKpD&*! zpQ(~pp8M@(ub!4W0UJ}D&%L@l%fAJypNrgQ`FCK4&$7DTLw|r=U+ntY z$SY5rKZ1>ODZaVOUWHdK-tlWGrz&7{K>+ofaavj%8ofqPBF=Q^rGKbW88FK4T zXFPSuA!)Md8YGQ=$r7$dls_4*Ru7Hxvy`*JKR@w zZ$rw=SDZZF0Vm&)*eBn2k*mw+hWEhMAUT{ozn=epz>H!*nfzezsk=#w9Psnfz8*EetrzEd{t!j?mxBO z-l_X9^a*6|#EJDO*jW5EVtodqJh47k$uO3>FQ6|WV~G>%E3kRn6VH}@+Grb_uWK8o z`E0b!Gw}`BSjN^~f8$w`@vI~9z6H0<|2t&LlmGW%hxx1fAM^ucEOBDNR{6VsuBV?i z+Qz0`ZDYLBM%(1y-UdL%)?WWIf9r^C2lUo!{rVZl``0ts5gwMTTWic&?Sx#N=QDSD zXLw^tzBlym0@hYt?z{!SIVZV07DT2zzssc7g^;DU@n0C3a(f&9Mc|dkKRGRm%-HG^ zb1|@aIdXOvhgY8cTB6pwU+TI-%G?WaVl4?amOVp!Q|G>%zOXI%`+w9`$5)xJSO5)`M4O|HZc= z_pJ2-zlq+pqj%0(Tp#RNG#_pCHU0+74&!UHA*9Us;?%bhxCJ|F$TQj-to#P##@ZO{ zFqXPapiLoTiSxeO44n5J>EPL#xBlAdlQlL6yT*0cxW*P>hijlq0IBRSL{;@S; z>zuQ;HQ4X&uB)GMa_95`yN=)c%J1&m)N*y&dY1ZvmAjASclT`zTkYf1j9ou?^?q(C zzq|LZ?NYn@n*KN^_W@wPL)%~LDC-&sZ?Dy96P=%X2O+a2b=DZ2bqt30yRriJrb?NtBVC#{R%idt+=2Cv9 z-v_?zi@D?ua853xz&y!}*Xk4oJE@Ybi!nxpgl90)(B)_Imo-B@_flzu}Coi&Vucdymi_xPzh z2;O~AXD>_L!SL7BI-ieHcL==Ci+-M8b$Q2)2m5=FBk!?8k#X#+cbxiO;M~uL!5h!@ z^8Pv;tbIpFeQYOyjio-ZCxR1Oz3)iBvs>RJc=h_^yZI4d@aAN0 z-rrN09X@aBrb5bmzQoCK8n^{JV|pHA^9kVeS$%9z1iOa%&!>ac+k5TxPd#UV)93Uh zdCo#-o@G5}!YeQPd=|WM)S3I)%noyZli=sTD>HX-);<@UUbMgre#97!?Zw~@%>Fi#|IXnOWXkhwT?$raey(#F*x@?r=0eJhEza)&mxIkMWUlsY z95QY7iR~3&pRElBDW9TL*AVSLfYp$!Bt?-j--$G{ng<3cu#weYiIt~FgvpE z*TO3^Cvm=eT?clLJU8YY8)x_1J-8n1=Ur>jUjKYnxB;v_G4js5v6idLJM$*6@^v9| zPi;4Y)05P83$oOvtIURDEpk0;|t^XPfdU}O5*wEFnp2iD)SnfJr}$n;ki z{|CVFS0DeMfIT;kJWmhSwmwhlt-&6|=b_ric%GAoYk$wlEM$+s{}l3^h!giwus)to zKkM!X@1Es;dJKF9a_zF#XPSEVB=fA`nL5yjqC(;OpV;1fl+Sk)bn$&a{Cq8FTl!OBeG|~%9Z7u{Sxe%RA;U} ztIvVQGONq?s^`Izkx35oj{UFD>7z~Te_hxEtG=3t@n1lok2ZORUIeEX>iur8KIC)m zzPrcnb@uBe@KNX;sqZ()l$U*Y8D6>PIyJunwq|wtE$g>nYgU&Ueh2>l)%<&O`e+mT zKNR-B`D*?n0)4be&98z}v-%&a+1m3idkyT~dDcBE_9MF2!R}#Oo&Ek3a{H^!HTCn| z(iz>K!Cjc;7hwJi{DRDTuvd#QzX7j}@{w3JBl{~@xpDcca>>5@4Z(59e2#K&zlltF z-dBIuiBaA6;J2W+A@^9E+};5%gk5rb7k***Xm3o{ z{fOD&y4rjUDRW(M*7y(D{kOla5gX^M@n5iOxUTm4yT&KX4%g7;Q%IR>i1TcH26l}N zuuZ+6!>8WZeSu6{b$Q;t1pB8%9oAkaj*fYx1*rP5m+N$%vCGt!!09LN8BXusQyykuG7lJSA zTv#4bo;nu+E4PPj>s%DMdgaM+v0BE|sB>|c)TzF#a|w9kXp{5Q6|B6hX-RnH*5-Pi zxt<>0kZp1PL@EB~?mT>-gzN9ta&mMPBut^||1 z)t7az3~wB55@Qvx_YqU07puZ(t1kQ79jshiN9t@wR@S*1d|77;yf(^HXAiLQAKTy6 zk*hEFca2)c)Tnb!nAEAhtaB}R<7kupT^p>ttZ5y1<<{nU-f8Zyd+DC0_I1IY?bIH5 zPh_4C^=uxoif^f9(;<^FSyZ7+1LDMUU6b=0zL*irYcYUw9&R7PxJ1`HwEY4s#k$8zejF{PW?H& z+x~eV=EfD^s9BM^E~#4$vIW;IUUZOX}kgO z>Om2%W#*Od*xMn~Uwic}=u*@6@SZuz(YB@?YMtuT zv?EMvs`Thm(@=EkL#b&eWUi$?x$X>B?ucwyEh}ppUdzgwc0s1U_Uc=R;r+ZT*pV|n z0)98hb0c=&wUJkzb$18*{J2KW=pM+Fdq(r!eouJiK3Dmym3YoMM@#Y<(K{P|P5efI{hZ~R+UjfkeVHA`*JeLRneoNB4@ZMv zqgW~56Zc1E-#3IdhFT!&$al*zU}f4R&H-R!sf*o#;1=xE#cnLvSn8}PIXS0i<7yl0 z)ZTn^h7STiNUkNBcQfl8jLy7$wmcV}ckPqUA>bBt#`m+LKI6gqsmmES6zq3BVL#edUHuWC?c0Y`xed&KByt!zTn3KWE zts#3j1#JF)*H@qK`l)*=GJB+5`ZEpOg1xfX9R;>W>ileM&yEJ`uP%1SfPGik+t?io z)>fT8JC50rXYzRX6Cise&RujO*jSRoI%r2@e@?3POpUwfWEk!IJgdIEU#G*X59Ka8 z1(|E9&)&}fD|bY8YArKhWS4R#I5k^Wy) zzsJu*uFV$cat6#%d5*f<3e!uNxl1&-?Qhy8(Vwxy@=UizUnT9E`iKf zY;U!ZSDtk*1t(5^pS%p2@_fgc3sz=6`7QBsu(|nLr253W0^EX3ed@gutgkxv#m^U4 zfz4fAnVUK0*}fWVZsxDOd8aqmfYTdo>`n5$7G7U%JR5#KxK0eI8^*V(W@Oic-8Xd| z;X6T{A=oOX?62m{EAJ3=$=3Aay&u?sR1bfbXUiC9hzGL46o2~r zyU$C`(JjdQo~~bda4R@HQ188!J-iKGS!{1FY}IL-_3nW84tKrm*`3IgZ-p#-eiyv! z*(+mv?(SxG|JXR&FW=Aifqg&QL+$lXj`xFSx)38VA3&zu znC9{mu)|!`JqSGnnTyzc(nemnJ`Xd;$Mqk9ehO(L&O72!u(kW1-x}%z*^iw2$G|Pf zv`Y^k2V1kc?8_72*)%%)@-z7Cp>?Q_?UP{ji8l}Ip7`I*=Bz&jubsN=)6-yM`fRF? z|1)57Qg1J;-8!u|ef~LkI)0A${Q{Zm?t?73JqzDjN9+H-`IqqNk9FvyP5Sd3xCOa( ziTga*_0*O5m{;zAUxCfrz0lrV%YAe|WBY5cYrEI_8OJ?-f!UEW`Xc;GkhP0b`)|Ph zrq9&K@nsn0e#S`NufQvB{T$f(ed)LG*+=!}l0E)it@Gb1{7lqR#Q!}yeYLSJb2TsX zD|zLq^ABMC%-wpm&HLz&;2Uc~RpsP!oqc!}T?@Q1QqODPzL2`ym#>43r7m~&pK4y; z^z6@IZ5@&QrIy)`$lj=B=913ApcTu9m*IwjV{{U=Wo`YM#S@%P*y!yyK0^5VzndAR4IR46G z`ya6O>a+j<1shjg>^=c+OH6gK`xLCaA98C<-p;Azmv6%#NJP|H1!I z+lbQ>UyygekHR*xcD1a$L)#-O@6ZnL=HNTV82V_F7#+dJ^|z_WI@L0NC(4=cj4W~V z(Z)Er1G<1)u-7he767}xI%~I9Yq!4iaY1xt&liF(d#*mV3xn0C=Zk=qnSXk|D13UZ zzFgP!b5<5ZXMXlrA9E`A$9;Q$KN8BfnOHVPi!1*7RO*2Ya54t-Uex zoUH&hKW)nVtt0*`g7vpX?Tzg@>49t|u>JS5^S}?L#&)C+hZPwTVd?n4XKUrf-WcsL!-Bw_~oA8J< zda^Y#KS!xcpZb86d)^ao8?Z6ezTKgb#Ep>@I z3Y@%+qfK=C7CLj%HnH{t-%mrdNl!+DeSasf{o$vxzVWk1W01*vN9_%Hcj%Wj52*F_ z(H^Qx`~$)2V>`C6b*;hJ=kvfgc=3Xus!KiN!87qS zM(hqnro7rSo{(DB z*>tdZsEh0ruyUWv+~G68{h|HI%VGTT44jJ2`t;5B;F)0k)a6{92KM~f&#ZSk*tOK< zU2+Ckc}RcX6|;~TSAE_UXM%mVsN-+GcZGNIK!o1W&fdw**qj9(0QH9S-wyJesyiEO zeSQYgZZ&4_{OtQV$h2X}hV0y0hNvN%UCWFW-}7pjz03Zdk4ziSxIWrMcR`_Z4Q->l zu+W*4w)t-b=77~F&%AFgLN=ClcBs~G{r?eoF*4WpzpGH6eYpfY1eyArtxF4A^*P^{ zfz^2jq}I9c{wCx|%*&B!t1hxDz{<@x`+p@^c_`=bDrD9sIn3K$=6qa@TpRs!KCS_4 zua3X@&PVqAS`@}|&$Z8<=if)JL#E9IEasUShn;82IcMs6^p~Tb3u*6p+lEup2^)3a Jv%==k{{fv_*pC1J diff --git a/backend/src/glass/shaders/liquid_glass.fragment.hlsl b/backend/src/glass/shaders/liquid_glass.fragment.hlsl index 75e378cb2..18c23459c 100644 --- a/backend/src/glass/shaders/liquid_glass.fragment.hlsl +++ b/backend/src/glass/shaders/liquid_glass.fragment.hlsl @@ -79,6 +79,57 @@ float smin(float a, float b, float k, out float m) return min(a, b) - h * h * k * 0.25; } +// Rounded intersection (hg_sdf fOpIntersectionRound); it stays within both operands. +float intersectRound(float a, float b, float r) +{ + if (r == 0.0) return max(a, b); + return min(-r, max(a, b)) + length(max(float2(r + a, r + b), 0.0)); +} + +float panelDistance(float2 p, float soft, out float2 g) +{ + float4 box = uData[G + 3 * (MAX_SHAPES - 1)]; + float4 rad = min(uData[G + 3 * (MAX_SHAPES - 1) + 1], (float4)min(box.z, box.w)); + int count = int(uData[G + 3 * (MAX_SHAPES - 1) + 2].z); + float d = soft > 0.0 ? softBox(p, box, soft, g) : sdRoundBox(p - box.xy, box.zw, rad, g); + for (int i = 0; i < count && i < 4; i++) { + float4 seam = uData[G + 3 * (MAX_SHAPES - 2 - i)]; + float4 params = uData[G + 3 * (MAX_SHAPES - 2 - i) + 1]; + if (params.x == 0.0) continue; + float open = clamp(params.x / params.y, 0.0, 1.0); + float along = seam.x < 0.5 ? p.y : p.x; + float v = (seam.x < 0.5 ? p.x : p.y) - seam.y; + float h = params.x / 2.0; + float len = seam.w - seam.z; + float advance = smoothstep(0.0, 0.6, open); + float tip; + float direction; + if (params.w > 2.5) { + float u = along - (seam.z + seam.w) / 2.0; + tip = max(len / 2.0 * (1.0 - advance) - abs(u), 0.0); + direction = u < 0.0 ? 1.0 : -1.0; + } else { + float u = params.w < 1.5 ? along - seam.z : seam.w - along; + tip = max(u - (len - h) * advance, 0.0); + direction = params.w < 1.5 ? 1.0 : -1.0; + } + float lenSlot = length(float2(v, tip)); + float slot = lenSlot - h; + float2 slotOut = float2(0.0, 0.0); + if (lenSlot > 0.0) { + slotOut = float2(-v, -tip * direction) / lenSlot; + if (seam.x > 0.5) slotOut = slotOut.yx; + } + float radius = params.z * open; + float2 weights = max(float2(radius + d, radius - slot), 0.0); + float norm = length(weights); + if (radius > 0.0 && norm > 0.0) g = (weights.x * g + weights.y * slotOut) / norm; + else if (-slot > d) g = slotOut; + d = intersectRound(d, -slot, radius); + } + return d; +} + // A soft step in at `a`, then a fall over `w`: the lit edge's line and glow along the inside of // the outline (`x` the depth inside it). float band(float x, float a, float w) @@ -140,9 +191,17 @@ float4 main(PSInput input) : SV_Target0 float4 s0 = uData[G + 3 * i]; float4 s1 = uData[G + 3 * i + 1]; float4 s2 = uData[G + 3 * i + 2]; + bool panel = s2.w < -0.5 || s2.w > 3.5; + if (panel) { + s0 = uData[G + 3 * (MAX_SHAPES - 1)]; + s1 = uData[G + 3 * (MAX_SHAPES - 1) + 1]; + s2 = uData[G + 3 * (MAX_SHAPES - 1) + 2]; + s2.z = 0.0; + } float2 g; float4 rad = min(s1, (float4)min(s0.z, s0.w)); float d = sdRoundBox(p - s0.xy, s0.zw, rad, g); + if (panel) d = panelDistance(p, 0.0, g); float hs = min(s0.z, s0.w); float2 al = float2(0.0, 0.0); if (g10.w > 0.0) al = float2(alongEnd(p, s0, rad, g9.xy, g10.w, g8.w), alongEnd(p, s0, rad, -g9.xy, g10.w, g8.w)); @@ -154,6 +213,9 @@ float4 main(PSInput input) : SV_Target0 } else { o = g; } + if (panel) { + f = panelDistance(p, g1.y, o); + } if (f < f1) { f2 = f1; o2 = o1; f1 = f; o1 = o; } else if (f < f2) { f2 = f; o2 = o; } } // The place the glass belongs to (`LiquidField.edge`), in the last slot, flagged 2. Its outside @@ -166,14 +228,14 @@ float4 main(PSInput input) : SV_Target0 float2 placeOut = float2(0.0, 0.0); float4 e0 = uData[G + 3 * (MAX_SHAPES - 1)]; float4 e2 = uData[G + 3 * (MAX_SHAPES - 1) + 2]; - bool cutEdge = e2.w > 2.5; - if (e2.w > 1.5) { + bool cutEdge = e2.w > 2.5 && e2.w < 3.5; + if (e2.w > 1.5 && e2.w < 3.5) { float4 e1 = uData[G + 3 * (MAX_SHAPES - 1) + 1]; float2 ge; inPlace = sdRoundBox(p - e0.xy, e0.zw, min(e1, (float4)min(e0.z, e0.w)), ge); placeOut = ge; } - if (e2.w > 1.5 && !cutEdge) { + if (e2.w > 1.5 && e2.w < 3.5 && !cutEdge) { float2 ge = placeOut; float d = EDGE_GAP - inPlace; float hs = h1; From 3f4ae6e7c6be67106a65a199c7583d6943124498 Mon Sep 17 00:00:00 2001 From: "fizzy-linux[bot]" <346940526+fizzy-linux[bot]@users.noreply.github.com> Date: Fri, 30 Oct 2026 19:54:24 -0500 Subject: [PATCH 2/2] glass: panel-seams (codex) Agent-Team: linux Worker: codex --- backend/src/glass/LiquidField.zig | 37 +- backend/src/glass/liquid_field_tests.zig | 46 +- .../compiled/dxil/liquid_glass.fragment.dxil | Bin 15728 -> 15720 bytes .../compiled/glsl/liquid_glass.fragment.glsl | 1558 ++++++++--------- .../compiled/msl/liquid_glass.fragment.msl | 1526 ++++++++-------- .../compiled/spv/liquid_glass.fragment.spv | Bin 38784 -> 38872 bytes .../glass/shaders/liquid_glass.fragment.hlsl | 10 +- docs/images/panel-seam-coverage.png | Bin 0 -> 18798 bytes 8 files changed, 1608 insertions(+), 1569 deletions(-) create mode 100644 docs/images/panel-seam-coverage.png diff --git a/backend/src/glass/LiquidField.zig b/backend/src/glass/LiquidField.zig index 308f3eec1..ab1199906 100644 --- a/backend/src/glass/LiquidField.zig +++ b/backend/src/glass/LiquidField.zig @@ -78,10 +78,13 @@ pub const Seam = struct { } }; +/// A shared material across the pieces, with directional edge lighting but no pointer light. pub const Panel = struct { rect: dvui.Rect.Physical, /// Top-left, top-right, bottom-right, bottom-left. radii: [4]f32 = @splat(0), + blur: f32 = 1, + lens: f32 = 1, /// Borrowed until drawing completes; at most max_seams, hosts first. seams: []const Seam, }; @@ -89,7 +92,7 @@ pub const Panel = struct { const ResolvedSeam = struct { span: [2]f32, radius: f32, - flags: u2 = 3, + ends: enum(u2) { start = 1, end = 2, both = 3 } = .both, host: ?usize = null, }; @@ -103,9 +106,12 @@ fn resolveSeam(p: Panel, i: usize) ResolvedSeam { std.debug.assert(r.span[0] < r.span[1]); for (p.seams[0..i], 0..) |host, j| { if (host.axis == seam.axis) continue; - if (r.span[0] != host.at and r.span[1] != host.at) continue; + // Physical pixel coordinates computed by different layouts can differ by a few ulps. + const tolerance = 4 * std.math.floatEps(f32) * @max(1, @abs(host.at)); + const at_start = @abs(r.span[0] - host.at) <= tolerance; + if (!at_start and @abs(r.span[1] - host.at) > tolerance) continue; r.host = j; - r.flags = if (r.span[0] == host.at) 2 else 1; + r.ends = if (at_start) .end else .start; r.radius = std.math.lerp(radius, @min(radius, host.gap / 2), std.math.clamp(host.gap / host.reach, 0, 1)); break; } @@ -134,14 +140,14 @@ fn panelDistance(p: Panel, point: [2]f32, soft: f32, g: *[2]f32) f32 { const advance = smoothstep(0, 0.6, open); // Pinch before the cut corners finish rounding. var tip: f32 = 0; var direction: f32 = 0; - if (rs.flags == 3) { + if (rs.ends == .both) { const u = along - (rs.span[0] + rs.span[1]) / 2; tip = @max(len / 2 * (1 - advance) - @abs(u), 0); direction = if (u < 0) 1 else -1; } else { - const u = if (rs.flags == 1) along - rs.span[0] else rs.span[1] - along; + const u = if (rs.ends == .start) along - rs.span[0] else rs.span[1] - along; tip = @max(u - (len - half_gap) * advance, 0); - direction = if (rs.flags == 1) 1 else -1; + direction = if (rs.ends == .start) 1 else -1; } const length = @sqrt(v * v + tip * tip); const slot = length - half_gap; @@ -165,7 +171,7 @@ fn panelDistance(p: Panel, point: [2]f32, soft: f32, g: *[2]f32) f32 { /// Asserts out can hold every piece (at most 1 + max_seams for non-crossing seams). pub fn pieces(p: Panel, out: []Shape) []Shape { std.debug.assert(p.seams.len <= max_seams and out.len > 0); - out[0] = .{ .rect = p.rect, .radii = p.radii }; + out[0] = .{ .rect = p.rect, .radii = p.radii, .blur = p.blur, .lens = p.lens }; var n: usize = 1; for (p.seams, 0..) |seam, si| { const rs = resolveSeam(p, si); @@ -230,8 +236,7 @@ pub fn drawOutlines(self: *const LiquidField, color: dvui.Color) void { fn shapeAt(self: *const LiquidField, i: usize) Shape { if (i < self.len) return self.shapes[i]; const p = self.panel.?; - const first: Shape = if (self.len > 0) self.shapes[0] else .{ .rect = p.rect }; - return .{ .rect = p.rect, .radii = p.radii, .blur = first.blur, .lens = first.lens }; + return .{ .rect = p.rect, .radii = p.radii, .blur = p.blur, .lens = p.lens }; } fn shapeCount(self: *const LiquidField) usize { @@ -356,6 +361,7 @@ pub fn clusters(self: *const LiquidField) Clusters { for (0..self.shapeCount()) |i| for (i + 1..self.shapeCount()) |j| { const a = self.shapeAt(i).rect.outsetAll(reach); const b = self.shapeAt(j).rect.outsetAll(reach); + // Tangent drops must share the panel group so its boundary can form a neck. if (self.panel != null and (i == self.len or j == self.len)) { if (a.x > b.x + b.w or b.x > a.x + a.w or a.y > b.y + b.h or b.y > a.y + a.h) continue; } else if (a.intersect(b).empty()) continue; @@ -504,7 +510,7 @@ pub fn pack(self: *const LiquidField, covered: dvui.Rect.Physical, has_sharp: bo const rs = resolveSeam(p, i); u.shapes[max_shapes - 2 - i] = .{ .{ if (seam.axis == .vertical) 0 else 1, seam.at, rs.span[0], rs.span[1] }, - .{ seam.gap, seam.reach, rs.radius, @floatFromInt(rs.flags) }, + .{ seam.gap, seam.reach, rs.radius, @floatFromInt(@backingInt(rs.ends)) }, .{ if (rs.host) |h| @floatFromInt(h + 1) else 0, 0, 0, 0 }, }; }; @@ -626,8 +632,7 @@ pub fn applyLook(self: *const LiquidField, u: *Uniforms, l: glass_look.Look) voi u.widths = .{ l.edge_dark, lanes.widths[0], lanes.widths[1], lanes.widths[2] }; u.light = lanes.light; u.edge = lanes.edge; - const limit: usize = if (self.panel != null) max_shapes - 1 else max_shapes; - const count = @min(self.shapeCount(), limit); + const count = self.shapeCount(); for (u.shapes[0..count]) |*sh| sh[2][0] *= l.frost; if (self.edge != null or self.panel != null) u.shapes[max_shapes - 1][2][0] *= l.frost; } @@ -806,8 +811,7 @@ pub fn sampleWith(self: *const LiquidField, p: dvui.Point.Physical, l: glass_loo var g: [2]f32 = undefined; const lim = @min(half[0], half[1]); const radii: [4]f32 = .{ @min(sh.radii[0], lim), @min(sh.radii[1], lim), @min(sh.radii[2], lim), @min(sh.radii[3], lim) }; - var d = roundBox(.{ p.x - c[0], p.y - c[1] }, half, radii, &g); - if (is_panel) d = panelDistance(self.panel.?, .{ p.x, p.y }, 0, &g); + const d = if (is_panel) panelDistance(self.panel.?, .{ p.x, p.y }, 0, &g) else roundBox(.{ p.x - c[0], p.y - c[1] }, half, radii, &g); const mat: [3]f32 = .{ sh.blur, sh.lens, sh.light }; var al: [2]f32 = .{ 0, 0 }; if (lanes.edge[3] > 0) { @@ -831,10 +835,7 @@ pub fn sampleWith(self: *const LiquidField, p: dvui.Point.Physical, l: glass_loo al2 = al; } var o: [2]f32 = g; - var f = if (sh.round) d else softBox(.{ p.x, p.y }, c, half, soft_k, &o); - if (is_panel) { - f = panelDistance(self.panel.?, .{ p.x, p.y }, soft_k, &o); - } + const f = if (is_panel) panelDistance(self.panel.?, .{ p.x, p.y }, soft_k, &o) else if (sh.round) d else softBox(.{ p.x, p.y }, c, half, soft_k, &o); if (f < f1) { f2 = f1; o2 = o1; diff --git a/backend/src/glass/liquid_field_tests.zig b/backend/src/glass/liquid_field_tests.zig index 97d44590b..6383f5af6 100644 --- a/backend/src/glass/liquid_field_tests.zig +++ b/backend/src/glass/liquid_field_tests.zig @@ -356,9 +356,6 @@ fn dumpPanelCoverage() !void { } test "a closed panel is its parent" { - comptime { - _ = &LiquidField.drawOutlines; - } const seams = [_]Seam{ .{ .axis = .horizontal, .at = 30, .reach = 12 }, .{ .axis = .vertical, .at = 150, .reach = 12 }, @@ -397,7 +394,6 @@ test "no bump at the seam while it opens" { } test "a through seam's pieces are rounded rects" { - try dumpPanelCoverage(); const seams = [_]Seam{.{ .axis = .vertical, .at = 200, .gap = 12, .reach = 12 }}; const f = panelField(&seams); try checkPieces(&f); @@ -486,3 +482,45 @@ test "a drop still runs into a panel" { f.merge_px = 0; try testing.expectEqual(@as(f32, 0), panelSample(&f, 200, -4).coverage); } + +test "panel coverage evidence" { + try dumpPanelCoverage(); +} + +test "a drop cannot animate the panel material" { + var f = panelField(&.{}); + f.panel.?.blur = 0.7; + f.panel.?.lens = 0.8; + f.add(.{ .rect = .{ .x = 500, .y = 0, .w = 20, .h = 20 }, .blur = 0.1, .lens = 0.2 }); + const before = panelSample(&f, 100, 40); + f.shapes[0].blur = 0.9; + f.shapes[0].lens = 1.2; + const after = panelSample(&f, 100, 40); + try testing.expectEqual(before, after); + const groups = f.clusters(); + const u = f.pack(panel_rect, false, groups.order[0..2]); + try testing.expectApproxEqAbs(@as(f32, 0.7), u.shapes[15][2][0], 0.001); + try testing.expectApproxEqAbs(@as(f32, 0.8), u.shapes[15][2][1], 0.001); +} + +test "nested seam tolerates coordinate rounding" { + const seams = [_]Seam{ + .{ .axis = .horizontal, .at = 60, .gap = 12, .reach = 12 }, + .{ .axis = .vertical, .at = 200, .span = .{ 0, 60.000004 }, .gap = 12, .reach = 12 }, + }; + const f = panelField(&seams); + const u = f.pack(panel_rect, false, &.{0}); + try testing.expectEqual(@as(f32, 1), u.shapes[13][2][0]); + try testing.expectEqual(@as(f32, 1), u.shapes[13][1][3]); +} + +test "panel outlines draw in a frame" { + var window = try dvui.testing.init(.{ .allocator = testing.allocator }); + defer window.deinit(); + const seams = [_]Seam{ + .{ .axis = .horizontal, .at = 60, .gap = 12, .reach = 12 }, + .{ .axis = .vertical, .at = 200, .span = .{ 0, 60 }, .gap = 12, .reach = 12 }, + }; + const f = panelField(&seams); + f.drawOutlines(.white); +} diff --git a/backend/src/glass/shaders/compiled/dxil/liquid_glass.fragment.dxil b/backend/src/glass/shaders/compiled/dxil/liquid_glass.fragment.dxil index 9ad1c0a1a915b96cf700776df2eeae4470676528..f96091527d1d3b8f77bd38a045b279885998b366 100644 GIT binary patch delta 10223 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 delta 10149 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 diff --git a/backend/src/glass/shaders/compiled/glsl/liquid_glass.fragment.glsl b/backend/src/glass/shaders/compiled/glsl/liquid_glass.fragment.glsl index 690d5f4d2..68627cf4f 100644 --- a/backend/src/glass/shaders/compiled/glsl/liquid_glass.fragment.glsl +++ b/backend/src/glass/shaders/compiled/glsl/liquid_glass.fragment.glsl @@ -12,7 +12,7 @@ layout(location = 0) out highp vec4 out_var_SV_Target0; void main() { - highp vec4 _1708; + highp vec4 _1712; do { int _110 = int((vColor.y * 255.0) + 0.5); @@ -104,274 +104,214 @@ void main() } highp float _211 = min(_207.z, _207.w); highp vec4 _213 = min(_208, vec4(_211)); - highp vec2 _215 = vTextureCoord - _207.xy; - highp float _217 = _215.x; - highp float _238; - if (_217 > 0.0) - { - highp float _237; - if (_215.y > 0.0) - { - _237 = _213.z; - } - else - { - _237 = _213.y; - } - _238 = _237; - } - else - { - highp float _229; - if (_215.y > 0.0) - { - _229 = _213.w; - } - else - { - _229 = _213.x; - } - _238 = _229; - } - highp vec2 _242 = (abs(_215) - _207.zw) + vec2(_238); - highp float _244 = (_217 < 0.0) ? (-1.0) : 1.0; - highp float _247 = (_215.y < 0.0) ? (-1.0) : 1.0; - highp float _249 = _242.x; - bool _255; - if (_249 > 0.0) - { - _255 = _242.y > 0.0; - } - else - { - _255 = false; - } - highp vec2 _269; - if (_255) - { - _269 = normalize(_242) * vec2(_244, _247); - } - else - { - highp vec2 _266; - if (_249 > _242.y) - { - _266 = vec2(_244, 0.0); - } - else - { - _266 = vec2(0.0, _247); - } - _269 = _266; - } - highp vec2 _497; - highp float _498; + highp vec2 _498; + highp float _499; if (_196) { - highp vec4 _287 = min(uData[57], vec4(min(uData[56].z, uData[56].w))); - int _290 = int(uData[58].z); - highp vec2 _292 = vTextureCoord - uData[56].xy; - highp float _294 = _292.x; - highp float _315; - if (_294 > 0.0) + highp vec4 _288 = min(uData[57], vec4(min(uData[56].z, uData[56].w))); + int _291 = int(uData[58].z); + highp vec2 _293 = vTextureCoord - uData[56].xy; + highp float _295 = _293.x; + highp float _316; + if (_295 > 0.0) { - highp float _314; - if (_292.y > 0.0) + highp float _315; + if (_293.y > 0.0) { - _314 = _287.z; + _315 = _288.z; } else { - _314 = _287.y; + _315 = _288.y; } - _315 = _314; + _316 = _315; } else { - highp float _306; - if (_292.y > 0.0) + highp float _307; + if (_293.y > 0.0) { - _306 = _287.w; + _307 = _288.w; } else { - _306 = _287.x; + _307 = _288.x; } - _315 = _306; + _316 = _307; } - highp vec2 _319 = (abs(_292) - uData[56].zw) + vec2(_315); - highp float _321 = (_294 < 0.0) ? (-1.0) : 1.0; - highp float _324 = (_292.y < 0.0) ? (-1.0) : 1.0; - highp float _326 = _319.x; - bool _332; - if (_326 > 0.0) + highp vec2 _320 = (abs(_293) - uData[56].zw) + vec2(_316); + highp float _322 = (_295 < 0.0) ? (-1.0) : 1.0; + highp float _325 = (_293.y < 0.0) ? (-1.0) : 1.0; + highp float _327 = _320.x; + bool _333; + if (_327 > 0.0) { - _332 = _319.y > 0.0; + _333 = _320.y > 0.0; } else { - _332 = false; + _333 = false; } - highp vec2 _346; - if (_332) + highp vec2 _347; + if (_333) { - _346 = normalize(_319) * vec2(_321, _324); + _347 = normalize(_320) * vec2(_322, _325); } else { - highp vec2 _343; - if (_326 > _319.y) + highp vec2 _344; + if (_327 > _320.y) { - _343 = vec2(_321, 0.0); + _344 = vec2(_322, 0.0); } else { - _343 = vec2(0.0, _324); + _344 = vec2(0.0, _325); } - _346 = _343; + _347 = _344; } - highp vec2 _355; - highp float _358; - _355 = _346; - _358 = (min(max(_326, _319.y), 0.0) + length(max(_319, vec2(0.0)))) - _315; highp vec2 _356; highp float _359; - int _360 = 0; + _356 = _347; + _359 = (min(max(_327, _320.y), 0.0) + length(max(_320, vec2(0.0)))) - _316; + highp vec2 _357; + highp float _360; + int _361 = 0; for (;;) { - bool _368; - if (_360 < _290) + bool _369; + if (_361 < _291) { - _368 = _360 < 4; + _369 = _361 < 4; } else { - _368 = false; + _369 = false; } - if (_368) + if (_369) { - int _370 = 14 - _360; - int _371 = 3 * _370; - int _372 = 11 + _371; - int _375 = _371 + 12; - if (uData[_375 * 1 + 0].x == 0.0) + int _371 = 14 - _361; + int _372 = 3 * _371; + int _373 = 11 + _372; + int _376 = _372 + 12; + if (uData[_376 * 1 + 0].x == 0.0) { - _356 = _355; - _359 = _358; - int _361 = _360 + 1; - _355 = _356; - _358 = _359; - _360 = _361; + _357 = _356; + _360 = _359; + int _362 = _361 + 1; + _356 = _357; + _359 = _360; + _361 = _362; continue; } - highp float _384 = clamp(uData[_375 * 1 + 0].x / uData[_375 * 1 + 0].y, 0.0, 1.0); - bool _386 = uData[_372 * 1 + 0].x < 0.5; - highp float _394; - if (_386) + highp float _385 = clamp(uData[_376 * 1 + 0].x / uData[_376 * 1 + 0].y, 0.0, 1.0); + bool _387 = uData[_373 * 1 + 0].x < 0.5; + highp float _395; + if (_387) { - _394 = vTextureCoord.y; + _395 = vTextureCoord.y; } else { - _394 = vTextureCoord.x; + _395 = vTextureCoord.x; } - highp float _402; - if (_386) + highp float _403; + if (_387) { - _402 = vTextureCoord.x; + _403 = vTextureCoord.x; } else { - _402 = vTextureCoord.y; + _403 = vTextureCoord.y; } - highp float _404 = _402 - uData[_372 * 1 + 0].y; - highp float _405 = uData[_375 * 1 + 0].x * 0.5; - highp float _408 = uData[_372 * 1 + 0].w - uData[_372 * 1 + 0].z; - highp float _409 = smoothstep(0.0, 0.60000002384185791015625, _384); - highp float _438; + highp float _405 = _403 - uData[_373 * 1 + 0].y; + highp float _406 = uData[_376 * 1 + 0].x * 0.5; + highp float _409 = uData[_373 * 1 + 0].w - uData[_373 * 1 + 0].z; + highp float _410 = smoothstep(0.0, 0.60000002384185791015625, _385); highp float _439; - if (uData[_375 * 1 + 0].w > 2.5) + highp float _440; + if (uData[_376 * 1 + 0].w > 2.5) { - highp float _429 = _394 - ((uData[_372 * 1 + 0].z + uData[_372 * 1 + 0].w) * 0.5); - _438 = (_429 < 0.0) ? 1.0 : (-1.0); - _439 = max(((_408 * 0.5) * (1.0 - _409)) - abs(_429), 0.0); + highp float _430 = _395 - ((uData[_373 * 1 + 0].z + uData[_373 * 1 + 0].w) * 0.5); + _439 = (_430 < 0.0) ? 1.0 : (-1.0); + _440 = max(((_409 * 0.5) * (1.0 - _410)) - abs(_430), 0.0); } else { - bool _415 = uData[_375 * 1 + 0].w < 1.5; - highp float _421; - if (_415) + bool _416 = uData[_376 * 1 + 0].w < 1.5; + highp float _422; + if (_416) { - _421 = _394 - uData[_372 * 1 + 0].z; + _422 = _395 - uData[_373 * 1 + 0].z; } else { - _421 = uData[_372 * 1 + 0].w - _394; + _422 = uData[_373 * 1 + 0].w - _395; } - _438 = _415 ? 1.0 : (-1.0); - _439 = max(_421 - ((_408 - _405) * _409), 0.0); + _439 = _416 ? 1.0 : (-1.0); + _440 = max(_422 - ((_409 - _406) * _410), 0.0); } - highp float _441 = length(vec2(_404, _439)); - highp float _442 = _441 - _405; - highp vec2 _457; - if (_441 > 0.0) + highp float _442 = length(vec2(_405, _440)); + highp float _443 = _442 - _406; + highp vec2 _458; + if (_442 > 0.0) { - highp vec2 _451 = vec2(-_404, (-_439) * _438) / vec2(_441); - highp vec2 _456; - if (uData[_372 * 1 + 0].x > 0.5) + highp vec2 _452 = vec2(-_405, (-_440) * _439) / vec2(_442); + highp vec2 _457; + if (uData[_373 * 1 + 0].x > 0.5) { - _456 = _451.yx; + _457 = _452.yx; } else { - _456 = _451; + _457 = _452; } - _457 = _456; + _458 = _457; } else { - _457 = vec2(0.0); + _458 = vec2(0.0); } - highp float _459 = uData[_375 * 1 + 0].z * _384; - highp vec2 _463 = max(vec2(_459 + _358, _459 - _442), vec2(0.0)); - highp float _464 = length(_463); - bool _469; - if (_459 > 0.0) + highp float _460 = uData[_376 * 1 + 0].z * _385; + highp vec2 _464 = max(vec2(_460 + _359, _460 - _443), vec2(0.0)); + highp float _465 = length(_464); + bool _470; + if (_460 > 0.0) { - _469 = _464 > 0.0; + _470 = _465 > 0.0; } else { - _469 = false; + _470 = false; } - highp vec2 _484; - if (_469) + highp vec2 _485; + if (_470) { - _484 = ((_355 * _463.x) + (_457 * _463.y)) / vec2(_464); + _485 = ((_356 * _464.x) + (_458 * _464.y)) / vec2(_465); } else { - bvec2 _475 = bvec2((-_442) > _358); - _484 = vec2(_475.x ? _457.x : _355.x, _475.y ? _457.y : _355.y); + bvec2 _476 = bvec2((-_443) > _359); + _485 = vec2(_476.x ? _458.x : _356.x, _476.y ? _458.y : _356.y); } - highp float _485 = -_442; - highp float _496; + highp float _486 = -_443; + highp float _497; do { - if (_459 == 0.0) + if (_460 == 0.0) { - _496 = max(_358, _485); + _497 = max(_359, _486); break; } - _496 = min(-_459, max(_358, _485)) + _464; + _497 = min(-_460, max(_359, _486)) + _465; break; } while(false); - _356 = _484; - _359 = _496; - int _361 = _360 + 1; - _355 = _356; - _358 = _359; - _360 = _361; + _357 = _485; + _360 = _497; + int _362 = _361 + 1; + _356 = _357; + _359 = _360; + _361 = _362; continue; } else @@ -379,139 +319,199 @@ void main() break; } } - _497 = _355; - _498 = _358; + _498 = _356; + _499 = _359; } else { - _497 = _269; - _498 = (min(max(_249, _242.y), 0.0) + length(max(_242, vec2(0.0)))) - _238; + highp vec2 _218 = vTextureCoord - _207.xy; + highp float _220 = _218.x; + highp float _241; + if (_220 > 0.0) + { + highp float _240; + if (_218.y > 0.0) + { + _240 = _213.z; + } + else + { + _240 = _213.y; + } + _241 = _240; + } + else + { + highp float _232; + if (_218.y > 0.0) + { + _232 = _213.w; + } + else + { + _232 = _213.x; + } + _241 = _232; + } + highp vec2 _245 = (abs(_218) - _207.zw) + vec2(_241); + highp float _247 = (_220 < 0.0) ? (-1.0) : 1.0; + highp float _250 = (_218.y < 0.0) ? (-1.0) : 1.0; + highp float _252 = _245.x; + bool _258; + if (_252 > 0.0) + { + _258 = _245.y > 0.0; + } + else + { + _258 = false; + } + highp vec2 _272; + if (_258) + { + _272 = normalize(_245) * vec2(_247, _250); + } + else + { + highp vec2 _269; + if (_252 > _245.y) + { + _269 = vec2(_247, 0.0); + } + else + { + _269 = vec2(0.0, _250); + } + _272 = _269; + } + _498 = _272; + _499 = (min(max(_252, _245.y), 0.0) + length(max(_245, vec2(0.0)))) - _241; } - highp vec2 _644; + highp vec2 _647; if (uData[10].w > 0.0) { - highp float _507 = (uData[9].x < 0.0) ? (-1.0) : 1.0; - highp float _510 = (uData[9].y < 0.0) ? (-1.0) : 1.0; - highp float _530; - if (_507 < 0.0) + highp float _508 = (uData[9].x < 0.0) ? (-1.0) : 1.0; + highp float _511 = (uData[9].y < 0.0) ? (-1.0) : 1.0; + highp float _531; + if (_508 < 0.0) { - highp float _529; - if (_510 < 0.0) + highp float _530; + if (_511 < 0.0) { - _529 = _213.x; + _530 = _213.x; } else { - _529 = _213.w; + _530 = _213.w; } - _530 = _529; + _531 = _530; } else { - highp float _522; - if (_510 < 0.0) + highp float _523; + if (_511 < 0.0) { - _522 = _213.y; + _523 = _213.y; } else { - _522 = _213.z; + _523 = _213.z; } - _530 = _522; + _531 = _523; } - highp vec2 _533 = max(_207.zw - vec2(_530), vec2(0.0)); - highp vec2 _537 = (_207.xy + (vec2(_507, _510) * _533)) + (uData[9].xy * _530); - highp vec2 _552; + highp vec2 _535 = max(_207.zw - vec2(_531), vec2(0.0)); + highp vec2 _540 = (_207.xy + (vec2(_508, _511) * _535)) + (uData[9].xy * _531); + highp vec2 _555; if (abs(uData[9].x) < 0.001000000047497451305389404296875) { - highp float _545 = _533.x; - highp vec2 _551 = _537; - _551.x = clamp(vTextureCoord.x, _207.x - _545, _207.x + _545) + (_530 * uData[9].x); - _552 = _551; + highp float _548 = _535.x; + highp vec2 _554 = _540; + _554.x = clamp(vTextureCoord.x, _207.x - _548, _207.x + _548) + (_531 * uData[9].x); + _555 = _554; } else { - _552 = _537; + _555 = _540; } - highp vec2 _567; + highp vec2 _570; if (abs(uData[9].y) < 0.001000000047497451305389404296875) { - highp float _560 = _533.y; - highp vec2 _566 = _552; - _566.y = clamp(vTextureCoord.y, _207.y - _560, _207.y + _560) + (_530 * uData[9].y); - _567 = _566; + highp float _563 = _535.y; + highp vec2 _569 = _555; + _569.y = clamp(vTextureCoord.y, _207.y - _563, _207.y + _563) + (_531 * uData[9].y); + _570 = _569; } else { - _567 = _552; + _570 = _555; } - highp float _570 = max(uData[10].w - max(uData[8].w, 1.0), 0.0); - highp vec2 _575 = -uData[9].xy; - highp float _576 = _575.x; - highp float _578 = (_576 < 0.0) ? (-1.0) : 1.0; - highp float _579 = _575.y; + highp float _573 = max(uData[10].w - max(uData[8].w, 1.0), 0.0); + highp vec2 _578 = -uData[9].xy; + highp float _579 = _578.x; highp float _581 = (_579 < 0.0) ? (-1.0) : 1.0; - highp float _601; - if (_578 < 0.0) + highp float _582 = _578.y; + highp float _584 = (_582 < 0.0) ? (-1.0) : 1.0; + highp float _604; + if (_581 < 0.0) { - highp float _600; - if (_581 < 0.0) + highp float _603; + if (_584 < 0.0) { - _600 = _213.x; + _603 = _213.x; } else { - _600 = _213.w; + _603 = _213.w; } - _601 = _600; + _604 = _603; } else { - highp float _593; - if (_581 < 0.0) + highp float _596; + if (_584 < 0.0) { - _593 = _213.y; + _596 = _213.y; } else { - _593 = _213.z; + _596 = _213.z; } - _601 = _593; + _604 = _596; } - highp vec2 _604 = max(_207.zw - vec2(_601), vec2(0.0)); - highp vec2 _608 = (_207.xy + (vec2(_578, _581) * _604)) + (_575 * _601); - highp vec2 _623; - if (abs(_576) < 0.001000000047497451305389404296875) + highp vec2 _607 = max(_207.zw - vec2(_604), vec2(0.0)); + highp vec2 _611 = (_207.xy + (vec2(_581, _584) * _607)) + (_578 * _604); + highp vec2 _626; + if (abs(_579) < 0.001000000047497451305389404296875) { - highp float _616 = _604.x; - highp vec2 _622 = _608; - _622.x = clamp(vTextureCoord.x, _207.x - _616, _207.x + _616) + (_601 * _576); - _623 = _622; + highp float _619 = _607.x; + highp vec2 _625 = _611; + _625.x = clamp(vTextureCoord.x, _207.x - _619, _207.x + _619) + (_604 * _579); + _626 = _625; } else { - _623 = _608; + _626 = _611; } - highp vec2 _638; - if (abs(_579) < 0.001000000047497451305389404296875) + highp vec2 _641; + if (abs(_582) < 0.001000000047497451305389404296875) { - highp float _631 = _604.y; - highp vec2 _637 = _623; - _637.y = clamp(vTextureCoord.y, _207.y - _631, _207.y + _631) + (_601 * _579); - _638 = _637; + highp float _634 = _607.y; + highp vec2 _640 = _626; + _640.y = clamp(vTextureCoord.y, _207.y - _634, _207.y + _634) + (_604 * _582); + _641 = _640; } else { - _638 = _623; + _641 = _626; } - _644 = vec2(1.0 - smoothstep(_570, uData[10].w, length(vTextureCoord - _567)), 1.0 - smoothstep(_570, uData[10].w, length(vTextureCoord - _638))); + _647 = vec2(1.0 - smoothstep(_573, uData[10].w, length(vTextureCoord - _570)), 1.0 - smoothstep(_573, uData[10].w, length(vTextureCoord - _641))); } else { - _644 = vec2(0.0); + _647 = vec2(0.0); } - bool _645 = _498 < _166; - if (_645) + bool _648 = _499 < _166; + if (_648) { _142 = _160; _145 = _168; @@ -522,285 +522,262 @@ void main() } else { - bool _649 = _498 < _164; - highp vec2 _653; - if (_649) + bool _652 = _499 < _164; + highp vec2 _656; + if (_652) { - _653 = _207.yw; + _656 = _207.yw; } else { - _653 = _141; + _656 = _141; } - bvec2 _655 = bvec2(_649); - bvec4 _657 = bvec4(_649); - _142 = _653; - _145 = _649 ? _211 : _144; - _147 = vec2(_655.x ? _644.x : _146.x, _655.y ? _644.y : _146.y); - _151 = vec4(_657.x ? _206.x : _150.x, _657.y ? _206.y : _150.y, _657.z ? _206.z : _150.z, _657.w ? _206.w : _150.w); + bvec2 _658 = bvec2(_652); + bvec4 _660 = bvec4(_652); + _142 = _656; + _145 = _652 ? _211 : _144; + _147 = vec2(_658.x ? _647.x : _146.x, _658.y ? _647.y : _146.y); + _151 = vec4(_660.x ? _206.x : _150.x, _660.y ? _206.y : _150.y, _660.z ? _206.z : _150.z, _660.w ? _206.w : _150.w); _161 = _160; - _165 = _649 ? _498 : _164; - } - bvec2 _661 = bvec2(_645); - _159 = vec2(_661.x ? _644.x : _158.x, _661.y ? _644.y : _158.y); - bvec4 _662 = bvec4(_645); - _163 = vec4(_662.x ? _206.x : _162.x, _662.y ? _206.y : _162.y, _662.z ? _206.z : _162.z, _662.w ? _206.w : _162.w); - _167 = _645 ? _498 : _166; - _169 = _645 ? _211 : _168; - highp vec2 _707; - highp float _708; - if (_206.w < 0.5) - { - highp float _673 = (vTextureCoord.x - _207.x) + _207.z; - highp float _675 = (_207.x + _207.z) - vTextureCoord.x; - highp float _680 = (vTextureCoord.y - _207.y) + _207.w; - highp float _682 = (_207.y + _207.w) - vTextureCoord.y; - highp float _686 = min(min(_673, _675), min(_680, _682)); - highp vec4 _691 = exp((vec4(_686) - vec4(_673, _675, _680, _682)) / vec4(uData[1].y)); - highp float _692 = _691.x; - highp float _693 = _691.y; - highp float _695 = _691.z; - highp float _697 = _691.w; - highp float _698 = ((_692 + _693) + _695) + _697; - _707 = vec2(_693 - _692, _697 - _695) / vec2(_698); - _708 = (uData[1].y * log(_698)) - _686; - } - else - { - _707 = _497; - _708 = _498; + _165 = _652 ? _499 : _164; } - highp vec2 _974; - highp float _975; + bvec2 _664 = bvec2(_648); + _159 = vec2(_664.x ? _647.x : _158.x, _664.y ? _647.y : _158.y); + bvec4 _665 = bvec4(_648); + _163 = vec4(_665.x ? _206.x : _162.x, _665.y ? _206.y : _162.y, _665.z ? _206.z : _162.z, _665.w ? _206.w : _162.w); + _167 = _648 ? _499 : _166; + _169 = _648 ? _211 : _168; + highp vec2 _978; + highp float _979; if (_196) { - highp vec4 _720 = min(uData[57], vec4(min(uData[56].z, uData[56].w))); - int _723 = int(uData[58].z); - highp vec2 _829; - highp float _830; + highp vec4 _724 = min(uData[57], vec4(min(uData[56].z, uData[56].w))); + int _727 = int(uData[58].z); + highp vec2 _833; + highp float _834; if (uData[1].y > 0.0) { - highp float _795 = (vTextureCoord.x - uData[56].x) + uData[56].z; - highp float _797 = (uData[56].x + uData[56].z) - vTextureCoord.x; - highp float _802 = (vTextureCoord.y - uData[56].y) + uData[56].w; - highp float _804 = (uData[56].y + uData[56].w) - vTextureCoord.y; - highp float _808 = min(min(_795, _797), min(_802, _804)); - highp vec4 _813 = exp((vec4(_808) - vec4(_795, _797, _802, _804)) / vec4(uData[1].y)); - highp float _814 = _813.x; - highp float _815 = _813.y; - highp float _817 = _813.z; - highp float _819 = _813.w; - highp float _820 = ((_814 + _815) + _817) + _819; - _829 = vec2(_815 - _814, _819 - _817) / vec2(_820); - _830 = (uData[1].y * log(_820)) - _808; + highp float _799 = (vTextureCoord.x - uData[56].x) + uData[56].z; + highp float _801 = (uData[56].x + uData[56].z) - vTextureCoord.x; + highp float _806 = (vTextureCoord.y - uData[56].y) + uData[56].w; + highp float _808 = (uData[56].y + uData[56].w) - vTextureCoord.y; + highp float _812 = min(min(_799, _801), min(_806, _808)); + highp vec4 _817 = exp((vec4(_812) - vec4(_799, _801, _806, _808)) / vec4(uData[1].y)); + highp float _818 = _817.x; + highp float _819 = _817.y; + highp float _821 = _817.z; + highp float _823 = _817.w; + highp float _824 = ((_818 + _819) + _821) + _823; + _833 = vec2(_819 - _818, _823 - _821) / vec2(_824); + _834 = (uData[1].y * log(_824)) - _812; } else { - highp vec2 _729 = vTextureCoord - uData[56].xy; - highp float _731 = _729.x; - highp float _752; - if (_731 > 0.0) + highp vec2 _733 = vTextureCoord - uData[56].xy; + highp float _735 = _733.x; + highp float _756; + if (_735 > 0.0) { - highp float _751; - if (_729.y > 0.0) + highp float _755; + if (_733.y > 0.0) { - _751 = _720.z; + _755 = _724.z; } else { - _751 = _720.y; + _755 = _724.y; } - _752 = _751; + _756 = _755; } else { - highp float _743; - if (_729.y > 0.0) + highp float _747; + if (_733.y > 0.0) { - _743 = _720.w; + _747 = _724.w; } else { - _743 = _720.x; + _747 = _724.x; } - _752 = _743; + _756 = _747; } - highp vec2 _756 = (abs(_729) - uData[56].zw) + vec2(_752); - highp float _758 = (_731 < 0.0) ? (-1.0) : 1.0; - highp float _761 = (_729.y < 0.0) ? (-1.0) : 1.0; - highp float _763 = _756.x; - bool _769; - if (_763 > 0.0) + highp vec2 _760 = (abs(_733) - uData[56].zw) + vec2(_756); + highp float _762 = (_735 < 0.0) ? (-1.0) : 1.0; + highp float _765 = (_733.y < 0.0) ? (-1.0) : 1.0; + highp float _767 = _760.x; + bool _773; + if (_767 > 0.0) { - _769 = _756.y > 0.0; + _773 = _760.y > 0.0; } else { - _769 = false; + _773 = false; } - highp vec2 _783; - if (_769) + highp vec2 _787; + if (_773) { - _783 = normalize(_756) * vec2(_758, _761); + _787 = normalize(_760) * vec2(_762, _765); } else { - highp vec2 _780; - if (_763 > _756.y) + highp vec2 _784; + if (_767 > _760.y) { - _780 = vec2(_758, 0.0); + _784 = vec2(_762, 0.0); } else { - _780 = vec2(0.0, _761); + _784 = vec2(0.0, _765); } - _783 = _780; + _787 = _784; } - _829 = _783; - _830 = (min(max(_763, _756.y), 0.0) + length(max(_756, vec2(0.0)))) - _752; + _833 = _787; + _834 = (min(max(_767, _760.y), 0.0) + length(max(_760, vec2(0.0)))) - _756; } - highp vec2 _832; - highp float _835; - _832 = _829; - _835 = _830; - highp vec2 _833; - highp float _836; - int _837 = 0; + highp vec2 _836; + highp float _839; + _836 = _833; + _839 = _834; + highp vec2 _837; + highp float _840; + int _841 = 0; for (;;) { - bool _845; - if (_837 < _723) + bool _849; + if (_841 < _727) { - _845 = _837 < 4; + _849 = _841 < 4; } else { - _845 = false; + _849 = false; } - if (_845) + if (_849) { - int _847 = 14 - _837; - int _848 = 3 * _847; - int _849 = 11 + _848; - int _852 = _848 + 12; - if (uData[_852 * 1 + 0].x == 0.0) + int _851 = 14 - _841; + int _852 = 3 * _851; + int _853 = 11 + _852; + int _856 = _852 + 12; + if (uData[_856 * 1 + 0].x == 0.0) { - _833 = _832; - _836 = _835; - int _838 = _837 + 1; - _832 = _833; - _835 = _836; - _837 = _838; + _837 = _836; + _840 = _839; + int _842 = _841 + 1; + _836 = _837; + _839 = _840; + _841 = _842; continue; } - highp float _861 = clamp(uData[_852 * 1 + 0].x / uData[_852 * 1 + 0].y, 0.0, 1.0); - bool _863 = uData[_849 * 1 + 0].x < 0.5; - highp float _871; - if (_863) + highp float _865 = clamp(uData[_856 * 1 + 0].x / uData[_856 * 1 + 0].y, 0.0, 1.0); + bool _867 = uData[_853 * 1 + 0].x < 0.5; + highp float _875; + if (_867) { - _871 = vTextureCoord.y; + _875 = vTextureCoord.y; } else { - _871 = vTextureCoord.x; + _875 = vTextureCoord.x; } - highp float _879; - if (_863) + highp float _883; + if (_867) { - _879 = vTextureCoord.x; + _883 = vTextureCoord.x; } else { - _879 = vTextureCoord.y; + _883 = vTextureCoord.y; } - highp float _881 = _879 - uData[_849 * 1 + 0].y; - highp float _882 = uData[_852 * 1 + 0].x * 0.5; - highp float _885 = uData[_849 * 1 + 0].w - uData[_849 * 1 + 0].z; - highp float _886 = smoothstep(0.0, 0.60000002384185791015625, _861); - highp float _915; - highp float _916; - if (uData[_852 * 1 + 0].w > 2.5) + highp float _885 = _883 - uData[_853 * 1 + 0].y; + highp float _886 = uData[_856 * 1 + 0].x * 0.5; + highp float _889 = uData[_853 * 1 + 0].w - uData[_853 * 1 + 0].z; + highp float _890 = smoothstep(0.0, 0.60000002384185791015625, _865); + highp float _919; + highp float _920; + if (uData[_856 * 1 + 0].w > 2.5) { - highp float _906 = _871 - ((uData[_849 * 1 + 0].z + uData[_849 * 1 + 0].w) * 0.5); - _915 = (_906 < 0.0) ? 1.0 : (-1.0); - _916 = max(((_885 * 0.5) * (1.0 - _886)) - abs(_906), 0.0); + highp float _910 = _875 - ((uData[_853 * 1 + 0].z + uData[_853 * 1 + 0].w) * 0.5); + _919 = (_910 < 0.0) ? 1.0 : (-1.0); + _920 = max(((_889 * 0.5) * (1.0 - _890)) - abs(_910), 0.0); } else { - bool _892 = uData[_852 * 1 + 0].w < 1.5; - highp float _898; - if (_892) + bool _896 = uData[_856 * 1 + 0].w < 1.5; + highp float _902; + if (_896) { - _898 = _871 - uData[_849 * 1 + 0].z; + _902 = _875 - uData[_853 * 1 + 0].z; } else { - _898 = uData[_849 * 1 + 0].w - _871; + _902 = uData[_853 * 1 + 0].w - _875; } - _915 = _892 ? 1.0 : (-1.0); - _916 = max(_898 - ((_885 - _882) * _886), 0.0); + _919 = _896 ? 1.0 : (-1.0); + _920 = max(_902 - ((_889 - _886) * _890), 0.0); } - highp float _918 = length(vec2(_881, _916)); - highp float _919 = _918 - _882; - highp vec2 _934; - if (_918 > 0.0) + highp float _922 = length(vec2(_885, _920)); + highp float _923 = _922 - _886; + highp vec2 _938; + if (_922 > 0.0) { - highp vec2 _928 = vec2(-_881, (-_916) * _915) / vec2(_918); - highp vec2 _933; - if (uData[_849 * 1 + 0].x > 0.5) + highp vec2 _932 = vec2(-_885, (-_920) * _919) / vec2(_922); + highp vec2 _937; + if (uData[_853 * 1 + 0].x > 0.5) { - _933 = _928.yx; + _937 = _932.yx; } else { - _933 = _928; + _937 = _932; } - _934 = _933; + _938 = _937; } else { - _934 = vec2(0.0); + _938 = vec2(0.0); } - highp float _936 = uData[_852 * 1 + 0].z * _861; - highp vec2 _940 = max(vec2(_936 + _835, _936 - _919), vec2(0.0)); - highp float _941 = length(_940); - bool _946; - if (_936 > 0.0) + highp float _940 = uData[_856 * 1 + 0].z * _865; + highp vec2 _944 = max(vec2(_940 + _839, _940 - _923), vec2(0.0)); + highp float _945 = length(_944); + bool _950; + if (_940 > 0.0) { - _946 = _941 > 0.0; + _950 = _945 > 0.0; } else { - _946 = false; + _950 = false; } - highp vec2 _961; - if (_946) + highp vec2 _965; + if (_950) { - _961 = ((_832 * _940.x) + (_934 * _940.y)) / vec2(_941); + _965 = ((_836 * _944.x) + (_938 * _944.y)) / vec2(_945); } else { - bvec2 _952 = bvec2((-_919) > _835); - _961 = vec2(_952.x ? _934.x : _832.x, _952.y ? _934.y : _832.y); + bvec2 _956 = bvec2((-_923) > _839); + _965 = vec2(_956.x ? _938.x : _836.x, _956.y ? _938.y : _836.y); } - highp float _962 = -_919; - highp float _973; + highp float _966 = -_923; + highp float _977; do { - if (_936 == 0.0) + if (_940 == 0.0) { - _973 = max(_835, _962); + _977 = max(_839, _966); break; } - _973 = min(-_936, max(_835, _962)) + _941; + _977 = min(-_940, max(_839, _966)) + _945; break; } while(false); - _833 = _961; - _836 = _973; - int _838 = _837 + 1; - _832 = _833; - _835 = _836; - _837 = _838; + _837 = _965; + _840 = _977; + int _842 = _841 + 1; + _836 = _837; + _839 = _840; + _841 = _842; continue; } else @@ -808,30 +785,53 @@ void main() break; } } - _974 = _832; - _975 = _835; + _978 = _836; + _979 = _839; } else { - _974 = _707; - _975 = _708; + highp vec2 _713; + highp float _714; + if (_206.w < 0.5) + { + highp float _679 = (vTextureCoord.x - _207.x) + _207.z; + highp float _681 = (_207.x + _207.z) - vTextureCoord.x; + highp float _686 = (vTextureCoord.y - _207.y) + _207.w; + highp float _688 = (_207.y + _207.w) - vTextureCoord.y; + highp float _692 = min(min(_679, _681), min(_686, _688)); + highp vec4 _697 = exp((vec4(_692) - vec4(_679, _681, _686, _688)) / vec4(uData[1].y)); + highp float _698 = _697.x; + highp float _699 = _697.y; + highp float _701 = _697.z; + highp float _703 = _697.w; + highp float _704 = ((_698 + _699) + _701) + _703; + _713 = vec2(_699 - _698, _703 - _701) / vec2(_704); + _714 = (uData[1].y * log(_704)) - _692; + } + else + { + _713 = _498; + _714 = _499; + } + _978 = _713; + _979 = _714; } - bool _976 = _975 < _156; - if (_976) + bool _980 = _979 < _156; + if (_980) { _149 = _152; _155 = _156; } else { - bool _980 = _975 < _154; - bvec2 _981 = bvec2(_980); - _149 = vec2(_981.x ? _974.x : _148.x, _981.y ? _974.y : _148.y); - _155 = _980 ? _975 : _154; + bool _984 = _979 < _154; + bvec2 _985 = bvec2(_984); + _149 = vec2(_985.x ? _978.x : _148.x, _985.y ? _978.y : _148.y); + _155 = _984 ? _979 : _154; } - bvec2 _984 = bvec2(_976); - _153 = vec2(_984.x ? _974.x : _152.x, _984.y ? _974.y : _152.y); - _157 = _976 ? _975 : _156; + bvec2 _988 = bvec2(_980); + _153 = vec2(_988.x ? _978.x : _152.x, _988.y ? _978.y : _152.y); + _157 = _980 ? _979 : _156; _141 = _142; _144 = _145; _146 = _147; @@ -854,608 +854,608 @@ void main() break; } } - bool _994; + bool _998; if (uData[58].w > 2.5) { - _994 = uData[58].w < 3.5; + _998 = uData[58].w < 3.5; } else { - _994 = false; + _998 = false; } - bool _995 = uData[58].w > 1.5; - bool _999; - if (_995) + bool _999 = uData[58].w > 1.5; + bool _1003; + if (_999) { - _999 = uData[58].w < 3.5; + _1003 = uData[58].w < 3.5; } else { - _999 = false; + _1003 = false; } - highp float _1072; - highp vec2 _1073; - if (_999) + highp float _1076; + highp vec2 _1077; + if (_1003) { - highp vec2 _1005 = vTextureCoord - uData[56].xy; - highp vec4 _1011 = min(uData[57], vec4(min(uData[56].z, uData[56].w))); - highp float _1012 = _1005.x; - highp float _1033; - if (_1012 > 0.0) + highp vec2 _1009 = vTextureCoord - uData[56].xy; + highp vec4 _1015 = min(uData[57], vec4(min(uData[56].z, uData[56].w))); + highp float _1016 = _1009.x; + highp float _1037; + if (_1016 > 0.0) { - highp float _1032; - if (_1005.y > 0.0) + highp float _1036; + if (_1009.y > 0.0) { - _1032 = _1011.z; + _1036 = _1015.z; } else { - _1032 = _1011.y; + _1036 = _1015.y; } - _1033 = _1032; + _1037 = _1036; } else { - highp float _1024; - if (_1005.y > 0.0) + highp float _1028; + if (_1009.y > 0.0) { - _1024 = _1011.w; + _1028 = _1015.w; } else { - _1024 = _1011.x; + _1028 = _1015.x; } - _1033 = _1024; + _1037 = _1028; } - highp vec2 _1037 = (abs(_1005) - uData[56].zw) + vec2(_1033); - highp float _1039 = (_1012 < 0.0) ? (-1.0) : 1.0; - highp float _1042 = (_1005.y < 0.0) ? (-1.0) : 1.0; - highp float _1044 = _1037.x; - bool _1050; - if (_1044 > 0.0) + highp vec2 _1041 = (abs(_1009) - uData[56].zw) + vec2(_1037); + highp float _1043 = (_1016 < 0.0) ? (-1.0) : 1.0; + highp float _1046 = (_1009.y < 0.0) ? (-1.0) : 1.0; + highp float _1048 = _1041.x; + bool _1054; + if (_1048 > 0.0) { - _1050 = _1037.y > 0.0; + _1054 = _1041.y > 0.0; } else { - _1050 = false; + _1054 = false; } - highp vec2 _1064; - if (_1050) + highp vec2 _1068; + if (_1054) { - _1064 = normalize(_1037) * vec2(_1039, _1042); + _1068 = normalize(_1041) * vec2(_1043, _1046); } else { - highp vec2 _1061; - if (_1044 > _1037.y) + highp vec2 _1065; + if (_1048 > _1041.y) { - _1061 = vec2(_1039, 0.0); + _1065 = vec2(_1043, 0.0); } else { - _1061 = vec2(0.0, _1042); + _1065 = vec2(0.0, _1046); } - _1064 = _1061; + _1068 = _1065; } - _1072 = (min(max(_1044, _1037.y), 0.0) + length(max(_1037, vec2(0.0)))) - _1033; - _1073 = _1064; + _1076 = (min(max(_1048, _1041.y), 0.0) + length(max(_1041, vec2(0.0)))) - _1037; + _1077 = _1068; } else { - _1072 = -1000000000.0; - _1073 = vec2(0.0); + _1076 = -1000000000.0; + _1077 = vec2(0.0); } - bool _1077; - if (_995) + bool _1081; + if (_999) { - _1077 = uData[58].w < 3.5; + _1081 = uData[58].w < 3.5; } else { - _1077 = false; + _1081 = false; } - bool _1081; - if (_1077) + bool _1085; + if (_1081) { - _1081 = !_994; + _1085 = !_998; } else { - _1081 = false; + _1085 = false; } - highp vec2 _1126; - highp vec2 _1127; - highp float _1128; - highp vec2 _1129; highp vec2 _1130; highp vec2 _1131; - highp vec2 _1132; - highp vec4 _1133; - highp vec4 _1134; - highp float _1135; - highp float _1136; - highp float _1137; - highp float _1138; - if (_1081) + highp float _1132; + highp vec2 _1133; + highp vec2 _1134; + highp vec2 _1135; + highp vec2 _1136; + highp vec4 _1137; + highp vec4 _1138; + highp float _1139; + highp float _1140; + highp float _1141; + highp float _1142; + if (_1085) { - highp float _1084 = 1.0 - _1072; - bool _1085 = _1084 < _166; - highp vec2 _1101; - highp vec2 _1102; - highp float _1103; - highp vec2 _1104; - highp vec4 _1105; - highp float _1106; - if (_1085) + highp float _1088 = 1.0 - _1076; + bool _1089 = _1088 < _166; + highp vec2 _1105; + highp vec2 _1106; + highp float _1107; + highp vec2 _1108; + highp vec4 _1109; + highp float _1110; + if (_1089) { - _1101 = _160; - _1102 = uData[56].yw; - _1103 = _168; - _1104 = _158; - _1105 = _162; - _1106 = _166; + _1105 = _160; + _1106 = uData[56].yw; + _1107 = _168; + _1108 = _158; + _1109 = _162; + _1110 = _166; } else { - bool _1089 = _1084 < _164; - highp vec2 _1093; - if (_1089) + bool _1093 = _1088 < _164; + highp vec2 _1097; + if (_1093) { - _1093 = uData[56].yw; + _1097 = uData[56].yw; } else { - _1093 = _141; + _1097 = _141; } - bvec2 _1095 = bvec2(_1089); - bvec4 _1097 = bvec4(_1089); - _1101 = _1093; - _1102 = _160; - _1103 = _1089 ? _168 : _144; - _1104 = vec2(_1095.x ? vec2(0.0).x : _146.x, _1095.y ? vec2(0.0).y : _146.y); - _1105 = vec4(_1097.x ? uData[58].x : _150.x, _1097.y ? uData[58].y : _150.y, _1097.z ? uData[58].z : _150.z, _1097.w ? uData[58].w : _150.w); - _1106 = _1089 ? _1084 : _164; + bvec2 _1099 = bvec2(_1093); + bvec4 _1101 = bvec4(_1093); + _1105 = _1097; + _1106 = _160; + _1107 = _1093 ? _168 : _144; + _1108 = vec2(_1099.x ? vec2(0.0).x : _146.x, _1099.y ? vec2(0.0).y : _146.y); + _1109 = vec4(_1101.x ? uData[58].x : _150.x, _1101.y ? uData[58].y : _150.y, _1101.z ? uData[58].z : _150.z, _1101.w ? uData[58].w : _150.w); + _1110 = _1093 ? _1088 : _164; } - bvec2 _1107 = bvec2(_1085); - bvec4 _1109 = bvec4(_1085); - highp vec2 _1112 = -_1073; - bool _1113 = _1084 < _156; - highp vec2 _1121; - highp float _1122; - if (_1113) + bvec2 _1111 = bvec2(_1089); + bvec4 _1113 = bvec4(_1089); + highp vec2 _1116 = -_1077; + bool _1117 = _1088 < _156; + highp vec2 _1125; + highp float _1126; + if (_1117) { - _1121 = _152; - _1122 = _156; + _1125 = _152; + _1126 = _156; } else { - bool _1117 = _1084 < _154; - bvec2 _1118 = bvec2(_1117); - _1121 = vec2(_1118.x ? _1112.x : _148.x, _1118.y ? _1112.y : _148.y); - _1122 = _1117 ? _1084 : _154; + bool _1121 = _1088 < _154; + bvec2 _1122 = bvec2(_1121); + _1125 = vec2(_1122.x ? _1116.x : _148.x, _1122.y ? _1116.y : _148.y); + _1126 = _1121 ? _1088 : _154; } - bvec2 _1123 = bvec2(_1113); - _1126 = _1101; - _1127 = _1102; - _1128 = _1103; - _1129 = _1104; - _1130 = vec2(_1107.x ? vec2(0.0).x : _158.x, _1107.y ? vec2(0.0).y : _158.y); - _1131 = _1121; - _1132 = vec2(_1123.x ? _1112.x : _152.x, _1123.y ? _1112.y : _152.y); - _1133 = _1105; - _1134 = vec4(_1109.x ? uData[58].x : _162.x, _1109.y ? uData[58].y : _162.y, _1109.z ? uData[58].z : _162.z, _1109.w ? uData[58].w : _162.w); - _1135 = _1122; - _1136 = _1113 ? _1084 : _156; - _1137 = _1106; - _1138 = _1085 ? _1084 : _166; + bvec2 _1127 = bvec2(_1117); + _1130 = _1105; + _1131 = _1106; + _1132 = _1107; + _1133 = _1108; + _1134 = vec2(_1111.x ? vec2(0.0).x : _158.x, _1111.y ? vec2(0.0).y : _158.y); + _1135 = _1125; + _1136 = vec2(_1127.x ? _1116.x : _152.x, _1127.y ? _1116.y : _152.y); + _1137 = _1109; + _1138 = vec4(_1113.x ? uData[58].x : _162.x, _1113.y ? uData[58].y : _162.y, _1113.z ? uData[58].z : _162.z, _1113.w ? uData[58].w : _162.w); + _1139 = _1126; + _1140 = _1117 ? _1088 : _156; + _1141 = _1110; + _1142 = _1089 ? _1088 : _166; } else { - _1126 = _141; - _1127 = _160; - _1128 = _144; - _1129 = _146; - _1130 = _158; - _1131 = _148; - _1132 = _152; - _1133 = _150; - _1134 = _162; - _1135 = _154; - _1136 = _156; - _1137 = _164; - _1138 = _166; + _1130 = _141; + _1131 = _160; + _1132 = _144; + _1133 = _146; + _1134 = _158; + _1135 = _148; + _1136 = _152; + _1137 = _150; + _1138 = _162; + _1139 = _154; + _1140 = _156; + _1141 = _164; + _1142 = _166; } - highp float _1140 = max(uData[1].x, 9.9999997473787516355514526367188e-05); - highp float _1145 = max(_1140 - abs(_1138 - _1137), 0.0) / _1140; - highp float _1146 = _1145 * _1145; - highp float _1147 = _1146 * 0.5; - highp float _1152; - if (_1137 < _1138) + highp float _1144 = max(uData[1].x, 9.9999997473787516355514526367188e-05); + highp float _1149 = max(_1144 - abs(_1142 - _1141), 0.0) / _1144; + highp float _1150 = _1149 * _1149; + highp float _1151 = _1150 * 0.5; + highp float _1156; + if (_1141 < _1142) { - _1152 = 1.0 - _1147; + _1156 = 1.0 - _1151; } else { - _1152 = _1147; + _1156 = _1151; } - highp float _1156 = min(_1138, _1137) - ((_1146 * _1140) * 0.25); - highp float _1161 = max(_1140 - abs(_1136 - _1135), 0.0) / _1140; - highp float _1162 = _1161 * _1161; - highp float _1163 = _1162 * 0.5; - highp float _1168; - if (_1135 < _1136) + highp float _1160 = min(_1142, _1141) - ((_1150 * _1144) * 0.25); + highp float _1165 = max(_1144 - abs(_1140 - _1139), 0.0) / _1144; + highp float _1166 = _1165 * _1165; + highp float _1167 = _1166 * 0.5; + highp float _1172; + if (_1139 < _1140) { - _1168 = 1.0 - _1163; + _1172 = 1.0 - _1167; } else { - _1168 = _1163; + _1172 = _1167; } - highp float _1172 = min(_1136, _1135) - ((_1162 * _1140) * 0.25); - highp float _1176; - if (_994) + highp float _1176 = min(_1140, _1139) - ((_1166 * _1144) * 0.25); + highp float _1180; + if (_998) { - _1176 = max(_1156, _1072); + _1180 = max(_1160, _1076); } else { - _1176 = _1156; + _1180 = _1160; } - highp float _1179 = clamp(0.5 - max(_1176, _1072), 0.0, 1.0); - if (_1179 <= 0.0) + highp float _1183 = clamp(0.5 - max(_1180, _1076), 0.0, 1.0); + if (_1183 <= 0.0) { discard; } if (vColor.x < 0.5) { - _1708 = vec4(0.0, 0.0, 0.0, _1179); + _1712 = vec4(0.0, 0.0, 0.0, _1183); break; } - highp vec4 _1190 = mix(_1134, _1133, vec4(_1152)); - highp vec2 _1192 = mix(_1132, _1131, vec2(_1168)); - bool _1196; - if (_994) + highp vec4 _1194 = mix(_1138, _1137, vec4(_1156)); + highp vec2 _1196 = mix(_1136, _1135, vec2(_1172)); + bool _1200; + if (_998) { - _1196 = _1072 > _1172; + _1200 = _1076 > _1176; } else { - _1196 = false; + _1200 = false; } - bvec2 _1198 = bvec2(_1196); - highp vec2 _1199 = vec2(_1198.x ? _1073.x : _1192.x, _1198.y ? _1073.y : _1192.y); - highp vec2 _1200 = vec2(_1152); - highp vec2 _1204 = mix(_1130, _1129, _1200) * min(length(_1199), 1.0); - highp float _1206 = max(0.0, -(_1196 ? _1072 : _1172)); - highp float _1207 = -_1206; - highp float _1210 = exp(_1207 / uData[1].z); - highp float _1216 = _1190.y; - highp float _1250; - highp float _1251; - highp vec2 _1252; + bvec2 _1202 = bvec2(_1200); + highp vec2 _1203 = vec2(_1202.x ? _1077.x : _1196.x, _1202.y ? _1077.y : _1196.y); + highp vec2 _1204 = vec2(_1156); + highp vec2 _1208 = mix(_1134, _1133, _1204) * min(length(_1203), 1.0); + highp float _1210 = max(0.0, -(_1200 ? _1076 : _1176)); + highp float _1211 = -_1210; + highp float _1214 = exp(_1211 / uData[1].z); + highp float _1220 = _1194.y; + highp float _1254; + highp float _1255; + highp vec2 _1256; if (_139) { - highp float _1234 = max(min(uData[5].y * mix(_168, _1128, _1152), uData[6].w), 1.0); - highp float _1237 = clamp(1.0 - (_1206 / _1234), 0.0, 1.0); - highp float _1242 = (((uData[5].z * _1234) * _1216) * _1237) * _1237; - _1250 = _1237; - _1251 = _1242; - _1252 = clamp(((vTextureCoord - (_1199 * _1242)) - uData[0].xy) * uData[0].zw, vec2(0.0), vec2(1.0)); + highp float _1238 = max(min(uData[5].y * mix(_168, _1132, _1156), uData[6].w), 1.0); + highp float _1241 = clamp(1.0 - (_1210 / _1238), 0.0, 1.0); + highp float _1246 = (((uData[5].z * _1238) * _1220) * _1241) * _1241; + _1254 = _1241; + _1255 = _1246; + _1256 = clamp(((vTextureCoord - (_1203 * _1246)) - uData[0].xy) * uData[0].zw, vec2(0.0), vec2(1.0)); } else { - _1250 = 0.0; - _1251 = 0.0; - _1252 = clamp(((vTextureCoord + (_1199 * ((uData[2].x * _1216) * _1210))) - uData[0].xy) * uData[0].zw, vec2(0.0), vec2(1.0)); + _1254 = 0.0; + _1255 = 0.0; + _1256 = clamp(((vTextureCoord + (_1203 * ((uData[2].x * _1220) * _1214))) - uData[0].xy) * uData[0].zw, vec2(0.0), vec2(1.0)); } - highp vec4 _1256 = textureLod(uSampler, _1252, 0.0); - bool _1258 = uData[4].w > 0.5; - highp vec4 _1266; - if (_1258) + highp vec4 _1260 = textureLod(uSampler, _1256, 0.0); + bool _1262 = uData[4].w > 0.5; + highp vec4 _1270; + if (_1262) { - _1266 = textureLod(uTex1, _1252, 0.0); + _1270 = textureLod(uTex1, _1256, 0.0); } else { - _1266 = _1256; + _1270 = _1260; } - bool _1271; + bool _1275; if (_139) { - _1271 = uData[6].y > 0.0; + _1275 = uData[6].y > 0.0; } else { - _1271 = false; + _1275 = false; } - bool _1275; - if (_1271) + bool _1279; + if (_1275) { - _1275 = _1251 > 0.5; + _1279 = _1255 > 0.5; } else { - _1275 = false; + _1279 = false; } - highp vec4 _1336; - highp vec4 _1337; - if (_1275) + highp vec4 _1340; + highp vec4 _1341; + if (_1279) { - highp vec2 _1283 = (_1199 * ((_1251 * 0.039999999105930328369140625) * uData[6].y)) * uData[0].zw; - highp vec2 _1285 = clamp(_1252 + _1283, vec2(0.0), vec2(1.0)); - highp vec2 _1287 = clamp(_1252 - _1283, vec2(0.0), vec2(1.0)); - highp vec4 _1291 = textureLod(uSampler, _1285, 0.0); - highp float _1296 = _1256.w; - highp float _1297 = (_1291.x / max(_1291.w, 9.9999997473787516355514526367188e-05)) * _1296; - highp vec4 _1298 = _1256; - _1298.x = _1297; - highp vec4 _1302 = textureLod(uSampler, _1287, 0.0); - highp float _1307 = (_1302.z / max(_1302.w, 9.9999997473787516355514526367188e-05)) * _1296; - _1298.z = _1307; - highp vec4 _1335; - if (_1258) + highp vec2 _1287 = (_1203 * ((_1255 * 0.039999999105930328369140625) * uData[6].y)) * uData[0].zw; + highp vec2 _1289 = clamp(_1256 + _1287, vec2(0.0), vec2(1.0)); + highp vec2 _1291 = clamp(_1256 - _1287, vec2(0.0), vec2(1.0)); + highp vec4 _1295 = textureLod(uSampler, _1289, 0.0); + highp float _1300 = _1260.w; + highp float _1301 = (_1295.x / max(_1295.w, 9.9999997473787516355514526367188e-05)) * _1300; + highp vec4 _1302 = _1260; + _1302.x = _1301; + highp vec4 _1306 = textureLod(uSampler, _1291, 0.0); + highp float _1311 = (_1306.z / max(_1306.w, 9.9999997473787516355514526367188e-05)) * _1300; + _1302.z = _1311; + highp vec4 _1339; + if (_1262) { - highp vec4 _1317 = textureLod(uTex1, _1285, 0.0); - highp vec4 _1324 = _1266; - _1324.x = (_1317.x / max(_1317.w, 9.9999997473787516355514526367188e-05)) * _1266.w; - highp vec4 _1328 = textureLod(uTex1, _1287, 0.0); - _1324.z = (_1328.z / max(_1328.w, 9.9999997473787516355514526367188e-05)) * _1266.w; - _1335 = _1324; + highp vec4 _1321 = textureLod(uTex1, _1289, 0.0); + highp vec4 _1328 = _1270; + _1328.x = (_1321.x / max(_1321.w, 9.9999997473787516355514526367188e-05)) * _1270.w; + highp vec4 _1332 = textureLod(uTex1, _1291, 0.0); + _1328.z = (_1332.z / max(_1332.w, 9.9999997473787516355514526367188e-05)) * _1270.w; + _1339 = _1328; } else { - highp vec4 _1312 = _1266; - _1312.x = _1297; - _1312.z = _1307; - _1335 = _1312; + highp vec4 _1316 = _1270; + _1316.x = _1301; + _1316.z = _1311; + _1339 = _1316; } - _1336 = _1335; - _1337 = _1298; + _1340 = _1339; + _1341 = _1302; } else { - _1336 = _1266; - _1337 = _1256; + _1340 = _1270; + _1341 = _1260; } - bool _1339 = uData[4].x > 1.5; - highp float _1353; - if (_1339) + bool _1343 = uData[4].x > 1.5; + highp float _1357; + if (_1343) { - _1353 = uData[3].w; + _1357 = uData[3].w; } else { - highp float _1351; + highp float _1355; if ((uData[6].x - 2.0 * trunc(uData[6].x / 2.0)) > 0.5) { - _1351 = 1.0; + _1355 = 1.0; } else { - _1351 = _1337.w; + _1355 = _1341.w; } - _1353 = _1351; + _1357 = _1355; } - highp vec4 _1362 = vec4(_1337.xyz / vec3(max(_1337.w, 9.9999997473787516355514526367188e-05)), 1.0); - highp vec4 _1371 = vec4(_1336.xyz / vec3(max(_1336.w, 9.9999997473787516355514526367188e-05)), 1.0); - highp float _1378; - if (_1339) + highp vec4 _1366 = vec4(_1341.xyz / vec3(max(_1341.w, 9.9999997473787516355514526367188e-05)), 1.0); + highp vec4 _1375 = vec4(_1340.xyz / vec3(max(_1340.w, 9.9999997473787516355514526367188e-05)), 1.0); + highp float _1382; + if (_1343) { - _1378 = 1.0; + _1382 = 1.0; } else { - _1378 = (uData[4].z > 0.5) ? uData[4].x : 0.0; + _1382 = (uData[4].z > 0.5) ? uData[4].x : 0.0; } - bool _1382; + bool _1386; if (_139) { - _1382 = !_1339; + _1386 = !_1343; } else { - _1382 = false; + _1386 = false; } - highp float _1391; - if (_1382) + highp float _1395; + if (_1386) { - _1391 = _1378 * (1.0 - ((_1250 * _1250) * (1.0 - smoothstep(0.800000011920928955078125, 1.0, _1378)))); + _1395 = _1382 * (1.0 - ((_1254 * _1254) * (1.0 - smoothstep(0.800000011920928955078125, 1.0, _1382)))); } else { - _1391 = _1378; + _1395 = _1382; } - highp float _1394 = 1.0 - _1391; - highp float _1402; + highp float _1398 = 1.0 - _1395; + highp float _1406; if (_139) { - _1402 = _1250; + _1406 = _1254; } else { - _1402 = _1210 * _1210; + _1406 = _1214 * _1214; } - highp float _1405 = clamp(((uData[2].y * _1216) * _1402) * _1394, 0.0, 1.0); - highp vec4 _1411 = ((_1371 * _1405) + ((mix(_1371, _1362, vec4(clamp(_1190.x, 0.0, 1.0))) * _1394) * (1.0 - _1405))) + (uData[3] * _1391); - highp vec4 _1454; - if (_1339) + highp float _1409 = clamp(((uData[2].y * _1220) * _1406) * _1398, 0.0, 1.0); + highp vec4 _1415 = ((_1375 * _1409) + ((mix(_1375, _1366, vec4(clamp(_1194.x, 0.0, 1.0))) * _1398) * (1.0 - _1409))) + (uData[3] * _1395); + highp vec4 _1458; + if (_1343) { - _1454 = vec4(uData[3].xyz / vec3(max(uData[3].w, 9.9999997473787516355514526367188e-05)), 1.0); + _1458 = vec4(uData[3].xyz / vec3(max(uData[3].w, 9.9999997473787516355514526367188e-05)), 1.0); } else { - highp vec4 _1418 = _1411 + (_1362 * (1.0 - _1411.w)); - highp vec4 _1444; + highp vec4 _1422 = _1415 + (_1366 * (1.0 - _1415.w)); + highp vec4 _1448; if (uData[7].w < 1.0) { - highp vec3 _1423 = _1418.xyz; - highp float _1424 = dot(_1423, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); - highp float _1425 = 0.60000002384185791015625 * uData[7].w; - highp float _1427 = max(uData[7].w - _1425, 9.9999997473787516355514526367188e-05); - highp float _1439; - if (_1424 <= _1425) + highp vec3 _1427 = _1422.xyz; + highp float _1428 = dot(_1427, vec3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + highp float _1429 = 0.60000002384185791015625 * uData[7].w; + highp float _1431 = max(uData[7].w - _1429, 9.9999997473787516355514526367188e-05); + highp float _1443; + if (_1428 <= _1429) { - _1439 = _1424; + _1443 = _1428; } else { - _1439 = _1425 + (_1427 * (1.0 - exp((-(_1424 - _1425)) / _1427))); + _1443 = _1429 + (_1431 * (1.0 - exp((-(_1428 - _1429)) / _1431))); } - highp vec3 _1442 = _1423 * (_1439 / max(_1424, 9.9999997473787516355514526367188e-05)); - _1444 = vec4(_1442.x, _1442.y, _1442.z, _1418.w); + highp vec3 _1446 = _1427 * (_1443 / max(_1428, 9.9999997473787516355514526367188e-05)); + _1448 = vec4(_1446.x, _1446.y, _1446.z, _1422.w); } else { - _1444 = _1418; + _1448 = _1422; } - _1454 = _1444; + _1458 = _1448; } - highp float _1457 = dot(_1199, uData[9].xy); - highp float _1458 = max(_1457, 0.0); - highp float _1460 = max(-_1457, 0.0); - highp float _1463 = abs(_1457); - bool _1467; + highp float _1461 = dot(_1203, uData[9].xy); + highp float _1462 = max(_1461, 0.0); + highp float _1464 = max(-_1461, 0.0); + highp float _1467 = abs(_1461); + bool _1471; if (_139) { - _1467 = uData[6].z > 0.0; + _1471 = uData[6].z > 0.0; } else { - _1467 = false; + _1471 = false; } - bool _1469 = uData[10].x > 0.0; - highp float _1493; - if (_1469) + bool _1473 = uData[10].x > 0.0; + highp float _1497; + if (_1473) { - _1493 = 0.0; + _1497 = 0.0; } else { - highp float _1492; - if (_1467) + highp float _1496; + if (_1471) { - _1492 = (uData[6].z * (1.0 - smoothstep(0.20000000298023223876953125, 0.699999988079071044921875, _1463))) * exp((-max(0.0, -_1176)) / (uData[2].z * 2.5)); + _1496 = (uData[6].z * (1.0 - smoothstep(0.20000000298023223876953125, 0.699999988079071044921875, _1467))) * exp((-max(0.0, -_1180)) / (uData[2].z * 2.5)); } else { - _1492 = uData[8].x * (1.0 - smoothstep(0.0, uData[2].z * 0.625, -_1176)); + _1496 = uData[8].x * (1.0 - smoothstep(0.0, uData[2].z * 0.625, -_1180)); } - _1493 = _1492; + _1497 = _1496; } - highp float _1503; + highp float _1507; if (_139) { - _1503 = max((uData[5].w * _1250) * _1250, _1493) * min(_1216, 1.0); + _1507 = max((uData[5].w * _1254) * _1254, _1497) * min(_1220, 1.0); } else { - _1503 = 0.0; + _1507 = 0.0; } - highp float _1506 = _1353 * (1.0 - _1503); - highp vec4 _1512 = vec4(_1454.xyz * _1506, _1506 + _1503); - highp float _1534; + highp float _1510 = _1357 * (1.0 - _1507); + highp vec4 _1516 = vec4(_1458.xyz * _1510, _1510 + _1507); + highp float _1538; if (_139) { - highp float _1533; - if (_1467) + highp float _1537; + if (_1471) { - _1533 = uData[6].z * max(smoothstep(0.75, 1.0, _1463), max(_1204.x, _1204.y)); + _1537 = uData[6].z * max(smoothstep(0.75, 1.0, _1467), max(_1208.x, _1208.y)); } else { - _1533 = 0.25; + _1537 = 0.25; } - _1534 = _1533; + _1538 = _1537; } else { - _1534 = (0.449999988079071044921875 * ((_1458 * sqrt(_1458)) + ((0.75 * _1460) * sqrt(_1460)))) + 0.0599999986588954925537109375; + _1538 = (0.449999988079071044921875 * ((_1462 * sqrt(_1462)) + ((0.75 * _1464) * sqrt(_1464)))) + 0.0599999986588954925537109375; } - highp float _1561; - if (_1467) + highp float _1565; + if (_1471) { - _1561 = exp((-max(0.0, -_1176)) / (uData[2].z * 1.25)); + _1565 = exp((-max(0.0, -_1180)) / (uData[2].z * 1.25)); } else { - highp float _1555; + highp float _1559; if (_139) { - highp float _1548 = -_1176; - _1555 = smoothstep(uData[2].z * 0.3125, uData[2].z * 0.625, _1548) * (1.0 - smoothstep(uData[2].z * 1.5, uData[2].z * 2.0, _1548)); + highp float _1552 = -_1180; + _1559 = smoothstep(uData[2].z * 0.3125, uData[2].z * 0.625, _1552) * (1.0 - smoothstep(uData[2].z * 1.5, uData[2].z * 2.0, _1552)); } else { - _1555 = exp((-max(0.0, -_1176)) / uData[2].z); + _1559 = exp((-max(0.0, -_1180)) / uData[2].z); } - _1561 = _1555; + _1565 = _1559; } - highp float _1573; - if (_1469) + highp float _1577; + if (_1473) { - _1573 = 0.0; + _1577 = 0.0; } else { - highp float _1571; + highp float _1575; if (_139) { - _1571 = 0.0; + _1575 = 0.0; } else { - _1571 = (0.039999999105930328369140625 * exp(_1207 / uData[1].w)) * _1458; + _1575 = (0.039999999105930328369140625 * exp(_1211 / uData[1].w)) * _1462; } - _1573 = (_1561 * _1534) + _1571; + _1577 = (_1565 * _1538) + _1575; } - highp vec2 _1574 = mix(_1127, _1126, _1200); - highp float _1578 = _1574.y; - highp float _1584 = clamp((vTextureCoord.y - (_1574.x - _1578)) / max(2.0 * _1578, 9.9999997473787516355514526367188e-05), 0.0, 1.0); - highp float _1602; + highp vec2 _1578 = mix(_1131, _1130, _1204); + highp float _1582 = _1578.y; + highp float _1588 = clamp((vTextureCoord.y - (_1578.x - _1582)) / max(2.0 * _1582, 9.9999997473787516355514526367188e-05), 0.0, 1.0); + highp float _1606; if (uData[4].z > 0.5) { - _1602 = uData[4].y + ((uData[7].x + ((uData[7].y - uData[7].x) * _1584)) + (uData[7].z * (1.0 - smoothstep(0.0, 0.37999999523162841796875, _1584)))); + _1606 = uData[4].y + ((uData[7].x + ((uData[7].y - uData[7].x) * _1588)) + (uData[7].z * (1.0 - smoothstep(0.0, 0.37999999523162841796875, _1588)))); } else { - _1602 = 0.0; + _1606 = 0.0; } - highp vec3 _1612 = _1512.xyz + vec3(clamp((_1602 + _1190.z) + ((_1216 * uData[2].w) * _1573), 0.0, 1.0)); - highp vec4 _1684; - if (_1469) + highp vec3 _1616 = _1516.xyz + vec3(clamp((_1606 + _1194.z) + ((_1220 * uData[2].w) * _1577), 0.0, 1.0)); + highp vec4 _1688; + if (_1473) { - highp vec2 _1622; - if (dot(_1199, _1199) > 9.9999999392252902907785028219223e-09) + highp vec2 _1626; + if (dot(_1203, _1203) > 9.9999999392252902907785028219223e-09) { - _1622 = normalize(_1199); + _1626 = normalize(_1203); } else { - _1622 = vec2(0.0); + _1626 = vec2(0.0); } - highp float _1623 = dot(_1622, uData[9].xy); - highp float _1625 = mix(8.0, 1.0, uData[9].z); - highp float _1633 = pow(max(_1623, 0.0), _1625) + (uData[9].w * pow(max(-_1623, 0.0), _1625)); - highp float _1634 = min(_1216, 1.0); - highp float _1641 = -_1176; - highp float _1643 = smoothstep(-0.5, 0.5, _1641); - highp float _1645 = -max(0.0, _1641); - highp vec3 _1682 = (_1612.xyz * (1.0 - (((uData[10].z * (1.0 - abs(_1623))) * (_1643 * exp(_1645 / max(uData[2].z * 2.5, 0.001000000047497451305389404296875)))) * _1634))) + vec3(_1634 * (((uData[10].x * max(_1633, max(_1204.x, uData[9].w * _1204.y))) * (_1643 * exp(_1645 / max(uData[8].y, 0.001000000047497451305389404296875)))) + ((uData[10].y * _1633) * (smoothstep(uData[8].y - 0.5, uData[8].y + 0.5, _1641) * exp((-max(0.0, _1641 - uData[8].y)) / max(uData[8].z, 0.001000000047497451305389404296875)))))); - _1684 = vec4(_1682.x, _1682.y, _1682.z, _1512.w); + highp float _1627 = dot(_1626, uData[9].xy); + highp float _1629 = mix(8.0, 1.0, uData[9].z); + highp float _1637 = pow(max(_1627, 0.0), _1629) + (uData[9].w * pow(max(-_1627, 0.0), _1629)); + highp float _1638 = min(_1220, 1.0); + highp float _1645 = -_1180; + highp float _1647 = smoothstep(-0.5, 0.5, _1645); + highp float _1649 = -max(0.0, _1645); + highp vec3 _1686 = (_1616.xyz * (1.0 - (((uData[10].z * (1.0 - abs(_1627))) * (_1647 * exp(_1649 / max(uData[2].z * 2.5, 0.001000000047497451305389404296875)))) * _1638))) + vec3(_1638 * (((uData[10].x * max(_1637, max(_1208.x, uData[9].w * _1208.y))) * (_1647 * exp(_1649 / max(uData[8].y, 0.001000000047497451305389404296875)))) + ((uData[10].y * _1637) * (smoothstep(uData[8].y - 0.5, uData[8].y + 0.5, _1645) * exp((-max(0.0, _1645 - uData[8].y)) / max(uData[8].z, 0.001000000047497451305389404296875)))))); + _1688 = vec4(_1686.x, _1686.y, _1686.z, _1516.w); } else { - _1684 = vec4(_1612.x, _1612.y, _1612.z, _1512.w); + _1688 = vec4(_1616.x, _1616.y, _1616.z, _1516.w); } - highp vec4 _1685 = clamp(_1684, vec4(0.0), vec4(1.0)); - highp float _1692 = max(_1685.w, max(_1685.x, max(_1685.y, _1685.z))); - highp vec4 _1693 = _1685; - _1693.w = _1692; - highp vec3 _1704 = _1693.xyz + vec3(((fract(52.98291778564453125 * fract(dot(vTextureCoord, vec2(0.067110560834407806396484375, 0.005837149918079376220703125)))) - 0.5) * uData[5].x) * _1692); - _1708 = clamp(vec4(_1704.x, _1704.y, _1704.z, _1693.w), vec4(0.0), vec4(1.0)) * _1179; + highp vec4 _1689 = clamp(_1688, vec4(0.0), vec4(1.0)); + highp float _1696 = max(_1689.w, max(_1689.x, max(_1689.y, _1689.z))); + highp vec4 _1697 = _1689; + _1697.w = _1696; + highp vec3 _1708 = _1697.xyz + vec3(((fract(52.98291778564453125 * fract(dot(vTextureCoord, vec2(0.067110560834407806396484375, 0.005837149918079376220703125)))) - 0.5) * uData[5].x) * _1696); + _1712 = clamp(vec4(_1708.x, _1708.y, _1708.z, _1697.w), vec4(0.0), vec4(1.0)) * _1183; break; } while(false); - out_var_SV_Target0 = _1708; + out_var_SV_Target0 = _1712; } diff --git a/backend/src/glass/shaders/compiled/msl/liquid_glass.fragment.msl b/backend/src/glass/shaders/compiled/msl/liquid_glass.fragment.msl index 518ec2456..4c82089c0 100644 --- a/backend/src/glass/shaders/compiled/msl/liquid_glass.fragment.msl +++ b/backend/src/glass/shaders/compiled/msl/liquid_glass.fragment.msl @@ -22,7 +22,7 @@ struct main0_in fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], texture2d Frost [[texture(0)]], texture2d Sharp [[texture(1)]], sampler FrostSampler [[sampler(0)]], sampler SharpSampler [[sampler(1)]]) { main0_out out = {}; - float4 _1708; + float4 _1712; do { int _110 = int((in.in_var_COLOR.y * 255.0) + 0.5); @@ -114,273 +114,213 @@ fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Unifo } float _211 = precise::min(_207.z, _207.w); float4 _213 = precise::min(_208, float4(_211)); - float2 _215 = in.in_var_TEXCOORD0 - _207.xy; - float _217 = _215.x; - float _238; - if (_217 > 0.0) - { - float _237; - if (_215.y > 0.0) - { - _237 = _213.z; - } - else - { - _237 = _213.y; - } - _238 = _237; - } - else - { - float _229; - if (_215.y > 0.0) - { - _229 = _213.w; - } - else - { - _229 = _213.x; - } - _238 = _229; - } - float2 _242 = (abs(_215) - _207.zw) + float2(_238); - float _244 = (_217 < 0.0) ? (-1.0) : 1.0; - float _247 = (_215.y < 0.0) ? (-1.0) : 1.0; - float _249 = _242.x; - bool _255; - if (_249 > 0.0) - { - _255 = _242.y > 0.0; - } - else - { - _255 = false; - } - float2 _269; - if (_255) - { - _269 = fast::normalize(_242) * float2(_244, _247); - } - else - { - float2 _266; - if (_249 > _242.y) - { - _266 = float2(_244, 0.0); - } - else - { - _266 = float2(0.0, _247); - } - _269 = _266; - } - float2 _497; - float _498; + float2 _498; + float _499; if (_196) { - float4 _287 = precise::min(Uniforms.uData[57], float4(precise::min(Uniforms.uData[56].z, Uniforms.uData[56].w))); - int _290 = int(Uniforms.uData[58].z); - float2 _292 = in.in_var_TEXCOORD0 - Uniforms.uData[56].xy; - float _294 = _292.x; - float _315; - if (_294 > 0.0) + float4 _288 = precise::min(Uniforms.uData[57], float4(precise::min(Uniforms.uData[56].z, Uniforms.uData[56].w))); + int _291 = int(Uniforms.uData[58].z); + float2 _293 = in.in_var_TEXCOORD0 - Uniforms.uData[56].xy; + float _295 = _293.x; + float _316; + if (_295 > 0.0) { - float _314; - if (_292.y > 0.0) + float _315; + if (_293.y > 0.0) { - _314 = _287.z; + _315 = _288.z; } else { - _314 = _287.y; + _315 = _288.y; } - _315 = _314; + _316 = _315; } else { - float _306; - if (_292.y > 0.0) + float _307; + if (_293.y > 0.0) { - _306 = _287.w; + _307 = _288.w; } else { - _306 = _287.x; + _307 = _288.x; } - _315 = _306; + _316 = _307; } - float2 _319 = (abs(_292) - Uniforms.uData[56].zw) + float2(_315); - float _321 = (_294 < 0.0) ? (-1.0) : 1.0; - float _324 = (_292.y < 0.0) ? (-1.0) : 1.0; - float _326 = _319.x; - bool _332; - if (_326 > 0.0) + float2 _320 = (abs(_293) - Uniforms.uData[56].zw) + float2(_316); + float _322 = (_295 < 0.0) ? (-1.0) : 1.0; + float _325 = (_293.y < 0.0) ? (-1.0) : 1.0; + float _327 = _320.x; + bool _333; + if (_327 > 0.0) { - _332 = _319.y > 0.0; + _333 = _320.y > 0.0; } else { - _332 = false; + _333 = false; } - float2 _346; - if (_332) + float2 _347; + if (_333) { - _346 = fast::normalize(_319) * float2(_321, _324); + _347 = fast::normalize(_320) * float2(_322, _325); } else { - float2 _343; - if (_326 > _319.y) + float2 _344; + if (_327 > _320.y) { - _343 = float2(_321, 0.0); + _344 = float2(_322, 0.0); } else { - _343 = float2(0.0, _324); + _344 = float2(0.0, _325); } - _346 = _343; + _347 = _344; } - float2 _355; - float _358; - _355 = _346; - _358 = (precise::min(precise::max(_326, _319.y), 0.0) + length(precise::max(_319, float2(0.0)))) - _315; float2 _356; float _359; - int _360 = 0; + _356 = _347; + _359 = (precise::min(precise::max(_327, _320.y), 0.0) + length(precise::max(_320, float2(0.0)))) - _316; + float2 _357; + float _360; + int _361 = 0; for (;;) { - bool _368; - if (_360 < _290) + bool _369; + if (_361 < _291) { - _368 = _360 < 4; + _369 = _361 < 4; } else { - _368 = false; + _369 = false; } - if (_368) + if (_369) { - int _370 = 14 - _360; - int _371 = 3 * _370; - int _372 = 11 + _371; - int _375 = _371 + 12; - if (Uniforms.uData[_375].x == 0.0) + int _371 = 14 - _361; + int _372 = 3 * _371; + int _373 = 11 + _372; + int _376 = _372 + 12; + if (Uniforms.uData[_376].x == 0.0) { - _356 = _355; - _359 = _358; - int _361 = _360 + 1; - _355 = _356; - _358 = _359; - _360 = _361; + _357 = _356; + _360 = _359; + int _362 = _361 + 1; + _356 = _357; + _359 = _360; + _361 = _362; continue; } - float _384 = fast::clamp(Uniforms.uData[_375].x / Uniforms.uData[_375].y, 0.0, 1.0); - bool _386 = Uniforms.uData[_372].x < 0.5; - float _394; - if (_386) + float _385 = fast::clamp(Uniforms.uData[_376].x / Uniforms.uData[_376].y, 0.0, 1.0); + bool _387 = Uniforms.uData[_373].x < 0.5; + float _395; + if (_387) { - _394 = in.in_var_TEXCOORD0.y; + _395 = in.in_var_TEXCOORD0.y; } else { - _394 = in.in_var_TEXCOORD0.x; + _395 = in.in_var_TEXCOORD0.x; } - float _402; - if (_386) + float _403; + if (_387) { - _402 = in.in_var_TEXCOORD0.x; + _403 = in.in_var_TEXCOORD0.x; } else { - _402 = in.in_var_TEXCOORD0.y; + _403 = in.in_var_TEXCOORD0.y; } - float _404 = _402 - Uniforms.uData[_372].y; - float _405 = Uniforms.uData[_375].x * 0.5; - float _408 = Uniforms.uData[_372].w - Uniforms.uData[_372].z; - float _409 = smoothstep(0.0, 0.60000002384185791015625, _384); - float _438; + float _405 = _403 - Uniforms.uData[_373].y; + float _406 = Uniforms.uData[_376].x * 0.5; + float _409 = Uniforms.uData[_373].w - Uniforms.uData[_373].z; + float _410 = smoothstep(0.0, 0.60000002384185791015625, _385); float _439; - if (Uniforms.uData[_375].w > 2.5) + float _440; + if (Uniforms.uData[_376].w > 2.5) { - float _429 = _394 - ((Uniforms.uData[_372].z + Uniforms.uData[_372].w) * 0.5); - _438 = (_429 < 0.0) ? 1.0 : (-1.0); - _439 = precise::max(((_408 * 0.5) * (1.0 - _409)) - abs(_429), 0.0); + float _430 = _395 - ((Uniforms.uData[_373].z + Uniforms.uData[_373].w) * 0.5); + _439 = (_430 < 0.0) ? 1.0 : (-1.0); + _440 = precise::max(((_409 * 0.5) * (1.0 - _410)) - abs(_430), 0.0); } else { - bool _415 = Uniforms.uData[_375].w < 1.5; - float _421; - if (_415) + bool _416 = Uniforms.uData[_376].w < 1.5; + float _422; + if (_416) { - _421 = _394 - Uniforms.uData[_372].z; + _422 = _395 - Uniforms.uData[_373].z; } else { - _421 = Uniforms.uData[_372].w - _394; + _422 = Uniforms.uData[_373].w - _395; } - _438 = _415 ? 1.0 : (-1.0); - _439 = precise::max(_421 - ((_408 - _405) * _409), 0.0); + _439 = _416 ? 1.0 : (-1.0); + _440 = precise::max(_422 - ((_409 - _406) * _410), 0.0); } - float _441 = length(float2(_404, _439)); - float _442 = _441 - _405; - float2 _457; - if (_441 > 0.0) + float _442 = length(float2(_405, _440)); + float _443 = _442 - _406; + float2 _458; + if (_442 > 0.0) { - float2 _451 = float2(-_404, (-_439) * _438) / float2(_441); - float2 _456; - if (Uniforms.uData[_372].x > 0.5) + float2 _452 = float2(-_405, (-_440) * _439) / float2(_442); + float2 _457; + if (Uniforms.uData[_373].x > 0.5) { - _456 = _451.yx; + _457 = _452.yx; } else { - _456 = _451; + _457 = _452; } - _457 = _456; + _458 = _457; } else { - _457 = float2(0.0); + _458 = float2(0.0); } - float _459 = Uniforms.uData[_375].z * _384; - float2 _463 = precise::max(float2(_459 + _358, _459 - _442), float2(0.0)); - float _464 = length(_463); - bool _469; - if (_459 > 0.0) + float _460 = Uniforms.uData[_376].z * _385; + float2 _464 = precise::max(float2(_460 + _359, _460 - _443), float2(0.0)); + float _465 = length(_464); + bool _470; + if (_460 > 0.0) { - _469 = _464 > 0.0; + _470 = _465 > 0.0; } else { - _469 = false; + _470 = false; } - float2 _484; - if (_469) + float2 _485; + if (_470) { - _484 = ((_355 * _463.x) + (_457 * _463.y)) / float2(_464); + _485 = ((_356 * _464.x) + (_458 * _464.y)) / float2(_465); } else { - _484 = select(_355, _457, bool2((-_442) > _358)); + _485 = select(_356, _458, bool2((-_443) > _359)); } - float _485 = -_442; - float _496; + float _486 = -_443; + float _497; do { - if (_459 == 0.0) + if (_460 == 0.0) { - _496 = precise::max(_358, _485); + _497 = precise::max(_359, _486); break; } - _496 = precise::min(-_459, precise::max(_358, _485)) + _464; + _497 = precise::min(-_460, precise::max(_359, _486)) + _465; break; } while(false); - _356 = _484; - _359 = _496; - int _361 = _360 + 1; - _355 = _356; - _358 = _359; - _360 = _361; + _357 = _485; + _360 = _497; + int _362 = _361 + 1; + _356 = _357; + _359 = _360; + _361 = _362; continue; } else @@ -388,139 +328,199 @@ fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Unifo break; } } - _497 = _355; - _498 = _358; + _498 = _356; + _499 = _359; } else { - _497 = _269; - _498 = (precise::min(precise::max(_249, _242.y), 0.0) + length(precise::max(_242, float2(0.0)))) - _238; + float2 _218 = in.in_var_TEXCOORD0 - _207.xy; + float _220 = _218.x; + float _241; + if (_220 > 0.0) + { + float _240; + if (_218.y > 0.0) + { + _240 = _213.z; + } + else + { + _240 = _213.y; + } + _241 = _240; + } + else + { + float _232; + if (_218.y > 0.0) + { + _232 = _213.w; + } + else + { + _232 = _213.x; + } + _241 = _232; + } + float2 _245 = (abs(_218) - _207.zw) + float2(_241); + float _247 = (_220 < 0.0) ? (-1.0) : 1.0; + float _250 = (_218.y < 0.0) ? (-1.0) : 1.0; + float _252 = _245.x; + bool _258; + if (_252 > 0.0) + { + _258 = _245.y > 0.0; + } + else + { + _258 = false; + } + float2 _272; + if (_258) + { + _272 = fast::normalize(_245) * float2(_247, _250); + } + else + { + float2 _269; + if (_252 > _245.y) + { + _269 = float2(_247, 0.0); + } + else + { + _269 = float2(0.0, _250); + } + _272 = _269; + } + _498 = _272; + _499 = (precise::min(precise::max(_252, _245.y), 0.0) + length(precise::max(_245, float2(0.0)))) - _241; } - float2 _644; + float2 _647; if (Uniforms.uData[10].w > 0.0) { - float _507 = (Uniforms.uData[9].x < 0.0) ? (-1.0) : 1.0; - float _510 = (Uniforms.uData[9].y < 0.0) ? (-1.0) : 1.0; - float _530; - if (_507 < 0.0) + float _508 = (Uniforms.uData[9].x < 0.0) ? (-1.0) : 1.0; + float _511 = (Uniforms.uData[9].y < 0.0) ? (-1.0) : 1.0; + float _531; + if (_508 < 0.0) { - float _529; - if (_510 < 0.0) + float _530; + if (_511 < 0.0) { - _529 = _213.x; + _530 = _213.x; } else { - _529 = _213.w; + _530 = _213.w; } - _530 = _529; + _531 = _530; } else { - float _522; - if (_510 < 0.0) + float _523; + if (_511 < 0.0) { - _522 = _213.y; + _523 = _213.y; } else { - _522 = _213.z; + _523 = _213.z; } - _530 = _522; + _531 = _523; } - float2 _533 = precise::max(_207.zw - float2(_530), float2(0.0)); - float2 _537 = (_207.xy + (float2(_507, _510) * _533)) + (Uniforms.uData[9].xy * _530); - float2 _552; + float2 _535 = precise::max(_207.zw - float2(_531), float2(0.0)); + float2 _540 = (_207.xy + (float2(_508, _511) * _535)) + (Uniforms.uData[9].xy * _531); + float2 _555; if (abs(Uniforms.uData[9].x) < 0.001000000047497451305389404296875) { - float _545 = _533.x; - float2 _551 = _537; - _551.x = fast::clamp(in.in_var_TEXCOORD0.x, _207.x - _545, _207.x + _545) + (_530 * Uniforms.uData[9].x); - _552 = _551; + float _548 = _535.x; + float2 _554 = _540; + _554.x = fast::clamp(in.in_var_TEXCOORD0.x, _207.x - _548, _207.x + _548) + (_531 * Uniforms.uData[9].x); + _555 = _554; } else { - _552 = _537; + _555 = _540; } - float2 _567; + float2 _570; if (abs(Uniforms.uData[9].y) < 0.001000000047497451305389404296875) { - float _560 = _533.y; - float2 _566 = _552; - _566.y = fast::clamp(in.in_var_TEXCOORD0.y, _207.y - _560, _207.y + _560) + (_530 * Uniforms.uData[9].y); - _567 = _566; + float _563 = _535.y; + float2 _569 = _555; + _569.y = fast::clamp(in.in_var_TEXCOORD0.y, _207.y - _563, _207.y + _563) + (_531 * Uniforms.uData[9].y); + _570 = _569; } else { - _567 = _552; + _570 = _555; } - float _570 = precise::max(Uniforms.uData[10].w - precise::max(Uniforms.uData[8].w, 1.0), 0.0); - float2 _575 = -Uniforms.uData[9].xy; - float _576 = _575.x; - float _578 = (_576 < 0.0) ? (-1.0) : 1.0; - float _579 = _575.y; + float _573 = precise::max(Uniforms.uData[10].w - precise::max(Uniforms.uData[8].w, 1.0), 0.0); + float2 _578 = -Uniforms.uData[9].xy; + float _579 = _578.x; float _581 = (_579 < 0.0) ? (-1.0) : 1.0; - float _601; - if (_578 < 0.0) + float _582 = _578.y; + float _584 = (_582 < 0.0) ? (-1.0) : 1.0; + float _604; + if (_581 < 0.0) { - float _600; - if (_581 < 0.0) + float _603; + if (_584 < 0.0) { - _600 = _213.x; + _603 = _213.x; } else { - _600 = _213.w; + _603 = _213.w; } - _601 = _600; + _604 = _603; } else { - float _593; - if (_581 < 0.0) + float _596; + if (_584 < 0.0) { - _593 = _213.y; + _596 = _213.y; } else { - _593 = _213.z; + _596 = _213.z; } - _601 = _593; + _604 = _596; } - float2 _604 = precise::max(_207.zw - float2(_601), float2(0.0)); - float2 _608 = (_207.xy + (float2(_578, _581) * _604)) + (_575 * _601); - float2 _623; - if (abs(_576) < 0.001000000047497451305389404296875) + float2 _607 = precise::max(_207.zw - float2(_604), float2(0.0)); + float2 _611 = (_207.xy + (float2(_581, _584) * _607)) + (_578 * _604); + float2 _626; + if (abs(_579) < 0.001000000047497451305389404296875) { - float _616 = _604.x; - float2 _622 = _608; - _622.x = fast::clamp(in.in_var_TEXCOORD0.x, _207.x - _616, _207.x + _616) + (_601 * _576); - _623 = _622; + float _619 = _607.x; + float2 _625 = _611; + _625.x = fast::clamp(in.in_var_TEXCOORD0.x, _207.x - _619, _207.x + _619) + (_604 * _579); + _626 = _625; } else { - _623 = _608; + _626 = _611; } - float2 _638; - if (abs(_579) < 0.001000000047497451305389404296875) + float2 _641; + if (abs(_582) < 0.001000000047497451305389404296875) { - float _631 = _604.y; - float2 _637 = _623; - _637.y = fast::clamp(in.in_var_TEXCOORD0.y, _207.y - _631, _207.y + _631) + (_601 * _579); - _638 = _637; + float _634 = _607.y; + float2 _640 = _626; + _640.y = fast::clamp(in.in_var_TEXCOORD0.y, _207.y - _634, _207.y + _634) + (_604 * _582); + _641 = _640; } else { - _638 = _623; + _641 = _626; } - _644 = float2(1.0 - smoothstep(_570, Uniforms.uData[10].w, length(in.in_var_TEXCOORD0 - _567)), 1.0 - smoothstep(_570, Uniforms.uData[10].w, length(in.in_var_TEXCOORD0 - _638))); + _647 = float2(1.0 - smoothstep(_573, Uniforms.uData[10].w, length(in.in_var_TEXCOORD0 - _570)), 1.0 - smoothstep(_573, Uniforms.uData[10].w, length(in.in_var_TEXCOORD0 - _641))); } else { - _644 = float2(0.0); + _647 = float2(0.0); } - bool _645 = _498 < _166; - if (_645) + bool _648 = _499 < _166; + if (_648) { _142 = _160; _145 = _168; @@ -531,280 +531,257 @@ fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Unifo } else { - bool _649 = _498 < _164; - float2 _653; - if (_649) + bool _652 = _499 < _164; + float2 _656; + if (_652) { - _653 = _207.yw; + _656 = _207.yw; } else { - _653 = _141; + _656 = _141; } - _142 = _653; - _145 = _649 ? _211 : _144; - _147 = select(_146, _644, bool2(_649)); - _151 = select(_150, _206, bool4(_649)); + _142 = _656; + _145 = _652 ? _211 : _144; + _147 = select(_146, _647, bool2(_652)); + _151 = select(_150, _206, bool4(_652)); _161 = _160; - _165 = _649 ? _498 : _164; - } - _159 = select(_158, _644, bool2(_645)); - _163 = select(_162, _206, bool4(_645)); - _167 = _645 ? _498 : _166; - _169 = _645 ? _211 : _168; - float2 _707; - float _708; - if (_206.w < 0.5) - { - float _673 = (in.in_var_TEXCOORD0.x - _207.x) + _207.z; - float _675 = (_207.x + _207.z) - in.in_var_TEXCOORD0.x; - float _680 = (in.in_var_TEXCOORD0.y - _207.y) + _207.w; - float _682 = (_207.y + _207.w) - in.in_var_TEXCOORD0.y; - float _686 = precise::min(precise::min(_673, _675), precise::min(_680, _682)); - float4 _691 = exp((float4(_686) - float4(_673, _675, _680, _682)) / float4(Uniforms.uData[1].y)); - float _692 = _691.x; - float _693 = _691.y; - float _695 = _691.z; - float _697 = _691.w; - float _698 = ((_692 + _693) + _695) + _697; - _707 = float2(_693 - _692, _697 - _695) / float2(_698); - _708 = (Uniforms.uData[1].y * log(_698)) - _686; - } - else - { - _707 = _497; - _708 = _498; + _165 = _652 ? _499 : _164; } - float2 _974; - float _975; + _159 = select(_158, _647, bool2(_648)); + _163 = select(_162, _206, bool4(_648)); + _167 = _648 ? _499 : _166; + _169 = _648 ? _211 : _168; + float2 _978; + float _979; if (_196) { - float4 _720 = precise::min(Uniforms.uData[57], float4(precise::min(Uniforms.uData[56].z, Uniforms.uData[56].w))); - int _723 = int(Uniforms.uData[58].z); - float2 _829; - float _830; + float4 _724 = precise::min(Uniforms.uData[57], float4(precise::min(Uniforms.uData[56].z, Uniforms.uData[56].w))); + int _727 = int(Uniforms.uData[58].z); + float2 _833; + float _834; if (Uniforms.uData[1].y > 0.0) { - float _795 = (in.in_var_TEXCOORD0.x - Uniforms.uData[56].x) + Uniforms.uData[56].z; - float _797 = (Uniforms.uData[56].x + Uniforms.uData[56].z) - in.in_var_TEXCOORD0.x; - float _802 = (in.in_var_TEXCOORD0.y - Uniforms.uData[56].y) + Uniforms.uData[56].w; - float _804 = (Uniforms.uData[56].y + Uniforms.uData[56].w) - in.in_var_TEXCOORD0.y; - float _808 = precise::min(precise::min(_795, _797), precise::min(_802, _804)); - float4 _813 = exp((float4(_808) - float4(_795, _797, _802, _804)) / float4(Uniforms.uData[1].y)); - float _814 = _813.x; - float _815 = _813.y; - float _817 = _813.z; - float _819 = _813.w; - float _820 = ((_814 + _815) + _817) + _819; - _829 = float2(_815 - _814, _819 - _817) / float2(_820); - _830 = (Uniforms.uData[1].y * log(_820)) - _808; + float _799 = (in.in_var_TEXCOORD0.x - Uniforms.uData[56].x) + Uniforms.uData[56].z; + float _801 = (Uniforms.uData[56].x + Uniforms.uData[56].z) - in.in_var_TEXCOORD0.x; + float _806 = (in.in_var_TEXCOORD0.y - Uniforms.uData[56].y) + Uniforms.uData[56].w; + float _808 = (Uniforms.uData[56].y + Uniforms.uData[56].w) - in.in_var_TEXCOORD0.y; + float _812 = precise::min(precise::min(_799, _801), precise::min(_806, _808)); + float4 _817 = exp((float4(_812) - float4(_799, _801, _806, _808)) / float4(Uniforms.uData[1].y)); + float _818 = _817.x; + float _819 = _817.y; + float _821 = _817.z; + float _823 = _817.w; + float _824 = ((_818 + _819) + _821) + _823; + _833 = float2(_819 - _818, _823 - _821) / float2(_824); + _834 = (Uniforms.uData[1].y * log(_824)) - _812; } else { - float2 _729 = in.in_var_TEXCOORD0 - Uniforms.uData[56].xy; - float _731 = _729.x; - float _752; - if (_731 > 0.0) + float2 _733 = in.in_var_TEXCOORD0 - Uniforms.uData[56].xy; + float _735 = _733.x; + float _756; + if (_735 > 0.0) { - float _751; - if (_729.y > 0.0) + float _755; + if (_733.y > 0.0) { - _751 = _720.z; + _755 = _724.z; } else { - _751 = _720.y; + _755 = _724.y; } - _752 = _751; + _756 = _755; } else { - float _743; - if (_729.y > 0.0) + float _747; + if (_733.y > 0.0) { - _743 = _720.w; + _747 = _724.w; } else { - _743 = _720.x; + _747 = _724.x; } - _752 = _743; + _756 = _747; } - float2 _756 = (abs(_729) - Uniforms.uData[56].zw) + float2(_752); - float _758 = (_731 < 0.0) ? (-1.0) : 1.0; - float _761 = (_729.y < 0.0) ? (-1.0) : 1.0; - float _763 = _756.x; - bool _769; - if (_763 > 0.0) + float2 _760 = (abs(_733) - Uniforms.uData[56].zw) + float2(_756); + float _762 = (_735 < 0.0) ? (-1.0) : 1.0; + float _765 = (_733.y < 0.0) ? (-1.0) : 1.0; + float _767 = _760.x; + bool _773; + if (_767 > 0.0) { - _769 = _756.y > 0.0; + _773 = _760.y > 0.0; } else { - _769 = false; + _773 = false; } - float2 _783; - if (_769) + float2 _787; + if (_773) { - _783 = fast::normalize(_756) * float2(_758, _761); + _787 = fast::normalize(_760) * float2(_762, _765); } else { - float2 _780; - if (_763 > _756.y) + float2 _784; + if (_767 > _760.y) { - _780 = float2(_758, 0.0); + _784 = float2(_762, 0.0); } else { - _780 = float2(0.0, _761); + _784 = float2(0.0, _765); } - _783 = _780; + _787 = _784; } - _829 = _783; - _830 = (precise::min(precise::max(_763, _756.y), 0.0) + length(precise::max(_756, float2(0.0)))) - _752; + _833 = _787; + _834 = (precise::min(precise::max(_767, _760.y), 0.0) + length(precise::max(_760, float2(0.0)))) - _756; } - float2 _832; - float _835; - _832 = _829; - _835 = _830; - float2 _833; - float _836; - int _837 = 0; + float2 _836; + float _839; + _836 = _833; + _839 = _834; + float2 _837; + float _840; + int _841 = 0; for (;;) { - bool _845; - if (_837 < _723) + bool _849; + if (_841 < _727) { - _845 = _837 < 4; + _849 = _841 < 4; } else { - _845 = false; + _849 = false; } - if (_845) + if (_849) { - int _847 = 14 - _837; - int _848 = 3 * _847; - int _849 = 11 + _848; - int _852 = _848 + 12; - if (Uniforms.uData[_852].x == 0.0) + int _851 = 14 - _841; + int _852 = 3 * _851; + int _853 = 11 + _852; + int _856 = _852 + 12; + if (Uniforms.uData[_856].x == 0.0) { - _833 = _832; - _836 = _835; - int _838 = _837 + 1; - _832 = _833; - _835 = _836; - _837 = _838; + _837 = _836; + _840 = _839; + int _842 = _841 + 1; + _836 = _837; + _839 = _840; + _841 = _842; continue; } - float _861 = fast::clamp(Uniforms.uData[_852].x / Uniforms.uData[_852].y, 0.0, 1.0); - bool _863 = Uniforms.uData[_849].x < 0.5; - float _871; - if (_863) + float _865 = fast::clamp(Uniforms.uData[_856].x / Uniforms.uData[_856].y, 0.0, 1.0); + bool _867 = Uniforms.uData[_853].x < 0.5; + float _875; + if (_867) { - _871 = in.in_var_TEXCOORD0.y; + _875 = in.in_var_TEXCOORD0.y; } else { - _871 = in.in_var_TEXCOORD0.x; + _875 = in.in_var_TEXCOORD0.x; } - float _879; - if (_863) + float _883; + if (_867) { - _879 = in.in_var_TEXCOORD0.x; + _883 = in.in_var_TEXCOORD0.x; } else { - _879 = in.in_var_TEXCOORD0.y; + _883 = in.in_var_TEXCOORD0.y; } - float _881 = _879 - Uniforms.uData[_849].y; - float _882 = Uniforms.uData[_852].x * 0.5; - float _885 = Uniforms.uData[_849].w - Uniforms.uData[_849].z; - float _886 = smoothstep(0.0, 0.60000002384185791015625, _861); - float _915; - float _916; - if (Uniforms.uData[_852].w > 2.5) + float _885 = _883 - Uniforms.uData[_853].y; + float _886 = Uniforms.uData[_856].x * 0.5; + float _889 = Uniforms.uData[_853].w - Uniforms.uData[_853].z; + float _890 = smoothstep(0.0, 0.60000002384185791015625, _865); + float _919; + float _920; + if (Uniforms.uData[_856].w > 2.5) { - float _906 = _871 - ((Uniforms.uData[_849].z + Uniforms.uData[_849].w) * 0.5); - _915 = (_906 < 0.0) ? 1.0 : (-1.0); - _916 = precise::max(((_885 * 0.5) * (1.0 - _886)) - abs(_906), 0.0); + float _910 = _875 - ((Uniforms.uData[_853].z + Uniforms.uData[_853].w) * 0.5); + _919 = (_910 < 0.0) ? 1.0 : (-1.0); + _920 = precise::max(((_889 * 0.5) * (1.0 - _890)) - abs(_910), 0.0); } else { - bool _892 = Uniforms.uData[_852].w < 1.5; - float _898; - if (_892) + bool _896 = Uniforms.uData[_856].w < 1.5; + float _902; + if (_896) { - _898 = _871 - Uniforms.uData[_849].z; + _902 = _875 - Uniforms.uData[_853].z; } else { - _898 = Uniforms.uData[_849].w - _871; + _902 = Uniforms.uData[_853].w - _875; } - _915 = _892 ? 1.0 : (-1.0); - _916 = precise::max(_898 - ((_885 - _882) * _886), 0.0); + _919 = _896 ? 1.0 : (-1.0); + _920 = precise::max(_902 - ((_889 - _886) * _890), 0.0); } - float _918 = length(float2(_881, _916)); - float _919 = _918 - _882; - float2 _934; - if (_918 > 0.0) + float _922 = length(float2(_885, _920)); + float _923 = _922 - _886; + float2 _938; + if (_922 > 0.0) { - float2 _928 = float2(-_881, (-_916) * _915) / float2(_918); - float2 _933; - if (Uniforms.uData[_849].x > 0.5) + float2 _932 = float2(-_885, (-_920) * _919) / float2(_922); + float2 _937; + if (Uniforms.uData[_853].x > 0.5) { - _933 = _928.yx; + _937 = _932.yx; } else { - _933 = _928; + _937 = _932; } - _934 = _933; + _938 = _937; } else { - _934 = float2(0.0); + _938 = float2(0.0); } - float _936 = Uniforms.uData[_852].z * _861; - float2 _940 = precise::max(float2(_936 + _835, _936 - _919), float2(0.0)); - float _941 = length(_940); - bool _946; - if (_936 > 0.0) + float _940 = Uniforms.uData[_856].z * _865; + float2 _944 = precise::max(float2(_940 + _839, _940 - _923), float2(0.0)); + float _945 = length(_944); + bool _950; + if (_940 > 0.0) { - _946 = _941 > 0.0; + _950 = _945 > 0.0; } else { - _946 = false; + _950 = false; } - float2 _961; - if (_946) + float2 _965; + if (_950) { - _961 = ((_832 * _940.x) + (_934 * _940.y)) / float2(_941); + _965 = ((_836 * _944.x) + (_938 * _944.y)) / float2(_945); } else { - _961 = select(_832, _934, bool2((-_919) > _835)); + _965 = select(_836, _938, bool2((-_923) > _839)); } - float _962 = -_919; - float _973; + float _966 = -_923; + float _977; do { - if (_936 == 0.0) + if (_940 == 0.0) { - _973 = precise::max(_835, _962); + _977 = precise::max(_839, _966); break; } - _973 = precise::min(-_936, precise::max(_835, _962)) + _941; + _977 = precise::min(-_940, precise::max(_839, _966)) + _945; break; } while(false); - _833 = _961; - _836 = _973; - int _838 = _837 + 1; - _832 = _833; - _835 = _836; - _837 = _838; + _837 = _965; + _840 = _977; + int _842 = _841 + 1; + _836 = _837; + _839 = _840; + _841 = _842; continue; } else @@ -812,28 +789,51 @@ fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Unifo break; } } - _974 = _832; - _975 = _835; + _978 = _836; + _979 = _839; } else { - _974 = _707; - _975 = _708; + float2 _713; + float _714; + if (_206.w < 0.5) + { + float _679 = (in.in_var_TEXCOORD0.x - _207.x) + _207.z; + float _681 = (_207.x + _207.z) - in.in_var_TEXCOORD0.x; + float _686 = (in.in_var_TEXCOORD0.y - _207.y) + _207.w; + float _688 = (_207.y + _207.w) - in.in_var_TEXCOORD0.y; + float _692 = precise::min(precise::min(_679, _681), precise::min(_686, _688)); + float4 _697 = exp((float4(_692) - float4(_679, _681, _686, _688)) / float4(Uniforms.uData[1].y)); + float _698 = _697.x; + float _699 = _697.y; + float _701 = _697.z; + float _703 = _697.w; + float _704 = ((_698 + _699) + _701) + _703; + _713 = float2(_699 - _698, _703 - _701) / float2(_704); + _714 = (Uniforms.uData[1].y * log(_704)) - _692; + } + else + { + _713 = _498; + _714 = _499; + } + _978 = _713; + _979 = _714; } - bool _976 = _975 < _156; - if (_976) + bool _980 = _979 < _156; + if (_980) { _149 = _152; _155 = _156; } else { - bool _980 = _975 < _154; - _149 = select(_148, _974, bool2(_980)); - _155 = _980 ? _975 : _154; + bool _984 = _979 < _154; + _149 = select(_148, _978, bool2(_984)); + _155 = _984 ? _979 : _154; } - _153 = select(_152, _974, bool2(_976)); - _157 = _976 ? _975 : _156; + _153 = select(_152, _978, bool2(_980)); + _157 = _980 ? _979 : _156; _141 = _142; _144 = _145; _146 = _147; @@ -856,601 +856,601 @@ fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Unifo break; } } - bool _994; + bool _998; if (Uniforms.uData[58].w > 2.5) { - _994 = Uniforms.uData[58].w < 3.5; + _998 = Uniforms.uData[58].w < 3.5; } else { - _994 = false; + _998 = false; } - bool _995 = Uniforms.uData[58].w > 1.5; - bool _999; - if (_995) + bool _999 = Uniforms.uData[58].w > 1.5; + bool _1003; + if (_999) { - _999 = Uniforms.uData[58].w < 3.5; + _1003 = Uniforms.uData[58].w < 3.5; } else { - _999 = false; + _1003 = false; } - float _1072; - float2 _1073; - if (_999) + float _1076; + float2 _1077; + if (_1003) { - float2 _1005 = in.in_var_TEXCOORD0 - Uniforms.uData[56].xy; - float4 _1011 = precise::min(Uniforms.uData[57], float4(precise::min(Uniforms.uData[56].z, Uniforms.uData[56].w))); - float _1012 = _1005.x; - float _1033; - if (_1012 > 0.0) + float2 _1009 = in.in_var_TEXCOORD0 - Uniforms.uData[56].xy; + float4 _1015 = precise::min(Uniforms.uData[57], float4(precise::min(Uniforms.uData[56].z, Uniforms.uData[56].w))); + float _1016 = _1009.x; + float _1037; + if (_1016 > 0.0) { - float _1032; - if (_1005.y > 0.0) + float _1036; + if (_1009.y > 0.0) { - _1032 = _1011.z; + _1036 = _1015.z; } else { - _1032 = _1011.y; + _1036 = _1015.y; } - _1033 = _1032; + _1037 = _1036; } else { - float _1024; - if (_1005.y > 0.0) + float _1028; + if (_1009.y > 0.0) { - _1024 = _1011.w; + _1028 = _1015.w; } else { - _1024 = _1011.x; + _1028 = _1015.x; } - _1033 = _1024; + _1037 = _1028; } - float2 _1037 = (abs(_1005) - Uniforms.uData[56].zw) + float2(_1033); - float _1039 = (_1012 < 0.0) ? (-1.0) : 1.0; - float _1042 = (_1005.y < 0.0) ? (-1.0) : 1.0; - float _1044 = _1037.x; - bool _1050; - if (_1044 > 0.0) + float2 _1041 = (abs(_1009) - Uniforms.uData[56].zw) + float2(_1037); + float _1043 = (_1016 < 0.0) ? (-1.0) : 1.0; + float _1046 = (_1009.y < 0.0) ? (-1.0) : 1.0; + float _1048 = _1041.x; + bool _1054; + if (_1048 > 0.0) { - _1050 = _1037.y > 0.0; + _1054 = _1041.y > 0.0; } else { - _1050 = false; + _1054 = false; } - float2 _1064; - if (_1050) + float2 _1068; + if (_1054) { - _1064 = fast::normalize(_1037) * float2(_1039, _1042); + _1068 = fast::normalize(_1041) * float2(_1043, _1046); } else { - float2 _1061; - if (_1044 > _1037.y) + float2 _1065; + if (_1048 > _1041.y) { - _1061 = float2(_1039, 0.0); + _1065 = float2(_1043, 0.0); } else { - _1061 = float2(0.0, _1042); + _1065 = float2(0.0, _1046); } - _1064 = _1061; + _1068 = _1065; } - _1072 = (precise::min(precise::max(_1044, _1037.y), 0.0) + length(precise::max(_1037, float2(0.0)))) - _1033; - _1073 = _1064; + _1076 = (precise::min(precise::max(_1048, _1041.y), 0.0) + length(precise::max(_1041, float2(0.0)))) - _1037; + _1077 = _1068; } else { - _1072 = -1000000000.0; - _1073 = float2(0.0); + _1076 = -1000000000.0; + _1077 = float2(0.0); } - bool _1077; - if (_995) + bool _1081; + if (_999) { - _1077 = Uniforms.uData[58].w < 3.5; + _1081 = Uniforms.uData[58].w < 3.5; } else { - _1077 = false; + _1081 = false; } - bool _1081; - if (_1077) + bool _1085; + if (_1081) { - _1081 = !_994; + _1085 = !_998; } else { - _1081 = false; + _1085 = false; } - float2 _1126; - float2 _1127; - float _1128; - float2 _1129; float2 _1130; float2 _1131; - float2 _1132; - float4 _1133; - float4 _1134; - float _1135; - float _1136; - float _1137; - float _1138; - if (_1081) + float _1132; + float2 _1133; + float2 _1134; + float2 _1135; + float2 _1136; + float4 _1137; + float4 _1138; + float _1139; + float _1140; + float _1141; + float _1142; + if (_1085) { - float _1084 = 1.0 - _1072; - bool _1085 = _1084 < _166; - float2 _1101; - float2 _1102; - float _1103; - float2 _1104; - float4 _1105; - float _1106; - if (_1085) + float _1088 = 1.0 - _1076; + bool _1089 = _1088 < _166; + float2 _1105; + float2 _1106; + float _1107; + float2 _1108; + float4 _1109; + float _1110; + if (_1089) { - _1101 = _160; - _1102 = Uniforms.uData[56].yw; - _1103 = _168; - _1104 = _158; - _1105 = _162; - _1106 = _166; + _1105 = _160; + _1106 = Uniforms.uData[56].yw; + _1107 = _168; + _1108 = _158; + _1109 = _162; + _1110 = _166; } else { - bool _1089 = _1084 < _164; - float2 _1093; - if (_1089) + bool _1093 = _1088 < _164; + float2 _1097; + if (_1093) { - _1093 = Uniforms.uData[56].yw; + _1097 = Uniforms.uData[56].yw; } else { - _1093 = _141; + _1097 = _141; } - _1101 = _1093; - _1102 = _160; - _1103 = _1089 ? _168 : _144; - _1104 = select(_146, float2(0.0), bool2(_1089)); - _1105 = select(_150, Uniforms.uData[58], bool4(_1089)); - _1106 = _1089 ? _1084 : _164; + _1105 = _1097; + _1106 = _160; + _1107 = _1093 ? _168 : _144; + _1108 = select(_146, float2(0.0), bool2(_1093)); + _1109 = select(_150, Uniforms.uData[58], bool4(_1093)); + _1110 = _1093 ? _1088 : _164; } - float2 _1112 = -_1073; - bool _1113 = _1084 < _156; - float2 _1121; - float _1122; - if (_1113) + float2 _1116 = -_1077; + bool _1117 = _1088 < _156; + float2 _1125; + float _1126; + if (_1117) { - _1121 = _152; - _1122 = _156; + _1125 = _152; + _1126 = _156; } else { - bool _1117 = _1084 < _154; - _1121 = select(_148, _1112, bool2(_1117)); - _1122 = _1117 ? _1084 : _154; + bool _1121 = _1088 < _154; + _1125 = select(_148, _1116, bool2(_1121)); + _1126 = _1121 ? _1088 : _154; } - _1126 = _1101; - _1127 = _1102; - _1128 = _1103; - _1129 = _1104; - _1130 = select(_158, float2(0.0), bool2(_1085)); - _1131 = _1121; - _1132 = select(_152, _1112, bool2(_1113)); - _1133 = _1105; - _1134 = select(_162, Uniforms.uData[58], bool4(_1085)); - _1135 = _1122; - _1136 = _1113 ? _1084 : _156; - _1137 = _1106; - _1138 = _1085 ? _1084 : _166; + _1130 = _1105; + _1131 = _1106; + _1132 = _1107; + _1133 = _1108; + _1134 = select(_158, float2(0.0), bool2(_1089)); + _1135 = _1125; + _1136 = select(_152, _1116, bool2(_1117)); + _1137 = _1109; + _1138 = select(_162, Uniforms.uData[58], bool4(_1089)); + _1139 = _1126; + _1140 = _1117 ? _1088 : _156; + _1141 = _1110; + _1142 = _1089 ? _1088 : _166; } else { - _1126 = _141; - _1127 = _160; - _1128 = _144; - _1129 = _146; - _1130 = _158; - _1131 = _148; - _1132 = _152; - _1133 = _150; - _1134 = _162; - _1135 = _154; - _1136 = _156; - _1137 = _164; - _1138 = _166; + _1130 = _141; + _1131 = _160; + _1132 = _144; + _1133 = _146; + _1134 = _158; + _1135 = _148; + _1136 = _152; + _1137 = _150; + _1138 = _162; + _1139 = _154; + _1140 = _156; + _1141 = _164; + _1142 = _166; } - float _1140 = precise::max(Uniforms.uData[1].x, 9.9999997473787516355514526367188e-05); - float _1145 = precise::max(_1140 - abs(_1138 - _1137), 0.0) / _1140; - float _1146 = _1145 * _1145; - float _1147 = _1146 * 0.5; - float _1152; - if (_1137 < _1138) + float _1144 = precise::max(Uniforms.uData[1].x, 9.9999997473787516355514526367188e-05); + float _1149 = precise::max(_1144 - abs(_1142 - _1141), 0.0) / _1144; + float _1150 = _1149 * _1149; + float _1151 = _1150 * 0.5; + float _1156; + if (_1141 < _1142) { - _1152 = 1.0 - _1147; + _1156 = 1.0 - _1151; } else { - _1152 = _1147; + _1156 = _1151; } - float _1156 = precise::min(_1138, _1137) - ((_1146 * _1140) * 0.25); - float _1161 = precise::max(_1140 - abs(_1136 - _1135), 0.0) / _1140; - float _1162 = _1161 * _1161; - float _1163 = _1162 * 0.5; - float _1168; - if (_1135 < _1136) + float _1160 = precise::min(_1142, _1141) - ((_1150 * _1144) * 0.25); + float _1165 = precise::max(_1144 - abs(_1140 - _1139), 0.0) / _1144; + float _1166 = _1165 * _1165; + float _1167 = _1166 * 0.5; + float _1172; + if (_1139 < _1140) { - _1168 = 1.0 - _1163; + _1172 = 1.0 - _1167; } else { - _1168 = _1163; + _1172 = _1167; } - float _1172 = precise::min(_1136, _1135) - ((_1162 * _1140) * 0.25); - float _1176; - if (_994) + float _1176 = precise::min(_1140, _1139) - ((_1166 * _1144) * 0.25); + float _1180; + if (_998) { - _1176 = precise::max(_1156, _1072); + _1180 = precise::max(_1160, _1076); } else { - _1176 = _1156; + _1180 = _1160; } - float _1179 = fast::clamp(0.5 - precise::max(_1176, _1072), 0.0, 1.0); - if (_1179 <= 0.0) + float _1183 = fast::clamp(0.5 - precise::max(_1180, _1076), 0.0, 1.0); + if (_1183 <= 0.0) { discard_fragment(); } if (in.in_var_COLOR.x < 0.5) { - _1708 = float4(0.0, 0.0, 0.0, _1179); + _1712 = float4(0.0, 0.0, 0.0, _1183); break; } - float4 _1190 = mix(_1134, _1133, float4(_1152)); - bool _1196; - if (_994) + float4 _1194 = mix(_1138, _1137, float4(_1156)); + bool _1200; + if (_998) { - _1196 = _1072 > _1172; + _1200 = _1076 > _1176; } else { - _1196 = false; + _1200 = false; } - float2 _1199 = select(mix(_1132, _1131, float2(_1168)), _1073, bool2(_1196)); - float2 _1200 = float2(_1152); - float2 _1204 = mix(_1130, _1129, _1200) * precise::min(length(_1199), 1.0); - float _1206 = precise::max(0.0, -(_1196 ? _1072 : _1172)); - float _1207 = -_1206; - float _1210 = exp(_1207 / Uniforms.uData[1].z); - float _1216 = _1190.y; - float _1250; - float _1251; - float2 _1252; + float2 _1203 = select(mix(_1136, _1135, float2(_1172)), _1077, bool2(_1200)); + float2 _1204 = float2(_1156); + float2 _1208 = mix(_1134, _1133, _1204) * precise::min(length(_1203), 1.0); + float _1210 = precise::max(0.0, -(_1200 ? _1076 : _1176)); + float _1211 = -_1210; + float _1214 = exp(_1211 / Uniforms.uData[1].z); + float _1220 = _1194.y; + float _1254; + float _1255; + float2 _1256; if (_139) { - float _1234 = precise::max(precise::min(Uniforms.uData[5].y * mix(_168, _1128, _1152), Uniforms.uData[6].w), 1.0); - float _1237 = fast::clamp(1.0 - (_1206 / _1234), 0.0, 1.0); - float _1242 = (((Uniforms.uData[5].z * _1234) * _1216) * _1237) * _1237; - _1250 = _1237; - _1251 = _1242; - _1252 = fast::clamp(((in.in_var_TEXCOORD0 - (_1199 * _1242)) - Uniforms.uData[0].xy) * Uniforms.uData[0].zw, float2(0.0), float2(1.0)); + float _1238 = precise::max(precise::min(Uniforms.uData[5].y * mix(_168, _1132, _1156), Uniforms.uData[6].w), 1.0); + float _1241 = fast::clamp(1.0 - (_1210 / _1238), 0.0, 1.0); + float _1246 = (((Uniforms.uData[5].z * _1238) * _1220) * _1241) * _1241; + _1254 = _1241; + _1255 = _1246; + _1256 = fast::clamp(((in.in_var_TEXCOORD0 - (_1203 * _1246)) - Uniforms.uData[0].xy) * Uniforms.uData[0].zw, float2(0.0), float2(1.0)); } else { - _1250 = 0.0; - _1251 = 0.0; - _1252 = fast::clamp(((in.in_var_TEXCOORD0 + (_1199 * ((Uniforms.uData[2].x * _1216) * _1210))) - Uniforms.uData[0].xy) * Uniforms.uData[0].zw, float2(0.0), float2(1.0)); + _1254 = 0.0; + _1255 = 0.0; + _1256 = fast::clamp(((in.in_var_TEXCOORD0 + (_1203 * ((Uniforms.uData[2].x * _1220) * _1214))) - Uniforms.uData[0].xy) * Uniforms.uData[0].zw, float2(0.0), float2(1.0)); } - float4 _1256 = Frost.sample(FrostSampler, _1252, level(0.0)); - bool _1258 = Uniforms.uData[4].w > 0.5; - float4 _1266; - if (_1258) + float4 _1260 = Frost.sample(FrostSampler, _1256, level(0.0)); + bool _1262 = Uniforms.uData[4].w > 0.5; + float4 _1270; + if (_1262) { - _1266 = Sharp.sample(SharpSampler, _1252, level(0.0)); + _1270 = Sharp.sample(SharpSampler, _1256, level(0.0)); } else { - _1266 = _1256; + _1270 = _1260; } - bool _1271; + bool _1275; if (_139) { - _1271 = Uniforms.uData[6].y > 0.0; + _1275 = Uniforms.uData[6].y > 0.0; } else { - _1271 = false; + _1275 = false; } - bool _1275; - if (_1271) + bool _1279; + if (_1275) { - _1275 = _1251 > 0.5; + _1279 = _1255 > 0.5; } else { - _1275 = false; + _1279 = false; } - float4 _1336; - float4 _1337; - if (_1275) + float4 _1340; + float4 _1341; + if (_1279) { - float2 _1283 = (_1199 * ((_1251 * 0.039999999105930328369140625) * Uniforms.uData[6].y)) * Uniforms.uData[0].zw; - float2 _1285 = fast::clamp(_1252 + _1283, float2(0.0), float2(1.0)); - float2 _1287 = fast::clamp(_1252 - _1283, float2(0.0), float2(1.0)); - float4 _1291 = Frost.sample(FrostSampler, _1285, level(0.0)); - float _1296 = _1256.w; - float _1297 = (_1291.x / precise::max(_1291.w, 9.9999997473787516355514526367188e-05)) * _1296; - float4 _1298 = _1256; - _1298.x = _1297; - float4 _1302 = Frost.sample(FrostSampler, _1287, level(0.0)); - float _1307 = (_1302.z / precise::max(_1302.w, 9.9999997473787516355514526367188e-05)) * _1296; - _1298.z = _1307; - float4 _1335; - if (_1258) + float2 _1287 = (_1203 * ((_1255 * 0.039999999105930328369140625) * Uniforms.uData[6].y)) * Uniforms.uData[0].zw; + float2 _1289 = fast::clamp(_1256 + _1287, float2(0.0), float2(1.0)); + float2 _1291 = fast::clamp(_1256 - _1287, float2(0.0), float2(1.0)); + float4 _1295 = Frost.sample(FrostSampler, _1289, level(0.0)); + float _1300 = _1260.w; + float _1301 = (_1295.x / precise::max(_1295.w, 9.9999997473787516355514526367188e-05)) * _1300; + float4 _1302 = _1260; + _1302.x = _1301; + float4 _1306 = Frost.sample(FrostSampler, _1291, level(0.0)); + float _1311 = (_1306.z / precise::max(_1306.w, 9.9999997473787516355514526367188e-05)) * _1300; + _1302.z = _1311; + float4 _1339; + if (_1262) { - float4 _1317 = Sharp.sample(SharpSampler, _1285, level(0.0)); - float4 _1324 = _1266; - _1324.x = (_1317.x / precise::max(_1317.w, 9.9999997473787516355514526367188e-05)) * _1266.w; - float4 _1328 = Sharp.sample(SharpSampler, _1287, level(0.0)); - _1324.z = (_1328.z / precise::max(_1328.w, 9.9999997473787516355514526367188e-05)) * _1266.w; - _1335 = _1324; + float4 _1321 = Sharp.sample(SharpSampler, _1289, level(0.0)); + float4 _1328 = _1270; + _1328.x = (_1321.x / precise::max(_1321.w, 9.9999997473787516355514526367188e-05)) * _1270.w; + float4 _1332 = Sharp.sample(SharpSampler, _1291, level(0.0)); + _1328.z = (_1332.z / precise::max(_1332.w, 9.9999997473787516355514526367188e-05)) * _1270.w; + _1339 = _1328; } else { - float4 _1312 = _1266; - _1312.x = _1297; - _1312.z = _1307; - _1335 = _1312; + float4 _1316 = _1270; + _1316.x = _1301; + _1316.z = _1311; + _1339 = _1316; } - _1336 = _1335; - _1337 = _1298; + _1340 = _1339; + _1341 = _1302; } else { - _1336 = _1266; - _1337 = _1256; + _1340 = _1270; + _1341 = _1260; } - bool _1339 = Uniforms.uData[4].x > 1.5; - float _1353; - if (_1339) + bool _1343 = Uniforms.uData[4].x > 1.5; + float _1357; + if (_1343) { - _1353 = Uniforms.uData[3].w; + _1357 = Uniforms.uData[3].w; } else { - float _1351; + float _1355; if (fmod(Uniforms.uData[6].x, 2.0) > 0.5) { - _1351 = 1.0; + _1355 = 1.0; } else { - _1351 = _1337.w; + _1355 = _1341.w; } - _1353 = _1351; + _1357 = _1355; } - float4 _1362 = float4(_1337.xyz / float3(precise::max(_1337.w, 9.9999997473787516355514526367188e-05)), 1.0); - float4 _1371 = float4(_1336.xyz / float3(precise::max(_1336.w, 9.9999997473787516355514526367188e-05)), 1.0); - float _1378; - if (_1339) + float4 _1366 = float4(_1341.xyz / float3(precise::max(_1341.w, 9.9999997473787516355514526367188e-05)), 1.0); + float4 _1375 = float4(_1340.xyz / float3(precise::max(_1340.w, 9.9999997473787516355514526367188e-05)), 1.0); + float _1382; + if (_1343) { - _1378 = 1.0; + _1382 = 1.0; } else { - _1378 = (Uniforms.uData[4].z > 0.5) ? Uniforms.uData[4].x : 0.0; + _1382 = (Uniforms.uData[4].z > 0.5) ? Uniforms.uData[4].x : 0.0; } - bool _1382; + bool _1386; if (_139) { - _1382 = !_1339; + _1386 = !_1343; } else { - _1382 = false; + _1386 = false; } - float _1391; - if (_1382) + float _1395; + if (_1386) { - _1391 = _1378 * (1.0 - ((_1250 * _1250) * (1.0 - smoothstep(0.800000011920928955078125, 1.0, _1378)))); + _1395 = _1382 * (1.0 - ((_1254 * _1254) * (1.0 - smoothstep(0.800000011920928955078125, 1.0, _1382)))); } else { - _1391 = _1378; + _1395 = _1382; } - float _1394 = 1.0 - _1391; - float _1402; + float _1398 = 1.0 - _1395; + float _1406; if (_139) { - _1402 = _1250; + _1406 = _1254; } else { - _1402 = _1210 * _1210; + _1406 = _1214 * _1214; } - float _1405 = fast::clamp(((Uniforms.uData[2].y * _1216) * _1402) * _1394, 0.0, 1.0); - float4 _1411 = ((_1371 * _1405) + ((mix(_1371, _1362, float4(fast::clamp(_1190.x, 0.0, 1.0))) * _1394) * (1.0 - _1405))) + (Uniforms.uData[3] * _1391); - float4 _1454; - if (_1339) + float _1409 = fast::clamp(((Uniforms.uData[2].y * _1220) * _1406) * _1398, 0.0, 1.0); + float4 _1415 = ((_1375 * _1409) + ((mix(_1375, _1366, float4(fast::clamp(_1194.x, 0.0, 1.0))) * _1398) * (1.0 - _1409))) + (Uniforms.uData[3] * _1395); + float4 _1458; + if (_1343) { - _1454 = float4(Uniforms.uData[3].xyz / float3(precise::max(Uniforms.uData[3].w, 9.9999997473787516355514526367188e-05)), 1.0); + _1458 = float4(Uniforms.uData[3].xyz / float3(precise::max(Uniforms.uData[3].w, 9.9999997473787516355514526367188e-05)), 1.0); } else { - float4 _1418 = _1411 + (_1362 * (1.0 - _1411.w)); - float4 _1444; + float4 _1422 = _1415 + (_1366 * (1.0 - _1415.w)); + float4 _1448; if (Uniforms.uData[7].w < 1.0) { - float3 _1423 = _1418.xyz; - float _1424 = dot(_1423, float3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); - float _1425 = 0.60000002384185791015625 * Uniforms.uData[7].w; - float _1427 = precise::max(Uniforms.uData[7].w - _1425, 9.9999997473787516355514526367188e-05); - float _1439; - if (_1424 <= _1425) + float3 _1427 = _1422.xyz; + float _1428 = dot(_1427, float3(0.2125999927520751953125, 0.715200006961822509765625, 0.072200000286102294921875)); + float _1429 = 0.60000002384185791015625 * Uniforms.uData[7].w; + float _1431 = precise::max(Uniforms.uData[7].w - _1429, 9.9999997473787516355514526367188e-05); + float _1443; + if (_1428 <= _1429) { - _1439 = _1424; + _1443 = _1428; } else { - _1439 = _1425 + (_1427 * (1.0 - exp((-(_1424 - _1425)) / _1427))); + _1443 = _1429 + (_1431 * (1.0 - exp((-(_1428 - _1429)) / _1431))); } - float3 _1442 = _1423 * (_1439 / precise::max(_1424, 9.9999997473787516355514526367188e-05)); - _1444 = float4(_1442.x, _1442.y, _1442.z, _1418.w); + float3 _1446 = _1427 * (_1443 / precise::max(_1428, 9.9999997473787516355514526367188e-05)); + _1448 = float4(_1446.x, _1446.y, _1446.z, _1422.w); } else { - _1444 = _1418; + _1448 = _1422; } - _1454 = _1444; + _1458 = _1448; } - float _1457 = dot(_1199, Uniforms.uData[9].xy); - float _1458 = precise::max(_1457, 0.0); - float _1460 = precise::max(-_1457, 0.0); - float _1463 = abs(_1457); - bool _1467; + float _1461 = dot(_1203, Uniforms.uData[9].xy); + float _1462 = precise::max(_1461, 0.0); + float _1464 = precise::max(-_1461, 0.0); + float _1467 = abs(_1461); + bool _1471; if (_139) { - _1467 = Uniforms.uData[6].z > 0.0; + _1471 = Uniforms.uData[6].z > 0.0; } else { - _1467 = false; + _1471 = false; } - bool _1469 = Uniforms.uData[10].x > 0.0; - float _1493; - if (_1469) + bool _1473 = Uniforms.uData[10].x > 0.0; + float _1497; + if (_1473) { - _1493 = 0.0; + _1497 = 0.0; } else { - float _1492; - if (_1467) + float _1496; + if (_1471) { - _1492 = (Uniforms.uData[6].z * (1.0 - smoothstep(0.20000000298023223876953125, 0.699999988079071044921875, _1463))) * exp((-precise::max(0.0, -_1176)) / (Uniforms.uData[2].z * 2.5)); + _1496 = (Uniforms.uData[6].z * (1.0 - smoothstep(0.20000000298023223876953125, 0.699999988079071044921875, _1467))) * exp((-precise::max(0.0, -_1180)) / (Uniforms.uData[2].z * 2.5)); } else { - _1492 = Uniforms.uData[8].x * (1.0 - smoothstep(0.0, Uniforms.uData[2].z * 0.625, -_1176)); + _1496 = Uniforms.uData[8].x * (1.0 - smoothstep(0.0, Uniforms.uData[2].z * 0.625, -_1180)); } - _1493 = _1492; + _1497 = _1496; } - float _1503; + float _1507; if (_139) { - _1503 = precise::max((Uniforms.uData[5].w * _1250) * _1250, _1493) * precise::min(_1216, 1.0); + _1507 = precise::max((Uniforms.uData[5].w * _1254) * _1254, _1497) * precise::min(_1220, 1.0); } else { - _1503 = 0.0; + _1507 = 0.0; } - float _1506 = _1353 * (1.0 - _1503); - float4 _1512 = float4(_1454.xyz * _1506, _1506 + _1503); - float _1534; + float _1510 = _1357 * (1.0 - _1507); + float4 _1516 = float4(_1458.xyz * _1510, _1510 + _1507); + float _1538; if (_139) { - float _1533; - if (_1467) + float _1537; + if (_1471) { - _1533 = Uniforms.uData[6].z * precise::max(smoothstep(0.75, 1.0, _1463), precise::max(_1204.x, _1204.y)); + _1537 = Uniforms.uData[6].z * precise::max(smoothstep(0.75, 1.0, _1467), precise::max(_1208.x, _1208.y)); } else { - _1533 = 0.25; + _1537 = 0.25; } - _1534 = _1533; + _1538 = _1537; } else { - _1534 = (0.449999988079071044921875 * ((_1458 * sqrt(_1458)) + ((0.75 * _1460) * sqrt(_1460)))) + 0.0599999986588954925537109375; + _1538 = (0.449999988079071044921875 * ((_1462 * sqrt(_1462)) + ((0.75 * _1464) * sqrt(_1464)))) + 0.0599999986588954925537109375; } - float _1561; - if (_1467) + float _1565; + if (_1471) { - _1561 = exp((-precise::max(0.0, -_1176)) / (Uniforms.uData[2].z * 1.25)); + _1565 = exp((-precise::max(0.0, -_1180)) / (Uniforms.uData[2].z * 1.25)); } else { - float _1555; + float _1559; if (_139) { - float _1548 = -_1176; - _1555 = smoothstep(Uniforms.uData[2].z * 0.3125, Uniforms.uData[2].z * 0.625, _1548) * (1.0 - smoothstep(Uniforms.uData[2].z * 1.5, Uniforms.uData[2].z * 2.0, _1548)); + float _1552 = -_1180; + _1559 = smoothstep(Uniforms.uData[2].z * 0.3125, Uniforms.uData[2].z * 0.625, _1552) * (1.0 - smoothstep(Uniforms.uData[2].z * 1.5, Uniforms.uData[2].z * 2.0, _1552)); } else { - _1555 = exp((-precise::max(0.0, -_1176)) / Uniforms.uData[2].z); + _1559 = exp((-precise::max(0.0, -_1180)) / Uniforms.uData[2].z); } - _1561 = _1555; + _1565 = _1559; } - float _1573; - if (_1469) + float _1577; + if (_1473) { - _1573 = 0.0; + _1577 = 0.0; } else { - float _1571; + float _1575; if (_139) { - _1571 = 0.0; + _1575 = 0.0; } else { - _1571 = (0.039999999105930328369140625 * exp(_1207 / Uniforms.uData[1].w)) * _1458; + _1575 = (0.039999999105930328369140625 * exp(_1211 / Uniforms.uData[1].w)) * _1462; } - _1573 = (_1561 * _1534) + _1571; + _1577 = (_1565 * _1538) + _1575; } - float2 _1574 = mix(_1127, _1126, _1200); - float _1578 = _1574.y; - float _1584 = fast::clamp((in.in_var_TEXCOORD0.y - (_1574.x - _1578)) / precise::max(2.0 * _1578, 9.9999997473787516355514526367188e-05), 0.0, 1.0); - float _1602; + float2 _1578 = mix(_1131, _1130, _1204); + float _1582 = _1578.y; + float _1588 = fast::clamp((in.in_var_TEXCOORD0.y - (_1578.x - _1582)) / precise::max(2.0 * _1582, 9.9999997473787516355514526367188e-05), 0.0, 1.0); + float _1606; if (Uniforms.uData[4].z > 0.5) { - _1602 = Uniforms.uData[4].y + ((Uniforms.uData[7].x + ((Uniforms.uData[7].y - Uniforms.uData[7].x) * _1584)) + (Uniforms.uData[7].z * (1.0 - smoothstep(0.0, 0.37999999523162841796875, _1584)))); + _1606 = Uniforms.uData[4].y + ((Uniforms.uData[7].x + ((Uniforms.uData[7].y - Uniforms.uData[7].x) * _1588)) + (Uniforms.uData[7].z * (1.0 - smoothstep(0.0, 0.37999999523162841796875, _1588)))); } else { - _1602 = 0.0; + _1606 = 0.0; } - float3 _1612 = _1512.xyz + float3(fast::clamp((_1602 + _1190.z) + ((_1216 * Uniforms.uData[2].w) * _1573), 0.0, 1.0)); - float4 _1684; - if (_1469) + float3 _1616 = _1516.xyz + float3(fast::clamp((_1606 + _1194.z) + ((_1220 * Uniforms.uData[2].w) * _1577), 0.0, 1.0)); + float4 _1688; + if (_1473) { - float2 _1622; - if (dot(_1199, _1199) > 9.9999999392252902907785028219223e-09) + float2 _1626; + if (dot(_1203, _1203) > 9.9999999392252902907785028219223e-09) { - _1622 = fast::normalize(_1199); + _1626 = fast::normalize(_1203); } else { - _1622 = float2(0.0); + _1626 = float2(0.0); } - float _1623 = dot(_1622, Uniforms.uData[9].xy); - float _1625 = mix(8.0, 1.0, Uniforms.uData[9].z); - float _1633 = powr(precise::max(_1623, 0.0), _1625) + (Uniforms.uData[9].w * powr(precise::max(-_1623, 0.0), _1625)); - float _1634 = precise::min(_1216, 1.0); - float _1641 = -_1176; - float _1643 = smoothstep(-0.5, 0.5, _1641); - float _1645 = -precise::max(0.0, _1641); - float3 _1682 = (_1612.xyz * (1.0 - (((Uniforms.uData[10].z * (1.0 - abs(_1623))) * (_1643 * exp(_1645 / precise::max(Uniforms.uData[2].z * 2.5, 0.001000000047497451305389404296875)))) * _1634))) + float3(_1634 * (((Uniforms.uData[10].x * precise::max(_1633, precise::max(_1204.x, Uniforms.uData[9].w * _1204.y))) * (_1643 * exp(_1645 / precise::max(Uniforms.uData[8].y, 0.001000000047497451305389404296875)))) + ((Uniforms.uData[10].y * _1633) * (smoothstep(Uniforms.uData[8].y - 0.5, Uniforms.uData[8].y + 0.5, _1641) * exp((-precise::max(0.0, _1641 - Uniforms.uData[8].y)) / precise::max(Uniforms.uData[8].z, 0.001000000047497451305389404296875)))))); - _1684 = float4(_1682.x, _1682.y, _1682.z, _1512.w); + float _1627 = dot(_1626, Uniforms.uData[9].xy); + float _1629 = mix(8.0, 1.0, Uniforms.uData[9].z); + float _1637 = powr(precise::max(_1627, 0.0), _1629) + (Uniforms.uData[9].w * powr(precise::max(-_1627, 0.0), _1629)); + float _1638 = precise::min(_1220, 1.0); + float _1645 = -_1180; + float _1647 = smoothstep(-0.5, 0.5, _1645); + float _1649 = -precise::max(0.0, _1645); + float3 _1686 = (_1616.xyz * (1.0 - (((Uniforms.uData[10].z * (1.0 - abs(_1627))) * (_1647 * exp(_1649 / precise::max(Uniforms.uData[2].z * 2.5, 0.001000000047497451305389404296875)))) * _1638))) + float3(_1638 * (((Uniforms.uData[10].x * precise::max(_1637, precise::max(_1208.x, Uniforms.uData[9].w * _1208.y))) * (_1647 * exp(_1649 / precise::max(Uniforms.uData[8].y, 0.001000000047497451305389404296875)))) + ((Uniforms.uData[10].y * _1637) * (smoothstep(Uniforms.uData[8].y - 0.5, Uniforms.uData[8].y + 0.5, _1645) * exp((-precise::max(0.0, _1645 - Uniforms.uData[8].y)) / precise::max(Uniforms.uData[8].z, 0.001000000047497451305389404296875)))))); + _1688 = float4(_1686.x, _1686.y, _1686.z, _1516.w); } else { - _1684 = float4(_1612.x, _1612.y, _1612.z, _1512.w); + _1688 = float4(_1616.x, _1616.y, _1616.z, _1516.w); } - float4 _1685 = fast::clamp(_1684, float4(0.0), float4(1.0)); - float _1692 = precise::max(_1685.w, precise::max(_1685.x, precise::max(_1685.y, _1685.z))); - float4 _1693 = _1685; - _1693.w = _1692; - float3 _1704 = _1693.xyz + float3(((fract(52.98291778564453125 * fract(dot(in.in_var_TEXCOORD0, float2(0.067110560834407806396484375, 0.005837149918079376220703125)))) - 0.5) * Uniforms.uData[5].x) * _1692); - _1708 = fast::clamp(float4(_1704.x, _1704.y, _1704.z, _1693.w), float4(0.0), float4(1.0)) * _1179; + float4 _1689 = fast::clamp(_1688, float4(0.0), float4(1.0)); + float _1696 = precise::max(_1689.w, precise::max(_1689.x, precise::max(_1689.y, _1689.z))); + float4 _1697 = _1689; + _1697.w = _1696; + float3 _1708 = _1697.xyz + float3(((fract(52.98291778564453125 * fract(dot(in.in_var_TEXCOORD0, float2(0.067110560834407806396484375, 0.005837149918079376220703125)))) - 0.5) * Uniforms.uData[5].x) * _1696); + _1712 = fast::clamp(float4(_1708.x, _1708.y, _1708.z, _1697.w), float4(0.0), float4(1.0)) * _1183; break; } while(false); - out.out_var_SV_Target0 = _1708; + out.out_var_SV_Target0 = _1712; return out; } diff --git a/backend/src/glass/shaders/compiled/spv/liquid_glass.fragment.spv b/backend/src/glass/shaders/compiled/spv/liquid_glass.fragment.spv index 1647a08d71f055e4dfd4ec41d129f840497e6444..d36a063dd5001a5739cb1ab9e5e1ac9df114c029 100644 GIT binary patch literal 38872 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 literal 38784 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 0.0) al = float2(alongEnd(p, s0, rad, g9.xy, g10.w, g8.w), alongEnd(p, s0, rad, -g9.xy, g10.w, g8.w)); if (d < d1) { d2 = d1; m2 = m1; h2 = h1; y2 = y1; al2 = al1; d1 = d; m1 = s2; h1 = hs; y1 = s0.yw; al1 = al; } else if (d < d2) { d2 = d; m2 = s2; h2 = hs; y2 = s0.yw; al2 = al; } float2 o; float f = d; - if (s2.w < 0.5) { + if (panel) { + f = panelDistance(p, g1.y, o); + } else if (s2.w < 0.5) { f = softBox(p, s0, g1.y, o); } else { o = g; } - if (panel) { - f = panelDistance(p, g1.y, o); - } if (f < f1) { f2 = f1; o2 = o1; f1 = f; o1 = o; } else if (f < f2) { f2 = f; o2 = o; } } // The place the glass belongs to (`LiquidField.edge`), in the last slot, flagged 2. Its outside diff --git a/docs/images/panel-seam-coverage.png b/docs/images/panel-seam-coverage.png new file mode 100644 index 0000000000000000000000000000000000000000..240acc6105583896fe9a21da3edeab79f8aa84ad GIT binary patch literal 18798 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 P5*7He{!bNJcH#dE0zyfa literal 0 HcmV?d00001