Kaynağa Gözat

Effectively ensure that surface materials are the right size when setting them, fixes #23596

Juan Linietsky 6 yıl önce
ebeveyn
işleme
555fb3a317

+ 3 - 0
scene/resources/primitive_meshes.cpp

@@ -102,6 +102,9 @@ void PrimitiveMesh::_request_update() {
 }
 
 int PrimitiveMesh::get_surface_count() const {
+	if (pending_request) {
+		_update();
+	}
 	return 1;
 }
 

+ 3 - 2
servers/visual/visual_server_scene.cpp

@@ -601,8 +601,9 @@ void VisualServerScene::instance_set_surface_material(RID p_instance, int p_surf
 	Instance *instance = instance_owner.get(p_instance);
 	ERR_FAIL_COND(!instance);
 
-	if (instance->update_item.in_list()) {
-		_update_dirty_instance(instance);
+	if (instance->base_type == VS::INSTANCE_MESH) {
+		//may not have been updated yet
+		instance->materials.resize(VSG::storage->mesh_get_surface_count(instance->base));
 	}
 
 	ERR_FAIL_INDEX(p_surface, instance->materials.size());