diff --git a/servers/rendering/renderer_rd/storage_rd/material_storage.cpp b/servers/rendering/renderer_rd/storage_rd/material_storage.cpp index a0fc977bd8f..6008a4d38f2 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: { @@ -789,7 +799,7 @@ void MaterialStorage::MaterialData::update_uniform_buffer(const HashMap