浏览代码

Fix mesh instance materials not initialized correctly

This fixes a regression from PR #40313 (support for software skinning in MeshInstance).

Before, the base mesh was always updated on load even if not skinning
was used, which caused mesh instance materials to be reset on the
rendering side.

Now the base mesh is set only when it has been modified, or when
switching software skinning on or off. In this case the mesh instance
materials are always updated properly afterwards.
PouleyKetchoupp 4 年之前
父节点
当前提交
5c831bc8d6
共有 1 个文件被更改,包括 2 次插入2 次删除
  1. 2 2
      scene/3d/mesh_instance.cpp

+ 2 - 2
scene/3d/mesh_instance.cpp

@@ -355,9 +355,9 @@ void MeshInstance::_initialize_skinning(bool p_force_reset) {
 	}
 
 	RID render_mesh = software_skinning ? software_skinning->mesh_instance->get_rid() : mesh->get_rid();
-	set_base(render_mesh);
+	if (update_mesh || (render_mesh != get_base())) {
+		set_base(render_mesh);
 
-	if (update_mesh) {
 		// Update instance materials after switching mesh.
 		int surface_count = mesh->get_surface_count();
 		for (int surface_index = 0; surface_index < surface_count; ++surface_index) {