Browse Source

Fixed incorrect ERROR message when setting new PrimitiveMesh

If calling set_mesh with a PrimitiveMesh that has pending update, the
_mesh_changed function would be called twice. The first time before
set_base had been called, which could lead to an ERROR message about
trying to set an invalid surface override material.

(cherry picked from commit 007b488a5c23b33c6e0b741b55a482e5229f2b90)
Johan Aires Rastén 2 năm trước cách đây
mục cha
commit
d229ca2f27
1 tập tin đã thay đổi với 3 bổ sung1 xóa
  1. 3 1
      scene/3d/mesh_instance_3d.cpp

+ 3 - 1
scene/3d/mesh_instance_3d.cpp

@@ -117,8 +117,10 @@ void MeshInstance3D::set_mesh(const Ref<Mesh> &p_mesh) {
 	mesh = p_mesh;
 
 	if (mesh.is_valid()) {
-		mesh->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &MeshInstance3D::_mesh_changed));
+		// If mesh is a PrimitiveMesh, calling get_rid on it can trigger a changed callback
+		// so do this before connecting _mesh_changed.
 		set_base(mesh->get_rid());
+		mesh->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &MeshInstance3D::_mesh_changed));
 		_mesh_changed();
 	} else {
 		blend_shape_tracks.clear();