From 26ec23f4bac38ff836f1c9b9d7ab1bb3b3150172 Mon Sep 17 00:00:00 2001 From: slime Date: Tue, 20 Sep 2022 19:13:12 -0300 Subject: [PATCH] vulkan: convert clear colors from sRGB to linear when gamma-correct rendering is on --- src/modules/graphics/vulkan/Graphics.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/modules/graphics/vulkan/Graphics.cpp b/src/modules/graphics/vulkan/Graphics.cpp index 3784cbcf2..14e5e8b4a 100644 --- a/src/modules/graphics/vulkan/Graphics.cpp +++ b/src/modules/graphics/vulkan/Graphics.cpp @@ -121,11 +121,14 @@ void Graphics::clear(OptionalColorD color, OptionalInt stencil, OptionalDouble d if (color.hasValue) { + Colorf cf((float)color.value.r, (float)color.value.g, (float)color.value.b, (float)color.value.a); + gammaCorrectColor(cf); + attachment.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - attachment.clearValue.color.float32[0] = static_cast(color.value.r); - attachment.clearValue.color.float32[1] = static_cast(color.value.g); - attachment.clearValue.color.float32[2] = static_cast(color.value.b); - attachment.clearValue.color.float32[3] = static_cast(color.value.a); + attachment.clearValue.color.float32[0] = static_cast(cf.r); + attachment.clearValue.color.float32[1] = static_cast(cf.g); + attachment.clearValue.color.float32[2] = static_cast(cf.b); + attachment.clearValue.color.float32[3] = static_cast(cf.a); } VkClearAttachment depthStencilAttachment{}; @@ -168,11 +171,14 @@ void Graphics::clear(const std::vector &colors, OptionalInt sten VkClearAttachment attachment{}; if (color.hasValue) { + Colorf cf((float)color.value.r, (float)color.value.g, (float)color.value.b, (float)color.value.a); + gammaCorrectColor(cf); + attachment.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - attachment.clearValue.color.float32[0] = static_cast(color.value.r); - attachment.clearValue.color.float32[1] = static_cast(color.value.g); - attachment.clearValue.color.float32[2] = static_cast(color.value.b); - attachment.clearValue.color.float32[3] = static_cast(color.value.a); + attachment.clearValue.color.float32[0] = static_cast(cf.r); + attachment.clearValue.color.float32[1] = static_cast(cf.g); + attachment.clearValue.color.float32[2] = static_cast(cf.b); + attachment.clearValue.color.float32[3] = static_cast(cf.a); } attachments.push_back(attachment); }