You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
[Navigation] Create a dedicated 2D navigation server
* Add a dedicated 2D server * Create dedicated tests * Split performance metrics between 2D and 3D * Rename the 3D only server module
This commit is contained in:
@@ -754,7 +754,7 @@ Error Main::test_setup() {
|
||||
// Default theme will be initialized later, after modules and ScriptServer are ready.
|
||||
initialize_theme_db();
|
||||
|
||||
NavigationServer3DManager::initialize_server(); // 3D server first because 2D depends on it.
|
||||
NavigationServer3DManager::initialize_server();
|
||||
NavigationServer2DManager::initialize_server();
|
||||
|
||||
register_scene_types();
|
||||
@@ -839,7 +839,7 @@ void Main::test_cleanup() {
|
||||
|
||||
finalize_theme_db();
|
||||
|
||||
NavigationServer2DManager::finalize_server(); // 2D goes first as it uses the 3D server behind the scene.
|
||||
NavigationServer2DManager::finalize_server();
|
||||
NavigationServer3DManager::finalize_server();
|
||||
|
||||
GDExtensionManager::get_singleton()->deinitialize_extensions(GDExtension::INITIALIZATION_LEVEL_SERVERS);
|
||||
@@ -3498,7 +3498,7 @@ Error Main::setup2(bool p_show_boot_logo) {
|
||||
|
||||
MAIN_PRINT("Main: Load Navigation");
|
||||
|
||||
NavigationServer3DManager::initialize_server(); // 3D server first because 2D depends on it.
|
||||
NavigationServer3DManager::initialize_server();
|
||||
NavigationServer2DManager::initialize_server();
|
||||
|
||||
register_scene_types();
|
||||
@@ -4104,12 +4104,16 @@ int Main::start() {
|
||||
}
|
||||
if (debug_navigation) {
|
||||
sml->set_debug_navigation_hint(true);
|
||||
NavigationServer2D::get_singleton()->set_debug_navigation_enabled(true);
|
||||
NavigationServer3D::get_singleton()->set_debug_navigation_enabled(true);
|
||||
}
|
||||
if (debug_avoidance) {
|
||||
NavigationServer2D::get_singleton()->set_debug_avoidance_enabled(true);
|
||||
NavigationServer3D::get_singleton()->set_debug_avoidance_enabled(true);
|
||||
}
|
||||
if (debug_navigation || debug_avoidance) {
|
||||
NavigationServer2D::get_singleton()->set_active(true);
|
||||
NavigationServer2D::get_singleton()->set_debug_enabled(true);
|
||||
NavigationServer3D::get_singleton()->set_active(true);
|
||||
NavigationServer3D::get_singleton()->set_debug_enabled(true);
|
||||
}
|
||||
@@ -4604,6 +4608,7 @@ bool Main::iteration() {
|
||||
|
||||
uint64_t navigation_begin = OS::get_singleton()->get_ticks_usec();
|
||||
|
||||
NavigationServer2D::get_singleton()->process(physics_step * time_scale);
|
||||
NavigationServer3D::get_singleton()->process(physics_step * time_scale);
|
||||
|
||||
navigation_process_ticks = MAX(navigation_process_ticks, OS::get_singleton()->get_ticks_usec() - navigation_begin); // keep the largest one for reference
|
||||
@@ -4846,7 +4851,7 @@ void Main::cleanup(bool p_force) {
|
||||
finalize_theme_db();
|
||||
|
||||
// Before deinitializing server extensions, finalize servers which may be loaded as extensions.
|
||||
NavigationServer2DManager::finalize_server(); // 2D goes first as it uses the 3D server behind the scene.
|
||||
NavigationServer2DManager::finalize_server();
|
||||
NavigationServer3DManager::finalize_server();
|
||||
finalize_physics();
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "scene/main/node.h"
|
||||
#include "scene/main/scene_tree.h"
|
||||
#include "servers/audio_server.h"
|
||||
#include "servers/navigation_server_2d.h"
|
||||
#include "servers/navigation_server_3d.h"
|
||||
#include "servers/rendering_server.h"
|
||||
|
||||
@@ -98,6 +99,26 @@ void Performance::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(PIPELINE_COMPILATIONS_SURFACE);
|
||||
BIND_ENUM_CONSTANT(PIPELINE_COMPILATIONS_DRAW);
|
||||
BIND_ENUM_CONSTANT(PIPELINE_COMPILATIONS_SPECIALIZATION);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_2D_ACTIVE_MAPS);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_2D_REGION_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_2D_AGENT_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_2D_LINK_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_2D_POLYGON_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_2D_EDGE_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_2D_EDGE_MERGE_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_2D_EDGE_CONNECTION_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_2D_EDGE_FREE_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_2D_OBSTACLE_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_3D_ACTIVE_MAPS);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_3D_REGION_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_3D_AGENT_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_3D_LINK_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_3D_POLYGON_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_3D_EDGE_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_3D_EDGE_MERGE_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_3D_EDGE_CONNECTION_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_3D_EDGE_FREE_COUNT);
|
||||
BIND_ENUM_CONSTANT(NAVIGATION_3D_OBSTACLE_COUNT);
|
||||
BIND_ENUM_CONSTANT(MONITOR_MAX);
|
||||
}
|
||||
|
||||
@@ -152,6 +173,26 @@ String Performance::get_monitor_name(Monitor p_monitor) const {
|
||||
PNAME("pipeline/compilations_surface"),
|
||||
PNAME("pipeline/compilations_draw"),
|
||||
PNAME("pipeline/compilations_specialization"),
|
||||
PNAME("navigation_2d/active_maps"),
|
||||
PNAME("navigation_2d/regions"),
|
||||
PNAME("navigation_2d/agents"),
|
||||
PNAME("navigation_2d/links"),
|
||||
PNAME("navigation_2d/polygons"),
|
||||
PNAME("navigation_2d/edges"),
|
||||
PNAME("navigation_2d/edges_merged"),
|
||||
PNAME("navigation_2d/edges_connected"),
|
||||
PNAME("navigation_2d/edges_free"),
|
||||
PNAME("navigation_2d/obstacles"),
|
||||
PNAME("navigation_2d/active_maps"),
|
||||
PNAME("navigation_3d/regions"),
|
||||
PNAME("navigation_3d/agents"),
|
||||
PNAME("navigation_3d/links"),
|
||||
PNAME("navigation_3d/polygons"),
|
||||
PNAME("navigation_3d/edges"),
|
||||
PNAME("navigation_3d/edges_merged"),
|
||||
PNAME("navigation_3d/edges_connected"),
|
||||
PNAME("navigation_3d/edges_free"),
|
||||
PNAME("navigation_3d/obstacles"),
|
||||
};
|
||||
static_assert(std::size(names) == MONITOR_MAX);
|
||||
|
||||
@@ -237,25 +278,78 @@ double Performance::get_monitor(Monitor p_monitor) const {
|
||||
|
||||
case AUDIO_OUTPUT_LATENCY:
|
||||
return AudioServer::get_singleton()->get_output_latency();
|
||||
|
||||
case NAVIGATION_ACTIVE_MAPS:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_ACTIVE_MAPS);
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_ACTIVE_MAPS) +
|
||||
NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_ACTIVE_MAPS);
|
||||
case NAVIGATION_REGION_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_REGION_COUNT);
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_REGION_COUNT) +
|
||||
NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_REGION_COUNT);
|
||||
case NAVIGATION_AGENT_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_AGENT_COUNT);
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_AGENT_COUNT) +
|
||||
NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_AGENT_COUNT);
|
||||
case NAVIGATION_LINK_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_LINK_COUNT);
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_LINK_COUNT) +
|
||||
NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_LINK_COUNT);
|
||||
case NAVIGATION_POLYGON_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_POLYGON_COUNT);
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_POLYGON_COUNT) +
|
||||
NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_POLYGON_COUNT);
|
||||
case NAVIGATION_EDGE_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_COUNT);
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_EDGE_COUNT) +
|
||||
NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_COUNT);
|
||||
case NAVIGATION_EDGE_MERGE_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_MERGE_COUNT);
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_EDGE_MERGE_COUNT) +
|
||||
NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_MERGE_COUNT);
|
||||
case NAVIGATION_EDGE_CONNECTION_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_CONNECTION_COUNT);
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_EDGE_CONNECTION_COUNT) +
|
||||
NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_CONNECTION_COUNT);
|
||||
case NAVIGATION_EDGE_FREE_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_FREE_COUNT);
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_EDGE_FREE_COUNT) +
|
||||
NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_FREE_COUNT);
|
||||
case NAVIGATION_OBSTACLE_COUNT:
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_OBSTACLE_COUNT) +
|
||||
NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_OBSTACLE_COUNT);
|
||||
|
||||
case NAVIGATION_2D_ACTIVE_MAPS:
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_ACTIVE_MAPS);
|
||||
case NAVIGATION_2D_REGION_COUNT:
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_REGION_COUNT);
|
||||
case NAVIGATION_2D_AGENT_COUNT:
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_AGENT_COUNT);
|
||||
case NAVIGATION_2D_LINK_COUNT:
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_LINK_COUNT);
|
||||
case NAVIGATION_2D_POLYGON_COUNT:
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_POLYGON_COUNT);
|
||||
case NAVIGATION_2D_EDGE_COUNT:
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_EDGE_COUNT);
|
||||
case NAVIGATION_2D_EDGE_MERGE_COUNT:
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_EDGE_MERGE_COUNT);
|
||||
case NAVIGATION_2D_EDGE_CONNECTION_COUNT:
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_EDGE_CONNECTION_COUNT);
|
||||
case NAVIGATION_2D_EDGE_FREE_COUNT:
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_EDGE_FREE_COUNT);
|
||||
case NAVIGATION_2D_OBSTACLE_COUNT:
|
||||
return NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_OBSTACLE_COUNT);
|
||||
|
||||
case NAVIGATION_3D_ACTIVE_MAPS:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_ACTIVE_MAPS);
|
||||
case NAVIGATION_3D_REGION_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_REGION_COUNT);
|
||||
case NAVIGATION_3D_AGENT_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_AGENT_COUNT);
|
||||
case NAVIGATION_3D_LINK_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_LINK_COUNT);
|
||||
case NAVIGATION_3D_POLYGON_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_POLYGON_COUNT);
|
||||
case NAVIGATION_3D_EDGE_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_COUNT);
|
||||
case NAVIGATION_3D_EDGE_MERGE_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_MERGE_COUNT);
|
||||
case NAVIGATION_3D_EDGE_CONNECTION_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_CONNECTION_COUNT);
|
||||
case NAVIGATION_3D_EDGE_FREE_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_FREE_COUNT);
|
||||
case NAVIGATION_3D_OBSTACLE_COUNT:
|
||||
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_OBSTACLE_COUNT);
|
||||
|
||||
default: {
|
||||
@@ -308,6 +402,26 @@ Performance::MonitorType Performance::get_monitor_type(Monitor p_monitor) const
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
MONITOR_TYPE_QUANTITY,
|
||||
|
||||
};
|
||||
static_assert((sizeof(types) / sizeof(MonitorType)) == MONITOR_MAX);
|
||||
|
||||
@@ -105,6 +105,26 @@ public:
|
||||
PIPELINE_COMPILATIONS_SURFACE,
|
||||
PIPELINE_COMPILATIONS_DRAW,
|
||||
PIPELINE_COMPILATIONS_SPECIALIZATION,
|
||||
NAVIGATION_2D_ACTIVE_MAPS,
|
||||
NAVIGATION_2D_REGION_COUNT,
|
||||
NAVIGATION_2D_AGENT_COUNT,
|
||||
NAVIGATION_2D_LINK_COUNT,
|
||||
NAVIGATION_2D_POLYGON_COUNT,
|
||||
NAVIGATION_2D_EDGE_COUNT,
|
||||
NAVIGATION_2D_EDGE_MERGE_COUNT,
|
||||
NAVIGATION_2D_EDGE_CONNECTION_COUNT,
|
||||
NAVIGATION_2D_EDGE_FREE_COUNT,
|
||||
NAVIGATION_2D_OBSTACLE_COUNT,
|
||||
NAVIGATION_3D_ACTIVE_MAPS,
|
||||
NAVIGATION_3D_REGION_COUNT,
|
||||
NAVIGATION_3D_AGENT_COUNT,
|
||||
NAVIGATION_3D_LINK_COUNT,
|
||||
NAVIGATION_3D_POLYGON_COUNT,
|
||||
NAVIGATION_3D_EDGE_COUNT,
|
||||
NAVIGATION_3D_EDGE_MERGE_COUNT,
|
||||
NAVIGATION_3D_EDGE_CONNECTION_COUNT,
|
||||
NAVIGATION_3D_EDGE_FREE_COUNT,
|
||||
NAVIGATION_3D_OBSTACLE_COUNT,
|
||||
MONITOR_MAX
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user