Skip to content

Commit d97948d

Browse files
committed
Shader: Fix the default behavior when mat uniforms are null
1 parent 34f005d commit d97948d

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

drivers/gles3/storage/material_storage.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,13 @@ void MaterialData::update_uniform_buffer(const HashMap<StringName, ShaderLanguag
779779
} else if ((E.value.type == ShaderLanguage::TYPE_VEC3 || E.value.type == ShaderLanguage::TYPE_VEC4) && E.value.hint == ShaderLanguage::ShaderNode::Uniform::HINT_COLOR_CONVERSION_DISABLED) {
780780
//colors must be set as black, with alpha as 1.0
781781
_fill_std140_variant_ubo_value(E.value.type, E.value.array_size, Color(0, 0, 0, 1), data);
782+
} else if (E.value.type == ShaderLanguage::TYPE_MAT2) {
783+
// mat uniforms are identity matrix by default.
784+
_fill_std140_variant_ubo_value(E.value.type, E.value.array_size, Transform2D(), data);
785+
} else if (E.value.type == ShaderLanguage::TYPE_MAT3) {
786+
_fill_std140_variant_ubo_value(E.value.type, E.value.array_size, Transform3D(), data);
787+
} else if (E.value.type == ShaderLanguage::TYPE_MAT4) {
788+
_fill_std140_variant_ubo_value(E.value.type, E.value.array_size, Projection(), data);
782789
} else {
783790
//else just zero it out
784791
_fill_std140_ubo_empty(E.value.type, E.value.array_size, data);

servers/rendering/renderer_rd/storage_rd/material_storage.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,13 @@ void MaterialStorage::MaterialData::update_uniform_buffer(const HashMap<StringNa
812812
_fill_std140_variant_ubo_value(E.value.type, E.value.array_size, Color(0, 0, 0, 1), data, p_use_linear_color);
813813
} else if ((E.value.type == ShaderLanguage::TYPE_VEC3 || E.value.type == ShaderLanguage::TYPE_VEC4) && E.value.hint == ShaderLanguage::ShaderNode::Uniform::HINT_COLOR_CONVERSION_DISABLED) {
814814
_fill_std140_variant_ubo_value(E.value.type, E.value.array_size, Color(0, 0, 0, 1), data, false);
815+
} else if (E.value.type == ShaderLanguage::TYPE_MAT2) {
816+
// mat uniforms are identity matrix by default.
817+
_fill_std140_variant_ubo_value(E.value.type, E.value.array_size, Transform2D(), data, false);
818+
} else if (E.value.type == ShaderLanguage::TYPE_MAT3) {
819+
_fill_std140_variant_ubo_value(E.value.type, E.value.array_size, Transform3D(), data, false);
820+
} else if (E.value.type == ShaderLanguage::TYPE_MAT4) {
821+
_fill_std140_variant_ubo_value(E.value.type, E.value.array_size, Projection(), data, false);
815822
} else {
816823
//else just zero it out
817824
_fill_std140_ubo_empty(E.value.type, E.value.array_size, data);

0 commit comments

Comments
 (0)