wgpu: Clamp alpha in shaders (fix #6954)

This commit is contained in:
Mike Welsh 2022-05-12 11:46:52 -07:00
parent cab49ae6e1
commit 121c2577b4
3 changed files with 9 additions and 6 deletions

View File

@ -28,7 +28,8 @@ fn main_fragment(in: VertexOutput) -> [[location(0)]] vec4<f32> {
if( color.a > 0.0 ) { if( color.a > 0.0 ) {
color = vec4<f32>(color.rgb / color.a, color.a); color = vec4<f32>(color.rgb / color.a, color.a);
color = color * transforms.mult_color + transforms.add_color; color = color * transforms.mult_color + transforms.add_color;
color = vec4<f32>(color.rgb * color.a, color.a); let alpha = clamp(color.a, 0.0, 1.0);
color = vec4<f32>(color.rgb * alpha, alpha);
} }
return color; return color;
} }

View File

@ -7,12 +7,13 @@ struct VertexOutput {
[[stage(vertex)]] [[stage(vertex)]]
fn main_vertex(in: VertexInput) -> VertexOutput { fn main_vertex(in: VertexInput) -> VertexOutput {
let pos: vec4<f32> = globals.view_matrix * transforms.world_matrix * vec4<f32>(in.position.x, in.position.y, 0.0, 1.0); let pos = globals.view_matrix * transforms.world_matrix * vec4<f32>(in.position.x, in.position.y, 0.0, 1.0);
return VertexOutput(pos, in.color); let color = in.color * transforms.mult_color + transforms.add_color;
let alpha = clamp(color.a, 0.0, 1.0);
return VertexOutput(pos, vec4<f32>(color.rgb * alpha, alpha));
} }
[[stage(fragment)]] [[stage(fragment)]]
fn main_fragment(in: VertexOutput) -> [[location(0)]] vec4<f32> { fn main_fragment(in: VertexOutput) -> [[location(0)]] vec4<f32> {
let out = in.color * transforms.mult_color + transforms.add_color; return in.color;
return vec4<f32>(out.rgb * out.a, out.a);
} }

View File

@ -102,5 +102,6 @@ fn main_fragment(in: VertexOutput) -> [[location(0)]] vec4<f32> {
color = linear_to_srgb(color); color = linear_to_srgb(color);
} }
let out = color * transforms.mult_color + transforms.add_color; let out = color * transforms.mult_color + transforms.add_color;
return vec4<f32>(out.rgb * out.a, out.a); let alpha = clamp(out.a, 0.0, 1.0);
return vec4<f32>(out.rgb * alpha, alpha);
} }