Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rounded border: remove dead code in shader #12602

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
141 changes: 0 additions & 141 deletions crates/bevy_ui/src/render/ui.wgsl
Expand Up @@ -62,10 +62,6 @@ fn vertex(
@group(1) @binding(0) var sprite_texture: texture_2d<f32>;
@group(1) @binding(1) var sprite_sampler: sampler;

fn sigmoid(t: f32) -> f32 {
return 1.0 / (1.0 + exp(-t));
}

// The returned value is the shortest distance from the given point to the boundary of the rounded
// box.
//
Expand Down Expand Up @@ -124,143 +120,6 @@ fn sd_inset_rounded_box(point: vec2<f32>, size: vec2<f32>, radius: vec4<f32>, in
return sd_rounded_box(inner_point, inner_size, r);
}

#ifdef CLAMP_INNER_CURVES
fn sd_inset_rounded_box(point: vec2<f32>, size: vec2<f32>, radius: vec4<f32>, inset: vec4<f32>) -> f32 {
let inner_size = size - inset.xy - inset.zw;
let inner_center = inset.xy + 0.5 * inner_size - 0.5 * size;
let inner_point = point - inner_center;

var r = radius;

if 0. < min(inset.x, inset.y) || inset.x + inset.y <= 0. {
// Top left corner.
r.x = r.x - max(inset.x, inset.y);
} else {
r.x = 0.;
}

if 0. < min(inset.z, inset.y) || inset.z + inset.y <= 0. {
// Top right corner.
r.y = r.y - max(inset.z, inset.y);
} else {
r.y = 0.;
}

if 0. < min(inset.z, inset.w) || inset.z + inset.w <= 0. {
// Bottom right corner.
r.z = r.z - max(inset.z, inset.w);
} else {
r.z = 0.;
}

if 0. < min(inset.x, inset.w) || inset.x + inset.w <= 0. {
// Bottom left corner.
r.w = r.w - max(inset.x, inset.w);
} else {
r.w = 0.;
}

let half_size = inner_size * 0.5;
let min = min(half_size.x, half_size.y);

r = min(max(r, vec4<f32>(0.0)), vec4<f32>(min));

return sd_rounded_box(inner_point, inner_size, r);
}
#endif

const RED: vec4<f32> = vec4<f32>(1., 0., 0., 1.);
const GREEN: vec4<f32> = vec4<f32>(0., 1., 0., 1.);
const BLUE: vec4<f32> = vec4<f32>(0., 0., 1., 1.);
const WHITE = vec4<f32>(1., 1., 1., 1.);
const BLACK = vec4<f32>(0., 0., 0., 1.);

// Draw the border in white, rest of the rect black.
fn draw_border(in: VertexOutput) -> vec4<f32> {
// Distance from external border. Positive values outside.
let external_distance = sd_rounded_box(in.point, in.size, in.radius);

// Distance from internal border. Positive values inside.
let internal_distance = sd_inset_rounded_box(in.point, in.size, in.radius, in.border);

// Distance from border, positive values inside border.
let border = max(-internal_distance, external_distance);

if border < 0.0 {
return WHITE;
} else {
return BLACK;
}
}

// Draw just the interior in white, rest of the rect black.
fn draw_interior(in: VertexOutput) -> vec4<f32> {
// Distance from external border. Positive values outside.
let external_distance = sd_rounded_box(in.point, in.size, in.radius);

if external_distance < 0.0 {
return WHITE;
} else {
return BLACK;
}
}

// Draw all the geometry.
fn draw_test(in: VertexOutput) -> vec4<f32> {
// Distance from external border. Negative inside
let external_distance = sd_rounded_box(in.point, in.size, in.radius);

// Distance from internal border.
let internal_distance = sd_inset_rounded_box(in.point, in.size, in.radius, in.border);

// Distance from border.
let border = max(-internal_distance, external_distance);

// Draw the area outside the border in green.
if 0.0 < external_distance {
return GREEN;
}

// Draw the area inside the border in white.
if border < 0.0 {
return WHITE;
}

// Draw the interior in blue.
if internal_distance < 0.0 {
return BLUE;
}

// Fill anything else with red (the presence of any red is a bug).
return RED;
}

fn draw_no_aa(in: VertexOutput) -> vec4<f32> {
let texture_color = textureSample(sprite_texture, sprite_sampler, in.uv);
let color = select(in.color, in.color * texture_color, enabled(in.flags, TEXTURED));

// Negative value => point inside external border.
let external_distance = sd_rounded_box(in.point, in.size, in.radius);
// Negative value => point inside internal border.
let internal_distance = sd_inset_rounded_box(in.point, in.size, in.radius, in.border);
// Negative value => point inside border.
let border = max(external_distance, -internal_distance);

if enabled(in.flags, BORDER) {
if border < 0.0 {
return color;
} else {
return vec4(0.0);
}
}

if external_distance < 0.0 {
return color;
}

return vec4(0.0);
}

fn draw(in: VertexOutput) -> vec4<f32> {
let texture_color = textureSample(sprite_texture, sprite_sampler, in.uv);

Expand Down