Define premultiply helper for quad shaders
This commit is contained in:
parent
469261e5a6
commit
9ac4c9f13d
3 changed files with 9 additions and 7 deletions
|
|
@ -5,6 +5,10 @@ struct Globals {
|
|||
|
||||
@group(0) @binding(0) var<uniform> globals: Globals;
|
||||
|
||||
fn premultiply(color: vec4<f32>) -> vec4<f32> {
|
||||
return vec4(color.xyz * color.a, color.a);
|
||||
}
|
||||
|
||||
fn blend(over: vec4<f32>, under: vec4<f32>, alpha: f32) -> vec4<f32> {
|
||||
return over * alpha + under * (1.0 - alpha);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ fn gradient_vs_main(input: GradientVertexInput) -> GradientVertexOutput {
|
|||
out.offsets = input.offsets;
|
||||
out.direction = input.direction * globals.scale;
|
||||
out.position_and_scale = vec4<f32>(pos, scale);
|
||||
out.border_color = vec4(input.border_color.xyz * input.border_color.a, input.border_color.a);
|
||||
out.border_color = premultiply(input.border_color);
|
||||
out.border_radius = border_radius * globals.scale;
|
||||
out.border_width = input.border_width * globals.scale;
|
||||
|
||||
|
|
@ -198,9 +198,7 @@ fn gradient_fs_main(input: GradientVertexOutput) -> @location(0) vec4<f32> {
|
|||
}
|
||||
|
||||
fn unpack_color(data: vec2<u32>) -> vec4<f32> {
|
||||
let color = unpack_u32(data);
|
||||
|
||||
return vec4(color.xyz * color.a, color.a);
|
||||
return premultiply(unpack_u32(data));
|
||||
}
|
||||
|
||||
fn unpack_u32(data: vec2<u32>) -> vec4<f32> {
|
||||
|
|
|
|||
|
|
@ -56,13 +56,13 @@ fn solid_vs_main(input: SolidVertexInput) -> SolidVertexOutput {
|
|||
);
|
||||
|
||||
out.position = globals.transform * transform * vec4<f32>(vertex_position(input.vertex_index), 0.0, 1.0);
|
||||
out.color = vec4(input.color.xyz * input.color.a, input.color.a);
|
||||
out.border_color = vec4(input.border_color.xyz * input.border_color.a, input.border_color.a);
|
||||
out.color = premultiply(input.color);
|
||||
out.border_color = premultiply(input.border_color);
|
||||
out.pos = input.pos * globals.scale + snap;
|
||||
out.scale = input.scale * globals.scale;
|
||||
out.border_radius = border_radius * globals.scale;
|
||||
out.border_width = input.border_width * globals.scale;
|
||||
out.shadow_color = vec4(input.shadow_color.xyz, input.shadow_color.a);
|
||||
out.shadow_color = premultiply(input.shadow_color);
|
||||
out.shadow_offset = input.shadow_offset * globals.scale;
|
||||
out.shadow_blur_radius = input.shadow_blur_radius * globals.scale;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue