Просмотр исходного кода

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 лет назад
Родитель
Сommit
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);
 	}
 }