diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index b2567e431b253d..26fa4a19c80767 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -324,6 +324,28 @@ void ShaderMaterial::_get_property_list(List *p_list) const { is_uniform_type_compatible = E->get().type == cached.get_type(); } +#ifndef DISABLE_DEPRECATED + // PackedFloat32Array -> PackedVector4Array conversion. + if (!is_uniform_type_compatible && E->get().type == Variant::PACKED_VECTOR4_ARRAY && cached.get_type() == Variant::PACKED_FLOAT32_ARRAY) { + PackedVector4Array varray; + PackedFloat32Array array = (PackedFloat32Array)cached; + + for (int i = 0; i < array.size(); i += 4) { + Vector4 v = Vector4(); + + v.x = array[i]; + v.y = (i + 1 < array.size()) ? array[i + 1] : 0.0f; + v.z = (i + 2 < array.size()) ? array[i + 2] : 0.0f; + v.w = (i + 3 < array.size()) ? array[i + 3] : 0.0f; + + varray.push_back(v); + } + + param_cache.insert(E->get().name, varray); + is_uniform_type_compatible = true; + } +#endif + if (is_uniform_type_compatible && E->get().type == Variant::OBJECT && cached.get_type() == Variant::OBJECT) { // Check if the Object class (hint string) changed, for example Texture2D sampler to Texture3D. // Allow inheritance, Texture2D type sampler should also accept CompressedTexture2D. diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp index 1e9690a8ae458d..5b4931edec5a74 100644 --- a/servers/rendering/shader_language.cpp +++ b/servers/rendering/shader_language.cpp @@ -3982,12 +3982,9 @@ Variant ShaderLanguage::constant_value_to_variant(const Vector