From 860a6ab9ac57056a11cb913aef9eff75e85810f6 Mon Sep 17 00:00:00 2001 From: yesfish Date: Thu, 16 Jan 2025 16:07:25 +0000 Subject: [PATCH] fix source_color default value --- .../storage_rd/material_storage.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/servers/rendering/renderer_rd/storage_rd/material_storage.cpp b/servers/rendering/renderer_rd/storage_rd/material_storage.cpp index 25adf0c9db3d..b88005c13b84 100644 --- a/servers/rendering/renderer_rd/storage_rd/material_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/material_storage.cpp @@ -344,7 +344,7 @@ static void _fill_std140_variant_ubo_value(ShaderLanguage::DataType type, int p_ } } -_FORCE_INLINE_ static void _fill_std140_ubo_value(ShaderLanguage::DataType type, const Vector &value, uint8_t *data) { +_FORCE_INLINE_ static void _fill_std140_ubo_value(ShaderLanguage::DataType type, const Vector &value, uint8_t *data, bool p_use_linear_color) { switch (type) { case ShaderLanguage::TYPE_BOOL: { uint32_t *gui = (uint32_t *)data; @@ -441,18 +441,28 @@ _FORCE_INLINE_ static void _fill_std140_ubo_value(ShaderLanguage::DataType type, } break; case ShaderLanguage::TYPE_VEC3: { + Color c = Color(value[0].real, value[1].real, value[2].real); + if (p_use_linear_color) { + c = c.srgb_to_linear(); + } + float *gui = reinterpret_cast(data); for (int i = 0; i < 3; i++) { - gui[i] = value[i].real; + gui[i] = c.components[i]; } } break; case ShaderLanguage::TYPE_VEC4: { + Color c = Color(value[0].real, value[1].real, value[2].real, value[3].real); + if (p_use_linear_color) { + c = c.srgb_to_linear(); + } + float *gui = reinterpret_cast(data); for (int i = 0; i < 4; i++) { - gui[i] = value[i].real; + gui[i] = c.components[i]; } } break; case ShaderLanguage::TYPE_MAT2: { @@ -786,7 +796,7 @@ void MaterialStorage::MaterialData::update_uniform_buffer(const HashMap