wgpu: Clamp alpha in shaders (fix #6954)
This commit is contained in:
parent
cab49ae6e1
commit
121c2577b4
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue