Преглед изворни кода

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 година
родитељ
комит
605f1c0936
1 измењених фајлова са 10 додато и 2 уклоњено
  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);
 	}
 }