Sfoglia il codice sorgente

Make NavigationRegion3D baking NavMesh on the main thread not finish deferred

Makes NavigationRegion3D baking NavMesh on the main thread not finish deferred.

(cherry picked from commit bb5f16033dd377b465c5eaadbe35b6c1b4b3a082)
smix8 2 anni fa
parent
commit
605f1c0936
1 ha cambiato i file con 10 aggiunte e 2 eliminazioni
  1. 10 2
      scene/3d/navigation_region_3d.cpp

+ 10 - 2
scene/3d/navigation_region_3d.cpp

@@ -273,11 +273,19 @@ void _bake_navigation_mesh(void *p_user_data) {
 		Ref<NavigationMeshSourceGeometryData3D> source_geometry_data = args->source_geometry_data;
 
 		NavigationServer3D::get_singleton()->bake_from_source_geometry_data(nav_mesh, source_geometry_data);
-		args->nav_region->call_deferred(SNAME("_bake_finished"), nav_mesh);
+		if (!Thread::is_main_thread()) {
+			args->nav_region->call_deferred(SNAME("_bake_finished"), nav_mesh);
+		} else {
+			args->nav_region->_bake_finished(nav_mesh);
+		}
 		memdelete(args);
 	} else {
 		ERR_PRINT("Can't bake the navigation mesh if the `NavigationMesh` resource doesn't exist");
-		args->nav_region->call_deferred(SNAME("_bake_finished"), Ref<NavigationMesh>());
+		if (!Thread::is_main_thread()) {
+			args->nav_region->call_deferred(SNAME("_bake_finished"), Ref<NavigationMesh>());
+		} else {
+			args->nav_region->_bake_finished(Ref<NavigationMesh>());
+		}
 		memdelete(args);
 	}
 }