|
@@ -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: {
|
|
@@ -786,7 +796,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
|