From 9554c78f3adc9846b76e9d3b96af06e98fb69aa0 Mon Sep 17 00:00:00 2001 From: Bingus Date: Tue, 6 Jun 2023 17:06:40 -0700 Subject: Updated color packing into u32 to consider incorrect web-colors. --- wgpu/src/shader/quad.wgsl | 29 +++++++++++------------------ wgpu/src/shader/triangle.wgsl | 29 +++++++++++------------------ 2 files changed, 22 insertions(+), 36 deletions(-) (limited to 'wgpu/src/shader') diff --git a/wgpu/src/shader/quad.wgsl b/wgpu/src/shader/quad.wgsl index fdcc6743..5a1237e6 100644 --- a/wgpu/src/shader/quad.wgsl +++ b/wgpu/src/shader/quad.wgsl @@ -38,17 +38,10 @@ fn select_border_radius(radi: vec4, position: vec2, center: vec2) return rx; } -fn l(c: f32) -> f32 { - if (c < 0.04045) { - return c / 12.92; - } else { - return pow(((c + 0.055) / 1.055), 2.4); - }; -} +fn unpack_u32(color: u32) -> vec4 { + let u = unpack4x8unorm(color); -fn to_linear(color: u32) -> vec4 { - let c = unpack4x8unorm(color); //unpacks as a b g r - return vec4(l(c.w), l(c.z), l(c.y), c.x); + return vec4(u.w, u.z, u.y, u.x); } struct SolidVertexInput { @@ -269,14 +262,14 @@ fn gradient( @fragment fn gradient_fs_main(input: GradientVertexOutput) -> @location(0) vec4 { let colors = array, 8>( - to_linear(input.colors_1.x), - to_linear(input.colors_1.y), - to_linear(input.colors_1.z), - to_linear(input.colors_1.w), - to_linear(input.colors_2.x), - to_linear(input.colors_2.y), - to_linear(input.colors_2.z), - to_linear(input.colors_2.w), + unpack_u32(input.colors_1.x), + unpack_u32(input.colors_1.y), + unpack_u32(input.colors_1.z), + unpack_u32(input.colors_1.w), + unpack_u32(input.colors_2.x), + unpack_u32(input.colors_2.y), + unpack_u32(input.colors_2.z), + unpack_u32(input.colors_2.w), ); var offsets = array( diff --git a/wgpu/src/shader/triangle.wgsl b/wgpu/src/shader/triangle.wgsl index 5a73a77f..f1bb2733 100644 --- a/wgpu/src/shader/triangle.wgsl +++ b/wgpu/src/shader/triangle.wgsl @@ -4,17 +4,10 @@ struct Globals { @group(0) @binding(0) var globals: Globals; -fn l(c: f32) -> f32 { - if (c < 0.04045) { - return c / 12.92; - } else { - return pow(((c + 0.055) / 1.055), 2.4); - }; -} +fn unpack_u32(color: u32) -> vec4 { + let u = unpack4x8unorm(color); -fn to_linear(color: u32) -> vec4 { - let c = unpack4x8unorm(color); //unpacks as a b g r - return vec4(l(c.w), l(c.z), l(c.y), c.x); + return vec4(u.w, u.z, u.y, u.x); } struct SolidVertexInput { @@ -130,14 +123,14 @@ fn gradient( @fragment fn gradient_fs_main(input: GradientVertexOutput) -> @location(0) vec4 { let colors = array, 8>( - to_linear(input.colors_1.x), - to_linear(input.colors_1.y), - to_linear(input.colors_1.z), - to_linear(input.colors_1.w), - to_linear(input.colors_2.x), - to_linear(input.colors_2.y), - to_linear(input.colors_2.z), - to_linear(input.colors_2.w), + unpack_u32(input.colors_1.x), + unpack_u32(input.colors_1.y), + unpack_u32(input.colors_1.z), + unpack_u32(input.colors_1.w), + unpack_u32(input.colors_2.x), + unpack_u32(input.colors_2.y), + unpack_u32(input.colors_2.z), + unpack_u32(input.colors_2.w), ); var offsets = array( -- cgit