Merge pull request #101642 from huwpascoe/fix_source_color

Shaders: Fix `source_color` default value
This commit is contained in:
Rémi Verschelde 2025-02-05 11:33:54 +01:00
commit a9fa4fd7b9

View File

@ -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<ShaderLanguage::Scalar> &value, uint8_t *data) {
_FORCE_INLINE_ static void _fill_std140_ubo_value(ShaderLanguage::DataType type, const Vector<ShaderLanguage::Scalar> &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<float *>(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<float *>(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<StringNa
} else if (E.value.default_value.size()) {
//default value
_fill_std140_ubo_value(E.value.type, E.value.default_value, data);
_fill_std140_ubo_value(E.value.type, E.value.default_value, data, p_use_linear_color);
//value=E.value.default_value;
} else {
//zero because it was not provided