From ff5636c6f60ca1be67fb75dde72b02da1cc8c6b9 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Sat, 21 May 2022 12:40:29 -0700 Subject: [PATCH] examples/gkurve: adjust frag shader to show barycentric coordinates Signed-off-by: Stephen Gutekanst --- examples/gkurve/frag.wgsl | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/examples/gkurve/frag.wgsl b/examples/gkurve/frag.wgsl index c3887ed2..fd2dfd0f 100755 --- a/examples/gkurve/frag.wgsl +++ b/examples/gkurve/frag.wgsl @@ -6,14 +6,13 @@ struct FragUniform { @stage(fragment) fn main( @location(0) uv: vec2, - @interpolate(linear) @location(1) bary: vec3, + @interpolate(linear) @location(1) bary: vec2, @interpolate(flat) @location(2) triangle_index: u32, ) -> @location(0) vec4 { // Example 1: Visualize barycentric coordinates: - // return vec4(bary.x, bary.y, bary.z, 1.0); - // return vec4(0.0, bary.x, 0.0, 1.0); // bottom-left of triangle - // return vec4(0.0, bary.y, 0.0, 1.0); // bottom-right of triangle - // return vec4(0.0, bary.z, 0.0, 1.0); // top of triangle + // return vec4(bary.x, bary.y, 0.0, 1.0); + // return vec4(0.0, bary.x, 0.0, 1.0); // [1.0 (bottom-left vertex), 0.0 (bottom-right vertex)] + // return vec4(0.0, bary.y, 0.0, 1.0); // [1.0 (bottom-left vertex), 1.0 (top-right face)] // Example 2: Render gkurve primitives var inversion = -1.0; @@ -28,21 +27,19 @@ struct FragUniform { inversion = 1.0; } - // Gradients - let px = dpdx(bary.xy); - let py = dpdy(bary.xy); + // Gradients + let px = dpdx(bary.xy); + let py = dpdy(bary.xy); - // Chain rule - let fx = (2.0 * bary.x) * px.x - px.y; - let fy = (2.0 * bary.x) * py.x - py.y; + // Chain rule + let fx = (2.0 * bary.x) * px.x - px.y; + let fy = (2.0 * bary.x) * py.x - py.y; - // Signed distance - var dist = (bary.x * bary.x - bary.y) / sqrt(fx * fx + fy * fy); - // var dist = bary.z*bary.z - bary.y; + // Signed distance + var dist = (bary.x * bary.x - bary.y) / sqrt(fx * fx + fy * fy); dist *= inversion; - dist /= 128.0; - dist /= 1.75; + dist /= 300.0; // Border rendering. if (dist > 0.0 && dist <= 0.1) { return vec4(1.0, 0.0, 0.0, 1.0); }