From 4a268547aa44f02a57357d55fa31cdd0eb55220e Mon Sep 17 00:00:00 2001 From: Aaron Franke Date: Mon, 11 Mar 2024 20:27:45 -0700 Subject: [PATCH] Move server files into their subfolders --- core/debugger/remote_debugger.cpp | 2 +- core/io/resource_loader.cpp | 2 +- .../accessibility_driver_accesskit.cpp | 2 +- .../accessibility_driver_accesskit.h | 2 +- drivers/alsa/audio_driver_alsa.h | 2 +- .../display_server_apple_embedded.h | 2 +- drivers/apple_embedded/godot_view_renderer.mm | 2 +- drivers/apple_embedded/os_apple_embedded.h | 2 +- drivers/apple_embedded/tts_apple_embedded.h | 2 +- drivers/coreaudio/audio_driver_coreaudio.h | 2 +- .../d3d12/rendering_context_driver_d3d12.h | 2 +- drivers/egl/egl_manager.h | 2 +- drivers/gles3/rasterizer_scene_gles3.cpp | 2 +- drivers/gles3/rasterizer_scene_gles3.h | 2 +- drivers/gles3/shader_gles3.h | 2 +- drivers/pulseaudio/audio_driver_pulseaudio.h | 2 +- drivers/unix/os_unix.cpp | 2 +- drivers/wasapi/audio_driver_wasapi.h | 2 +- drivers/xaudio2/audio_driver_xaudio2.h | 2 +- .../animation_player_editor_plugin.cpp | 2 +- editor/audio/editor_audio_buses.cpp | 2 +- editor/debugger/editor_debugger_tree.cpp | 2 +- editor/debugger/script_editor_debugger.cpp | 2 +- editor/docks/filesystem_dock.cpp | 2 +- editor/docks/scene_tree_dock.cpp | 2 +- editor/editor_node.cpp | 12 +- editor/file_system/uid_viewer.cpp | 2 +- editor/gui/editor_dir_dialog.cpp | 2 +- editor/gui/editor_file_dialog.cpp | 2 +- editor/gui/progress_dialog.cpp | 2 +- editor/import/resource_importer_bmfont.h | 2 +- .../import/resource_importer_dynamic_font.cpp | 2 +- editor/import/resource_importer_imagefont.h | 2 +- editor/import/resource_importer_texture.h | 2 +- editor/project_manager/project_manager.cpp | 14 +- editor/run/editor_run.cpp | 2 +- editor/run/editor_run_bar.cpp | 2 +- editor/scene/2d/tiles/tile_data_editors.cpp | 2 +- .../2d/tiles/tile_set_atlas_source_editor.cpp | 2 +- editor/script/script_editor_plugin.cpp | 2 +- editor/shader/shader_file_editor_plugin.cpp | 2 +- editor/shader/visual_shader_editor_plugin.cpp | 2 +- main/main.cpp | 26 +- main/main_timer_sync.cpp | 2 +- main/performance.cpp | 17 +- main/performance.h | 3 + .../basis_universal/image_compress_basisu.cpp | 2 +- modules/betsy/image_compress_betsy.cpp | 2 +- modules/camera/camera_android.h | 2 +- modules/camera/camera_feed_linux.cpp | 2 +- modules/camera/camera_linux.h | 2 +- modules/camera/camera_macos.h | 2 +- modules/camera/camera_win.h | 2 +- modules/csg/csg_shape.cpp | 2 +- modules/gdscript/gdscript_parser.cpp | 2 +- modules/gdscript/gdscript_tokenizer.cpp | 2 +- .../gdscript_text_document.cpp | 2 +- modules/godot_physics_2d/godot_area_2d.h | 2 +- .../godot_body_direct_state_2d.h | 2 +- .../godot_collision_object_2d.h | 2 +- .../godot_physics_server_2d.h | 2 +- modules/godot_physics_2d/godot_shape_2d.h | 2 +- modules/godot_physics_2d/register_types.cpp | 4 +- modules/godot_physics_3d/godot_area_3d.h | 2 +- .../godot_body_direct_state_3d.h | 2 +- .../godot_collision_object_3d.h | 2 +- .../godot_physics_server_3d.h | 2 +- modules/godot_physics_3d/godot_shape_3d.h | 2 +- .../godot_physics_3d/godot_soft_body_3d.cpp | 2 +- modules/godot_physics_3d/register_types.cpp | 4 +- modules/gridmap/grid_map.cpp | 4 +- modules/jolt_physics/joints/jolt_joint_3d.h | 2 +- .../jolt_physics/jolt_physics_server_3d.cpp | 2 +- modules/jolt_physics/jolt_physics_server_3d.h | 2 +- modules/jolt_physics/objects/jolt_area_3d.h | 2 +- .../jolt_physics_direct_body_state_3d.h | 2 +- .../objects/jolt_soft_body_3d.cpp | 2 +- .../jolt_physics/objects/jolt_soft_body_3d.h | 2 +- modules/jolt_physics/register_types.cpp | 2 +- modules/jolt_physics/shapes/jolt_shape_3d.h | 2 +- .../jolt_physics_direct_space_state_3d.h | 2 +- modules/jolt_physics/spaces/jolt_space_3d.h | 2 +- modules/mcp/mcp_bridge.cpp | 2 +- modules/mobile_vr/mobile_vr_interface.cpp | 2 +- modules/mono/csharp_script.cpp | 2 +- .../2d/godot_navigation_server_2d.h | 6 +- .../navigation_2d/2d/nav_base_iteration_2d.h | 6 +- .../navigation_2d/2d/nav_mesh_generator_2d.h | 2 +- .../navigation_2d/2d/nav_mesh_queries_2d.cpp | 7 +- .../navigation_2d/2d/nav_mesh_queries_2d.h | 11 +- modules/navigation_2d/nav_agent_2d.h | 2 +- modules/navigation_2d/nav_base_2d.h | 6 +- modules/navigation_2d/nav_link_2d.cpp | 2 +- modules/navigation_2d/nav_map_2d.cpp | 2 +- modules/navigation_2d/nav_map_2d.h | 2 +- modules/navigation_2d/nav_region_2d.cpp | 2 +- modules/navigation_2d/nav_utils_2d.h | 4 +- modules/navigation_2d/register_types.cpp | 2 +- .../3d/godot_navigation_server_3d.cpp | 2 +- .../3d/godot_navigation_server_3d.h | 6 +- .../navigation_3d/3d/nav_base_iteration_3d.h | 6 +- .../navigation_3d/3d/nav_mesh_generator_3d.h | 2 +- .../navigation_3d/3d/nav_mesh_queries_3d.cpp | 7 +- .../navigation_3d/3d/nav_mesh_queries_3d.h | 11 +- .../3d/navigation_mesh_generator.cpp | 2 +- .../navigation_link_3d_gizmo_plugin.cpp | 2 +- .../navigation_obstacle_3d_editor_plugin.cpp | 2 +- .../navigation_region_3d_editor_plugin.cpp | 2 +- .../navigation_region_3d_gizmo_plugin.cpp | 2 +- modules/navigation_3d/nav_agent_3d.h | 2 +- modules/navigation_3d/nav_base_3d.h | 6 +- modules/navigation_3d/nav_link_3d.cpp | 2 +- modules/navigation_3d/nav_map_3d.cpp | 2 +- modules/navigation_3d/nav_map_3d.h | 2 +- modules/navigation_3d/nav_region_3d.cpp | 2 +- modules/navigation_3d/nav_utils_3d.h | 4 +- modules/navigation_3d/register_types.cpp | 2 +- .../openxr_hand_tracking_extension.cpp | 2 +- .../openxr_render_model_extension.cpp | 2 +- .../openxr_visibility_mask_extension.cpp | 2 +- .../platform/openxr_d3d12_extension.cpp | 2 +- .../platform/openxr_opengl_extension.cpp | 2 +- .../platform/openxr_vulkan_extension.cpp | 2 +- .../openxr_spatial_anchor.cpp | 1186 ++++++++++++++++ .../openxr_spatial_entity_extension.cpp | 1217 +++++++++++++++++ .../openxr_spatial_marker_tracking.cpp | 790 +++++++++++ .../openxr_spatial_plane_tracking.cpp | 881 ++++++++++++ modules/openxr/openxr_api.h | 2 +- modules/openxr/scene/openxr_hand.cpp | 2 +- .../scene/openxr_render_model_manager.cpp | 2 +- modules/soundsmith/soundsmith_module.cpp | 2 +- modules/theora/editor/movie_writer_ogv.h | 2 +- platform/android/audio_driver_opensl.h | 2 +- platform/android/display_server_android.h | 2 +- .../org/godotengine/godot/tts/GodotTTS.java | 2 +- platform/android/java_godot_lib_jni.cpp | 4 +- platform/android/os_android.cpp | 2 +- platform/android/os_android.h | 2 +- platform/android/tts_android.h | 2 +- platform/ios/display_layer_ios.mm | 2 +- .../linuxbsd/freedesktop_portal_desktop.h | 2 +- platform/linuxbsd/os_linuxbsd.cpp | 4 +- platform/linuxbsd/os_linuxbsd.h | 2 +- platform/linuxbsd/tts_linux.cpp | 2 +- platform/linuxbsd/tts_linux.h | 2 +- .../linuxbsd/wayland/display_server_wayland.h | 2 +- platform/linuxbsd/wayland/wayland_thread.h | 2 +- platform/linuxbsd/x11/display_server_x11.h | 6 +- platform/linuxbsd/x11/gl_manager_x11.h | 2 +- platform/linuxbsd/x11/gl_manager_x11_egl.h | 2 +- platform/macos/display_server_macos_base.h | 2 +- platform/macos/embedded_gl_manager.h | 2 +- platform/macos/gl_manager_macos_angle.h | 2 +- platform/macos/gl_manager_macos_legacy.h | 2 +- platform/macos/godot_button_view.h | 2 +- platform/macos/godot_content_view.h | 2 +- platform/macos/godot_menu_item.h | 2 +- platform/macos/godot_window.h | 2 +- platform/macos/godot_window_delegate.h | 2 +- platform/macos/os_macos.h | 2 +- platform/macos/tts_macos.h | 2 +- platform/web/audio_driver_web.h | 2 +- platform/web/display_server_web.h | 2 +- platform/web/os_web.h | 2 +- platform/windows/display_server_windows.h | 6 +- platform/windows/gl_manager_windows_angle.h | 2 +- platform/windows/gl_manager_windows_native.h | 2 +- platform/windows/os_windows.cpp | 4 +- platform/windows/os_windows.h | 2 +- platform/windows/tts_windows.h | 2 +- scene/2d/audio_stream_player_2d.cpp | 2 +- scene/2d/audio_stream_player_2d.h | 2 +- scene/2d/mesh_instance_2d.cpp | 2 +- scene/2d/multimesh_instance_2d.cpp | 2 +- scene/2d/navigation/navigation_agent_2d.cpp | 2 +- scene/2d/navigation/navigation_agent_2d.h | 6 +- scene/2d/navigation/navigation_link_2d.cpp | 2 +- .../2d/navigation/navigation_obstacle_2d.cpp | 4 +- scene/2d/navigation/navigation_region_2d.cpp | 2 +- scene/2d/physics/area_2d.cpp | 2 +- scene/2d/physics/character_body_2d.cpp | 2 +- scene/2d/physics/collision_object_2d.h | 2 +- scene/2d/physics/kinematic_collision_2d.h | 2 +- scene/2d/physics/physics_body_2d.h | 2 +- scene/2d/physics/shape_cast_2d.cpp | 2 +- scene/2d/physics/shape_cast_2d.h | 2 +- scene/2d/physics/static_body_2d.cpp | 2 +- scene/2d/polygon_2d.cpp | 7 +- scene/2d/tile_map.cpp | 2 +- scene/2d/tile_map_layer.cpp | 4 +- scene/3d/audio_stream_player_3d.h | 2 +- scene/3d/label_3d.h | 2 +- scene/3d/mesh_instance_3d.cpp | 2 +- scene/3d/multimesh_instance_3d.cpp | 2 +- scene/3d/navigation/navigation_agent_3d.cpp | 2 +- scene/3d/navigation/navigation_agent_3d.h | 6 +- scene/3d/navigation/navigation_link_3d.cpp | 2 +- .../3d/navigation/navigation_obstacle_3d.cpp | 2 +- scene/3d/navigation/navigation_region_3d.cpp | 2 +- scene/3d/physics/area_3d.cpp | 2 +- scene/3d/physics/character_body_3d.cpp | 2 +- scene/3d/physics/kinematic_collision_3d.h | 2 +- scene/3d/physics/physics_body_3d.h | 2 +- scene/3d/physics/soft_body_3d.h | 2 +- scene/3d/physics/static_body_3d.cpp | 2 +- scene/3d/xr/xr_body_modifier_3d.cpp | 2 +- scene/3d/xr/xr_face_modifier_3d.cpp | 2 +- scene/3d/xr/xr_hand_modifier_3d.cpp | 2 +- scene/animation/animation_mixer.cpp | 2 +- scene/audio/audio_stream_player.h | 2 +- scene/audio/audio_stream_player_internal.h | 2 +- scene/debugger/scene_debugger.cpp | 2 +- scene/gui/control.cpp | 4 +- scene/gui/label.cpp | 2 +- scene/gui/line_edit.cpp | 4 +- scene/gui/nine_patch_rect.cpp | 2 +- scene/gui/rich_text_label.cpp | 2 +- scene/gui/video_stream_player.cpp | 2 +- scene/main/scene_tree.cpp | 4 +- scene/main/status_indicator.h | 2 +- scene/main/viewport.cpp | 2 +- scene/main/window.h | 2 +- scene/resources/2d/capsule_shape_2d.cpp | 4 +- scene/resources/2d/circle_shape_2d.cpp | 4 +- .../resources/2d/concave_polygon_shape_2d.cpp | 4 +- .../resources/2d/convex_polygon_shape_2d.cpp | 4 +- scene/resources/2d/navigation_polygon.h | 2 +- scene/resources/2d/rectangle_shape_2d.cpp | 4 +- scene/resources/2d/segment_shape_2d.cpp | 4 +- .../resources/2d/separation_ray_shape_2d.cpp | 4 +- scene/resources/2d/shape_2d.cpp | 2 +- scene/resources/2d/tile_set.cpp | 2 +- .../resources/2d/world_boundary_shape_2d.cpp | 4 +- scene/resources/3d/box_shape_3d.cpp | 2 +- scene/resources/3d/capsule_shape_3d.cpp | 2 +- .../resources/3d/concave_polygon_shape_3d.cpp | 2 +- .../resources/3d/convex_polygon_shape_3d.cpp | 2 +- scene/resources/3d/cylinder_shape_3d.cpp | 2 +- scene/resources/3d/height_map_shape_3d.cpp | 2 +- scene/resources/3d/mesh_library.h | 2 +- scene/resources/3d/primitive_meshes.cpp | 2 +- scene/resources/3d/primitive_meshes.h | 2 +- .../resources/3d/separation_ray_shape_3d.cpp | 2 +- scene/resources/3d/shape_3d.cpp | 2 +- scene/resources/3d/sphere_shape_3d.cpp | 2 +- scene/resources/3d/world_3d.cpp | 2 +- scene/resources/3d/world_3d.h | 3 +- .../resources/3d/world_boundary_shape_3d.cpp | 2 +- scene/resources/audio_stream_polyphonic.cpp | 2 +- scene/resources/audio_stream_polyphonic.h | 2 +- scene/resources/camera_attributes.cpp | 2 +- scene/resources/compositor.cpp | 2 +- scene/resources/environment.cpp | 2 +- scene/resources/font.h | 2 +- scene/resources/material.h | 2 +- scene/resources/mesh.h | 2 +- scene/resources/multimesh.cpp | 2 +- scene/resources/multimesh.h | 2 +- scene/resources/navigation_mesh.cpp | 2 +- scene/resources/navigation_mesh.h | 2 +- scene/resources/shader.cpp | 2 +- scene/resources/style_box_flat.cpp | 2 +- scene/resources/style_box_line.cpp | 2 +- scene/resources/text_line.h | 2 +- scene/resources/text_paragraph.h | 2 +- scene/resources/texture.h | 4 +- scene/resources/world_2d.cpp | 4 +- scene/resources/world_2d.h | 2 +- scene/theme/default_theme.cpp | 2 +- scene/theme/theme_db.cpp | 2 +- scu_builders.py | 3 +- servers/SCsub | 21 +- servers/audio/audio_driver_dummy.h | 2 +- servers/{ => audio}/audio_server.cpp | 0 servers/{ => audio}/audio_server.h | 0 servers/audio/audio_stream.h | 2 +- .../audio/effects/audio_effect_capture.cpp | 2 +- servers/audio/effects/audio_effect_chorus.cpp | 2 +- .../audio/effects/audio_effect_compressor.cpp | 2 +- servers/audio/effects/audio_effect_delay.cpp | 2 +- .../audio/effects/audio_effect_distortion.cpp | 2 +- servers/audio/effects/audio_effect_eq.cpp | 2 +- servers/audio/effects/audio_effect_filter.cpp | 2 +- .../effects/audio_effect_hard_limiter.cpp | 2 +- servers/audio/effects/audio_effect_phaser.cpp | 2 +- .../effects/audio_effect_pitch_shift.cpp | 2 +- servers/audio/effects/audio_effect_record.h | 2 +- servers/audio/effects/audio_effect_reverb.cpp | 4 +- .../audio_effect_spectrum_analyzer.cpp | 2 +- .../effects/audio_effect_stereo_enhance.cpp | 2 +- servers/camera/camera_feed.cpp | 2 +- servers/camera/camera_feed.h | 2 +- servers/{ => camera}/camera_server.cpp | 3 +- servers/{ => camera}/camera_server.h | 0 servers/debugger/servers_debugger.cpp | 2 +- servers/debugger/servers_debugger.h | 2 +- .../{ => display}/display_server.compat.inc | 0 servers/{ => display}/display_server.cpp | 2 +- servers/{ => display}/display_server.h | 3 +- .../{ => display}/display_server_headless.h | 3 +- servers/extensions/SCsub | 11 - servers/movie_writer/movie_writer.cpp | 4 +- servers/movie_writer/movie_writer.h | 2 +- servers/{navigation => }/nav_heap.h | 2 + servers/navigation/SCsub | 12 - servers/navigation_2d/SCsub | 6 + .../navigation_constants_2d.h} | 32 +- .../navigation_path_query_parameters_2d.cpp | 2 + .../navigation_path_query_parameters_2d.h | 21 +- .../navigation_path_query_result_2d.cpp | 0 .../navigation_path_query_result_2d.h | 7 +- .../navigation_server_2d.compat.inc | 0 .../navigation_server_2d.cpp | 3 +- .../navigation_server_2d.h | 4 +- .../navigation_server_2d_dummy.h | 2 +- servers/navigation_3d/SCsub | 6 + .../navigation_constants_3d.h} | 58 +- .../navigation_path_query_parameters_3d.cpp | 2 + .../navigation_path_query_parameters_3d.h | 21 +- .../navigation_path_query_result_3d.cpp | 0 .../navigation_path_query_result_3d.h | 6 +- .../navigation_server_3d.compat.inc | 0 .../navigation_server_3d.cpp | 3 +- .../navigation_server_3d.h | 4 +- .../navigation_server_3d_dummy.h | 2 +- servers/physics_2d/SCsub | 6 + .../{ => physics_2d}/physics_server_2d.cpp | 0 servers/{ => physics_2d}/physics_server_2d.h | 0 .../physics_server_2d_dummy.h | 0 .../physics_server_2d_extension.cpp | 0 .../physics_server_2d_extension.h | 2 +- .../physics_server_2d_wrap_mt.cpp | 0 .../physics_server_2d_wrap_mt.h | 2 +- servers/physics_3d/SCsub | 6 + .../{ => physics_3d}/physics_server_3d.cpp | 4 - servers/{ => physics_3d}/physics_server_3d.h | 4 - .../physics_server_3d_dummy.h | 2 +- .../physics_server_3d_extension.cpp | 0 .../physics_server_3d_extension.h | 2 +- .../physics_server_3d_wrap_mt.cpp | 0 .../physics_server_3d_wrap_mt.h | 2 +- servers/register_server_types.cpp | 28 +- servers/rendering/dummy/rasterizer_dummy.h | 2 +- servers/rendering/environment/renderer_fog.h | 2 +- servers/rendering/environment/renderer_gi.h | 2 +- servers/rendering/renderer_canvas_render.h | 2 +- servers/rendering/renderer_compositor.cpp | 2 +- .../renderer_rd/effects/copy_effects.h | 2 +- .../effects/motion_vectors_store.h | 2 +- servers/rendering/renderer_rd/effects/smaa.h | 2 +- .../renderer_rd/effects/ss_effects.h | 2 +- .../renderer_rd/effects/tone_mapper.h | 2 +- servers/rendering/renderer_rd/effects/vrs.cpp | 2 +- .../renderer_rd/pipeline_hash_map_rd.h | 2 +- servers/rendering/renderer_rd/shader_rd.h | 2 +- .../rendering/renderer_scene_occlusion_cull.h | 2 +- servers/rendering/renderer_viewport.h | 2 +- servers/rendering/rendering_context_driver.h | 2 +- servers/rendering/rendering_device.h | 2 +- servers/rendering/rendering_method.h | 2 +- .../rendering_server.compat.inc | 0 servers/{ => rendering}/rendering_server.cpp | 0 servers/{ => rendering}/rendering_server.h | 2 +- servers/rendering/rendering_server_default.h | 5 +- servers/rendering/shader_compiler.h | 2 +- servers/rendering/shader_language.cpp | 2 +- servers/rendering/shader_types.h | 2 +- .../storage/camera_attributes_storage.h | 2 +- .../rendering/storage/compositor_storage.h | 2 +- .../rendering/storage/environment_storage.h | 2 +- servers/rendering/storage/light_storage.h | 2 +- servers/rendering/storage/material_storage.h | 2 +- servers/rendering/storage/mesh_storage.h | 2 +- servers/rendering/storage/particles_storage.h | 2 +- .../rendering/storage/render_scene_buffers.h | 2 +- servers/rendering/storage/texture_storage.h | 2 +- servers/rendering/storage/utilities.h | 2 +- servers/{ => text}/text_server.compat.inc | 0 servers/{ => text}/text_server.cpp | 4 +- servers/{ => text}/text_server.h | 0 servers/text/text_server_extension.h | 2 +- servers/xr/xr_interface.h | 2 +- servers/xr/xr_pose.cpp | 2 +- servers/xr/xr_positional_tracker.h | 2 +- servers/{ => xr}/xr_server.compat.inc | 0 servers/{ => xr}/xr_server.cpp | 7 +- servers/{ => xr}/xr_server.h | 2 +- servers/xr/xr_tracker.h | 2 +- servers/xr/xr_vrs.cpp | 2 +- tests/display_server_mock.h | 2 +- tests/scene/test_viewport.h | 2 +- tests/servers/test_nav_heap.h | 2 +- tests/servers/test_navigation_server_2d.h | 2 +- tests/servers/test_navigation_server_3d.h | 2 +- tests/servers/test_text_server.h | 2 +- tests/test_main.cpp | 12 +- 396 files changed, 4672 insertions(+), 579 deletions(-) create mode 100644 modules/openxr/extensions/spatial_entities/openxr_spatial_anchor.cpp create mode 100644 modules/openxr/extensions/spatial_entities/openxr_spatial_entity_extension.cpp create mode 100644 modules/openxr/extensions/spatial_entities/openxr_spatial_marker_tracking.cpp create mode 100644 modules/openxr/extensions/spatial_entities/openxr_spatial_plane_tracking.cpp rename servers/{ => audio}/audio_server.cpp (100%) rename servers/{ => audio}/audio_server.h (100%) rename servers/{ => camera}/camera_server.cpp (99%) rename servers/{ => camera}/camera_server.h (100%) rename servers/{ => display}/display_server.compat.inc (100%) rename servers/{ => display}/display_server.cpp (99%) rename servers/{ => display}/display_server.h (99%) rename servers/{ => display}/display_server_headless.h (99%) delete mode 100644 servers/extensions/SCsub rename servers/{navigation => }/nav_heap.h (98%) delete mode 100644 servers/navigation/SCsub create mode 100644 servers/navigation_2d/SCsub rename servers/{navigation/navigation_utilities.h => navigation_2d/navigation_constants_2d.h} (75%) rename servers/{navigation => navigation_2d}/navigation_path_query_parameters_2d.cpp (99%) rename servers/{navigation => navigation_2d}/navigation_path_query_parameters_2d.h (85%) rename servers/{navigation => navigation_2d}/navigation_path_query_result_2d.cpp (100%) rename servers/{navigation => navigation_2d}/navigation_path_query_result_2d.h (92%) rename servers/{ => navigation_2d}/navigation_server_2d.compat.inc (100%) rename servers/{ => navigation_2d}/navigation_server_2d.cpp (99%) rename servers/{ => navigation_2d}/navigation_server_2d.h (99%) rename servers/{ => navigation_2d}/navigation_server_2d_dummy.h (99%) create mode 100644 servers/navigation_3d/SCsub rename servers/{navigation/navigation_globals.h => navigation_3d/navigation_constants_3d.h} (78%) rename servers/{navigation => navigation_3d}/navigation_path_query_parameters_3d.cpp (99%) rename servers/{navigation => navigation_3d}/navigation_path_query_parameters_3d.h (85%) rename servers/{navigation => navigation_3d}/navigation_path_query_result_3d.cpp (100%) rename servers/{navigation => navigation_3d}/navigation_path_query_result_3d.h (93%) rename servers/{ => navigation_3d}/navigation_server_3d.compat.inc (100%) rename servers/{ => navigation_3d}/navigation_server_3d.cpp (99%) rename servers/{ => navigation_3d}/navigation_server_3d.h (99%) rename servers/{ => navigation_3d}/navigation_server_3d_dummy.h (99%) create mode 100644 servers/physics_2d/SCsub rename servers/{ => physics_2d}/physics_server_2d.cpp (100%) rename servers/{ => physics_2d}/physics_server_2d.h (100%) rename servers/{ => physics_2d}/physics_server_2d_dummy.h (100%) rename servers/{extensions => physics_2d}/physics_server_2d_extension.cpp (100%) rename servers/{extensions => physics_2d}/physics_server_2d_extension.h (99%) rename servers/{ => physics_2d}/physics_server_2d_wrap_mt.cpp (100%) rename servers/{ => physics_2d}/physics_server_2d_wrap_mt.h (99%) create mode 100644 servers/physics_3d/SCsub rename servers/{ => physics_3d}/physics_server_3d.cpp (99%) rename servers/{ => physics_3d}/physics_server_3d.h (99%) rename servers/{ => physics_3d}/physics_server_3d_dummy.h (99%) rename servers/{extensions => physics_3d}/physics_server_3d_extension.cpp (100%) rename servers/{extensions => physics_3d}/physics_server_3d_extension.h (99%) rename servers/{ => physics_3d}/physics_server_3d_wrap_mt.cpp (100%) rename servers/{ => physics_3d}/physics_server_3d_wrap_mt.h (99%) rename servers/{ => rendering}/rendering_server.compat.inc (100%) rename servers/{ => rendering}/rendering_server.cpp (100%) rename servers/{ => rendering}/rendering_server.h (99%) rename servers/{ => text}/text_server.compat.inc (100%) rename servers/{ => text}/text_server.cpp (99%) rename servers/{ => text}/text_server.h (100%) rename servers/{ => xr}/xr_server.compat.inc (100%) rename servers/{ => xr}/xr_server.cpp (99%) rename servers/{ => xr}/xr_server.h (99%) diff --git a/core/debugger/remote_debugger.cpp b/core/debugger/remote_debugger.cpp index bd5a278f6c7..5055c8b9601 100644 --- a/core/debugger/remote_debugger.cpp +++ b/core/debugger/remote_debugger.cpp @@ -48,7 +48,7 @@ #include "core/math/expression.h" #include "core/object/script_language.h" #include "core/os/os.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" class RemoteDebugger::PerformanceProfiler : public EngineProfiler { Object *performance = nullptr; diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp index b012d8b5a09..22dedc93db6 100644 --- a/core/io/resource_loader.cpp +++ b/core/io/resource_loader.cpp @@ -51,7 +51,7 @@ #include "core/string/translation_server.h" #include "core/templates/rb_set.h" #include "core/variant/variant_parser.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #ifdef DEBUG_LOAD_THREADED #define print_lt(m_text) print_line(m_text) diff --git a/drivers/accesskit/accessibility_driver_accesskit.cpp b/drivers/accesskit/accessibility_driver_accesskit.cpp index 4d77f096c5a..237bf49dde0 100644 --- a/drivers/accesskit/accessibility_driver_accesskit.cpp +++ b/drivers/accesskit/accessibility_driver_accesskit.cpp @@ -43,7 +43,7 @@ #include "core/config/project_settings.h" #include "core/version.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" AccessibilityDriverAccessKit *AccessibilityDriverAccessKit::singleton = nullptr; diff --git a/drivers/accesskit/accessibility_driver_accesskit.h b/drivers/accesskit/accessibility_driver_accesskit.h index 8b674fba720..ec19b356cf2 100644 --- a/drivers/accesskit/accessibility_driver_accesskit.h +++ b/drivers/accesskit/accessibility_driver_accesskit.h @@ -41,7 +41,7 @@ #ifdef ACCESSKIT_ENABLED #include "core/templates/rid_owner.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #ifdef ACCESSKIT_DYNAMIC #ifdef LINUXBSD_ENABLED diff --git a/drivers/alsa/audio_driver_alsa.h b/drivers/alsa/audio_driver_alsa.h index 30ddd1a6283..385ac097a43 100644 --- a/drivers/alsa/audio_driver_alsa.h +++ b/drivers/alsa/audio_driver_alsa.h @@ -43,7 +43,7 @@ #include "core/os/mutex.h" #include "core/os/thread.h" #include "core/templates/safe_refcount.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #ifdef SOWRAP_ENABLED #include "asound-so_wrap.h" diff --git a/drivers/apple_embedded/display_server_apple_embedded.h b/drivers/apple_embedded/display_server_apple_embedded.h index 55acc2c97a6..b6aba6d0a3f 100644 --- a/drivers/apple_embedded/display_server_apple_embedded.h +++ b/drivers/apple_embedded/display_server_apple_embedded.h @@ -39,7 +39,7 @@ */ #include "core/input/input.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #if defined(RD_ENABLED) #include "servers/rendering/renderer_rd/renderer_compositor_rd.h" diff --git a/drivers/apple_embedded/godot_view_renderer.mm b/drivers/apple_embedded/godot_view_renderer.mm index 6c0480efb7a..ac63e326c6b 100644 --- a/drivers/apple_embedded/godot_view_renderer.mm +++ b/drivers/apple_embedded/godot_view_renderer.mm @@ -38,7 +38,7 @@ #include "core/config/project_settings.h" #include "core/os/keyboard.h" #include "main/main.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #import #import diff --git a/drivers/apple_embedded/os_apple_embedded.h b/drivers/apple_embedded/os_apple_embedded.h index b65ee0f8fdd..4988304614c 100644 --- a/drivers/apple_embedded/os_apple_embedded.h +++ b/drivers/apple_embedded/os_apple_embedded.h @@ -45,7 +45,7 @@ #import "drivers/apple/joypad_apple.h" #import "drivers/coreaudio/audio_driver_coreaudio.h" #include "drivers/unix/os_unix.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #include "servers/rendering/renderer_compositor.h" #if defined(RD_ENABLED) diff --git a/drivers/apple_embedded/tts_apple_embedded.h b/drivers/apple_embedded/tts_apple_embedded.h index ff6611d9368..725754eb6d0 100644 --- a/drivers/apple_embedded/tts_apple_embedded.h +++ b/drivers/apple_embedded/tts_apple_embedded.h @@ -42,7 +42,7 @@ #include "core/templates/hash_map.h" #include "core/templates/list.h" #include "core/variant/array.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #if __has_include() #import diff --git a/drivers/coreaudio/audio_driver_coreaudio.h b/drivers/coreaudio/audio_driver_coreaudio.h index 0eeceed6da7..888c381b3cb 100644 --- a/drivers/coreaudio/audio_driver_coreaudio.h +++ b/drivers/coreaudio/audio_driver_coreaudio.h @@ -40,7 +40,7 @@ #ifdef COREAUDIO_ENABLED -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #import #ifdef MACOS_ENABLED diff --git a/drivers/d3d12/rendering_context_driver_d3d12.h b/drivers/d3d12/rendering_context_driver_d3d12.h index 781a2bb4bb6..0dcfbecb474 100644 --- a/drivers/d3d12/rendering_context_driver_d3d12.h +++ b/drivers/d3d12/rendering_context_driver_d3d12.h @@ -42,7 +42,7 @@ #include "core/string/ustring.h" #include "core/templates/rid_owner.h" #include "rendering_device_driver_d3d12.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include "servers/rendering/rendering_context_driver.h" GODOT_GCC_WARNING_PUSH diff --git a/drivers/egl/egl_manager.h b/drivers/egl/egl_manager.h index 13501ae6a99..177e00e5b85 100644 --- a/drivers/egl/egl_manager.h +++ b/drivers/egl/egl_manager.h @@ -44,7 +44,7 @@ #include "platform_gl.h" #include "core/templates/local_vector.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" class EGLManager { private: diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp index 6e2e6c54eca..9606f858e7a 100644 --- a/drivers/gles3/rasterizer_scene_gles3.cpp +++ b/drivers/gles3/rasterizer_scene_gles3.cpp @@ -50,7 +50,7 @@ #include "core/config/project_settings.h" #include "core/templates/sort_array.h" #include "servers/camera/camera_feed.h" -#include "servers/camera_server.h" +#include "servers/camera/camera_server.h" #include "servers/rendering/rendering_server_default.h" #include "servers/rendering/rendering_server_globals.h" diff --git a/drivers/gles3/rasterizer_scene_gles3.h b/drivers/gles3/rasterizer_scene_gles3.h index 22f9885e154..196a4214021 100644 --- a/drivers/gles3/rasterizer_scene_gles3.h +++ b/drivers/gles3/rasterizer_scene_gles3.h @@ -50,7 +50,7 @@ #include "scene/resources/mesh.h" #include "servers/rendering/renderer_compositor.h" #include "servers/rendering/renderer_scene_render.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include "shader_gles3.h" #include "storage/light_storage.h" #include "storage/material_storage.h" diff --git a/drivers/gles3/shader_gles3.h b/drivers/gles3/shader_gles3.h index 338eb5b3ac2..6b2845258bc 100644 --- a/drivers/gles3/shader_gles3.h +++ b/drivers/gles3/shader_gles3.h @@ -44,7 +44,7 @@ #include "core/templates/hash_map.h" #include "core/templates/local_vector.h" #include "core/templates/rid_owner.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #ifdef GLES3_ENABLED diff --git a/drivers/pulseaudio/audio_driver_pulseaudio.h b/drivers/pulseaudio/audio_driver_pulseaudio.h index 5e1513f7e78..84d8559c38b 100644 --- a/drivers/pulseaudio/audio_driver_pulseaudio.h +++ b/drivers/pulseaudio/audio_driver_pulseaudio.h @@ -43,7 +43,7 @@ #include "core/os/mutex.h" #include "core/os/thread.h" #include "core/templates/safe_refcount.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #ifdef SOWRAP_ENABLED #include "pulse-so_wrap.h" diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp index bab8dfebdbb..c09e1202458 100644 --- a/drivers/unix/os_unix.cpp +++ b/drivers/unix/os_unix.cpp @@ -48,7 +48,7 @@ #include "drivers/unix/file_access_unix_pipe.h" #include "drivers/unix/net_socket_unix.h" #include "drivers/unix/thread_posix.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #if defined(__APPLE__) #include diff --git a/drivers/wasapi/audio_driver_wasapi.h b/drivers/wasapi/audio_driver_wasapi.h index 186cb54b4e6..9058feaf96f 100644 --- a/drivers/wasapi/audio_driver_wasapi.h +++ b/drivers/wasapi/audio_driver_wasapi.h @@ -43,7 +43,7 @@ #include "core/os/mutex.h" #include "core/os/thread.h" #include "core/templates/safe_refcount.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #include #include diff --git a/drivers/xaudio2/audio_driver_xaudio2.h b/drivers/xaudio2/audio_driver_xaudio2.h index 17223d5b183..fa7927afd31 100644 --- a/drivers/xaudio2/audio_driver_xaudio2.h +++ b/drivers/xaudio2/audio_driver_xaudio2.h @@ -41,7 +41,7 @@ #include "core/os/mutex.h" #include "core/os/thread.h" #include "core/templates/safe_refcount.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #include #define WIN32_LEAN_AND_MEAN diff --git a/editor/animation/animation_player_editor_plugin.cpp b/editor/animation/animation_player_editor_plugin.cpp index cd4b90be0d3..0dc57f2763f 100644 --- a/editor/animation/animation_player_editor_plugin.cpp +++ b/editor/animation/animation_player_editor_plugin.cpp @@ -60,7 +60,7 @@ #include "scene/main/window.h" #include "scene/resources/animation.h" #include "scene/resources/image_texture.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" /////////////////////////////////// diff --git a/editor/audio/editor_audio_buses.cpp b/editor/audio/editor_audio_buses.cpp index 7a86b1889c8..b9303f4c9c6 100644 --- a/editor/audio/editor_audio_buses.cpp +++ b/editor/audio/editor_audio_buses.cpp @@ -54,7 +54,7 @@ #include "editor/themes/editor_theme_manager.h" #include "scene/gui/separator.h" #include "scene/resources/font.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" void EditorAudioBus::_update_visible_channels() { int i = 0; diff --git a/editor/debugger/editor_debugger_tree.cpp b/editor/debugger/editor_debugger_tree.cpp index ced44562145..ecec5f74681 100644 --- a/editor/debugger/editor_debugger_tree.cpp +++ b/editor/debugger/editor_debugger_tree.cpp @@ -48,7 +48,7 @@ #include "scene/debugger/scene_debugger.h" #include "scene/gui/texture_rect.h" #include "scene/resources/packed_scene.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" EditorDebuggerTree::EditorDebuggerTree() { set_v_size_flags(SIZE_EXPAND_FILL); diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index a6b71dd4c93..3871996f267 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -74,7 +74,7 @@ #include "scene/gui/tab_container.h" #include "scene/gui/tree.h" #include "servers/debugger/servers_debugger.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" using CameraOverride = EditorDebuggerNode::CameraOverride; diff --git a/editor/docks/filesystem_dock.cpp b/editor/docks/filesystem_dock.cpp index 2f3069f98ab..4b1d23b9f9d 100644 --- a/editor/docks/filesystem_dock.cpp +++ b/editor/docks/filesystem_dock.cpp @@ -71,7 +71,7 @@ #include "scene/gui/line_edit.h" #include "scene/gui/progress_bar.h" #include "scene/resources/packed_scene.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" Control *FileSystemTree::make_custom_tooltip(const String &p_text) const { TreeItem *item = get_item_at_position(get_local_mouse_position()); diff --git a/editor/docks/scene_tree_dock.cpp b/editor/docks/scene_tree_dock.cpp index eab8ee63fca..0ea0e7ef9fc 100644 --- a/editor/docks/scene_tree_dock.cpp +++ b/editor/docks/scene_tree_dock.cpp @@ -73,7 +73,7 @@ #include "scene/gui/check_box.h" #include "scene/property_utils.h" #include "scene/resources/packed_scene.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" void SceneTreeDock::_nodes_drag_begin() { pending_click_select = nullptr; diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 32ea76e79d5..fd5c280dde9 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -80,10 +80,10 @@ #include "scene/resources/packed_scene.h" #include "scene/resources/portable_compressed_texture.h" #include "scene/theme/theme_db.h" -#include "servers/display_server.h" -#include "servers/navigation_server_2d.h" -#include "servers/navigation_server_3d.h" -#include "servers/rendering_server.h" +#include "servers/display/display_server.h" +#include "servers/navigation_2d/navigation_server_2d.h" +#include "servers/navigation_3d/navigation_server_3d.h" +#include "servers/rendering/rendering_server.h" #include "editor/animation/animation_player_editor_plugin.h" #include "editor/asset_library/asset_library_editor_plugin.h" @@ -197,11 +197,11 @@ #include "modules/modules_enabled.gen.h" // For gdscript, mono. #ifndef PHYSICS_2D_DISABLED -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" #endif // PHYSICS_2D_DISABLED #ifndef PHYSICS_3D_DISABLED -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" #endif // PHYSICS_3D_DISABLED #ifdef ANDROID_ENABLED diff --git a/editor/file_system/uid_viewer.cpp b/editor/file_system/uid_viewer.cpp index 70b8f7d13cf..f6e9a973b90 100644 --- a/editor/file_system/uid_viewer.cpp +++ b/editor/file_system/uid_viewer.cpp @@ -42,7 +42,7 @@ #include "editor/docks/filesystem_dock.h" #include "editor/file_system/editor_file_system.h" #include "editor/themes/editor_scale.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" UIDViewer::UIDViewer() { // Create container diff --git a/editor/gui/editor_dir_dialog.cpp b/editor/gui/editor_dir_dialog.cpp index 93b7ee82664..cbe81f4f4fe 100644 --- a/editor/gui/editor_dir_dialog.cpp +++ b/editor/gui/editor_dir_dialog.cpp @@ -44,7 +44,7 @@ #include "editor/themes/editor_theme_manager.h" #include "scene/gui/box_container.h" #include "scene/gui/tree.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" void EditorDirDialog::_update_dir(const Color &p_default_folder_color, const Dictionary &p_assigned_folder_colors, const HashMap &p_folder_colors, bool p_is_dark_theme, TreeItem *p_item, EditorFileSystemDirectory *p_dir, const String &p_select_path) { updating = true; diff --git a/editor/gui/editor_file_dialog.cpp b/editor/gui/editor_file_dialog.cpp index 5a92269c072..8a45207c856 100644 --- a/editor/gui/editor_file_dialog.cpp +++ b/editor/gui/editor_file_dialog.cpp @@ -58,7 +58,7 @@ #include "scene/gui/separator.h" #include "scene/gui/split_container.h" #include "scene/gui/texture_rect.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" void EditorFileDialog::_native_popup() { // Show native dialog directly. diff --git a/editor/gui/progress_dialog.cpp b/editor/gui/progress_dialog.cpp index a770beb6367..8c6120e7bad 100644 --- a/editor/gui/progress_dialog.cpp +++ b/editor/gui/progress_dialog.cpp @@ -45,7 +45,7 @@ #include "main/main.h" #include "scene/gui/panel_container.h" #include "scene/main/window.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" void BackgroundProgress::_add_task(const String &p_task, const String &p_label, int p_steps) { _THREAD_SAFE_METHOD_ diff --git a/editor/import/resource_importer_bmfont.h b/editor/import/resource_importer_bmfont.h index cec8345eb34..3fc31d85071 100644 --- a/editor/import/resource_importer_bmfont.h +++ b/editor/import/resource_importer_bmfont.h @@ -40,7 +40,7 @@ #include "core/io/resource_importer.h" #include "scene/resources/font.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" class ResourceImporterBMFont : public ResourceImporter { GDCLASS(ResourceImporterBMFont, ResourceImporter); diff --git a/editor/import/resource_importer_dynamic_font.cpp b/editor/import/resource_importer_dynamic_font.cpp index 59185c2b88f..a405d8d1078 100644 --- a/editor/import/resource_importer_dynamic_font.cpp +++ b/editor/import/resource_importer_dynamic_font.cpp @@ -42,7 +42,7 @@ #include "core/io/resource_saver.h" #include "editor/import/dynamic_font_import_settings.h" #include "scene/resources/font.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" String ResourceImporterDynamicFont::get_importer_name() const { return "font_data_dynamic"; diff --git a/editor/import/resource_importer_imagefont.h b/editor/import/resource_importer_imagefont.h index 4340aeb4264..32a6459f2a6 100644 --- a/editor/import/resource_importer_imagefont.h +++ b/editor/import/resource_importer_imagefont.h @@ -40,7 +40,7 @@ #include "core/io/resource_importer.h" #include "scene/resources/font.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" class ResourceImporterImageFont : public ResourceImporter { GDCLASS(ResourceImporterImageFont, ResourceImporter); diff --git a/editor/import/resource_importer_texture.h b/editor/import/resource_importer_texture.h index d6964f64433..7daa64fd711 100644 --- a/editor/import/resource_importer_texture.h +++ b/editor/import/resource_importer_texture.h @@ -41,7 +41,7 @@ #include "core/io/file_access.h" #include "core/io/image.h" #include "core/io/resource_importer.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class CompressedTexture2D; diff --git a/editor/project_manager/project_manager.cpp b/editor/project_manager/project_manager.cpp index 5abe829abd0..26aa5ced432 100644 --- a/editor/project_manager/project_manager.cpp +++ b/editor/project_manager/project_manager.cpp @@ -70,17 +70,17 @@ #include "scene/gui/separator.h" #include "scene/main/window.h" #include "scene/theme/theme_db.h" -#include "servers/display_server.h" -#include "servers/navigation_server_3d.h" - -#ifndef PHYSICS_3D_DISABLED -#include "servers/physics_server_3d.h" -#endif // PHYSICS_3D_DISABLED +#include "servers/display/display_server.h" +#include "servers/navigation_3d/navigation_server_3d.h" #ifndef PHYSICS_2D_DISABLED -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" #endif // PHYSICS_2D_DISABLED +#ifndef PHYSICS_3D_DISABLED +#include "servers/physics_3d/physics_server_3d.h" +#endif // PHYSICS_3D_DISABLED + constexpr int GODOT4_CONFIG_VERSION = 5; ProjectManager *ProjectManager::singleton = nullptr; diff --git a/editor/run/editor_run.cpp b/editor/run/editor_run.cpp index 9418fd17be1..2478162747e 100644 --- a/editor/run/editor_run.cpp +++ b/editor/run/editor_run.cpp @@ -44,7 +44,7 @@ #include "editor/run/run_instances_dialog.h" #include "editor/settings/editor_settings.h" #include "main/main.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" EditorRun::Status EditorRun::get_status() const { return status; diff --git a/editor/run/editor_run_bar.cpp b/editor/run/editor_run_bar.cpp index e98ab93ca20..316d6cf94a3 100644 --- a/editor/run/editor_run_bar.cpp +++ b/editor/run/editor_run_bar.cpp @@ -57,7 +57,7 @@ #include "scene/gui/panel_container.h" #ifndef XR_DISABLED -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" #endif // XR_DISABLED EditorRunBar *EditorRunBar::singleton = nullptr; diff --git a/editor/scene/2d/tiles/tile_data_editors.cpp b/editor/scene/2d/tiles/tile_data_editors.cpp index 0e440b36bf9..db8b2d0017b 100644 --- a/editor/scene/2d/tiles/tile_data_editors.cpp +++ b/editor/scene/2d/tiles/tile_data_editors.cpp @@ -58,7 +58,7 @@ #include "scene/gui/separator.h" #include "scene/gui/spin_box.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" void TileDataEditor::_tile_set_changed_plan_update() { _tile_set_changed_update_needed = true; diff --git a/editor/scene/2d/tiles/tile_set_atlas_source_editor.cpp b/editor/scene/2d/tiles/tile_set_atlas_source_editor.cpp index 4586afccfda..bce1be76608 100644 --- a/editor/scene/2d/tiles/tile_set_atlas_source_editor.cpp +++ b/editor/scene/2d/tiles/tile_set_atlas_source_editor.cpp @@ -56,7 +56,7 @@ #include "core/math/geometry_2d.h" #include "core/os/keyboard.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::set_id(int p_id) { ERR_FAIL_COND(p_id < 0); diff --git a/editor/script/script_editor_plugin.cpp b/editor/script/script_editor_plugin.cpp index d5a748a0ad4..4c9c6e09e9f 100644 --- a/editor/script/script_editor_plugin.cpp +++ b/editor/script/script_editor_plugin.cpp @@ -80,7 +80,7 @@ #include "scene/main/node.h" #include "scene/main/window.h" #include "script_text_editor.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include "text_editor.h" /*** SYNTAX HIGHLIGHTER ****/ diff --git a/editor/shader/shader_file_editor_plugin.cpp b/editor/shader/shader_file_editor_plugin.cpp index a5045884e87..69d718f387b 100644 --- a/editor/shader/shader_file_editor_plugin.cpp +++ b/editor/shader/shader_file_editor_plugin.cpp @@ -45,7 +45,7 @@ #include "editor/themes/editor_scale.h" #include "scene/gui/item_list.h" #include "scene/gui/split_container.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" /*** SHADER SCRIPT EDITOR ****/ diff --git a/editor/shader/visual_shader_editor_plugin.cpp b/editor/shader/visual_shader_editor_plugin.cpp index e5911d8d105..bdd0b6e032d 100644 --- a/editor/shader/visual_shader_editor_plugin.cpp +++ b/editor/shader/visual_shader_editor_plugin.cpp @@ -79,7 +79,7 @@ #include "scene/resources/style_box_flat.h" #include "scene/resources/visual_shader_nodes.h" #include "scene/resources/visual_shader_particle_nodes.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include "servers/rendering/shader_preprocessor.h" #include "servers/rendering/shader_types.h" diff --git a/main/main.cpp b/main/main.cpp index 0135fad6e4b..cbca04763b3 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -77,39 +77,39 @@ #include "scene/resources/packed_scene.h" #include "scene/theme/theme_db.h" #include "servers/audio/audio_driver_dummy.h" -#include "servers/audio_server.h" -#include "servers/camera_server.h" -#include "servers/display_server.h" +#include "servers/audio/audio_server.h" +#include "servers/camera/camera_server.h" +#include "servers/display/display_server.h" #include "servers/movie_writer/movie_writer.h" #include "servers/register_server_types.h" #include "servers/rendering/rendering_server_default.h" +#include "servers/text/text_server.h" #include "servers/text/text_server_dummy.h" -#include "servers/text_server.h" // 2D #ifndef NAVIGATION_2D_DISABLED -#include "servers/navigation_server_2d.h" -#include "servers/navigation_server_2d_dummy.h" +#include "servers/navigation_2d/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d_dummy.h" #endif // NAVIGATION_2D_DISABLED #ifndef PHYSICS_2D_DISABLED -#include "servers/physics_server_2d.h" -#include "servers/physics_server_2d_dummy.h" +#include "servers/physics_2d/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d_dummy.h" #endif // PHYSICS_2D_DISABLED // 3D #ifndef NAVIGATION_3D_DISABLED -#include "servers/navigation_server_3d.h" -#include "servers/navigation_server_3d_dummy.h" +#include "servers/navigation_3d/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d_dummy.h" #endif // NAVIGATION_3D_DISABLED #ifndef PHYSICS_3D_DISABLED -#include "servers/physics_server_3d.h" -#include "servers/physics_server_3d_dummy.h" +#include "servers/physics_3d/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d_dummy.h" #endif // PHYSICS_3D_DISABLED #ifndef XR_DISABLED -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" #endif // XR_DISABLED #ifdef TESTS_ENABLED diff --git a/main/main_timer_sync.cpp b/main/main_timer_sync.cpp index cbf4a463762..155161ee198 100644 --- a/main/main_timer_sync.cpp +++ b/main/main_timer_sync.cpp @@ -39,7 +39,7 @@ #include "main_timer_sync.h" #include "core/os/os.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" void MainFrameTime::clamp_process_step(double min_process_step, double max_process_step) { if (process_step < min_process_step) { diff --git a/main/performance.cpp b/main/performance.cpp index 87a1ec89b9b..e6f3c3daff0 100644 --- a/main/performance.cpp +++ b/main/performance.cpp @@ -42,21 +42,23 @@ #include "core/variant/typed_array.h" #include "scene/main/node.h" #include "scene/main/scene_tree.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" +#include "servers/rendering/rendering_server.h" + #ifndef NAVIGATION_2D_DISABLED -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" #endif // NAVIGATION_2D_DISABLED + #ifndef NAVIGATION_3D_DISABLED -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" #endif // NAVIGATION_3D_DISABLED -#include "servers/rendering_server.h" #ifndef PHYSICS_2D_DISABLED -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" #endif // PHYSICS_2D_DISABLED #ifndef PHYSICS_3D_DISABLED -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" #endif // PHYSICS_3D_DISABLED Performance *Performance::singleton = nullptr; @@ -305,6 +307,7 @@ double Performance::get_monitor(Monitor p_monitor) const { case AUDIO_OUTPUT_LATENCY: return AudioServer::get_singleton()->get_output_latency(); + // Deprecated, use the 2D/3D specific ones instead. case NAVIGATION_ACTIVE_MAPS: #ifndef NAVIGATION_2D_DISABLED info = NavigationServer2D::get_singleton()->get_process_info(NavigationServer2D::INFO_ACTIVE_MAPS); @@ -501,6 +504,7 @@ Performance::MonitorType Performance::get_monitor_type(Monitor p_monitor) const MONITOR_TYPE_QUANTITY, MONITOR_TYPE_QUANTITY, MONITOR_TYPE_QUANTITY, +#ifndef _3D_DISABLED MONITOR_TYPE_QUANTITY, MONITOR_TYPE_QUANTITY, MONITOR_TYPE_QUANTITY, @@ -511,6 +515,7 @@ Performance::MonitorType Performance::get_monitor_type(Monitor p_monitor) const MONITOR_TYPE_QUANTITY, MONITOR_TYPE_QUANTITY, MONITOR_TYPE_QUANTITY, +#endif // _3D_DISABLED }; static_assert((sizeof(types) / sizeof(MonitorType)) == MONITOR_MAX); diff --git a/main/performance.h b/main/performance.h index 4175b73fcf2..04a413edfd4 100644 --- a/main/performance.h +++ b/main/performance.h @@ -98,6 +98,7 @@ class Performance : public Object { PHYSICS_3D_COLLISION_PAIRS, PHYSICS_3D_ISLAND_COUNT, AUDIO_OUTPUT_LATENCY, + // Deprecated, use the 2D/3D specific ones instead. NAVIGATION_ACTIVE_MAPS, NAVIGATION_REGION_COUNT, NAVIGATION_AGENT_COUNT, @@ -123,6 +124,7 @@ class Performance : public Object { NAVIGATION_2D_EDGE_CONNECTION_COUNT, NAVIGATION_2D_EDGE_FREE_COUNT, NAVIGATION_2D_OBSTACLE_COUNT, +#ifndef _3D_DISABLED NAVIGATION_3D_ACTIVE_MAPS, NAVIGATION_3D_REGION_COUNT, NAVIGATION_3D_AGENT_COUNT, @@ -133,6 +135,7 @@ class Performance : public Object { NAVIGATION_3D_EDGE_CONNECTION_COUNT, NAVIGATION_3D_EDGE_FREE_COUNT, NAVIGATION_3D_OBSTACLE_COUNT, +#endif // _3D_DISABLED MONITOR_MAX }; diff --git a/modules/basis_universal/image_compress_basisu.cpp b/modules/basis_universal/image_compress_basisu.cpp index 856b74fb0e0..95553d67283 100644 --- a/modules/basis_universal/image_compress_basisu.cpp +++ b/modules/basis_universal/image_compress_basisu.cpp @@ -42,7 +42,7 @@ #include "core/io/image.h" #include "core/os/os.h" #include "core/string/print_string.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include #ifdef TOOLS_ENABLED diff --git a/modules/betsy/image_compress_betsy.cpp b/modules/betsy/image_compress_betsy.cpp index d86af30a66c..89e98e51699 100644 --- a/modules/betsy/image_compress_betsy.cpp +++ b/modules/betsy/image_compress_betsy.cpp @@ -46,7 +46,7 @@ #include "bc1.glsl.gen.h" #include "bc4.glsl.gen.h" #include "bc6h.glsl.gen.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" static Mutex betsy_mutex; static BetsyCompressor *betsy = nullptr; diff --git a/modules/camera/camera_android.h b/modules/camera/camera_android.h index 5a3eae5c8a7..9436be70626 100644 --- a/modules/camera/camera_android.h +++ b/modules/camera/camera_android.h @@ -39,7 +39,7 @@ */ #include "servers/camera/camera_feed.h" -#include "servers/camera_server.h" +#include "servers/camera/camera_server.h" #include #include diff --git a/modules/camera/camera_feed_linux.cpp b/modules/camera/camera_feed_linux.cpp index 381503c2760..999ff04e496 100644 --- a/modules/camera/camera_feed_linux.cpp +++ b/modules/camera/camera_feed_linux.cpp @@ -38,7 +38,7 @@ #include "camera_feed_linux.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include #include diff --git a/modules/camera/camera_linux.h b/modules/camera/camera_linux.h index 5bf88711d75..e064c423370 100644 --- a/modules/camera/camera_linux.h +++ b/modules/camera/camera_linux.h @@ -40,7 +40,7 @@ #include "core/os/mutex.h" #include "core/os/thread.h" -#include "servers/camera_server.h" +#include "servers/camera/camera_server.h" class CameraLinux : public CameraServer { private: diff --git a/modules/camera/camera_macos.h b/modules/camera/camera_macos.h index 7631dbd1bdb..02db113499c 100644 --- a/modules/camera/camera_macos.h +++ b/modules/camera/camera_macos.h @@ -41,7 +41,7 @@ /// @todo This is a near duplicate of CameraIOS, we should find a way to combine those to minimize code duplication!!!! /// If you fix something here, make sure you fix it there as well! -#include "servers/camera_server.h" +#include "servers/camera/camera_server.h" class CameraMacOS : public CameraServer { GDSOFTCLASS(CameraMacOS, CameraServer); diff --git a/modules/camera/camera_win.h b/modules/camera/camera_win.h index 7d71a2c49f6..c0749c216e9 100644 --- a/modules/camera/camera_win.h +++ b/modules/camera/camera_win.h @@ -39,7 +39,7 @@ */ #include "servers/camera/camera_feed.h" -#include "servers/camera_server.h" +#include "servers/camera/camera_server.h" class CameraWindows : public CameraServer { private: diff --git a/modules/csg/csg_shape.cpp b/modules/csg/csg_shape.cpp index 65d3d1e6d50..7bc0a18d3db 100644 --- a/modules/csg/csg_shape.cpp +++ b/modules/csg/csg_shape.cpp @@ -45,7 +45,7 @@ #include "scene/resources/3d/navigation_mesh_source_geometry_data_3d.h" #include "scene/resources/navigation_mesh.h" #ifndef NAVIGATION_3D_DISABLED -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" #endif // NAVIGATION_3D_DISABLED #include diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index c33a332620c..13a835624de 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -48,7 +48,7 @@ #ifdef DEBUG_ENABLED #include "core/string/string_builder.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" #endif #ifdef TOOLS_ENABLED diff --git a/modules/gdscript/gdscript_tokenizer.cpp b/modules/gdscript/gdscript_tokenizer.cpp index 5a17cbba03e..999c7f57a89 100644 --- a/modules/gdscript/gdscript_tokenizer.cpp +++ b/modules/gdscript/gdscript_tokenizer.cpp @@ -42,7 +42,7 @@ #include "core/string/char_utils.h" #ifdef DEBUG_ENABLED -#include "servers/text_server.h" +#include "servers/text/text_server.h" #endif #ifdef TOOLS_ENABLED diff --git a/modules/gdscript/language_server/gdscript_text_document.cpp b/modules/gdscript/language_server/gdscript_text_document.cpp index cf100db2c68..1f07dc7fa51 100644 --- a/modules/gdscript/language_server/gdscript_text_document.cpp +++ b/modules/gdscript/language_server/gdscript_text_document.cpp @@ -44,7 +44,7 @@ #include "editor/script/script_text_editor.h" #include "editor/settings/editor_settings.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" void GDScriptTextDocument::_bind_methods() { ClassDB::bind_method(D_METHOD("didOpen"), &GDScriptTextDocument::didOpen); diff --git a/modules/godot_physics_2d/godot_area_2d.h b/modules/godot_physics_2d/godot_area_2d.h index 780f154055a..466ee372aa4 100644 --- a/modules/godot_physics_2d/godot_area_2d.h +++ b/modules/godot_physics_2d/godot_area_2d.h @@ -41,7 +41,7 @@ #include "godot_collision_object_2d.h" #include "core/templates/self_list.h" -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" class GodotSpace2D; class GodotBody2D; diff --git a/modules/godot_physics_2d/godot_body_direct_state_2d.h b/modules/godot_physics_2d/godot_body_direct_state_2d.h index 8b7de31cb85..ebb681e4a15 100644 --- a/modules/godot_physics_2d/godot_body_direct_state_2d.h +++ b/modules/godot_physics_2d/godot_body_direct_state_2d.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" class GodotBody2D; diff --git a/modules/godot_physics_2d/godot_collision_object_2d.h b/modules/godot_physics_2d/godot_collision_object_2d.h index 93e58583719..cd4b844dea5 100644 --- a/modules/godot_physics_2d/godot_collision_object_2d.h +++ b/modules/godot_physics_2d/godot_collision_object_2d.h @@ -42,7 +42,7 @@ #include "godot_shape_2d.h" #include "core/templates/self_list.h" -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" class GodotSpace2D; diff --git a/modules/godot_physics_2d/godot_physics_server_2d.h b/modules/godot_physics_2d/godot_physics_server_2d.h index f2721ae76f7..0d7f426a7bb 100644 --- a/modules/godot_physics_2d/godot_physics_server_2d.h +++ b/modules/godot_physics_2d/godot_physics_server_2d.h @@ -44,7 +44,7 @@ #include "godot_step_2d.h" #include "core/templates/rid_owner.h" -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" class GodotPhysicsServer2D : public PhysicsServer2D { GDCLASS(GodotPhysicsServer2D, PhysicsServer2D); diff --git a/modules/godot_physics_2d/godot_shape_2d.h b/modules/godot_physics_2d/godot_shape_2d.h index e39fcf06e80..4deeccdb3a3 100644 --- a/modules/godot_physics_2d/godot_shape_2d.h +++ b/modules/godot_physics_2d/godot_shape_2d.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" class GodotShape2D; diff --git a/modules/godot_physics_2d/register_types.cpp b/modules/godot_physics_2d/register_types.cpp index 9d9ddf1f17a..51ce7a67b17 100644 --- a/modules/godot_physics_2d/register_types.cpp +++ b/modules/godot_physics_2d/register_types.cpp @@ -40,8 +40,8 @@ #include "core/config/project_settings.h" #include "godot_physics_server_2d.h" -#include "servers/physics_server_2d.h" -#include "servers/physics_server_2d_wrap_mt.h" +#include "servers/physics_2d/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d_wrap_mt.h" static PhysicsServer2D *_createGodotPhysics2DCallback() { #ifdef THREADS_ENABLED diff --git a/modules/godot_physics_3d/godot_area_3d.h b/modules/godot_physics_3d/godot_area_3d.h index d1ffe32785b..f5282f68628 100644 --- a/modules/godot_physics_3d/godot_area_3d.h +++ b/modules/godot_physics_3d/godot_area_3d.h @@ -41,7 +41,7 @@ #include "godot_collision_object_3d.h" #include "core/templates/self_list.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" class GodotSpace3D; class GodotBody3D; diff --git a/modules/godot_physics_3d/godot_body_direct_state_3d.h b/modules/godot_physics_3d/godot_body_direct_state_3d.h index 483c253fdf8..10f8fedfb9d 100644 --- a/modules/godot_physics_3d/godot_body_direct_state_3d.h +++ b/modules/godot_physics_3d/godot_body_direct_state_3d.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" class GodotBody3D; diff --git a/modules/godot_physics_3d/godot_collision_object_3d.h b/modules/godot_physics_3d/godot_collision_object_3d.h index 7012a5ec350..32e8ac61841 100644 --- a/modules/godot_physics_3d/godot_collision_object_3d.h +++ b/modules/godot_physics_3d/godot_collision_object_3d.h @@ -42,7 +42,7 @@ #include "godot_shape_3d.h" #include "core/templates/self_list.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" #ifdef DEBUG_ENABLED #define MAX_OBJECT_DISTANCE 3.1622776601683791e+18 diff --git a/modules/godot_physics_3d/godot_physics_server_3d.h b/modules/godot_physics_3d/godot_physics_server_3d.h index e1905832d31..3962964a04c 100644 --- a/modules/godot_physics_3d/godot_physics_server_3d.h +++ b/modules/godot_physics_3d/godot_physics_server_3d.h @@ -44,7 +44,7 @@ #include "godot_step_3d.h" #include "core/templates/rid_owner.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" class GodotPhysicsServer3D : public PhysicsServer3D { GDCLASS(GodotPhysicsServer3D, PhysicsServer3D); diff --git a/modules/godot_physics_3d/godot_shape_3d.h b/modules/godot_physics_3d/godot_shape_3d.h index 52e0e9da250..13e7bb4b4fc 100644 --- a/modules/godot_physics_3d/godot_shape_3d.h +++ b/modules/godot_physics_3d/godot_shape_3d.h @@ -40,7 +40,7 @@ #include "core/math/geometry_3d.h" #include "core/templates/local_vector.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" class GodotShape3D; diff --git a/modules/godot_physics_3d/godot_soft_body_3d.cpp b/modules/godot_physics_3d/godot_soft_body_3d.cpp index a4df31f710b..2f726ee6cc5 100644 --- a/modules/godot_physics_3d/godot_soft_body_3d.cpp +++ b/modules/godot_physics_3d/godot_soft_body_3d.cpp @@ -54,7 +54,7 @@ #include "godot_space_3d.h" #include "core/math/geometry_3d.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" ///btSoftBody implementation by Nathanael Presson GodotSoftBody3D::GodotSoftBody3D() : diff --git a/modules/godot_physics_3d/register_types.cpp b/modules/godot_physics_3d/register_types.cpp index d8afd96b389..225148d7f0c 100644 --- a/modules/godot_physics_3d/register_types.cpp +++ b/modules/godot_physics_3d/register_types.cpp @@ -39,8 +39,8 @@ #include "register_types.h" #include "godot_physics_server_3d.h" -#include "servers/physics_server_3d.h" -#include "servers/physics_server_3d_wrap_mt.h" +#include "servers/physics_3d/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d_wrap_mt.h" static PhysicsServer3D *_createGodotPhysics3DCallback() { #ifdef THREADS_ENABLED diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp index 1edc3d8dc70..2a76154cbc9 100644 --- a/modules/gridmap/grid_map.cpp +++ b/modules/gridmap/grid_map.cpp @@ -43,7 +43,7 @@ #include "scene/resources/3d/mesh_library.h" #include "scene/resources/3d/primitive_meshes.h" #include "scene/resources/surface_tool.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #ifndef PHYSICS_3D_DISABLED #include "core/math/convex_hull.h" @@ -60,7 +60,7 @@ #ifndef NAVIGATION_3D_DISABLED #include "scene/resources/3d/navigation_mesh_source_geometry_data_3d.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" Callable GridMap::_navmesh_source_geometry_parsing_callback; RID GridMap::_navmesh_source_geometry_parser; diff --git a/modules/jolt_physics/joints/jolt_joint_3d.h b/modules/jolt_physics/joints/jolt_joint_3d.h index ba7b655dd28..6c4a87e8875 100644 --- a/modules/jolt_physics/joints/jolt_joint_3d.h +++ b/modules/jolt_physics/joints/jolt_joint_3d.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" #include "Jolt/Jolt.h" diff --git a/modules/jolt_physics/jolt_physics_server_3d.cpp b/modules/jolt_physics/jolt_physics_server_3d.cpp index 87602b1bd5e..2950328ad48 100644 --- a/modules/jolt_physics/jolt_physics_server_3d.cpp +++ b/modules/jolt_physics/jolt_physics_server_3d.cpp @@ -47,7 +47,7 @@ #include "objects/jolt_area_3d.h" #include "objects/jolt_body_3d.h" #include "objects/jolt_soft_body_3d.h" -#include "servers/physics_server_3d_wrap_mt.h" +#include "servers/physics_3d/physics_server_3d_wrap_mt.h" #include "shapes/jolt_box_shape_3d.h" #include "shapes/jolt_capsule_shape_3d.h" #include "shapes/jolt_concave_polygon_shape_3d.h" diff --git a/modules/jolt_physics/jolt_physics_server_3d.h b/modules/jolt_physics/jolt_physics_server_3d.h index c405a57f735..cbd40a0bc6b 100644 --- a/modules/jolt_physics/jolt_physics_server_3d.h +++ b/modules/jolt_physics/jolt_physics_server_3d.h @@ -39,7 +39,7 @@ */ #include "core/templates/rid_owner.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" class JoltArea3D; class JoltBody3D; diff --git a/modules/jolt_physics/objects/jolt_area_3d.h b/modules/jolt_physics/objects/jolt_area_3d.h index cfa10a9a9cf..be2ab240419 100644 --- a/modules/jolt_physics/objects/jolt_area_3d.h +++ b/modules/jolt_physics/objects/jolt_area_3d.h @@ -40,7 +40,7 @@ #include "jolt_shaped_object_3d.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" class JoltBody3D; class JoltSoftBody3D; diff --git a/modules/jolt_physics/objects/jolt_physics_direct_body_state_3d.h b/modules/jolt_physics/objects/jolt_physics_direct_body_state_3d.h index 526fa8f268a..cc7b73905e2 100644 --- a/modules/jolt_physics/objects/jolt_physics_direct_body_state_3d.h +++ b/modules/jolt_physics/objects/jolt_physics_direct_body_state_3d.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" class JoltBody3D; diff --git a/modules/jolt_physics/objects/jolt_soft_body_3d.cpp b/modules/jolt_physics/objects/jolt_soft_body_3d.cpp index 6f187806cdb..9fe1784c2f3 100644 --- a/modules/jolt_physics/objects/jolt_soft_body_3d.cpp +++ b/modules/jolt_physics/objects/jolt_soft_body_3d.cpp @@ -46,7 +46,7 @@ #include "jolt_body_3d.h" #include "jolt_group_filter.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include "Jolt/Physics/SoftBody/SoftBodyMotionProperties.h" diff --git a/modules/jolt_physics/objects/jolt_soft_body_3d.h b/modules/jolt_physics/objects/jolt_soft_body_3d.h index 2ee847cac12..d8a746de156 100644 --- a/modules/jolt_physics/objects/jolt_soft_body_3d.h +++ b/modules/jolt_physics/objects/jolt_soft_body_3d.h @@ -40,7 +40,7 @@ #include "jolt_object_3d.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" #include "Jolt/Jolt.h" diff --git a/modules/jolt_physics/register_types.cpp b/modules/jolt_physics/register_types.cpp index df6e66e7381..12b8f51ad7e 100644 --- a/modules/jolt_physics/register_types.cpp +++ b/modules/jolt_physics/register_types.cpp @@ -42,7 +42,7 @@ #include "jolt_physics_server_3d.h" #include "jolt_project_settings.h" -#include "servers/physics_server_3d_wrap_mt.h" +#include "servers/physics_3d/physics_server_3d_wrap_mt.h" PhysicsServer3D *create_jolt_physics_server() { #ifdef THREADS_ENABLED diff --git a/modules/jolt_physics/shapes/jolt_shape_3d.h b/modules/jolt_physics/shapes/jolt_shape_3d.h index 349bbd21f81..499f4f75add 100644 --- a/modules/jolt_physics/shapes/jolt_shape_3d.h +++ b/modules/jolt_physics/shapes/jolt_shape_3d.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" #include "Jolt/Jolt.h" diff --git a/modules/jolt_physics/spaces/jolt_physics_direct_space_state_3d.h b/modules/jolt_physics/spaces/jolt_physics_direct_space_state_3d.h index 80245c0c209..8f9d96a0ce6 100644 --- a/modules/jolt_physics/spaces/jolt_physics_direct_space_state_3d.h +++ b/modules/jolt_physics/spaces/jolt_physics_direct_space_state_3d.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" #include "Jolt/Jolt.h" diff --git a/modules/jolt_physics/spaces/jolt_space_3d.h b/modules/jolt_physics/spaces/jolt_space_3d.h index 5763cee380a..1d08c288e22 100644 --- a/modules/jolt_physics/spaces/jolt_space_3d.h +++ b/modules/jolt_physics/spaces/jolt_space_3d.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" #include "Jolt/Jolt.h" diff --git a/modules/mcp/mcp_bridge.cpp b/modules/mcp/mcp_bridge.cpp index 83fbb3498db..128769998dc 100644 --- a/modules/mcp/mcp_bridge.cpp +++ b/modules/mcp/mcp_bridge.cpp @@ -52,7 +52,7 @@ #include "scene/main/scene_tree.h" #include "scene/main/viewport.h" #include "scene/main/window.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include MCPBridge *MCPBridge::singleton = nullptr; diff --git a/modules/mobile_vr/mobile_vr_interface.cpp b/modules/mobile_vr/mobile_vr_interface.cpp index c1a6b0a8a21..4de10e8ccdf 100644 --- a/modules/mobile_vr/mobile_vr_interface.cpp +++ b/modules/mobile_vr/mobile_vr_interface.cpp @@ -40,7 +40,7 @@ #include "core/input/input.h" #include "core/os/os.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include "servers/rendering/renderer_compositor.h" StringName MobileVRInterface::get_name() const { diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp index b1f985b2e99..eff92bc1746 100644 --- a/modules/mono/csharp_script.cpp +++ b/modules/mono/csharp_script.cpp @@ -63,7 +63,7 @@ #include "core/os/mutex.h" #include "core/os/os.h" #include "core/os/thread.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" #ifdef TOOLS_ENABLED #include "core/os/keyboard.h" diff --git a/modules/navigation_2d/2d/godot_navigation_server_2d.h b/modules/navigation_2d/2d/godot_navigation_server_2d.h index 96ba9f8b40a..d655b289b8b 100644 --- a/modules/navigation_2d/2d/godot_navigation_server_2d.h +++ b/modules/navigation_2d/2d/godot_navigation_server_2d.h @@ -47,9 +47,9 @@ #include "core/templates/local_vector.h" #include "core/templates/rid.h" #include "core/templates/rid_owner.h" -#include "servers/navigation/navigation_path_query_parameters_2d.h" -#include "servers/navigation/navigation_path_query_result_2d.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_path_query_parameters_2d.h" +#include "servers/navigation_2d/navigation_path_query_result_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" /// The commands are functions executed during the `sync` phase. diff --git a/modules/navigation_2d/2d/nav_base_iteration_2d.h b/modules/navigation_2d/2d/nav_base_iteration_2d.h index 70d7c8e9932..c2b5b614fd6 100644 --- a/modules/navigation_2d/2d/nav_base_iteration_2d.h +++ b/modules/navigation_2d/2d/nav_base_iteration_2d.h @@ -41,7 +41,7 @@ #include "../nav_utils_2d.h" #include "core/object/ref_counted.h" -#include "servers/navigation/navigation_utilities.h" +#include "servers/navigation_2d/navigation_constants_2d.h" class NavBaseIteration2D : public RefCounted { GDCLASS(NavBaseIteration2D, RefCounted); @@ -51,7 +51,7 @@ class NavBaseIteration2D : public RefCounted { uint32_t navigation_layers = 1; real_t enter_cost = 0.0; real_t travel_cost = 1.0; - NavigationUtilities::PathSegmentType owner_type; + NavigationEnums2D::PathSegmentType owner_type; ObjectID owner_object_id; RID owner_rid; bool owner_use_edge_connections = false; @@ -59,7 +59,7 @@ class NavBaseIteration2D : public RefCounted { LocalVector> internal_connections; bool get_enabled() const { return enabled; } - NavigationUtilities::PathSegmentType get_type() const { return owner_type; } + NavigationEnums2D::PathSegmentType get_type() const { return owner_type; } RID get_self() const { return owner_rid; } ObjectID get_owner_id() const { return owner_object_id; } uint32_t get_navigation_layers() const { return navigation_layers; } diff --git a/modules/navigation_2d/2d/nav_mesh_generator_2d.h b/modules/navigation_2d/2d/nav_mesh_generator_2d.h index 2608c5ace85..2645f6afe63 100644 --- a/modules/navigation_2d/2d/nav_mesh_generator_2d.h +++ b/modules/navigation_2d/2d/nav_mesh_generator_2d.h @@ -43,7 +43,7 @@ #include "core/object/class_db.h" #include "core/object/worker_thread_pool.h" #include "core/templates/rid_owner.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" class Node; class NavigationPolygon; diff --git a/modules/navigation_2d/2d/nav_mesh_queries_2d.cpp b/modules/navigation_2d/2d/nav_mesh_queries_2d.cpp index 37455423cb7..4a08f7d4981 100644 --- a/modules/navigation_2d/2d/nav_mesh_queries_2d.cpp +++ b/modules/navigation_2d/2d/nav_mesh_queries_2d.cpp @@ -44,7 +44,6 @@ #include "nav_region_iteration_2d.h" #include "core/math/geometry_2d.h" -#include "servers/navigation/navigation_utilities.h" using namespace Nav2D; @@ -159,7 +158,7 @@ void NavMeshQueries2D::map_query_path(NavMap2D *p_map, const Refget_start_position(); @@ -1164,7 +1163,7 @@ bool NavMeshQueries2D::_query_task_is_connection_owner_usable(const NavMeshPathQ if (p_query_task.exclude_regions || p_query_task.include_regions) { switch (p_owner->get_type()) { - case NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_REGION: { + case NavigationEnums2D::PathSegmentType::PATH_SEGMENT_TYPE_REGION: { if (p_query_task.exclude_regions && p_query_task.excluded_regions.has(p_owner->get_self())) { // Not usable. Exclude region filter is active and this region is excluded. owner_usable = false; @@ -1173,7 +1172,7 @@ bool NavMeshQueries2D::_query_task_is_connection_owner_usable(const NavMeshPathQ owner_usable = false; } } break; - case NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_LINK: { + case NavigationEnums2D::PathSegmentType::PATH_SEGMENT_TYPE_LINK: { const LocalVector &link_polygons = p_owner->get_navmesh_polygons(); if (link_polygons.size() != 2) { // Not usable. Whatever this is, it is not a valid connected link. diff --git a/modules/navigation_2d/2d/nav_mesh_queries_2d.h b/modules/navigation_2d/2d/nav_mesh_queries_2d.h index 5958a35277d..5479f7509d2 100644 --- a/modules/navigation_2d/2d/nav_mesh_queries_2d.h +++ b/modules/navigation_2d/2d/nav_mesh_queries_2d.h @@ -42,12 +42,13 @@ #include "core/templates/a_hash_map.h" -#include "servers/navigation/navigation_globals.h" -#include "servers/navigation/navigation_path_query_parameters_2d.h" -#include "servers/navigation/navigation_path_query_result_2d.h" -#include "servers/navigation/navigation_utilities.h" +#include "servers/nav_heap.h" +#include "servers/navigation_2d/navigation_constants_2d.h" +#include "servers/navigation_2d/navigation_path_query_parameters_2d.h" +#include "servers/navigation_2d/navigation_path_query_result_2d.h" -using namespace NavigationUtilities; +using namespace NavigationDefaults2D; +using namespace NavigationEnums2D; class NavMap2D; struct NavMapIteration2D; diff --git a/modules/navigation_2d/nav_agent_2d.h b/modules/navigation_2d/nav_agent_2d.h index b2ec22be0f7..a98447f567e 100644 --- a/modules/navigation_2d/nav_agent_2d.h +++ b/modules/navigation_2d/nav_agent_2d.h @@ -42,7 +42,7 @@ #include "core/object/class_db.h" #include "core/templates/self_list.h" -#include "servers/navigation/navigation_globals.h" +#include "servers/navigation_2d/navigation_constants_2d.h" #include diff --git a/modules/navigation_2d/nav_base_2d.h b/modules/navigation_2d/nav_base_2d.h index f4077736e63..b46be014e4b 100644 --- a/modules/navigation_2d/nav_base_2d.h +++ b/modules/navigation_2d/nav_base_2d.h @@ -41,7 +41,7 @@ #include "nav_rid_2d.h" #include "nav_utils_2d.h" -#include "servers/navigation/navigation_utilities.h" +#include "servers/navigation_2d/navigation_constants_2d.h" class NavMap2D; @@ -51,10 +51,10 @@ class NavBase2D : public NavRid2D { real_t enter_cost = 0.0; real_t travel_cost = 1.0; ObjectID owner_id; - NavigationUtilities::PathSegmentType type; + NavigationEnums2D::PathSegmentType type; public: - NavigationUtilities::PathSegmentType get_type() const { return type; } + NavigationEnums2D::PathSegmentType get_type() const { return type; } virtual void set_use_edge_connections(bool p_enabled) {} virtual bool get_use_edge_connections() const { return false; } diff --git a/modules/navigation_2d/nav_link_2d.cpp b/modules/navigation_2d/nav_link_2d.cpp index ccb39f2c944..603d07a1749 100644 --- a/modules/navigation_2d/nav_link_2d.cpp +++ b/modules/navigation_2d/nav_link_2d.cpp @@ -211,7 +211,7 @@ Ref NavLink2D::get_iteration() { NavLink2D::NavLink2D() : sync_dirty_request_list_element(this) { - type = NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_LINK; + type = NavigationEnums2D::PathSegmentType::PATH_SEGMENT_TYPE_LINK; iteration.instantiate(); } diff --git a/modules/navigation_2d/nav_map_2d.cpp b/modules/navigation_2d/nav_map_2d.cpp index 548d8591d20..d1818386d59 100644 --- a/modules/navigation_2d/nav_map_2d.cpp +++ b/modules/navigation_2d/nav_map_2d.cpp @@ -48,7 +48,7 @@ #include "core/config/project_settings.h" #include "core/object/worker_thread_pool.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" #include diff --git a/modules/navigation_2d/nav_map_2d.h b/modules/navigation_2d/nav_map_2d.h index a9ab87c2da5..a7bb5ce1c92 100644 --- a/modules/navigation_2d/nav_map_2d.h +++ b/modules/navigation_2d/nav_map_2d.h @@ -45,7 +45,7 @@ #include "core/math/math_defs.h" #include "core/object/worker_thread_pool.h" -#include "servers/navigation/navigation_globals.h" +#include "servers/navigation_2d/navigation_constants_2d.h" #include #include diff --git a/modules/navigation_2d/nav_region_2d.cpp b/modules/navigation_2d/nav_region_2d.cpp index 3fd929395e8..ec85fe48914 100644 --- a/modules/navigation_2d/nav_region_2d.cpp +++ b/modules/navigation_2d/nav_region_2d.cpp @@ -346,7 +346,7 @@ bool NavRegion2D::get_use_async_iterations() const { NavRegion2D::NavRegion2D() : sync_dirty_request_list_element(this), async_list_element(this) { - type = NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_REGION; + type = NavigationEnums2D::PathSegmentType::PATH_SEGMENT_TYPE_REGION; iteration_build.region = this; iteration.instantiate(); diff --git a/modules/navigation_2d/nav_utils_2d.h b/modules/navigation_2d/nav_utils_2d.h index 62b3a7f31eb..bf80e15326f 100644 --- a/modules/navigation_2d/nav_utils_2d.h +++ b/modules/navigation_2d/nav_utils_2d.h @@ -42,8 +42,8 @@ #include "core/object/ref_counted.h" #include "core/templates/hash_map.h" #include "core/templates/hashfuncs.h" -#include "servers/navigation/nav_heap.h" -#include "servers/navigation/navigation_utilities.h" +#include "core/templates/local_vector.h" +#include "servers/navigation_2d/navigation_constants_2d.h" class NavBaseIteration2D; diff --git a/modules/navigation_2d/register_types.cpp b/modules/navigation_2d/register_types.cpp index 6e9ee160290..f0804bf2062 100644 --- a/modules/navigation_2d/register_types.cpp +++ b/modules/navigation_2d/register_types.cpp @@ -41,7 +41,7 @@ #include "2d/godot_navigation_server_2d.h" #include "core/config/engine.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" #ifdef TOOLS_ENABLED #include "editor/navigation_link_2d_editor_plugin.h" diff --git a/modules/navigation_3d/3d/godot_navigation_server_3d.cpp b/modules/navigation_3d/3d/godot_navigation_server_3d.cpp index fb99761756f..8095628b0ab 100644 --- a/modules/navigation_3d/3d/godot_navigation_server_3d.cpp +++ b/modules/navigation_3d/3d/godot_navigation_server_3d.cpp @@ -43,7 +43,7 @@ #include "nav_mesh_generator_3d.h" -using namespace NavigationUtilities; +using namespace NavigationDefaults3D; /// Creates a struct for each function and a function that once called creates /// an instance of that struct with the submitted parameters. diff --git a/modules/navigation_3d/3d/godot_navigation_server_3d.h b/modules/navigation_3d/3d/godot_navigation_server_3d.h index db08371cae4..6bc162a87e0 100644 --- a/modules/navigation_3d/3d/godot_navigation_server_3d.h +++ b/modules/navigation_3d/3d/godot_navigation_server_3d.h @@ -47,9 +47,9 @@ #include "core/templates/local_vector.h" #include "core/templates/rid.h" #include "core/templates/rid_owner.h" -#include "servers/navigation/navigation_path_query_parameters_3d.h" -#include "servers/navigation/navigation_path_query_result_3d.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_path_query_parameters_3d.h" +#include "servers/navigation_3d/navigation_path_query_result_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" /// The commands are functions executed during the `sync` phase. diff --git a/modules/navigation_3d/3d/nav_base_iteration_3d.h b/modules/navigation_3d/3d/nav_base_iteration_3d.h index b32b98b7cec..bd2d2f98d5e 100644 --- a/modules/navigation_3d/3d/nav_base_iteration_3d.h +++ b/modules/navigation_3d/3d/nav_base_iteration_3d.h @@ -41,7 +41,7 @@ #include "../nav_utils_3d.h" #include "core/object/ref_counted.h" -#include "servers/navigation/navigation_utilities.h" +#include "servers/navigation_3d/navigation_constants_3d.h" class NavBaseIteration3D : public RefCounted { GDCLASS(NavBaseIteration3D, RefCounted); @@ -51,7 +51,7 @@ class NavBaseIteration3D : public RefCounted { uint32_t navigation_layers = 1; real_t enter_cost = 0.0; real_t travel_cost = 1.0; - NavigationUtilities::PathSegmentType owner_type; + NavigationEnums3D::PathSegmentType owner_type; ObjectID owner_object_id; RID owner_rid; bool owner_use_edge_connections = false; @@ -59,7 +59,7 @@ class NavBaseIteration3D : public RefCounted { LocalVector> internal_connections; bool get_enabled() const { return enabled; } - NavigationUtilities::PathSegmentType get_type() const { return owner_type; } + NavigationEnums3D::PathSegmentType get_type() const { return owner_type; } RID get_self() const { return owner_rid; } ObjectID get_owner_id() const { return owner_object_id; } uint32_t get_navigation_layers() const { return navigation_layers; } diff --git a/modules/navigation_3d/3d/nav_mesh_generator_3d.h b/modules/navigation_3d/3d/nav_mesh_generator_3d.h index dbb9bad61cd..571a062d8f4 100644 --- a/modules/navigation_3d/3d/nav_mesh_generator_3d.h +++ b/modules/navigation_3d/3d/nav_mesh_generator_3d.h @@ -41,7 +41,7 @@ #include "core/object/class_db.h" #include "core/object/worker_thread_pool.h" #include "core/templates/rid_owner.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" class Node; class NavigationMesh; diff --git a/modules/navigation_3d/3d/nav_mesh_queries_3d.cpp b/modules/navigation_3d/3d/nav_mesh_queries_3d.cpp index 51591f66ac5..42b89b5b512 100644 --- a/modules/navigation_3d/3d/nav_mesh_queries_3d.cpp +++ b/modules/navigation_3d/3d/nav_mesh_queries_3d.cpp @@ -44,7 +44,6 @@ #include "core/math/geometry_2d.h" #include "core/math/geometry_3d.h" -#include "servers/navigation/navigation_utilities.h" using namespace Nav3D; @@ -159,7 +158,7 @@ void NavMeshQueries3D::map_query_path(NavMap3D *map, const Refget_start_position(); @@ -1305,7 +1304,7 @@ bool NavMeshQueries3D::_query_task_is_connection_owner_usable(const NavMeshPathQ if (p_query_task.exclude_regions || p_query_task.include_regions) { switch (p_owner->get_type()) { - case NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_REGION: { + case NavigationEnums3D::PathSegmentType::PATH_SEGMENT_TYPE_REGION: { if (p_query_task.exclude_regions && p_query_task.excluded_regions.has(p_owner->get_self())) { // Not usable. Exclude region filter is active and this region is excluded. owner_usable = false; @@ -1314,7 +1313,7 @@ bool NavMeshQueries3D::_query_task_is_connection_owner_usable(const NavMeshPathQ owner_usable = false; } } break; - case NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_LINK: { + case NavigationEnums3D::PathSegmentType::PATH_SEGMENT_TYPE_LINK: { const LocalVector &link_polygons = p_owner->get_navmesh_polygons(); if (link_polygons.size() != 2) { // Not usable. Whatever this is, it is not a valid connected link. diff --git a/modules/navigation_3d/3d/nav_mesh_queries_3d.h b/modules/navigation_3d/3d/nav_mesh_queries_3d.h index c0cb2c8504d..90b99812825 100644 --- a/modules/navigation_3d/3d/nav_mesh_queries_3d.h +++ b/modules/navigation_3d/3d/nav_mesh_queries_3d.h @@ -42,12 +42,13 @@ #include "core/templates/a_hash_map.h" -#include "servers/navigation/navigation_globals.h" -#include "servers/navigation/navigation_path_query_parameters_3d.h" -#include "servers/navigation/navigation_path_query_result_3d.h" -#include "servers/navigation/navigation_utilities.h" +#include "servers/nav_heap.h" +#include "servers/navigation_3d/navigation_constants_3d.h" +#include "servers/navigation_3d/navigation_path_query_parameters_3d.h" +#include "servers/navigation_3d/navigation_path_query_result_3d.h" -using namespace NavigationUtilities; +using namespace NavigationDefaults3D; +using namespace NavigationEnums3D; class NavMap3D; struct NavMapIteration3D; diff --git a/modules/navigation_3d/3d/navigation_mesh_generator.cpp b/modules/navigation_3d/3d/navigation_mesh_generator.cpp index 183f8b16805..bdc69494044 100644 --- a/modules/navigation_3d/3d/navigation_mesh_generator.cpp +++ b/modules/navigation_3d/3d/navigation_mesh_generator.cpp @@ -39,7 +39,7 @@ #include "navigation_mesh_generator.h" #include "scene/resources/3d/navigation_mesh_source_geometry_data_3d.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" NavigationMeshGenerator *NavigationMeshGenerator::singleton = nullptr; diff --git a/modules/navigation_3d/editor/navigation_link_3d_gizmo_plugin.cpp b/modules/navigation_3d/editor/navigation_link_3d_gizmo_plugin.cpp index 440f3b6c927..9cc5c7dc5b0 100644 --- a/modules/navigation_3d/editor/navigation_link_3d_gizmo_plugin.cpp +++ b/modules/navigation_3d/editor/navigation_link_3d_gizmo_plugin.cpp @@ -41,7 +41,7 @@ #include "editor/editor_undo_redo_manager.h" #include "editor/scene/3d/node_3d_editor_plugin.h" #include "scene/3d/navigation/navigation_link_3d.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" NavigationLink3DGizmoPlugin::NavigationLink3DGizmoPlugin() { create_material("navigation_link_material", NavigationServer3D::get_singleton()->get_debug_navigation_link_connection_color()); diff --git a/modules/navigation_3d/editor/navigation_obstacle_3d_editor_plugin.cpp b/modules/navigation_3d/editor/navigation_obstacle_3d_editor_plugin.cpp index e5e29b7c047..959bca9d234 100644 --- a/modules/navigation_3d/editor/navigation_obstacle_3d_editor_plugin.cpp +++ b/modules/navigation_3d/editor/navigation_obstacle_3d_editor_plugin.cpp @@ -47,7 +47,7 @@ #include "scene/3d/navigation/navigation_obstacle_3d.h" #include "scene/gui/button.h" #include "scene/gui/dialogs.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" bool NavigationObstacle3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { return Object::cast_to(p_spatial) != nullptr; diff --git a/modules/navigation_3d/editor/navigation_region_3d_editor_plugin.cpp b/modules/navigation_3d/editor/navigation_region_3d_editor_plugin.cpp index ee30a8cf7be..a083bd605ad 100644 --- a/modules/navigation_3d/editor/navigation_region_3d_editor_plugin.cpp +++ b/modules/navigation_3d/editor/navigation_region_3d_editor_plugin.cpp @@ -47,7 +47,7 @@ #include "scene/gui/button.h" #include "scene/gui/dialogs.h" #include "scene/gui/label.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" void NavigationRegion3DEditor::_node_removed(Node *p_node) { if (selected_regions.is_empty()) { diff --git a/modules/navigation_3d/editor/navigation_region_3d_gizmo_plugin.cpp b/modules/navigation_3d/editor/navigation_region_3d_gizmo_plugin.cpp index cf9d74a4062..dd31c8b49ac 100644 --- a/modules/navigation_3d/editor/navigation_region_3d_gizmo_plugin.cpp +++ b/modules/navigation_3d/editor/navigation_region_3d_gizmo_plugin.cpp @@ -40,7 +40,7 @@ #include "core/math/random_pcg.h" #include "scene/3d/navigation/navigation_region_3d.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" NavigationRegion3DGizmoPlugin::NavigationRegion3DGizmoPlugin() { create_material("face_material", NavigationServer3D::get_singleton()->get_debug_navigation_geometry_face_color(), false, false, true); diff --git a/modules/navigation_3d/nav_agent_3d.h b/modules/navigation_3d/nav_agent_3d.h index e6ce36822d5..80d3227e664 100644 --- a/modules/navigation_3d/nav_agent_3d.h +++ b/modules/navigation_3d/nav_agent_3d.h @@ -42,7 +42,7 @@ #include "core/object/class_db.h" #include "core/templates/self_list.h" -#include "servers/navigation/navigation_globals.h" +#include "servers/navigation_3d/navigation_constants_3d.h" #include #include diff --git a/modules/navigation_3d/nav_base_3d.h b/modules/navigation_3d/nav_base_3d.h index e598ddb170b..b1d71cec52f 100644 --- a/modules/navigation_3d/nav_base_3d.h +++ b/modules/navigation_3d/nav_base_3d.h @@ -41,7 +41,7 @@ #include "nav_rid_3d.h" #include "nav_utils_3d.h" -#include "servers/navigation/navigation_utilities.h" +#include "servers/navigation_3d/navigation_constants_3d.h" class NavMap3D; @@ -51,10 +51,10 @@ class NavBase3D : public NavRid3D { real_t enter_cost = 0.0; real_t travel_cost = 1.0; ObjectID owner_id; - NavigationUtilities::PathSegmentType type; + NavigationEnums3D::PathSegmentType type; public: - NavigationUtilities::PathSegmentType get_type() const { return type; } + NavigationEnums3D::PathSegmentType get_type() const { return type; } virtual void set_use_edge_connections(bool p_enabled) {} virtual bool get_use_edge_connections() const { return false; } diff --git a/modules/navigation_3d/nav_link_3d.cpp b/modules/navigation_3d/nav_link_3d.cpp index 981188cf670..5e47e677a04 100644 --- a/modules/navigation_3d/nav_link_3d.cpp +++ b/modules/navigation_3d/nav_link_3d.cpp @@ -211,7 +211,7 @@ Ref NavLink3D::get_iteration() { NavLink3D::NavLink3D() : sync_dirty_request_list_element(this) { - type = NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_LINK; + type = NavigationEnums3D::PathSegmentType::PATH_SEGMENT_TYPE_LINK; iteration.instantiate(); } diff --git a/modules/navigation_3d/nav_map_3d.cpp b/modules/navigation_3d/nav_map_3d.cpp index 9383835e8e0..f2c44185791 100644 --- a/modules/navigation_3d/nav_map_3d.cpp +++ b/modules/navigation_3d/nav_map_3d.cpp @@ -48,7 +48,7 @@ #include "core/config/project_settings.h" #include "core/object/worker_thread_pool.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" #include diff --git a/modules/navigation_3d/nav_map_3d.h b/modules/navigation_3d/nav_map_3d.h index b91034a6847..7c13cda0325 100644 --- a/modules/navigation_3d/nav_map_3d.h +++ b/modules/navigation_3d/nav_map_3d.h @@ -45,7 +45,7 @@ #include "core/math/math_defs.h" #include "core/object/worker_thread_pool.h" -#include "servers/navigation/navigation_globals.h" +#include "servers/navigation_3d/navigation_constants_3d.h" #include #include diff --git a/modules/navigation_3d/nav_region_3d.cpp b/modules/navigation_3d/nav_region_3d.cpp index 52fe65189c2..f2614c3d066 100644 --- a/modules/navigation_3d/nav_region_3d.cpp +++ b/modules/navigation_3d/nav_region_3d.cpp @@ -364,7 +364,7 @@ bool NavRegion3D::get_use_async_iterations() const { NavRegion3D::NavRegion3D() : sync_dirty_request_list_element(this), async_list_element(this) { - type = NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_REGION; + type = NavigationEnums3D::PathSegmentType::PATH_SEGMENT_TYPE_REGION; iteration_build.region = this; iteration.instantiate(); diff --git a/modules/navigation_3d/nav_utils_3d.h b/modules/navigation_3d/nav_utils_3d.h index 94b9a81bb10..f6533957245 100644 --- a/modules/navigation_3d/nav_utils_3d.h +++ b/modules/navigation_3d/nav_utils_3d.h @@ -42,8 +42,8 @@ #include "core/object/ref_counted.h" #include "core/templates/hash_map.h" #include "core/templates/hashfuncs.h" -#include "servers/navigation/nav_heap.h" -#include "servers/navigation/navigation_utilities.h" +#include "core/templates/local_vector.h" +#include "servers/navigation_3d/navigation_constants_3d.h" class NavBaseIteration3D; diff --git a/modules/navigation_3d/register_types.cpp b/modules/navigation_3d/register_types.cpp index 4bd648cd756..a0375b22b81 100644 --- a/modules/navigation_3d/register_types.cpp +++ b/modules/navigation_3d/register_types.cpp @@ -51,7 +51,7 @@ #endif #include "core/config/engine.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" #ifndef DISABLE_DEPRECATED NavigationMeshGenerator *_nav_mesh_generator = nullptr; diff --git a/modules/openxr/extensions/openxr_hand_tracking_extension.cpp b/modules/openxr/extensions/openxr_hand_tracking_extension.cpp index 981cda74f90..5d5b76d6b3d 100644 --- a/modules/openxr/extensions/openxr_hand_tracking_extension.cpp +++ b/modules/openxr/extensions/openxr_hand_tracking_extension.cpp @@ -42,7 +42,7 @@ #include "core/config/project_settings.h" #include "core/string/print_string.h" -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" #include diff --git a/modules/openxr/extensions/openxr_render_model_extension.cpp b/modules/openxr/extensions/openxr_render_model_extension.cpp index 1330c81fe6b..25af70f1041 100644 --- a/modules/openxr/extensions/openxr_render_model_extension.cpp +++ b/modules/openxr/extensions/openxr_render_model_extension.cpp @@ -43,7 +43,7 @@ #include "core/config/project_settings.h" #include "core/string/print_string.h" -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" OpenXRRenderModelExtension *OpenXRRenderModelExtension::singleton = nullptr; diff --git a/modules/openxr/extensions/openxr_visibility_mask_extension.cpp b/modules/openxr/extensions/openxr_visibility_mask_extension.cpp index 3ca2c0896db..9893e75e7b5 100644 --- a/modules/openxr/extensions/openxr_visibility_mask_extension.cpp +++ b/modules/openxr/extensions/openxr_visibility_mask_extension.cpp @@ -42,7 +42,7 @@ #include "core/string/print_string.h" #include "core/variant/array.h" #include "core/variant/variant.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" static const char *VISIBILITY_MASK_SHADER_CODE = "shader_type spatial;\n" diff --git a/modules/openxr/extensions/platform/openxr_d3d12_extension.cpp b/modules/openxr/extensions/platform/openxr_d3d12_extension.cpp index b197944b30c..989261ff5c1 100644 --- a/modules/openxr/extensions/platform/openxr_d3d12_extension.cpp +++ b/modules/openxr/extensions/platform/openxr_d3d12_extension.cpp @@ -42,8 +42,8 @@ #include "../../openxr_util.h" +#include "servers/rendering/rendering_server.h" #include "servers/rendering/rendering_server_globals.h" -#include "servers/rendering_server.h" HashMap OpenXRD3D12Extension::get_requested_extensions() { HashMap request_extensions; diff --git a/modules/openxr/extensions/platform/openxr_opengl_extension.cpp b/modules/openxr/extensions/platform/openxr_opengl_extension.cpp index 94c108c0266..0f872f9492d 100644 --- a/modules/openxr/extensions/platform/openxr_opengl_extension.cpp +++ b/modules/openxr/extensions/platform/openxr_opengl_extension.cpp @@ -60,8 +60,8 @@ #include "drivers/gles3/effects/copy_effects.h" #include "drivers/gles3/storage/texture_storage.h" +#include "servers/rendering/rendering_server.h" #include "servers/rendering/rendering_server_globals.h" -#include "servers/rendering_server.h" HashMap OpenXROpenGLExtension::get_requested_extensions() { HashMap request_extensions; diff --git a/modules/openxr/extensions/platform/openxr_vulkan_extension.cpp b/modules/openxr/extensions/platform/openxr_vulkan_extension.cpp index 1a60e39bfae..0e4752d99e0 100644 --- a/modules/openxr/extensions/platform/openxr_vulkan_extension.cpp +++ b/modules/openxr/extensions/platform/openxr_vulkan_extension.cpp @@ -44,8 +44,8 @@ #include "core/string/print_string.h" #include "servers/rendering/renderer_rd/effects/copy_effects.h" #include "servers/rendering/renderer_rd/storage_rd/texture_storage.h" +#include "servers/rendering/rendering_server.h" #include "servers/rendering/rendering_server_globals.h" -#include "servers/rendering_server.h" HashMap OpenXRVulkanExtension::get_requested_extensions() { HashMap request_extensions; diff --git a/modules/openxr/extensions/spatial_entities/openxr_spatial_anchor.cpp b/modules/openxr/extensions/spatial_entities/openxr_spatial_anchor.cpp new file mode 100644 index 00000000000..ee099355a22 --- /dev/null +++ b/modules/openxr/extensions/spatial_entities/openxr_spatial_anchor.cpp @@ -0,0 +1,1186 @@ +/**************************************************************************/ +/* openxr_spatial_anchor.cpp */ +/**************************************************************************/ +/* This file is part of: */ +/* REDOT ENGINE */ +/* https://redotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2024-present Redot Engine contributors */ +/* (see REDOT_AUTHORS.md) */ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#include "openxr_spatial_anchor.h" + +#include "../../openxr_api.h" +#include "../../openxr_util.h" +#include "../openxr_future_extension.h" +#include "core/config/project_settings.h" +#include "servers/xr/xr_server.h" + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialCapabilityConfigurationAnchor + +void OpenXRSpatialCapabilityConfigurationAnchor::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_enabled_components"), &OpenXRSpatialCapabilityConfigurationAnchor::_get_enabled_components); +} + +bool OpenXRSpatialCapabilityConfigurationAnchor::has_valid_configuration() const { + OpenXRSpatialAnchorCapability *capability = OpenXRSpatialAnchorCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, false); + + return capability->is_spatial_anchor_supported(); +} + +XrSpatialCapabilityConfigurationBaseHeaderEXT *OpenXRSpatialCapabilityConfigurationAnchor::get_configuration() { + OpenXRSpatialAnchorCapability *capability = OpenXRSpatialAnchorCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, nullptr); + + if (capability->is_spatial_anchor_supported()) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + anchor_enabled_components.clear(); + + // Guaranteed components: + anchor_enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT); + + // enable optional components + if (capability->is_spatial_persistence_supported()) { + anchor_enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT); + } + + anchor_config.enabledComponentCount = anchor_enabled_components.size(); + anchor_config.enabledComponents = anchor_enabled_components.ptr(); + + // and return this. + return (XrSpatialCapabilityConfigurationBaseHeaderEXT *)&anchor_config; + } + + return nullptr; +} + +PackedInt64Array OpenXRSpatialCapabilityConfigurationAnchor::_get_enabled_components() const { + PackedInt64Array components; + + for (const XrSpatialComponentTypeEXT &component_type : anchor_enabled_components) { + components.push_back((int64_t)component_type); + } + + return components; +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialComponentAnchorList + +void OpenXRSpatialComponentAnchorList::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_entity_pose", "index"), &OpenXRSpatialComponentAnchorList::get_entity_pose); +} + +void OpenXRSpatialComponentAnchorList::set_capacity(uint32_t p_capacity) { + entity_poses.resize(p_capacity); + + anchor_list.locationCount = uint32_t(entity_poses.size()); + anchor_list.locations = entity_poses.ptrw(); +} + +XrSpatialComponentTypeEXT OpenXRSpatialComponentAnchorList::get_component_type() const { + return XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT; +} + +void *OpenXRSpatialComponentAnchorList::get_structure_data(void *p_next) { + anchor_list.next = p_next; + return &anchor_list; +} + +Transform3D OpenXRSpatialComponentAnchorList::get_entity_pose(int64_t p_index) const { + ERR_FAIL_INDEX_V(p_index, entity_poses.size(), Transform3D()); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, Transform3D()); + + return openxr_api->transform_from_pose(entity_poses[p_index]); +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialContextPersistenceConfig + +void OpenXRSpatialContextPersistenceConfig::_bind_methods() { + ClassDB::bind_method(D_METHOD("add_persistence_context", "persistence_context"), &OpenXRSpatialContextPersistenceConfig::add_persistence_context); + ClassDB::bind_method(D_METHOD("remove_persistence_context", "persistence_context"), &OpenXRSpatialContextPersistenceConfig::remove_persistence_context); +} + +bool OpenXRSpatialContextPersistenceConfig::has_valid_configuration() const { + OpenXRSpatialAnchorCapability *capability = OpenXRSpatialAnchorCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, false); + + if (!capability->is_spatial_persistence_supported()) { + return false; + } + + // Check if we have a valid config. + if (persistence_contexts.is_empty()) { + return false; + } + + return true; +} + +void *OpenXRSpatialContextPersistenceConfig::get_header(void *p_next) { + void *n = p_next; + if (get_next().is_valid()) { + n = get_next()->get_header(n); + } + + if (has_valid_configuration()) { + OpenXRSpatialAnchorCapability *anchor_capability = OpenXRSpatialAnchorCapability::get_singleton(); + ERR_FAIL_NULL_V(anchor_capability, nullptr); + + // Prepare our buffer. + context_handles.resize(persistence_contexts.size()); + + // Copy our handles. + XrSpatialPersistenceContextEXT *ptr = context_handles.ptrw(); + int i = 0; + for (const RID &rid : persistence_contexts) { + ptr[i++] = anchor_capability->get_persistence_context_handle(rid); + } + + persistence_config.next = n; + persistence_config.persistenceContextCount = (uint32_t)context_handles.size(); + persistence_config.persistenceContexts = context_handles.ptr(); + + // and return this. + return (XrSpatialCapabilityConfigurationBaseHeaderEXT *)&persistence_config; + } + + return n; +} + +XrStructureType OpenXRSpatialContextPersistenceConfig::get_structure_type() { + return XR_TYPE_SPATIAL_CONTEXT_PERSISTENCE_CONFIG_EXT; +} + +void OpenXRSpatialContextPersistenceConfig::add_persistence_context(RID p_persistence_context) { + ERR_FAIL_COND(persistence_contexts.has(p_persistence_context)); + + persistence_contexts.push_back(p_persistence_context); +} + +void OpenXRSpatialContextPersistenceConfig::remove_persistence_context(RID p_persistence_context) { + ERR_FAIL_COND(!persistence_contexts.has(p_persistence_context)); + + persistence_contexts.erase(p_persistence_context); +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialComponentPersistenceList + +void OpenXRSpatialComponentPersistenceList::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_persistent_uuid", "index"), &OpenXRSpatialComponentPersistenceList::_get_persistent_uuid); + ClassDB::bind_method(D_METHOD("get_persistent_state", "index"), &OpenXRSpatialComponentPersistenceList::_get_persistent_state); +} + +void OpenXRSpatialComponentPersistenceList::set_capacity(uint32_t p_capacity) { + persist_data.resize(p_capacity); + + persistence_list.persistDataCount = uint32_t(persist_data.size()); + persistence_list.persistData = persist_data.ptrw(); +} + +XrSpatialComponentTypeEXT OpenXRSpatialComponentPersistenceList::get_component_type() const { + return XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT; +} + +void *OpenXRSpatialComponentPersistenceList::get_structure_data(void *p_next) { + persistence_list.next = p_next; + return &persistence_list; +} + +XrUuid OpenXRSpatialComponentPersistenceList::get_persistent_uuid(int64_t p_index) const { + XrUuid null_uuid = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + + ERR_FAIL_INDEX_V(p_index, persist_data.size(), null_uuid); + + return persist_data[p_index].persistUuid; +} + +String OpenXRSpatialComponentPersistenceList::_get_persistent_uuid(int64_t p_index) const { + return OpenXRUtil::string_from_xruuid(get_persistent_uuid(p_index)); +} + +XrSpatialPersistenceStateEXT OpenXRSpatialComponentPersistenceList::get_persistent_state(int64_t p_index) const { + ERR_FAIL_INDEX_V(p_index, persist_data.size(), XR_SPATIAL_PERSISTENCE_STATE_MAX_ENUM_EXT); + + return persist_data[p_index].persistState; +} + +uint64_t OpenXRSpatialComponentPersistenceList::_get_persistent_state(int64_t p_index) const { + // TODO make a Godot constant that mirrors XrSpatialPersistenceStateEXT and return that + return (uint64_t)get_persistent_state(p_index); +} + +String OpenXRSpatialComponentPersistenceList::get_persistence_state_name(XrSpatialPersistenceStateEXT p_state) { + XR_ENUM_SWITCH(XrSpatialPersistenceStateEXT, p_state) +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRAnchorTracker + +void OpenXRAnchorTracker::_bind_methods() { + ClassDB::bind_method(D_METHOD("has_uuid"), &OpenXRAnchorTracker::has_uuid); + ClassDB::bind_method(D_METHOD("set_uuid", "uuid"), &OpenXRAnchorTracker::_set_uuid); + ClassDB::bind_method(D_METHOD("get_uuid"), &OpenXRAnchorTracker::_get_uuid); + + ADD_PROPERTY(PropertyInfo(Variant::STRING, "uuid"), "set_uuid", "get_uuid"); + + ADD_SIGNAL(MethodInfo("uuid_changed")); +} + +bool OpenXRAnchorTracker::has_uuid() const { + for (int i = 0; i < XR_UUID_SIZE; i++) { + if (uuid.data[i] != 0) { + return true; + } + } + + return false; +} + +XrUuid OpenXRAnchorTracker::get_uuid() const { + return uuid; +} + +void OpenXRAnchorTracker::set_uuid(const XrUuid &p_uuid) { + if (uuid_is_equal(uuid, p_uuid)) { + return; + } + + uuid = p_uuid; + + emit_signal(SNAME("uuid_changed")); +} + +String OpenXRAnchorTracker::_get_uuid() const { + return OpenXRUtil::string_from_xruuid(uuid); +} + +void OpenXRAnchorTracker::_set_uuid(const String &p_uuid) { + set_uuid(OpenXRUtil::xruuid_from_string(p_uuid)); +} + +bool OpenXRAnchorTracker::uuid_is_equal(const XrUuid &p_a, const XrUuid &p_b) { + for (int i = 0; i < XR_UUID_SIZE; i++) { + if (p_a.data[i] != p_b.data[i]) { + return false; + } + } + + return true; +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialAnchorCapability + +OpenXRSpatialAnchorCapability *OpenXRSpatialAnchorCapability::singleton = nullptr; + +OpenXRSpatialAnchorCapability *OpenXRSpatialAnchorCapability::get_singleton() { + return singleton; +} + +OpenXRSpatialAnchorCapability::OpenXRSpatialAnchorCapability() { + singleton = this; +} + +OpenXRSpatialAnchorCapability::~OpenXRSpatialAnchorCapability() { + singleton = nullptr; +} + +void OpenXRSpatialAnchorCapability::_bind_methods() { + ClassDB::bind_method(D_METHOD("is_spatial_anchor_supported"), &OpenXRSpatialAnchorCapability::is_spatial_anchor_supported); + ClassDB::bind_method(D_METHOD("is_spatial_persistence_supported"), &OpenXRSpatialAnchorCapability::is_spatial_persistence_supported); + + ClassDB::bind_method(D_METHOD("is_persistence_scope_supported", "scope"), &OpenXRSpatialAnchorCapability::_is_persistence_scope_supported); + ClassDB::bind_method(D_METHOD("create_persistence_context", "scope", "user_callback"), &OpenXRSpatialAnchorCapability::_create_persistence_context, DEFVAL(Callable())); + ClassDB::bind_method(D_METHOD("get_persistence_context_handle", "persistence_context"), &OpenXRSpatialAnchorCapability::_get_persistence_context_handle); + ClassDB::bind_method(D_METHOD("free_persistence_context", "persistence_context"), &OpenXRSpatialAnchorCapability::free_persistence_context); + + ClassDB::bind_method(D_METHOD("create_new_anchor", "transform", "spatial_context"), &OpenXRSpatialAnchorCapability::create_new_anchor, DEFVAL(RID())); + ClassDB::bind_method(D_METHOD("remove_anchor", "anchor_tracker"), &OpenXRSpatialAnchorCapability::remove_anchor); + ClassDB::bind_method(D_METHOD("persist_anchor", "anchor_tracker", "persistence_context", "user_callback"), &OpenXRSpatialAnchorCapability::persist_anchor, DEFVAL(RID()), DEFVAL(Callable())); + ClassDB::bind_method(D_METHOD("unpersist_anchor", "anchor_tracker", "persistence_context", "user_callback"), &OpenXRSpatialAnchorCapability::unpersist_anchor, DEFVAL(RID()), DEFVAL(Callable())); + + BIND_ENUM_CONSTANT(PERSISTENCE_SCOPE_SYSTEM_MANAGED); + BIND_ENUM_CONSTANT(PERSISTENCE_SCOPE_LOCAL_ANCHORS); +} + +HashMap OpenXRSpatialAnchorCapability::get_requested_extensions() { + HashMap request_extensions; + + if (GLOBAL_GET_CACHED(bool, "xr/openxr/extensions/spatial_entity/enabled") && GLOBAL_GET_CACHED(bool, "xr/openxr/extensions/spatial_entity/enable_spatial_anchors")) { + request_extensions[XR_EXT_SPATIAL_ANCHOR_EXTENSION_NAME] = &spatial_anchor_ext; + if (GLOBAL_GET_CACHED(bool, "xr/openxr/extensions/spatial_entity/enable_persistent_anchors")) { + request_extensions[XR_EXT_SPATIAL_PERSISTENCE_EXTENSION_NAME] = &spatial_persistence_ext; + request_extensions[XR_EXT_SPATIAL_PERSISTENCE_OPERATIONS_EXTENSION_NAME] = &spatial_persistence_operations_ext; + } + } + + return request_extensions; +} + +void OpenXRSpatialAnchorCapability::on_instance_created(const XrInstance p_instance) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + + if (spatial_anchor_ext) { + EXT_INIT_XR_FUNC(xrCreateSpatialAnchorEXT); + } + + if (spatial_persistence_ext) { + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + // TODO REMOVE THIS WORKAROUND ONCE POSSIBLE + // There has been some back and forth between stores and scopes. Scopes won out. + XrResult xr_result = openxr_api->get_instance_proc_addr("xrEnumerateSpatialPersistenceScopesEXT", (PFN_xrVoidFunction *)&xrEnumerateSpatialPersistenceScopesEXT_ptr); + if (xr_result != XR_SUCCESS) { + // Check for stores for compatibility with beta runtimes. + // Lucky for us, related structs and enums are compatible. + print_verbose("OpenXR: xrEnumerateSpatialPersistenceScopesEXT is not supported, falling back to xrEnumerateSpatialPersistenceStoresEXT!") + xr_result = openxr_api->get_instance_proc_addr("xrEnumerateSpatialPersistenceStoresEXT", (PFN_xrVoidFunction *)&xrEnumerateSpatialPersistenceScopesEXT_ptr); + } + ERR_FAIL_COND(XR_FAILED(xr_result)); + //EXT_INIT_XR_FUNC(xrEnumerateSpatialPersistenceScopesEXT); + + EXT_INIT_XR_FUNC(xrCreateSpatialPersistenceContextAsyncEXT); + EXT_INIT_XR_FUNC(xrCreateSpatialPersistenceContextCompleteEXT); + EXT_INIT_XR_FUNC(xrDestroySpatialPersistenceContextEXT); + } + + if (spatial_persistence_operations_ext) { + EXT_INIT_XR_FUNC(xrPersistSpatialEntityAsyncEXT); + EXT_INIT_XR_FUNC(xrPersistSpatialEntityCompleteEXT); + EXT_INIT_XR_FUNC(xrUnpersistSpatialEntityAsyncEXT); + EXT_INIT_XR_FUNC(xrUnpersistSpatialEntityCompleteEXT); + } +} + +void OpenXRSpatialAnchorCapability::on_instance_destroyed() { + xrCreateSpatialAnchorEXT_ptr = nullptr; + + xrEnumerateSpatialPersistenceScopesEXT_ptr = nullptr; + xrCreateSpatialPersistenceContextAsyncEXT_ptr = nullptr; + xrCreateSpatialPersistenceContextCompleteEXT_ptr = nullptr; + xrDestroySpatialPersistenceContextEXT_ptr = nullptr; +} + +void OpenXRSpatialAnchorCapability::on_session_created(const XrSession p_session) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + + if (!spatial_anchor_ext) { + return; + } + + spatial_anchor_supported = se_extension->supports_component_type(XR_SPATIAL_CAPABILITY_ANCHOR_EXT, XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT); + if (!spatial_anchor_supported) { + // Supported by XR runtime but not by device? We're done. + return; + } + + _load_supported_persistence_scopes(); + + se_extension->connect(SNAME("spatial_discovery_recommended"), callable_mp(this, &OpenXRSpatialAnchorCapability::_on_spatial_discovery_recommended)); + + if (GLOBAL_GET_CACHED(bool, "xr/openxr/extensions/spatial_entity/enable_builtin_anchor_detection")) { + if (spatial_persistence_ext && !supported_persistence_scopes.is_empty()) { + // TODO make something nicer to select the persistence scope we want. + // We may even want to create multiple here so we get access to all + // but then mark one that we use to create our persistent anchors on. + + XrSpatialPersistenceScopeEXT scope = XR_SPATIAL_PERSISTENCE_SCOPE_MAX_ENUM_EXT; + + // Lets check these in order of importance to us and find the best applicable scope. + if (supported_persistence_scopes.has(XR_SPATIAL_PERSISTENCE_SCOPE_LOCAL_ANCHORS_EXT)) { + // This scope allows for local storage and is required if we want to create our own anchors. + scope = XR_SPATIAL_PERSISTENCE_SCOPE_LOCAL_ANCHORS_EXT; + } else if (supported_persistence_scopes.has(XR_SPATIAL_PERSISTENCE_SCOPE_SYSTEM_MANAGED_EXT)) { + // The system managed scope is a read only scope with system managed anchors. + scope = XR_SPATIAL_PERSISTENCE_SCOPE_SYSTEM_MANAGED_EXT; + } else { + // Just use the first supported scope, but this will be an unknown type. + scope = supported_persistence_scopes[0]; + } + + // Output what we're using: + print_verbose("OpenXR: Using persistence scope " + get_spatial_persistence_scope_name(scope)); + + // Start by creating our persistence context. + create_persistence_context(scope, callable_mp(this, &OpenXRSpatialAnchorCapability::_on_persistence_context_completed)); + } else { + // Start by creating our spatial context + _create_spatial_context(); + } + } +} + +void OpenXRSpatialAnchorCapability::on_session_destroyed() { + if (!spatial_anchor_supported) { + return; + } + spatial_anchor_supported = false; + + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + XRServer *xr_server = XRServer::get_singleton(); + ERR_FAIL_NULL(xr_server); + + // Free and unregister our anchors + for (const KeyValue> &anchor : anchors) { + xr_server->remove_tracker(anchor.value); + } + anchors.clear(); + + // Free our configurations + anchor_configuration.unref(); + + // Free our spatial context + if (spatial_context.is_valid()) { + se_extension->free_spatial_context(spatial_context); + spatial_context = RID(); + } + + // Free our persistence context + if (persistence_context.is_valid()) { + free_persistence_context(persistence_context); + persistence_context = RID(); + } + + se_extension->disconnect(SNAME("spatial_discovery_recommended"), callable_mp(this, &OpenXRSpatialAnchorCapability::_on_spatial_discovery_recommended)); + + supported_persistence_scopes.clear(); + + // Clean up all remaining persistence context RIDs. + LocalVector persistence_context_rids = persistence_context_owner.get_owned_list(); + for (const RID &rid : persistence_context_rids) { + if (is_print_verbose_enabled()) { + PersistenceContextData *persistence_context_data = persistence_context_owner.get_or_null(rid); + if (persistence_context_data) { // Should never be nullptr seeing we called get_owned_list just now, but just in case. + print_line("OpenXR: Found orphaned persistence context for scope ", get_spatial_persistence_scope_name(persistence_context_data->scope)); + } + } + + free_persistence_context(rid); + } +} + +void OpenXRSpatialAnchorCapability::on_process() { + if (!spatial_context.is_valid()) { + return; + } + + // Protection against plane discovery happening too often. + if (discovery_cooldown > 0) { + discovery_cooldown--; + } + + // Check if we need to start our discovery. + if (need_discovery && discovery_cooldown == 0 && !discovery_query_result.is_valid()) { + need_discovery = false; + discovery_cooldown = 60; // Set our cooldown to 60 frames, it doesn't need to be an exact science. + + _start_entity_discovery(); + } + + // If we have a valid spatial context, and we have anchors, we want updates! + if (spatial_context.is_valid() && !anchors.is_empty()) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + + // We want updates for all anchors + thread_local LocalVector entities; + entities.resize(anchors.size()); + RID *entity = entities.ptr(); + for (const KeyValue> &e : anchors) { + *entity = e.value->get_entity(); + entity++; + } + + // We just want our anchor component + thread_local LocalVector component_types; + component_types.push_back(XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT); + + // And we get our update snapshot, this is NOT async! + RID snapshot = se_extension->update_spatial_entities(spatial_context, entities, component_types, nullptr); + if (snapshot.is_valid()) { + _process_update_snapshot(snapshot); + } + } +} + +bool OpenXRSpatialAnchorCapability::is_spatial_anchor_supported() { + return spatial_anchor_supported; +} + +bool OpenXRSpatialAnchorCapability::is_spatial_persistence_supported() { + // Need anchor support for persistence to be usable + if (!is_spatial_anchor_supported()) { + return false; + } + + return spatial_persistence_ext; +} + +//////////////////////////////////////////////////////////////////////////// +// Persistence scopes + +bool OpenXRSpatialAnchorCapability::_load_supported_persistence_scopes() { + ERR_FAIL_COND_V(!is_spatial_persistence_supported(), false); + + if (supported_persistence_scopes.is_empty()) { + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, false); + + uint32_t size; + XrInstance instance = openxr_api->get_instance(); + XrSystemId system_id = openxr_api->get_system_id(); + + ERR_FAIL_COND_V(instance == XR_NULL_HANDLE, false); + + XrResult result = xrEnumerateSpatialPersistenceScopesEXT(instance, system_id, 0, &size, nullptr); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(false, "OpenXR: Failed to query persistence scope count [" + openxr_api->get_error_string(result) + "]"); + } + + if (size > 0) { + supported_persistence_scopes.resize(size); + result = xrEnumerateSpatialPersistenceScopesEXT(instance, system_id, supported_persistence_scopes.size(), &size, supported_persistence_scopes.ptrw()); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(false, "OpenXR: Failed to query persistence scopes [" + openxr_api->get_error_string(result) + "]"); + } + } + + if (is_print_verbose_enabled()) { + if (!supported_persistence_scopes.is_empty()) { + print_verbose("OpenXR: Supported spatial persistence scopes:"); + for (const XrSpatialPersistenceScopeEXT &scope : supported_persistence_scopes) { + print_verbose(" - " + get_spatial_persistence_scope_name(scope)); + } + } else { + WARN_PRINT("OpenXR: No persistence scopes found!"); + } + } + } + + return true; +} + +bool OpenXRSpatialAnchorCapability::is_persistence_scope_supported(XrSpatialPersistenceScopeEXT p_scope) { + if (!is_spatial_persistence_supported()) { + return false; + } + + if (!_load_supported_persistence_scopes()) { + return false; + } + + return supported_persistence_scopes.has(p_scope); +} + +bool OpenXRSpatialAnchorCapability::_is_persistence_scope_supported(PersistenceScope p_scope) { + return is_persistence_scope_supported((XrSpatialPersistenceScopeEXT)p_scope); +} + +Ref OpenXRSpatialAnchorCapability::create_persistence_context(XrSpatialPersistenceScopeEXT p_scope, const Callable &p_user_callback) { + if (!is_spatial_persistence_supported()) { + return nullptr; + } + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, nullptr); + + OpenXRFutureExtension *future_api = OpenXRFutureExtension::get_singleton(); + ERR_FAIL_NULL_V(future_api, nullptr); + + XrSpatialPersistenceContextCreateInfoEXT create_info = { + XR_TYPE_SPATIAL_PERSISTENCE_CONTEXT_CREATE_INFO_EXT, // type + nullptr, // next + p_scope // scope + }; + XrFutureEXT future = XR_NULL_HANDLE; + XrResult result = xrCreateSpatialPersistenceContextAsyncEXT(openxr_api->get_session(), &create_info, &future); + if (XR_FAILED(result)) { + // Not successful? then exit. + ERR_FAIL_V_MSG(Ref(), "OpenXR: Failed to create persistence scope [" + openxr_api->get_error_string(result) + "]"); + } + + // Create our future result + Ref future_result = future_api->register_future(future, callable_mp(this, &OpenXRSpatialAnchorCapability::_on_persistence_context_ready).bind((uint64_t)p_scope, p_user_callback)); + + return future_result; +} + +Ref OpenXRSpatialAnchorCapability::_create_persistence_context(PersistenceScope p_scope, Callable p_user_callback) { + return create_persistence_context((XrSpatialPersistenceScopeEXT)p_scope, p_user_callback); +} + +void OpenXRSpatialAnchorCapability::_on_persistence_context_ready(Ref p_future_result, uint64_t p_scope, Callable p_user_callback) { + // Complete context creation... + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + XrCreateSpatialPersistenceContextCompletionEXT completion = { + XR_TYPE_CREATE_SPATIAL_PERSISTENCE_CONTEXT_COMPLETION_EXT, // type + nullptr, // next + XR_RESULT_MAX_ENUM, // futureResult + XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_MAX_ENUM_EXT, // createResult + XR_NULL_HANDLE // persistenceContext + }; + XrResult result = xrCreateSpatialPersistenceContextCompleteEXT(openxr_api->get_session(), p_future_result->get_future(), &completion); + if (XR_FAILED(result)) { // Did our xrCreateSpatialContextCompleteEXT call fail? + // Log issue and fail. + ERR_FAIL_MSG("OpenXR: Failed to complete persistence context create future [" + openxr_api->get_error_string(result) + "]"); + } + if (XR_FAILED(completion.futureResult)) { // Did our completion fail? + // Log issue and fail. + ERR_FAIL_MSG("OpenXR: Failed to complete persistence context creation [" + openxr_api->get_error_string(completion.futureResult) + "]"); + } + if (completion.createResult != XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_SUCCESS_EXT) { // Did our persist fail? + // Log issue and fail. + ERR_FAIL_MSG("OpenXR: Failed to complete persistence context creation [" + get_spatial_persistence_context_result_name(completion.createResult) + "]"); + } + + // Wrap our persistence context + PersistenceContextData persistence_context_data; + + // Update our spatial context data + persistence_context_data.scope = (XrSpatialPersistenceScopeEXT)p_scope; + persistence_context_data.persistence_context = completion.persistenceContext; + + // Store this as an RID so we keep track of it. + RID context_rid = persistence_context_owner.make_rid(persistence_context_data); + + // Set our RID as our result value on our future. + p_future_result->set_result_value(context_rid); + + // And perform our callback if we have one. + if (p_user_callback.is_valid()) { + p_user_callback.call(context_rid); + } +} + +XrSpatialPersistenceContextEXT OpenXRSpatialAnchorCapability::get_persistence_context_handle(RID p_persistence_context) const { + PersistenceContextData *persistence_context_data = persistence_context_owner.get_or_null(p_persistence_context); + ERR_FAIL_NULL_V(persistence_context_data, XR_NULL_HANDLE); + + return persistence_context_data->persistence_context; +} + +uint64_t OpenXRSpatialAnchorCapability::_get_persistence_context_handle(RID p_persistence_context) const { + return (uint64_t)get_persistence_context_handle(p_persistence_context); +} + +void OpenXRSpatialAnchorCapability::free_persistence_context(RID p_persistence_context) { + PersistenceContextData *persistence_context_data = persistence_context_owner.get_or_null(p_persistence_context); + ERR_FAIL_NULL(persistence_context_data); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + if (persistence_context_data->persistence_context != XR_NULL_HANDLE) { + // Destroy our spatial context + XrResult result = xrDestroySpatialPersistenceContextEXT(persistence_context_data->persistence_context); + if (XR_FAILED(result)) { + WARN_PRINT("OpenXR: Failed to destroy the persistence context [" + openxr_api->get_error_string(result) + "]"); + } + persistence_context_data->persistence_context = XR_NULL_HANDLE; + } + + // And remove our RID. + persistence_context_owner.free(p_persistence_context); +} + +//////////////////////////////////////////////////////////////////////////// +// Discovery logic + +void OpenXRSpatialAnchorCapability::_on_persistence_context_completed(RID p_persistence_context) { + persistence_context = p_persistence_context; + + _create_spatial_context(); +} + +Ref OpenXRSpatialAnchorCapability::_create_spatial_context() { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + TypedArray capability_configurations; + + // Create our configuration objects. + anchor_configuration.instantiate(); + capability_configurations.push_back(anchor_configuration); + + if (persistence_context.is_valid()) { + persistence_configuration.instantiate(); + persistence_configuration->add_persistence_context(persistence_context); + } else { + // Shouldn't be instantiated in the first place but JIC + persistence_configuration.unref(); + } + + return se_extension->create_spatial_context(capability_configurations, persistence_configuration, callable_mp(this, &OpenXRSpatialAnchorCapability::_on_spatial_context_created)); +} + +void OpenXRSpatialAnchorCapability::_on_spatial_context_created(RID p_spatial_context) { + spatial_context = p_spatial_context; + need_discovery = true; +} + +void OpenXRSpatialAnchorCapability::_on_spatial_discovery_recommended(RID p_spatial_context) { + if (p_spatial_context == spatial_context) { + // Trigger new discovery. + need_discovery = true; + } +} + +Ref OpenXRSpatialAnchorCapability::_start_entity_discovery() { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + // It makes no sense to discover non persistent anchors as we'd have created them during this session. + if (!persistence_context.is_valid()) { + return nullptr; + } + + // Already running or ran discovery, cancel/clean up. + if (discovery_query_result.is_valid()) { + discovery_query_result->cancel_future(); + discovery_query_result.unref(); + } + + // We want both our anchor and persistence component. + Vector component_types; + component_types.push_back(XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT); + component_types.push_back(XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT); + + // Start our new snapshot. + discovery_query_result = se_extension->discover_spatial_entities(spatial_context, component_types, nullptr, callable_mp(this, &OpenXRSpatialAnchorCapability::_process_discovery_snapshot)); + + return discovery_query_result; +} + +void OpenXRSpatialAnchorCapability::_process_discovery_snapshot(RID p_snapshot) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + XRServer *xr_server = XRServer::get_singleton(); + ERR_FAIL_NULL(xr_server); + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + // Build our component data. + TypedArray component_data; + + // We always need a query result data object. + Ref query_result_data; + query_result_data.instantiate(); + component_data.push_back(query_result_data); + + // And an anchor list object. + Ref anchor_list_data; + anchor_list_data.instantiate(); + component_data.push_back(anchor_list_data); + + // Note that adding this data object means our snapshot will only return persistent anchors! + Ref persistence_list_data; + persistence_list_data.instantiate(); + component_data.push_back(persistence_list_data); + + if (se_extension->query_snapshot(p_snapshot, component_data, nullptr)) { + // Now loop through our data and update our anchors. + int64_t size = query_result_data->get_capacity(); + for (int64_t i = 0; i < size; i++) { + XrSpatialEntityIdEXT entity_id = query_result_data->get_entity_id(i); + XrSpatialEntityTrackingStateEXT entity_state = query_result_data->get_entity_state(i); + + if (entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT) { + // We shouldn't get stopped anchors for discovery queries, but JIC. + if (anchors.has(entity_id)) { + Ref anchor = anchors[entity_id]; + anchor->invalidate_pose(SNAME("default")); + anchor->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT); + } + } else { + // Process our entity. + bool add_to_xr_server = false; + Ref anchor; + + if (anchors.has(entity_id)) { + // We know about this one already. + anchor = anchors[entity_id]; + } else { + // Create a new anchor. + anchor.instantiate(); + anchor->set_entity(se_extension->make_spatial_entity(se_extension->get_spatial_snapshot_context(p_snapshot), entity_id)); + anchors[entity_id] = anchor; + + add_to_xr_server = true; + } + + // Handle component data. + if (entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT) { + anchor->invalidate_pose(SNAME("default")); + anchor->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT); + + // No further component data will be valid in this state, we need to ignore it! + } else if (entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) { + Transform3D transform = anchor_list_data->get_entity_pose(i); + anchor->set_pose(SNAME("default"), transform, Vector3(), Vector3()); + anchor->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT); + } + + // Persistence is the only component that will contain valid data if entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT. + const XrSpatialPersistenceStateEXT persistent_state = persistence_list_data->get_persistent_state(i); + if (persistent_state == XR_SPATIAL_PERSISTENCE_STATE_LOADED_EXT) { + anchor->set_uuid(persistence_list_data->get_persistent_uuid(i)); + } + + if (add_to_xr_server) { + // Register with XR server. + xr_server->add_tracker(anchor); + } + } + } + + // We don't remove trackers here, users will be removing anchors. + // Maybe at some point when shared anchors between headsets result + // in another device removing the shared anchor we need to deal with this. + } + + // Now that we're done, clean up our snapshot! + se_extension->free_spatial_snapshot(p_snapshot); + + // And if this was our discovery snapshot, let's reset it. + if (discovery_query_result.is_valid() && discovery_query_result->get_result_value() == p_snapshot) { + discovery_query_result.unref(); + } +} + +void OpenXRSpatialAnchorCapability::_process_update_snapshot(RID p_snapshot) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + XRServer *xr_server = XRServer::get_singleton(); + ERR_FAIL_NULL(xr_server); + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + // Build our component data. + TypedArray component_data; + + // We always need a query result data object. + Ref query_result_data; + query_result_data.instantiate(); + component_data.push_back(query_result_data); + + // And an anchor list object. + Ref anchor_list_data; + anchor_list_data.instantiate(); + component_data.push_back(anchor_list_data); + + if (se_extension->query_snapshot(p_snapshot, component_data, nullptr)) { + // Now loop through our data and update our anchors. + int64_t size = query_result_data->get_capacity(); + for (int64_t i = 0; i < size; i++) { + XrSpatialEntityIdEXT entity_id = query_result_data->get_entity_id(i); + XrSpatialEntityTrackingStateEXT entity_state = query_result_data->get_entity_state(i); + + if (anchors.has(entity_id)) { + // Process our entity. + Ref anchor = anchors[entity_id]; + + if (entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT) { + anchor->invalidate_pose(SNAME("default")); + anchor->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT); + } else if (entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT) { + anchor->invalidate_pose(SNAME("default")); + anchor->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT); + } else if (entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) { + Transform3D transform = anchor_list_data->get_entity_pose(i); + anchor->set_pose(SNAME("default"), transform, Vector3(), Vector3()); + anchor->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT); + } + } else { + WARN_PRINT("OpenXR: Anchor update query returned unknown anchor with entity ID: " + String::num_int64(entity_id)); + } + } + } + + // Now that we're done, clean up our snapshot! + se_extension->free_spatial_snapshot(p_snapshot); +} + +//////////////////////////////////////////////////////////////////////////// +// Anchor creation + +Ref OpenXRSpatialAnchorCapability::create_new_anchor(const Transform3D &p_transform, RID p_spatial_context) { + Ref tracker; + + ERR_FAIL_COND_V_MSG(!is_spatial_anchor_supported(), tracker, "OpenXR: Spatial entity anchor capability is not supported on this hardware!"); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, tracker); + XRServer *xr_server = XRServer::get_singleton(); + ERR_FAIL_NULL_V(xr_server, tracker); + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, tracker); + + // TODO reverse apply world scale and reference frame to transform. + + XrPosef pose = openxr_api->pose_from_transform(p_transform); + + RID sc = p_spatial_context.is_valid() ? p_spatial_context : spatial_context; + ERR_FAIL_COND_V(sc.is_null(), tracker); + + XrSpatialAnchorCreateInfoEXT create_info = { + XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_EXT, // type + nullptr, // next + openxr_api->get_play_space(), // baseSpace + openxr_api->get_predicted_display_time(), // time + pose // pose + }; + XrSpatialEntityIdEXT entity_id; + XrSpatialEntityEXT entity; + XrResult result = xrCreateSpatialAnchorEXT(se_extension->get_spatial_context_handle(sc), &create_info, &entity_id, &entity); + if (XR_FAILED(result)) { // Did our xrCreateSpatialContextCompleteEXT call fail? + ERR_FAIL_V_MSG(tracker, "OpenXR: Failed to create anchor [" + openxr_api->get_error_string(result) + "]"); + } + + tracker.instantiate(); + tracker->set_entity(se_extension->add_spatial_entity(sc, entity_id, entity)); + tracker->set_tracker_desc("Anchor"); + tracker->set_pose(SNAME("default"), p_transform, Vector3(), Vector3()); + + // Remember our tracker. + anchors[entity_id] = tracker; + xr_server->add_tracker(tracker); + + return tracker; +} + +void OpenXRSpatialAnchorCapability::remove_anchor(Ref p_anchor_tracker) { + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + XRServer *xr_server = XRServer::get_singleton(); + ERR_FAIL_NULL(xr_server); + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + + // We check for this here. We could do this asynchronous but the caller may than wrongly expect this method to be instant. + ERR_FAIL_COND_MSG(p_anchor_tracker->has_uuid(), "OpenXR: This anchor is persistent. It must first be made unpersistent."); + + // Attempt to unregister it from our xr_server. + xr_server->remove_tracker(p_anchor_tracker); + + // Get our entity. + RID entity = p_anchor_tracker->get_entity(); + ERR_FAIL_COND(entity.is_null()); + + // Get our entity id. + XrSpatialEntityIdEXT entity_id = se_extension->get_spatial_entity_id(entity); + ERR_FAIL_COND(entity_id == XR_NULL_ENTITY); + + // Remove it from our entity list. + if (anchors.has(entity_id)) { + anchors.erase(entity_id); + } + + // Clear our entity, this will free it as well. + p_anchor_tracker->set_entity(RID()); + + // The anchor tracker will be cleaned up once its fully dereferenced. +} + +Ref OpenXRSpatialAnchorCapability::persist_anchor(Ref p_anchor_tracker, RID p_persistence_context, const Callable &p_user_callback) { + ERR_FAIL_COND_V(!is_spatial_persistence_supported(), nullptr); + + RID pc = p_persistence_context.is_valid() ? p_persistence_context : persistence_context; + ERR_FAIL_COND_V(pc.is_null(), nullptr); + ERR_FAIL_COND_V(p_anchor_tracker.is_null(), nullptr); + PersistenceContextData *persistence_context_data = persistence_context_owner.get_or_null(pc); + ERR_FAIL_NULL_V(persistence_context_data, nullptr); + const XrSpatialPersistenceContextEXT persistence_context_handle = persistence_context_data->persistence_context; + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, nullptr); + OpenXRFutureExtension *future_api = OpenXRFutureExtension::get_singleton(); + ERR_FAIL_NULL_V(future_api, nullptr); + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + RID entity = p_anchor_tracker->get_entity(); + ERR_FAIL_COND_V(entity.is_null(), nullptr); + + XrSpatialEntityIdEXT entity_id = se_extension->get_spatial_entity_id(entity); + ERR_FAIL_COND_V(entity_id == XR_NULL_ENTITY, nullptr); + + RID spatial_context_rid = se_extension->get_spatial_entity_context(entity); + const XrSpatialContextEXT spatial_context_handle = se_extension->get_spatial_context_handle(spatial_context_rid); + + XrFutureEXT future = XR_NULL_HANDLE; + + XrSpatialEntityPersistInfoEXT persist_info = { + XR_TYPE_SPATIAL_ENTITY_PERSIST_INFO_EXT, // type + nullptr, // next + spatial_context_handle, // spatialContext + entity_id // entityId + }; + XrResult result = xrPersistSpatialEntityAsyncEXT(persistence_context_handle, &persist_info, &future); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(nullptr, "OpenXR: Failed to start making anchor persistent [" + openxr_api->get_error_string(result) + "]"); + } + + // Create our future result. + Ref future_result = future_api->register_future(future, callable_mp(this, &OpenXRSpatialAnchorCapability::_on_made_anchor_persistent).bind(pc, p_anchor_tracker, p_user_callback)); + + return future_result; +} + +void OpenXRSpatialAnchorCapability::_on_made_anchor_persistent(Ref p_future_result, RID p_persistence_context, Ref p_anchor_tracker, const Callable &p_user_callback) { + ERR_FAIL_COND(p_anchor_tracker.is_null()); + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + PersistenceContextData *persistence_context_data = persistence_context_owner.get_or_null(p_persistence_context); + ERR_FAIL_NULL(persistence_context_data); + + XrFutureEXT future = p_future_result->get_future(); + + XrPersistSpatialEntityCompletionEXT completion = { + XR_TYPE_PERSIST_SPATIAL_ENTITY_COMPLETION_EXT, // type + nullptr, // next + XR_RESULT_MAX_ENUM, // futureResult + XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_MAX_ENUM_EXT, // persistResult + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // persistUuid + }; + XrResult result = xrPersistSpatialEntityCompleteEXT(persistence_context_data->persistence_context, future, &completion); + if (XR_FAILED(result)) { // Did our xrCreateSpatialContextCompleteEXT call fail? + p_future_result->set_result_value(false); + ERR_FAIL_MSG("OpenXR: Failed to complete anchor persistent future [" + openxr_api->get_error_string(result) + "]"); + } + if (XR_FAILED(completion.futureResult)) { // Did our completion fail? + p_future_result->set_result_value(false); + ERR_FAIL_MSG("OpenXR: Failed to complete making anchor persistent [" + openxr_api->get_error_string(completion.futureResult) + "]"); + } + if (completion.persistResult != XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_SUCCESS_EXT) { // Did our process fail? + p_future_result->set_result_value(false); + ERR_FAIL_MSG("OpenXR: Failed to make anchor persistent [" + get_spatial_persistence_context_result_name(completion.persistResult) + "]"); + } + + // Set our new UUID. + p_anchor_tracker->set_uuid(completion.persistUuid); + + // Set true our result value on our future. + p_future_result->set_result_value(true); + + // Do our callback. + p_user_callback.call(p_anchor_tracker); +} + +Ref OpenXRSpatialAnchorCapability::unpersist_anchor(Ref p_anchor_tracker, RID p_persistence_context, const Callable &p_user_callback) { + ERR_FAIL_COND_V(!is_spatial_persistence_supported(), nullptr); + + RID pc = p_persistence_context.is_valid() ? p_persistence_context : persistence_context; + ERR_FAIL_COND_V(pc.is_null(), nullptr); + ERR_FAIL_COND_V(p_anchor_tracker.is_null(), nullptr); + PersistenceContextData *persistence_context_data = persistence_context_owner.get_or_null(pc); + ERR_FAIL_NULL_V(persistence_context_data, nullptr); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, nullptr); + OpenXRFutureExtension *future_api = OpenXRFutureExtension::get_singleton(); + ERR_FAIL_NULL_V(future_api, nullptr); + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + XrFutureEXT future; + + XrSpatialEntityUnpersistInfoEXT unpersist_info = { + XR_TYPE_SPATIAL_ENTITY_UNPERSIST_INFO_EXT, // type + nullptr, // next + p_anchor_tracker->get_uuid() // persistUuid + }; + XrResult result = xrUnpersistSpatialEntityAsyncEXT(persistence_context_data->persistence_context, &unpersist_info, &future); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(nullptr, "OpenXR: Failed to make anchor unpersistent [" + openxr_api->get_error_string(result) + "]"); + } + + // Create our future result. + Ref future_result = future_api->register_future(future, callable_mp(this, &OpenXRSpatialAnchorCapability::_on_made_anchor_unpersistent).bind(pc, p_anchor_tracker, p_user_callback)); + + return future_result; +} + +void OpenXRSpatialAnchorCapability::_on_made_anchor_unpersistent(Ref p_future_result, RID p_persistence_context, Ref p_anchor_tracker, const Callable &p_user_callback) { + ERR_FAIL_COND(p_anchor_tracker.is_null()); + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + PersistenceContextData *persistence_context_data = persistence_context_owner.get_or_null(p_persistence_context); + ERR_FAIL_NULL(persistence_context_data); + + XrFutureEXT future = p_future_result->get_future(); + + XrUnpersistSpatialEntityCompletionEXT completion = { + XR_TYPE_UNPERSIST_SPATIAL_ENTITY_COMPLETION_EXT, // type + nullptr, // next + XR_RESULT_MAX_ENUM, // futureResult + XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_MAX_ENUM_EXT, // unpersistResult + }; + XrResult result = xrUnpersistSpatialEntityCompleteEXT(persistence_context_data->persistence_context, future, &completion); + if (XR_FAILED(result)) { // Did our xrCreateSpatialContextCompleteEXT call fail? + p_future_result->set_result_value(false); + ERR_FAIL_MSG("OpenXR: Failed to complete anchor unpersistent future [" + openxr_api->get_error_string(result) + "]"); + } + if (XR_FAILED(completion.futureResult)) { // Did our completion fail? + p_future_result->set_result_value(false); + ERR_FAIL_MSG("OpenXR: Failed to complete making anchor unpersistent [" + openxr_api->get_error_string(completion.futureResult) + "]"); + } + if (completion.unpersistResult != XR_SPATIAL_PERSISTENCE_CONTEXT_RESULT_SUCCESS_EXT) { // Did our process fail? + p_future_result->set_result_value(false); + ERR_FAIL_MSG("OpenXR: Failed to make anchor unpersistent [" + get_spatial_persistence_context_result_name(completion.unpersistResult) + "]"); + } + + // Unset our UUID. + XrUuid empty_uid = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + p_anchor_tracker->set_uuid(empty_uid); + + // Set true our result value on our future. + p_future_result->set_result_value(true); + + // Do our callback. + p_user_callback.call(p_anchor_tracker); +} + +String OpenXRSpatialAnchorCapability::get_spatial_persistence_scope_name(XrSpatialPersistenceScopeEXT p_scope){ + XR_ENUM_SWITCH(XrSpatialPersistenceScopeEXT, p_scope) +} + +String OpenXRSpatialAnchorCapability::get_spatial_persistence_context_result_name(XrSpatialPersistenceContextResultEXT p_result) { + XR_ENUM_SWITCH(XrSpatialPersistenceContextResultEXT, p_result) +} diff --git a/modules/openxr/extensions/spatial_entities/openxr_spatial_entity_extension.cpp b/modules/openxr/extensions/spatial_entities/openxr_spatial_entity_extension.cpp new file mode 100644 index 00000000000..3c8059ec82f --- /dev/null +++ b/modules/openxr/extensions/spatial_entities/openxr_spatial_entity_extension.cpp @@ -0,0 +1,1217 @@ +/**************************************************************************/ +/* openxr_spatial_entity_extension.cpp */ +/**************************************************************************/ +/* This file is part of: */ +/* REDOT ENGINE */ +/* https://redotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2024-present Redot Engine contributors */ +/* (see REDOT_AUTHORS.md) */ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#include "openxr_spatial_entity_extension.h" + +#include "../../openxr_api.h" +#include "core/config/project_settings.h" +#include "servers/xr/xr_server.h" + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialEntityExtension + +OpenXRSpatialEntityExtension *OpenXRSpatialEntityExtension::singleton = nullptr; + +OpenXRSpatialEntityExtension *OpenXRSpatialEntityExtension::get_singleton() { + return singleton; +} + +void OpenXRSpatialEntityExtension::_bind_methods() { + ClassDB::bind_method(D_METHOD("supports_capability", "capability"), &OpenXRSpatialEntityExtension::_supports_capability); + ClassDB::bind_method(D_METHOD("supports_component_type", "capability", "component_type"), &OpenXRSpatialEntityExtension::_supports_component_type); + + ClassDB::bind_method(D_METHOD("create_spatial_context", "capability_configurations", "next", "user_callback"), &OpenXRSpatialEntityExtension::create_spatial_context, DEFVAL(Variant()), DEFVAL(Callable())); + ClassDB::bind_method(D_METHOD("get_spatial_context_ready", "spatial_context"), &OpenXRSpatialEntityExtension::get_spatial_context_ready); + ClassDB::bind_method(D_METHOD("free_spatial_context", "spatial_context"), &OpenXRSpatialEntityExtension::free_spatial_context); + ClassDB::bind_method(D_METHOD("get_spatial_context_handle", "spatial_context"), &OpenXRSpatialEntityExtension::_get_spatial_context_handle); + + ADD_SIGNAL(MethodInfo("spatial_discovery_recommended", PropertyInfo(Variant::RID, "spatial_context"))); + + // Component_types should be an int array typed to ComponentType(XrSpatialComponentTypeEXT), but we currently don't support that. + ClassDB::bind_method(D_METHOD("discover_spatial_entities", "spatial_context", "component_types", "next", "user_callback"), &OpenXRSpatialEntityExtension::_discover_spatial_entities, DEFVAL(Variant()), DEFVAL(Callable())); + ClassDB::bind_method(D_METHOD("update_spatial_entities", "spatial_context", "entities", "component_types", "next"), &OpenXRSpatialEntityExtension::_update_spatial_entities, DEFVAL(Variant())); + + ClassDB::bind_method(D_METHOD("free_spatial_snapshot", "spatial_snapshot"), &OpenXRSpatialEntityExtension::free_spatial_snapshot); + ClassDB::bind_method(D_METHOD("get_spatial_snapshot_handle", "spatial_snapshot"), &OpenXRSpatialEntityExtension::_get_spatial_snapshot_handle); + ClassDB::bind_method(D_METHOD("get_spatial_snapshot_context", "spatial_snapshot"), &OpenXRSpatialEntityExtension::get_spatial_snapshot_context); + ClassDB::bind_method(D_METHOD("query_snapshot", "spatial_snapshot", "component_data", "next"), &OpenXRSpatialEntityExtension::query_snapshot, DEFVAL(Variant())); + + ClassDB::bind_method(D_METHOD("get_string", "spatial_snapshot", "buffer_id"), &OpenXRSpatialEntityExtension::_get_string); + ClassDB::bind_method(D_METHOD("get_uint8_buffer", "spatial_snapshot", "buffer_id"), &OpenXRSpatialEntityExtension::_get_uint8_buffer); + ClassDB::bind_method(D_METHOD("get_uint16_buffer", "spatial_snapshot", "buffer_id"), &OpenXRSpatialEntityExtension::_get_uint16_buffer); + ClassDB::bind_method(D_METHOD("get_uint32_buffer", "spatial_snapshot", "buffer_id"), &OpenXRSpatialEntityExtension::_get_uint32_buffer); + ClassDB::bind_method(D_METHOD("get_float_buffer", "spatial_snapshot", "buffer_id"), &OpenXRSpatialEntityExtension::_get_float_buffer); + ClassDB::bind_method(D_METHOD("get_vector2_buffer", "spatial_snapshot", "buffer_id"), &OpenXRSpatialEntityExtension::_get_vector2_buffer); + ClassDB::bind_method(D_METHOD("get_vector3_buffer", "spatial_snapshot", "buffer_id"), &OpenXRSpatialEntityExtension::_get_vector3_buffer); + + ClassDB::bind_method(D_METHOD("find_spatial_entity", "entity_id"), &OpenXRSpatialEntityExtension::_find_entity); + ClassDB::bind_method(D_METHOD("add_spatial_entity", "spatial_context", "entity_id", "entity"), &OpenXRSpatialEntityExtension::_add_entity); + ClassDB::bind_method(D_METHOD("make_spatial_entity", "spatial_context", "entity_id"), &OpenXRSpatialEntityExtension::_make_entity); + ClassDB::bind_method(D_METHOD("get_spatial_entity_id", "entity"), &OpenXRSpatialEntityExtension::_get_entity_id); + ClassDB::bind_method(D_METHOD("get_spatial_entity_context", "entity"), &OpenXRSpatialEntityExtension::get_spatial_entity_context); + ClassDB::bind_method(D_METHOD("free_spatial_entity", "entity"), &OpenXRSpatialEntityExtension::free_spatial_entity); + + BIND_ENUM_CONSTANT(CAPABILITY_PLANE_TRACKING); + BIND_ENUM_CONSTANT(CAPABILITY_MARKER_TRACKING_QR_CODE); + BIND_ENUM_CONSTANT(CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE); + BIND_ENUM_CONSTANT(CAPABILITY_MARKER_TRACKING_ARUCO_MARKER); + BIND_ENUM_CONSTANT(CAPABILITY_MARKER_TRACKING_APRIL_TAG); + BIND_ENUM_CONSTANT(CAPABILITY_ANCHOR); + + BIND_ENUM_CONSTANT(COMPONENT_TYPE_BOUNDED_2D); + BIND_ENUM_CONSTANT(COMPONENT_TYPE_BOUNDED_3D); + BIND_ENUM_CONSTANT(COMPONENT_TYPE_PARENT); + BIND_ENUM_CONSTANT(COMPONENT_TYPE_MESH_3D); + BIND_ENUM_CONSTANT(COMPONENT_TYPE_PLANE_ALIGNMENT); + BIND_ENUM_CONSTANT(COMPONENT_TYPE_MESH_2D); + BIND_ENUM_CONSTANT(COMPONENT_TYPE_POLYGON_2D); + BIND_ENUM_CONSTANT(COMPONENT_TYPE_PLANE_SEMANTIC_LABEL); + BIND_ENUM_CONSTANT(COMPONENT_TYPE_MARKER); + BIND_ENUM_CONSTANT(COMPONENT_TYPE_ANCHOR); + BIND_ENUM_CONSTANT(COMPONENT_TYPE_PERSISTENCE); +} + +OpenXRSpatialEntityExtension::OpenXRSpatialEntityExtension() { + singleton = this; +} + +OpenXRSpatialEntityExtension::~OpenXRSpatialEntityExtension() { + singleton = nullptr; +} + +HashMap OpenXRSpatialEntityExtension::get_requested_extensions() { + HashMap request_extensions; + + if (GLOBAL_GET_CACHED(bool, "xr/openxr/extensions/spatial_entity/enabled")) { + request_extensions[XR_EXT_SPATIAL_ENTITY_EXTENSION_NAME] = &spatial_entity_ext; + } + + return request_extensions; +} + +void OpenXRSpatialEntityExtension::on_instance_created(const XrInstance p_instance) { + if (spatial_entity_ext) { + EXT_INIT_XR_FUNC(xrEnumerateSpatialCapabilitiesEXT); + EXT_INIT_XR_FUNC(xrEnumerateSpatialCapabilityComponentTypesEXT); + EXT_INIT_XR_FUNC(xrEnumerateSpatialCapabilityFeaturesEXT); + EXT_INIT_XR_FUNC(xrCreateSpatialContextAsyncEXT); + EXT_INIT_XR_FUNC(xrCreateSpatialContextCompleteEXT); + EXT_INIT_XR_FUNC(xrDestroySpatialContextEXT); + EXT_INIT_XR_FUNC(xrCreateSpatialDiscoverySnapshotAsyncEXT); + EXT_INIT_XR_FUNC(xrCreateSpatialDiscoverySnapshotCompleteEXT); + EXT_INIT_XR_FUNC(xrQuerySpatialComponentDataEXT); + EXT_INIT_XR_FUNC(xrDestroySpatialSnapshotEXT); + EXT_INIT_XR_FUNC(xrCreateSpatialEntityFromIdEXT); + EXT_INIT_XR_FUNC(xrDestroySpatialEntityEXT); + EXT_INIT_XR_FUNC(xrCreateSpatialUpdateSnapshotEXT); + EXT_INIT_XR_FUNC(xrGetSpatialBufferStringEXT); + EXT_INIT_XR_FUNC(xrGetSpatialBufferUint8EXT); + EXT_INIT_XR_FUNC(xrGetSpatialBufferUint16EXT); + EXT_INIT_XR_FUNC(xrGetSpatialBufferUint32EXT); + EXT_INIT_XR_FUNC(xrGetSpatialBufferFloatEXT); + EXT_INIT_XR_FUNC(xrGetSpatialBufferVector2fEXT); + EXT_INIT_XR_FUNC(xrGetSpatialBufferVector3fEXT); + } +} + +void OpenXRSpatialEntityExtension::on_instance_destroyed() { + supported_capabilities.clear(); + capabilities_load_state = 0; + + xrEnumerateSpatialCapabilitiesEXT_ptr = nullptr; + xrEnumerateSpatialCapabilityComponentTypesEXT_ptr = nullptr; + xrEnumerateSpatialCapabilityFeaturesEXT_ptr = nullptr; + xrCreateSpatialContextAsyncEXT_ptr = nullptr; + xrCreateSpatialContextCompleteEXT_ptr = nullptr; + xrDestroySpatialContextEXT_ptr = nullptr; + xrCreateSpatialDiscoverySnapshotAsyncEXT_ptr = nullptr; + xrCreateSpatialDiscoverySnapshotCompleteEXT_ptr = nullptr; + xrQuerySpatialComponentDataEXT_ptr = nullptr; + xrDestroySpatialSnapshotEXT_ptr = nullptr; + xrCreateSpatialEntityFromIdEXT_ptr = nullptr; + xrDestroySpatialEntityEXT_ptr = nullptr; + xrCreateSpatialUpdateSnapshotEXT_ptr = nullptr; + xrGetSpatialBufferStringEXT_ptr = nullptr; + xrGetSpatialBufferUint8EXT_ptr = nullptr; + xrGetSpatialBufferUint16EXT_ptr = nullptr; + xrGetSpatialBufferUint32EXT_ptr = nullptr; + xrGetSpatialBufferFloatEXT_ptr = nullptr; + xrGetSpatialBufferVector2fEXT_ptr = nullptr; + xrGetSpatialBufferVector3fEXT_ptr = nullptr; +} + +void OpenXRSpatialEntityExtension::on_session_destroyed() { + if (!get_active()) { + return; + } + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + // Cleanup remaining entity RIDs. + LocalVector spatial_entity_rids = spatial_entity_owner.get_owned_list(); + for (const RID &rid : spatial_entity_rids) { + if (is_print_verbose_enabled()) { + SpatialEntityData *spatial_entity_data = spatial_entity_owner.get_or_null(rid); + if (spatial_entity_data) { // Should never be nullptr seeing we called get_owned_list just now, but just in case. + print_line("OpenXR: Found orphaned spatial entity with ID ", String::num_int64(spatial_entity_data->entity_id)); + } + } + + free_spatial_entity(rid); + } + + // Cleanup remaining snapshot RIDs. + LocalVector spatial_snapshot_rids = spatial_snapshot_owner.get_owned_list(); + if (!spatial_snapshot_rids.is_empty()) { + print_verbose("OpenXR: Found " + String::num_int64(spatial_snapshot_rids.size()) + " orphaned spatial snapshots"); // Don't have useful data to report here so just report count. + for (const RID &rid : spatial_snapshot_rids) { + free_spatial_snapshot(rid); + } + } + + // Clean up all remaining spatial context RIDs. + LocalVector spatial_context_rids = spatial_context_owner.get_owned_list(); + if (!spatial_context_rids.is_empty()) { + print_verbose("OpenXR: Found " + String::num_int64(spatial_context_rids.size()) + " orphaned spatial contexts"); // Don't have useful data to report here so just report count. + for (const RID &rid : spatial_context_rids) { + free_spatial_context(rid); + } + } +} + +bool OpenXRSpatialEntityExtension::get_active() const { + return spatial_entity_ext; +} + +bool OpenXRSpatialEntityExtension::_load_capabilities() { + if (capabilities_load_state == 0) { + if (!spatial_entity_ext) { + return false; + } + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, false); + + XrInstance instance = openxr_api->get_instance(); + ERR_FAIL_COND_V(instance == XR_NULL_HANDLE, false); + XrSystemId system_id = openxr_api->get_system_id(); + ERR_FAIL_COND_V(system_id == 0, false); + + // If we fail before this point, this may be called too early. + // Assume failure so we don't keep trying this unless we succeed. + capabilities_load_state = 2; + + // Check our capabilities. + Vector capabilities; + uint32_t capability_size = 0; + XrResult result = xrEnumerateSpatialCapabilitiesEXT(instance, system_id, 0, &capability_size, nullptr); + if (XR_FAILED(result)) { + // Not successful? then exit. + ERR_FAIL_V_MSG(false, "OpenXR: Failed to get spatial entity capability count [" + openxr_api->get_error_string(result) + "]"); + } + + if (capability_size > 0) { + capabilities.resize(capability_size); + result = xrEnumerateSpatialCapabilitiesEXT(instance, system_id, capabilities.size(), &capability_size, capabilities.ptrw()); + if (XR_FAILED(result)) { + // Not successful? then exit. + ERR_FAIL_V_MSG(false, "OpenXR: Failed to get spatial entity capabilities [" + openxr_api->get_error_string(result) + "]"); + } + + // Loop through capabilities + for (const XrSpatialCapabilityEXT &capability : capabilities) { + print_verbose("OpenXR: Found spatial entity capability " + get_spatial_capability_name(capability) + "."); + + SpatialEntityCapabality &spatial_entity_capability = supported_capabilities[capability]; + + // retrieve component types for this capability + XrSpatialCapabilityComponentTypesEXT component_types = { + XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT, // type + nullptr, // next + 0, // componentTypeCapacityInput + 0, // componentTypeCountOutput + nullptr // componentTypes + }; + result = xrEnumerateSpatialCapabilityComponentTypesEXT(instance, system_id, capability, &component_types); + if (XR_FAILED(result)) { + // Not successful? just keep going. + ERR_PRINT("OpenXR: Failed to get spatial entity component type count [" + openxr_api->get_error_string(result) + "]"); + } else if (component_types.componentTypeCountOutput > 0) { + spatial_entity_capability.component_types.resize(component_types.componentTypeCountOutput); + component_types.componentTypeCapacityInput = spatial_entity_capability.component_types.size(); + component_types.componentTypeCountOutput = 0; + component_types.componentTypes = spatial_entity_capability.component_types.ptrw(); + result = xrEnumerateSpatialCapabilityComponentTypesEXT(instance, system_id, capability, &component_types); + if (XR_FAILED(result)) { + // Not successful? just keep going. + ERR_PRINT("OpenXR: Failed to get spatial entity component types [" + openxr_api->get_error_string(result) + "]"); + } else if (is_print_verbose_enabled()) { + for (const XrSpatialComponentTypeEXT &component_type : spatial_entity_capability.component_types) { + print_verbose("- component type " + get_spatial_component_type_name(component_type)); + } + } + } + + // Retrieve features for this capability + result = xrEnumerateSpatialCapabilityFeaturesEXT(instance, system_id, capability, 0, &capability_size, nullptr); + if (XR_FAILED(result)) { + // Not successful? just keep going. + ERR_PRINT("OpenXR: Failed to get spatial entity feature count [" + openxr_api->get_error_string(result) + "]"); + } else if (capability_size > 0) { + spatial_entity_capability.features.resize(capability_size); + result = xrEnumerateSpatialCapabilityFeaturesEXT(instance, system_id, capability, spatial_entity_capability.features.size(), &capability_size, spatial_entity_capability.features.ptrw()); + if (XR_FAILED(result)) { + // Not successful? just keep going. + ERR_PRINT("OpenXR: Failed to get spatial entity features [" + openxr_api->get_error_string(result) + "]"); + } else if (is_print_verbose_enabled()) { + for (const XrSpatialCapabilityFeatureEXT &feature : spatial_entity_capability.features) { + print_verbose("- feature " + get_spatial_feature_name(feature)); + } + } + } + } + } + + capabilities_load_state = 1; // success! + } + + return capabilities_load_state == 1; +} + +bool OpenXRSpatialEntityExtension::supports_capability(XrSpatialCapabilityEXT p_capability) { + if (!_load_capabilities()) { + return false; + } + + return supported_capabilities.has(p_capability); +} + +bool OpenXRSpatialEntityExtension::_supports_capability(Capability p_capability) { + return supports_capability((XrSpatialCapabilityEXT)p_capability); +} + +bool OpenXRSpatialEntityExtension::supports_component_type(XrSpatialCapabilityEXT p_capability, XrSpatialComponentTypeEXT p_component_type) { + if (!_load_capabilities()) { + return false; + } + + if (supported_capabilities.has(p_capability)) { + return supported_capabilities[p_capability].component_types.has(p_component_type); + } + return false; +} + +bool OpenXRSpatialEntityExtension::_supports_component_type(Capability p_capability, ComponentType p_component_type) { + return supports_component_type((XrSpatialCapabilityEXT)p_capability, (XrSpatialComponentTypeEXT)p_component_type); +} + +bool OpenXRSpatialEntityExtension::on_event_polled(const XrEventDataBuffer &event) { + if (!get_active()) { + return false; + } + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, false); + + switch (event.type) { + case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: { + const XrEventDataSpatialDiscoveryRecommendedEXT *eventdata = (const XrEventDataSpatialDiscoveryRecommendedEXT *)&event; + + // TODO: Should maybe keep a HashMap for a reverse lookup. + + LocalVector spatial_context_rids = spatial_context_owner.get_owned_list(); + for (const RID &rid : spatial_context_rids) { + if (get_spatial_context_handle(rid) == eventdata->spatialContext) { + emit_signal(SNAME("spatial_discovery_recommended"), rid); + } + } + + return true; + } break; + default: { + return false; + } break; + } +} + +//////////////////////////////////////////////////////////////////////////// +// Spatial contexts + +Ref OpenXRSpatialEntityExtension::create_spatial_context(const TypedArray &p_capability_configurations, Ref p_next, const Callable &p_user_callback) { + if (!get_active()) { + return nullptr; + } + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, nullptr); + + OpenXRFutureExtension *future_api = OpenXRFutureExtension::get_singleton(); + ERR_FAIL_NULL_V(future_api, nullptr); + + // Parse our configuration. + Vector configuration; + for (Ref capability_configuration : p_capability_configurations) { + ERR_FAIL_COND_V(capability_configuration.is_null(), nullptr); + + XrSpatialCapabilityConfigurationBaseHeaderEXT *config = capability_configuration->get_configuration(); + if (config != nullptr) { + configuration.push_back(config); + } + } + + void *next = nullptr; + if (p_next.is_valid()) { + next = p_next->get_header(next); + } + + XrSpatialContextCreateInfoEXT create_info = { + XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT, // type + next, // next + uint32_t(configuration.size()), // capabilityConfigCount + configuration.is_empty() ? nullptr : configuration.ptr(), // capabilityConfigs + }; + XrFutureEXT future = XR_NULL_HANDLE; + XrResult xr_result = xrCreateSpatialContextAsyncEXT(openxr_api->get_session(), &create_info, &future); + if (XR_FAILED(xr_result)) { + // Not successful? then exit. + ERR_FAIL_V_MSG(Ref(), "OpenXR: Failed to create spatial context [" + openxr_api->get_error_string(xr_result) + "]"); + } + + // Create our future result + Ref future_result = future_api->register_future(future, callable_mp(this, &OpenXRSpatialEntityExtension::_on_context_creation_ready).bind(p_user_callback)); + + return future_result; +} + +void OpenXRSpatialEntityExtension::_on_context_creation_ready(Ref p_future_result, const Callable &p_user_callback) { + // Complete context creation... + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + XrCreateSpatialContextCompletionEXT completion = { + XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT, // type + nullptr, // next + XR_RESULT_MAX_ENUM, // futureResult + XR_NULL_HANDLE // spatialContext + }; + XrResult result = xrCreateSpatialContextCompleteEXT(openxr_api->get_session(), p_future_result->get_future(), &completion); + if (XR_FAILED(result)) { // Did our xrCreateSpatialContextCompleteEXT call fail? + // Log issue and fail. + ERR_FAIL_MSG("OpenXR: Failed to complete spatial context create future [" + openxr_api->get_error_string(result) + "]"); + } + if (XR_FAILED(completion.futureResult)) { // Did our completion fail? + // Log issue and fail. + ERR_FAIL_MSG("OpenXR: Failed to complete spatial context creation [" + openxr_api->get_error_string(completion.futureResult) + "]"); + } + + // Wrap our spatial context + SpatialContextData spatial_context_data; + spatial_context_data.spatial_context = completion.spatialContext; + + // Store this as an RID so we keep track of it. + RID context_rid = spatial_context_owner.make_rid(spatial_context_data); + + // Set our RID as our result value on our future. + p_future_result->set_result_value(context_rid); + + // And perform our callback if we have one. + if (p_user_callback.is_valid()) { + p_user_callback.call(context_rid); + } +} + +bool OpenXRSpatialEntityExtension::get_spatial_context_ready(RID p_spatial_context) const { + SpatialContextData *context_data = spatial_context_owner.get_or_null(p_spatial_context); + ERR_FAIL_NULL_V(context_data, false); + + return context_data->spatial_context != XR_NULL_HANDLE; +} + +void OpenXRSpatialEntityExtension::free_spatial_context(RID p_spatial_context) { + SpatialContextData *context_data = spatial_context_owner.get_or_null(p_spatial_context); + ERR_FAIL_NULL(context_data); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + if (context_data->spatial_context != XR_NULL_HANDLE) { + // Destroy our spatial context + XrResult result = xrDestroySpatialContextEXT(context_data->spatial_context); + if (XR_FAILED(result)) { + WARN_PRINT("OpenXR: Failed to destroy the spatial context [" + openxr_api->get_error_string(result) + "]"); + } + context_data->spatial_context = XR_NULL_HANDLE; + + // And remove our RID. + spatial_context_owner.free(p_spatial_context); + } +} + +XrSpatialContextEXT OpenXRSpatialEntityExtension::get_spatial_context_handle(RID p_spatial_context) const { + SpatialContextData *context_data = spatial_context_owner.get_or_null(p_spatial_context); + ERR_FAIL_NULL_V(context_data, XR_NULL_HANDLE); + + return context_data->spatial_context; +} + +// For exposing this to GDExtension +uint64_t OpenXRSpatialEntityExtension::_get_spatial_context_handle(RID p_spatial_context) const { + return (uint64_t)get_spatial_context_handle(p_spatial_context); +} + +//////////////////////////////////////////////////////////////////////////// +// Discovery queries + +Ref OpenXRSpatialEntityExtension::discover_spatial_entities(RID p_spatial_context, const Vector &p_component_types, Ref p_next, const Callable &p_user_callback) { + if (!get_active()) { + return nullptr; + } + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, nullptr); + + OpenXRFutureExtension *future_api = OpenXRFutureExtension::get_singleton(); + ERR_FAIL_NULL_V(future_api, nullptr); + + void *next = nullptr; + if (p_next.is_valid()) { + next = p_next->get_header(next); + } + + // Start our discovery snapshot. + XrSpatialDiscoverySnapshotCreateInfoEXT create_info = { + XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT, // type + next, // next + (uint32_t)p_component_types.size(), // componentTypeCount + p_component_types.is_empty() ? nullptr : p_component_types.ptr() // componentTypes + }; + + XrFutureEXT future; + XrResult result = xrCreateSpatialDiscoverySnapshotAsyncEXT(get_spatial_context_handle(p_spatial_context), &create_info, &future); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(nullptr, "OpenXR: Failed to initiate snapshot discovery [" + openxr_api->get_error_string(result) + "]"); + } + + // Create our future result + Ref future_result = future_api->register_future(future, callable_mp(this, &OpenXRSpatialEntityExtension::_on_discovered_spatial_entities).bind(p_spatial_context, p_user_callback)); + + return future_result; +} + +// For calls from GDExtension +Ref OpenXRSpatialEntityExtension::_discover_spatial_entities(RID p_spatial_context, const PackedInt64Array &p_component_types, Ref p_next, const Callable &p_callback) { + Vector component_types; + component_types.resize(p_component_types.size()); + XrSpatialComponentTypeEXT *ptr = component_types.ptrw(); + for (const int64_t &component_type : p_component_types) { + *ptr = (XrSpatialComponentTypeEXT)component_type; + ptr++; + } + + return discover_spatial_entities(p_spatial_context, component_types, p_next, p_callback); +} + +void OpenXRSpatialEntityExtension::_on_discovered_spatial_entities(Ref p_future_result, RID p_discovery_spatial_context, const Callable &p_user_callback) { + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + XrSpatialContextEXT xr_spatial_context = get_spatial_context_handle(p_discovery_spatial_context); + ERR_FAIL_COND(xr_spatial_context == XR_NULL_HANDLE); + + XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completion_info = { + XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT, // type + nullptr, // next + openxr_api->get_play_space(), // baseSpace + openxr_api->get_predicted_display_time(), // time + p_future_result->get_future() // future + }; + + XrCreateSpatialDiscoverySnapshotCompletionEXT completion = { + XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT, // type + nullptr, // next + XR_SUCCESS, // futureResult + XR_NULL_HANDLE // snapshot + }; + XrResult result = xrCreateSpatialDiscoverySnapshotCompleteEXT(xr_spatial_context, &completion_info, &completion); + + if (XR_FAILED(result)) { // Did our xrCreateSpatialContextCompleteEXT call fail? + // And log issue. + ERR_FAIL_MSG("OpenXR: Failed to complete discovery query future [" + openxr_api->get_error_string(result) + "]"); + } + if (XR_FAILED(completion.futureResult)) { // Did our completion fail? + // And log issue. + ERR_FAIL_MSG("OpenXR: Failed to complete discovery query [" + openxr_api->get_error_string(completion.futureResult) + "]"); + } + + // Wrap our spatial snapshot + SpatialSnapshotData snapshot_data; + snapshot_data.spatial_context = p_discovery_spatial_context; + snapshot_data.spatial_snapshot = completion.snapshot; + + // Store this as an RID so we keep track of it. + RID snapshot_rid = spatial_snapshot_owner.make_rid(snapshot_data); + + // Set our RID as our result value on our future. + p_future_result->set_result_value(snapshot_rid); + + // And perform our callback if we have one. + if (p_user_callback.is_valid()) { + p_user_callback.call(snapshot_rid); + } +} + +//////////////////////////////////////////////////////////////////////////// +// Update query + +RID OpenXRSpatialEntityExtension::update_spatial_entities(RID p_spatial_context, const LocalVector &p_entities, const LocalVector &p_component_types, Ref p_next) { + if (!get_active()) { + return RID(); + } + + ERR_FAIL_COND_V(p_entities.is_empty(), RID()); + + SpatialContextData *context_data = spatial_context_owner.get_or_null(p_spatial_context); + ERR_FAIL_NULL_V(context_data, RID()); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, RID()); + + // Convert our entity RIDs to XrSpatialEntityEXT + thread_local LocalVector entities; + + entities.resize(p_entities.size()); + XrSpatialEntityEXT *ptr = entities.ptr(); + for (const RID &rid : p_entities) { + SpatialEntityData *entity_data = spatial_entity_owner.get_or_null(rid); + *ptr = entity_data ? entity_data->entity : XR_NULL_HANDLE; + ptr++; + } + + void *next = nullptr; + if (p_next.is_valid()) { + next = p_next->get_header(next); + } + + SpatialSnapshotData spatial_snapshot_data; + + // Store the context we used for this discovery query + spatial_snapshot_data.spatial_context = p_spatial_context; + + // Do update + XrSpatialUpdateSnapshotCreateInfoEXT create_info = { + XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT, // type + next, // next + (uint32_t)entities.size(), // entityCount, + entities.ptr(), // entities + (uint32_t)p_component_types.size(), // componentTypeCount + p_component_types.is_empty() ? nullptr : p_component_types.ptr(), // componentTypes + openxr_api->get_play_space(), // baseSpace + openxr_api->get_predicted_display_time() // time + }; + XrResult result = xrCreateSpatialUpdateSnapshotEXT(context_data->spatial_context, &create_info, &spatial_snapshot_data.spatial_snapshot); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(RID(), "OpenXR: Failed to create update snapshot [" + openxr_api->get_error_string(result) + "]"); + } + + // Store our snapshot in an RID and return. + return spatial_snapshot_owner.make_rid(spatial_snapshot_data); +} + +RID OpenXRSpatialEntityExtension::_update_spatial_entities(RID p_spatial_context, const TypedArray &p_entities, const PackedInt64Array &p_component_types, Ref p_next) { + thread_local LocalVector entities; + entities.resize(p_entities.size()); + RID *rids = entities.ptr(); + for (const RID rid : p_entities) { + *rids = rid; + rids++; + } + + thread_local LocalVector component_types; + component_types.resize(p_component_types.size()); + XrSpatialComponentTypeEXT *ptr = component_types.ptr(); + for (const int64_t &component_type : p_component_types) { + *ptr = (XrSpatialComponentTypeEXT)component_type; + ptr++; + } + + return update_spatial_entities(p_spatial_context, entities, component_types, p_next); +} + +//////////////////////////////////////////////////////////////////////////// +// Snapshot data + +void OpenXRSpatialEntityExtension::free_spatial_snapshot(RID p_spatial_snapshot) { + SpatialSnapshotData *snapshot_data = spatial_snapshot_owner.get_or_null(p_spatial_snapshot); + ERR_FAIL_NULL(snapshot_data); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + if (snapshot_data->spatial_snapshot != XR_NULL_HANDLE) { + // Destroy our spatial context + XrResult result = xrDestroySpatialSnapshotEXT(snapshot_data->spatial_snapshot); + if (XR_FAILED(result)) { + WARN_PRINT("OpenXR: Failed to destroy the spatial snapshot [" + openxr_api->get_error_string(result) + "]"); + } + snapshot_data->spatial_snapshot = XR_NULL_HANDLE; + } + + // And remove our RID. + spatial_snapshot_owner.free(p_spatial_snapshot); +} + +XrSpatialSnapshotEXT OpenXRSpatialEntityExtension::get_spatial_snapshot_handle(RID p_spatial_snapshot) const { + SpatialSnapshotData *snapshot_data = spatial_snapshot_owner.get_or_null(p_spatial_snapshot); + ERR_FAIL_NULL_V(snapshot_data, XR_NULL_HANDLE); + + return snapshot_data->spatial_snapshot; +} + +RID OpenXRSpatialEntityExtension::get_spatial_snapshot_context(RID p_spatial_snapshot) const { + SpatialSnapshotData *snapshot_data = spatial_snapshot_owner.get_or_null(p_spatial_snapshot); + ERR_FAIL_NULL_V(snapshot_data, RID()); + + return snapshot_data->spatial_context; +} + +// For exposing this to GDExtension +uint64_t OpenXRSpatialEntityExtension::_get_spatial_snapshot_handle(RID p_spatial_snapshot) const { + return (uint64_t)get_spatial_snapshot_handle(p_spatial_snapshot); +} + +bool OpenXRSpatialEntityExtension::query_snapshot(RID p_spatial_snapshot, const TypedArray &p_component_data, Ref p_next) { + SpatialSnapshotData *snapshot_data = spatial_snapshot_owner.get_or_null(p_spatial_snapshot); + ERR_FAIL_NULL_V(snapshot_data, false); + + ERR_FAIL_COND_V(p_component_data.is_empty(), false); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, false); + + Ref query_result_data = p_component_data[0]; + ERR_FAIL_COND_V_MSG(query_result_data.is_null(), false, "OpenXR: The first component must be of type OpenXRSpatialQueryResultData"); + + // Gather component types we need to query. + Vector component_types; + for (Ref component_data : p_component_data) { + if (component_data.is_valid()) { + XrSpatialComponentTypeEXT component_type = component_data->get_component_type(); + if (component_type != XR_SPATIAL_COMPONENT_TYPE_MAX_ENUM_EXT) { + component_types.push_back(component_type); + } + } + } + + void *next = nullptr; + if (p_next.is_valid()) { + next = p_next->get_header(next); + } + + XrSpatialComponentDataQueryConditionEXT query_condition = { + XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT, // type + next, // next + 0, // componentTypeCount + nullptr // componentTypes + }; + + query_condition.componentTypeCount = component_types.size(); + query_condition.componentTypes = component_types.ptr(); + + XrSpatialComponentDataQueryResultEXT *query_result = (XrSpatialComponentDataQueryResultEXT *)query_result_data->get_structure_data(nullptr); + XrResult result = xrQuerySpatialComponentDataEXT(snapshot_data->spatial_snapshot, &query_condition, query_result); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(false, "OpenXR: Failed to query snapshot count [" + openxr_api->get_error_string(result) + "]"); + } + + // Nothing to do? + if (query_result->entityIdCountOutput == 0) { + return true; + } + + // This indicates an issue in the XR runtime, we should have a state for every entity so these counts must match. + ERR_FAIL_COND_V_MSG(query_result->entityIdCountOutput != query_result->entityStateCountOutput, false, "OpenXR: Entity ID count and entity state count don't match!"); + + // Allocate our memory and parse our next structure + next = nullptr; + for (Ref component_data : p_component_data) { + if (component_data.is_valid()) { + component_data->set_capacity(query_result->entityIdCountOutput); + XrSpatialComponentTypeEXT component_type = component_data->get_component_type(); + if (component_type != XR_SPATIAL_COMPONENT_TYPE_MAX_ENUM_EXT) { + next = component_data->get_structure_data(next); + } + } + } + + query_result = (XrSpatialComponentDataQueryResultEXT *)query_result_data->get_structure_data(next); + result = xrQuerySpatialComponentDataEXT(snapshot_data->spatial_snapshot, &query_condition, query_result); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(false, "OpenXR: Failed to query snapshot data [" + openxr_api->get_error_string(result) + "]"); + } + + return true; +} + +//////////////////////////////////////////////////////////////////////////// +// Buffers from snapshot + +String OpenXRSpatialEntityExtension::get_string(RID p_spatial_snapshot, XrSpatialBufferIdEXT p_buffer_id) const { + String ret; + + SpatialSnapshotData *snapshot_data = spatial_snapshot_owner.get_or_null(p_spatial_snapshot); + ERR_FAIL_NULL_V(snapshot_data, ret); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, ret); + + XrSpatialBufferGetInfoEXT info = { + XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT, // type + nullptr, // next + p_buffer_id, // bufferId + }; + + uint32_t count = 0; + XrResult result = xrGetSpatialBufferStringEXT(snapshot_data->spatial_snapshot, &info, 0, &count, nullptr); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(ret, "OpenXR: Failed to get buffer size [" + openxr_api->get_error_string(result) + "]"); + } + + LocalVector buffer; + buffer.resize(count + 1); + buffer[count] = '\0'; // + 1 and setting a zero terminator just in case runtime is not including this. + + result = xrGetSpatialBufferStringEXT(snapshot_data->spatial_snapshot, &info, buffer.size(), &count, buffer.ptr()); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(ret, "OpenXR: Failed to get buffer [" + openxr_api->get_error_string(result) + "]"); + } + + ret = String::utf8(buffer.ptr()); + return ret; +} + +PackedByteArray OpenXRSpatialEntityExtension::get_uint8_buffer(RID p_spatial_snapshot, XrSpatialBufferIdEXT p_buffer_id) const { + PackedByteArray ret; + + SpatialSnapshotData *snapshot_data = spatial_snapshot_owner.get_or_null(p_spatial_snapshot); + ERR_FAIL_NULL_V(snapshot_data, ret); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, ret); + + XrSpatialBufferGetInfoEXT info = { + XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT, // type + nullptr, // next + p_buffer_id, // bufferId + }; + + uint32_t count = 0; + XrResult result = xrGetSpatialBufferUint8EXT(snapshot_data->spatial_snapshot, &info, 0, &count, nullptr); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(ret, "OpenXR: Failed to get buffer size [" + openxr_api->get_error_string(result) + "]"); + } + + ret.resize(count); + + result = xrGetSpatialBufferUint8EXT(snapshot_data->spatial_snapshot, &info, ret.size(), &count, (uint8_t *)ret.ptrw()); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(PackedByteArray(), "OpenXR: Failed to get buffer [" + openxr_api->get_error_string(result) + "]"); + } + + return ret; +} + +Vector OpenXRSpatialEntityExtension::get_uint16_buffer(RID p_spatial_snapshot, XrSpatialBufferIdEXT p_buffer_id) const { + Vector ret; + + SpatialSnapshotData *snapshot_data = spatial_snapshot_owner.get_or_null(p_spatial_snapshot); + ERR_FAIL_NULL_V(snapshot_data, ret); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, ret); + + XrSpatialBufferGetInfoEXT info = { + XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT, // type + nullptr, // next + p_buffer_id, // bufferId + }; + + uint32_t count = 0; + XrResult result = xrGetSpatialBufferUint16EXT(snapshot_data->spatial_snapshot, &info, 0, &count, nullptr); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(ret, "OpenXR: Failed to get buffer size [" + openxr_api->get_error_string(result) + "]"); + } + + ret.resize(count); + + result = xrGetSpatialBufferUint16EXT(snapshot_data->spatial_snapshot, &info, ret.size(), &count, ret.ptrw()); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(Vector(), "OpenXR: Failed to get buffer [" + openxr_api->get_error_string(result) + "]"); + } + + return ret; +} + +Vector OpenXRSpatialEntityExtension::get_uint32_buffer(RID p_spatial_snapshot, XrSpatialBufferIdEXT p_buffer_id) const { + Vector ret; + + SpatialSnapshotData *snapshot_data = spatial_snapshot_owner.get_or_null(p_spatial_snapshot); + ERR_FAIL_NULL_V(snapshot_data, ret); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, ret); + + XrSpatialBufferGetInfoEXT info = { + XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT, // type + nullptr, // next + p_buffer_id, // bufferId + }; + + uint32_t count = 0; + XrResult result = xrGetSpatialBufferUint32EXT(snapshot_data->spatial_snapshot, &info, 0, &count, nullptr); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(ret, "OpenXR: Failed to get buffer size [" + openxr_api->get_error_string(result) + "]"); + } + + ret.resize(count); + + result = xrGetSpatialBufferUint32EXT(snapshot_data->spatial_snapshot, &info, ret.size(), &count, ret.ptrw()); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(Vector(), "OpenXR: Failed to get buffer [" + openxr_api->get_error_string(result) + "]"); + } + + return ret; +} + +PackedFloat32Array OpenXRSpatialEntityExtension::get_float_buffer(RID p_spatial_snapshot, XrSpatialBufferIdEXT p_buffer_id) const { + PackedFloat32Array ret; + + SpatialSnapshotData *snapshot_data = spatial_snapshot_owner.get_or_null(p_spatial_snapshot); + ERR_FAIL_NULL_V(snapshot_data, ret); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, ret); + + XrSpatialBufferGetInfoEXT info = { + XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT, // type + nullptr, // next + p_buffer_id, // bufferId + }; + + uint32_t count = 0; + XrResult result = xrGetSpatialBufferFloatEXT(snapshot_data->spatial_snapshot, &info, 0, &count, nullptr); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(ret, "OpenXR: Failed to get buffer size [" + openxr_api->get_error_string(result) + "]"); + } + + ret.resize(count); + + result = xrGetSpatialBufferFloatEXT(snapshot_data->spatial_snapshot, &info, ret.size(), &count, ret.ptrw()); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(PackedFloat32Array(), "OpenXR: Failed to get buffer [" + openxr_api->get_error_string(result) + "]"); + } + + return ret; +} + +PackedVector2Array OpenXRSpatialEntityExtension::get_vector2_buffer(RID p_spatial_snapshot, XrSpatialBufferIdEXT p_buffer_id) const { + PackedVector2Array ret; + + SpatialSnapshotData *snapshot_data = spatial_snapshot_owner.get_or_null(p_spatial_snapshot); + ERR_FAIL_NULL_V(snapshot_data, ret); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, ret); + + XrSpatialBufferGetInfoEXT info = { + XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT, // type + nullptr, // next + p_buffer_id, // bufferId + }; + + uint32_t count = 0; + XrResult result = xrGetSpatialBufferVector2fEXT(snapshot_data->spatial_snapshot, &info, 0, &count, nullptr); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(ret, "OpenXR: Failed to get buffer size [" + openxr_api->get_error_string(result) + "]"); + } + +#ifdef REAL_T_IS_DOUBLE + // OpenXR XrVector2f is using floats, Godot Vector2 is using double, so we need to do a copy. + LocalVector buffer; + buffer.resize(count); + + result = xrGetSpatialBufferVector2fEXT(snapshot_data->spatial_snapshot, &info, buffer.size(), &count, buffer.ptr()); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(ret, "OpenXR: Failed to get buffer [" + openxr_api->get_error_string(result) + "]"); + } + + ret.resize(count); + Vector2 *ptr = ret.ptrw(); + for (uint32_t i = 0; i < count; i++) { + ptr[i].x = buffer[i].x; + ptr[i].y = buffer[i].y; + } +#else + // OpenXR's XrVector2f and Godots Vector2 should be interchangeable. + ret.resize(count); + + result = xrGetSpatialBufferVector2fEXT(snapshot_data->spatial_snapshot, &info, ret.size(), &count, (XrVector2f *)ret.ptrw()); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(PackedVector2Array(), "OpenXR: Failed to get buffer [" + openxr_api->get_error_string(result) + "]"); + } +#endif + + return ret; +} + +PackedVector3Array OpenXRSpatialEntityExtension::get_vector3_buffer(RID p_spatial_snapshot, XrSpatialBufferIdEXT p_buffer_id) const { + PackedVector3Array ret; + + SpatialSnapshotData *snapshot_data = spatial_snapshot_owner.get_or_null(p_spatial_snapshot); + ERR_FAIL_NULL_V(snapshot_data, ret); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, ret); + + XrSpatialBufferGetInfoEXT info = { + XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT, // type + nullptr, // next + p_buffer_id, // bufferId + }; + + uint32_t count = 0; + XrResult result = xrGetSpatialBufferVector3fEXT(snapshot_data->spatial_snapshot, &info, 0, &count, nullptr); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(ret, "OpenXR: Failed to get buffer size [" + openxr_api->get_error_string(result) + "]"); + } + +#ifdef REAL_T_IS_DOUBLE + // OpenXR XrVector3f is using floats, Godot Vector3 is using double, so we need to do a copy. + LocalVector buffer; + buffer.resize(count); + + result = xrGetSpatialBufferVector3fEXT(snapshot_data->spatial_snapshot, &info, buffer.size(), &count, buffer.ptr()); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(ret, "OpenXR: Failed to get buffer [" + openxr_api->get_error_string(result) + "]"); + } + + ret.resize(count); + Vector3 *ptr = ret.ptrw(); + for (uint32_t i = 0; i < count; i++) { + ptr[i].x = buffer[i].x; + ptr[i].y = buffer[i].y; + ptr[i].z = buffer[i].z; + } +#else + // OpenXR's XrVector3f and Godots Vector3 should be interchangeable. + ret.resize(count); + + result = xrGetSpatialBufferVector3fEXT(snapshot_data->spatial_snapshot, &info, ret.size(), &count, (XrVector3f *)ret.ptrw()); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(PackedVector3Array(), "OpenXR: Failed to get buffer [" + openxr_api->get_error_string(result) + "]"); + } +#endif + + return ret; +} + +String OpenXRSpatialEntityExtension::_get_string(RID p_spatial_snapshot, uint64_t p_buffer_id) const { + return get_string(p_spatial_snapshot, (XrSpatialBufferIdEXT)p_buffer_id); +} + +PackedByteArray OpenXRSpatialEntityExtension::_get_uint8_buffer(RID p_spatial_snapshot, uint64_t p_buffer_id) const { + return get_uint8_buffer(p_spatial_snapshot, (XrSpatialBufferIdEXT)p_buffer_id); +} + +PackedInt32Array OpenXRSpatialEntityExtension::_get_uint16_buffer(RID p_spatial_snapshot, uint64_t p_buffer_id) const { + PackedInt32Array ret; + Vector buffer = get_uint16_buffer(p_spatial_snapshot, (XrSpatialBufferIdEXT)p_buffer_id); + + if (!buffer.is_empty()) { + // We don't have PackedInt16Array so we convert to PackedInt32Array + + ret.resize(buffer.size()); + + int size = ret.size(); + int32_t *ptr = ret.ptrw(); + for (int i = 0; i < size; i++) { + ptr[i] = buffer[i]; + } + } + + return ret; +} + +PackedInt32Array OpenXRSpatialEntityExtension::_get_uint32_buffer(RID p_spatial_snapshot, uint64_t p_buffer_id) const { + PackedInt32Array ret; + Vector buffer = get_uint32_buffer(p_spatial_snapshot, (XrSpatialBufferIdEXT)p_buffer_id); + + if (!buffer.is_empty()) { + // Note, we don't have a UINT32 array that we can use with GDScript and using an INT64 array is overkill. + // Bit wasteful this but... + + ret.resize(buffer.size()); + + int size = ret.size(); + int32_t *ptr = ret.ptrw(); + for (int i = 0; i < size; i++) { + ptr[i] = buffer[i]; + } + } + + return ret; +} + +PackedFloat32Array OpenXRSpatialEntityExtension::_get_float_buffer(RID p_spatial_snapshot, uint64_t p_buffer_id) const { + return get_float_buffer(p_spatial_snapshot, (XrSpatialBufferIdEXT)p_buffer_id); +} + +PackedVector2Array OpenXRSpatialEntityExtension::_get_vector2_buffer(RID p_spatial_snapshot, uint64_t p_buffer_id) const { + return get_vector2_buffer(p_spatial_snapshot, (XrSpatialBufferIdEXT)p_buffer_id); +} + +PackedVector3Array OpenXRSpatialEntityExtension::_get_vector3_buffer(RID p_spatial_snapshot, uint64_t p_buffer_id) const { + return get_vector3_buffer(p_spatial_snapshot, (XrSpatialBufferIdEXT)p_buffer_id); +} + +//////////////////////////////////////////////////////////////////////////// +// Entities + +RID OpenXRSpatialEntityExtension::find_spatial_entity(XrSpatialEntityIdEXT p_entity_id) const { + ERR_FAIL_COND_V(!get_active(), RID()); + + LocalVector entities = spatial_entity_owner.get_owned_list(); + for (const RID &entity : entities) { + SpatialEntityData *entity_data = spatial_entity_owner.get_or_null(entity); + ERR_FAIL_NULL_V(entity_data, RID()); + + if (entity_data->entity_id == p_entity_id) { + return entity; + } + } + + return RID(); +} + +RID OpenXRSpatialEntityExtension::_find_entity(uint64_t p_entity_id) { + return find_spatial_entity((XrSpatialEntityIdEXT)p_entity_id); +} + +RID OpenXRSpatialEntityExtension::add_spatial_entity(RID p_spatial_context, XrSpatialEntityIdEXT p_entity_id, XrSpatialEntityEXT p_entity) { + ERR_FAIL_COND_V(!get_active(), RID()); + + // Entity has been created elsewhere, we just register it + SpatialEntityData spatial_entity_data; + + spatial_entity_data.spatial_context = p_spatial_context; + spatial_entity_data.entity_id = p_entity_id; + spatial_entity_data.entity = p_entity; + + return spatial_entity_owner.make_rid(spatial_entity_data); +} + +RID OpenXRSpatialEntityExtension::_add_entity(RID p_spatial_context, uint64_t p_entity_id, uint64_t p_entity) { + return add_spatial_entity(p_spatial_context, (XrSpatialEntityIdEXT)p_entity_id, (XrSpatialEntityEXT)p_entity); +} + +RID OpenXRSpatialEntityExtension::make_spatial_entity(RID p_spatial_context, XrSpatialEntityIdEXT p_entity_id) { + ERR_FAIL_COND_V(!get_active(), RID()); + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, RID()); + + SpatialEntityData spatial_entity_data; + + spatial_entity_data.spatial_context = p_spatial_context; + spatial_entity_data.entity_id = p_entity_id; + XrSpatialEntityFromIdCreateInfoEXT create_info = { + XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT, // type + nullptr, // next + p_entity_id //entityId + }; + XrResult result = xrCreateSpatialEntityFromIdEXT(get_spatial_context_handle(p_spatial_context), &create_info, &spatial_entity_data.entity); + if (XR_FAILED(result)) { + ERR_FAIL_V_MSG(RID(), "OpenXR: Failed to create spatial entity [" + openxr_api->get_error_string(result) + "]"); + } + + return spatial_entity_owner.make_rid(spatial_entity_data); +} + +RID OpenXRSpatialEntityExtension::_make_entity(RID p_spatial_context, uint64_t p_entity_id) { + return make_spatial_entity(p_spatial_context, (XrSpatialEntityIdEXT)p_entity_id); +} + +XrSpatialEntityIdEXT OpenXRSpatialEntityExtension::get_spatial_entity_id(RID p_entity) const { + SpatialEntityData *entity_data = spatial_entity_owner.get_or_null(p_entity); + ERR_FAIL_NULL_V(entity_data, XR_NULL_ENTITY); + + return entity_data->entity_id; +} + +uint64_t OpenXRSpatialEntityExtension::_get_entity_id(RID p_entity) const { + return (uint64_t)get_spatial_entity_id(p_entity); +} + +RID OpenXRSpatialEntityExtension::get_spatial_entity_context(RID p_entity) const { + SpatialEntityData *entity_data = spatial_entity_owner.get_or_null(p_entity); + ERR_FAIL_NULL_V(entity_data, RID()); + + return entity_data->spatial_context; +} + +void OpenXRSpatialEntityExtension::free_spatial_entity(RID p_entity) { + SpatialEntityData *entity_data = spatial_entity_owner.get_or_null(p_entity); + ERR_FAIL_NULL(entity_data); + ERR_FAIL_COND(entity_data->entity == XR_NULL_HANDLE); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + XrResult result = xrDestroySpatialEntityEXT_ptr(entity_data->entity); + if (XR_FAILED(result)) { + WARN_PRINT("OpenXR: Failed to destroy spatial entity [" + openxr_api->get_error_string(result) + "]"); + } + + // And remove our RID. + spatial_entity_owner.free(p_entity); +} + +String OpenXRSpatialEntityExtension::get_spatial_capability_name(XrSpatialCapabilityEXT p_capability){ + XR_ENUM_SWITCH(XrSpatialCapabilityEXT, p_capability) +} + +String OpenXRSpatialEntityExtension::get_spatial_component_type_name(XrSpatialComponentTypeEXT p_component_type){ + XR_ENUM_SWITCH(XrSpatialComponentTypeEXT, p_component_type) +} + +String OpenXRSpatialEntityExtension::get_spatial_feature_name(XrSpatialCapabilityFeatureEXT p_feature) { + XR_ENUM_SWITCH(XrSpatialCapabilityFeatureEXT, p_feature) +} diff --git a/modules/openxr/extensions/spatial_entities/openxr_spatial_marker_tracking.cpp b/modules/openxr/extensions/spatial_entities/openxr_spatial_marker_tracking.cpp new file mode 100644 index 00000000000..048f8528b0b --- /dev/null +++ b/modules/openxr/extensions/spatial_entities/openxr_spatial_marker_tracking.cpp @@ -0,0 +1,790 @@ +/**************************************************************************/ +/* openxr_spatial_marker_tracking.cpp */ +/**************************************************************************/ +/* This file is part of: */ +/* REDOT ENGINE */ +/* https://redotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2024-present Redot Engine contributors */ +/* (see REDOT_AUTHORS.md) */ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#include "openxr_spatial_marker_tracking.h" + +#include "../../openxr_api.h" +#include "core/config/project_settings.h" +#include "openxr_spatial_entity_extension.h" +#include "servers/xr/xr_server.h" + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialCapabilityConfigurationQrCode + +void OpenXRSpatialCapabilityConfigurationQrCode::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_enabled_components"), &OpenXRSpatialCapabilityConfigurationQrCode::_get_enabled_components); +} + +bool OpenXRSpatialCapabilityConfigurationQrCode::has_valid_configuration() const { + OpenXRSpatialMarkerTrackingCapability *capability = OpenXRSpatialMarkerTrackingCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, false); + + return capability->is_qrcode_supported(); +} + +XrSpatialCapabilityConfigurationBaseHeaderEXT *OpenXRSpatialCapabilityConfigurationQrCode::get_configuration() { + OpenXRSpatialMarkerTrackingCapability *capability = OpenXRSpatialMarkerTrackingCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, nullptr); + + if (capability->is_qrcode_supported()) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + // Guaranteed components: + enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT); + enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT); + + // Set up our enabled components. + marker_config.enabledComponentCount = enabled_components.size(); + marker_config.enabledComponents = enabled_components.ptr(); + + // and return this. + return (XrSpatialCapabilityConfigurationBaseHeaderEXT *)&marker_config; + } + + return nullptr; +} + +PackedInt64Array OpenXRSpatialCapabilityConfigurationQrCode::_get_enabled_components() const { + PackedInt64Array components; + + for (const XrSpatialComponentTypeEXT &component_type : enabled_components) { + components.push_back((int64_t)component_type); + } + + return components; +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialCapabilityConfigurationMicroQrCode + +void OpenXRSpatialCapabilityConfigurationMicroQrCode::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_enabled_components"), &OpenXRSpatialCapabilityConfigurationMicroQrCode::_get_enabled_components); +} + +bool OpenXRSpatialCapabilityConfigurationMicroQrCode::has_valid_configuration() const { + OpenXRSpatialMarkerTrackingCapability *capability = OpenXRSpatialMarkerTrackingCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, false); + + return capability->is_micro_qrcode_supported(); +} + +XrSpatialCapabilityConfigurationBaseHeaderEXT *OpenXRSpatialCapabilityConfigurationMicroQrCode::get_configuration() { + OpenXRSpatialMarkerTrackingCapability *capability = OpenXRSpatialMarkerTrackingCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, nullptr); + + if (capability->is_micro_qrcode_supported()) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + // Guaranteed components: + enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT); + enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT); + + // Set up our enabled components. + marker_config.enabledComponentCount = enabled_components.size(); + marker_config.enabledComponents = enabled_components.ptr(); + + // and return this. + return (XrSpatialCapabilityConfigurationBaseHeaderEXT *)&marker_config; + } + + return nullptr; +} + +PackedInt64Array OpenXRSpatialCapabilityConfigurationMicroQrCode::_get_enabled_components() const { + PackedInt64Array components; + + for (const XrSpatialComponentTypeEXT &component_type : enabled_components) { + components.push_back((int64_t)component_type); + } + + return components; +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialCapabilityConfigurationAruco + +void OpenXRSpatialCapabilityConfigurationAruco::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_enabled_components"), &OpenXRSpatialCapabilityConfigurationAruco::_get_enabled_components); + + ClassDB::bind_method(D_METHOD("set_aruco_dict", "aruco_dict"), &OpenXRSpatialCapabilityConfigurationAruco::_set_aruco_dict); + ClassDB::bind_method(D_METHOD("get_aruco_dict"), &OpenXRSpatialCapabilityConfigurationAruco::_get_aruco_dict); + ADD_PROPERTY(PropertyInfo(Variant::INT, "aruco_dict"), "set_aruco_dict", "get_aruco_dict"); + + BIND_ENUM_CONSTANT(ARUCO_DICT_4X4_50); + BIND_ENUM_CONSTANT(ARUCO_DICT_4X4_100); + BIND_ENUM_CONSTANT(ARUCO_DICT_4X4_250); + BIND_ENUM_CONSTANT(ARUCO_DICT_4X4_1000); + BIND_ENUM_CONSTANT(ARUCO_DICT_5X5_50); + BIND_ENUM_CONSTANT(ARUCO_DICT_5X5_100); + BIND_ENUM_CONSTANT(ARUCO_DICT_5X5_250); + BIND_ENUM_CONSTANT(ARUCO_DICT_5X5_1000); + BIND_ENUM_CONSTANT(ARUCO_DICT_6X6_50); + BIND_ENUM_CONSTANT(ARUCO_DICT_6X6_100); + BIND_ENUM_CONSTANT(ARUCO_DICT_6X6_250); + BIND_ENUM_CONSTANT(ARUCO_DICT_6X6_1000); + BIND_ENUM_CONSTANT(ARUCO_DICT_7X7_50); + BIND_ENUM_CONSTANT(ARUCO_DICT_7X7_100); + BIND_ENUM_CONSTANT(ARUCO_DICT_7X7_250); + BIND_ENUM_CONSTANT(ARUCO_DICT_7X7_1000); +} + +bool OpenXRSpatialCapabilityConfigurationAruco::has_valid_configuration() const { + OpenXRSpatialMarkerTrackingCapability *capability = OpenXRSpatialMarkerTrackingCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, false); + + return capability->is_aruco_supported(); +} + +XrSpatialCapabilityConfigurationBaseHeaderEXT *OpenXRSpatialCapabilityConfigurationAruco::get_configuration() { + OpenXRSpatialMarkerTrackingCapability *capability = OpenXRSpatialMarkerTrackingCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, nullptr); + + if (capability->is_aruco_supported()) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + // Guaranteed components: + enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT); + enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT); + + // Set up our enabled components. + marker_config.enabledComponentCount = enabled_components.size(); + marker_config.enabledComponents = enabled_components.ptr(); + + // and return this. + return (XrSpatialCapabilityConfigurationBaseHeaderEXT *)&marker_config; + } + + return nullptr; +} + +void OpenXRSpatialCapabilityConfigurationAruco::set_aruco_dict(XrSpatialMarkerArucoDictEXT p_dict) { + marker_config.arUcoDict = p_dict; +} + +void OpenXRSpatialCapabilityConfigurationAruco::_set_aruco_dict(ArucoDict p_dict) { + set_aruco_dict((XrSpatialMarkerArucoDictEXT)p_dict); +} + +XrSpatialMarkerArucoDictEXT OpenXRSpatialCapabilityConfigurationAruco::get_aruco_dict() const { + return marker_config.arUcoDict; +} + +OpenXRSpatialCapabilityConfigurationAruco::ArucoDict OpenXRSpatialCapabilityConfigurationAruco::_get_aruco_dict() const { + return (ArucoDict)get_aruco_dict(); +} + +PackedInt64Array OpenXRSpatialCapabilityConfigurationAruco::_get_enabled_components() const { + PackedInt64Array components; + + for (const XrSpatialComponentTypeEXT &component_type : enabled_components) { + components.push_back((int64_t)component_type); + } + + return components; +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialCapabilityConfigurationAprilTag + +void OpenXRSpatialCapabilityConfigurationAprilTag::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_enabled_components"), &OpenXRSpatialCapabilityConfigurationAprilTag::_get_enabled_components); + + ClassDB::bind_method(D_METHOD("set_april_dict", "april_dict"), &OpenXRSpatialCapabilityConfigurationAprilTag::_set_april_dict); + ClassDB::bind_method(D_METHOD("get_april_dict"), &OpenXRSpatialCapabilityConfigurationAprilTag::_get_april_dict); + ADD_PROPERTY(PropertyInfo(Variant::INT, "april_dict"), "set_april_dict", "get_april_dict"); + + BIND_ENUM_CONSTANT(APRIL_TAG_DICT_16H5); + BIND_ENUM_CONSTANT(APRIL_TAG_DICT_25H9); + BIND_ENUM_CONSTANT(APRIL_TAG_DICT_36H10); + BIND_ENUM_CONSTANT(APRIL_TAG_DICT_36H11); +} + +bool OpenXRSpatialCapabilityConfigurationAprilTag::has_valid_configuration() const { + OpenXRSpatialMarkerTrackingCapability *capability = OpenXRSpatialMarkerTrackingCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, false); + + return capability->is_april_tag_supported(); +} + +XrSpatialCapabilityConfigurationBaseHeaderEXT *OpenXRSpatialCapabilityConfigurationAprilTag::get_configuration() { + OpenXRSpatialMarkerTrackingCapability *capability = OpenXRSpatialMarkerTrackingCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, nullptr); + + if (capability->is_april_tag_supported()) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + // Guaranteed components: + enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT); + enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT); + + // Set up our enabled components. + marker_config.enabledComponentCount = enabled_components.size(); + marker_config.enabledComponents = enabled_components.ptr(); + + // and return this. + return (XrSpatialCapabilityConfigurationBaseHeaderEXT *)&marker_config; + } + + return nullptr; +} + +void OpenXRSpatialCapabilityConfigurationAprilTag::set_april_dict(XrSpatialMarkerAprilTagDictEXT p_dict) { + marker_config.aprilDict = p_dict; +} + +void OpenXRSpatialCapabilityConfigurationAprilTag::_set_april_dict(AprilTagDict p_dict) { + set_april_dict((XrSpatialMarkerAprilTagDictEXT)p_dict); +} + +XrSpatialMarkerAprilTagDictEXT OpenXRSpatialCapabilityConfigurationAprilTag::get_april_dict() const { + return marker_config.aprilDict; +} + +OpenXRSpatialCapabilityConfigurationAprilTag::AprilTagDict OpenXRSpatialCapabilityConfigurationAprilTag::_get_april_dict() const { + return (AprilTagDict)get_april_dict(); +} + +PackedInt64Array OpenXRSpatialCapabilityConfigurationAprilTag::_get_enabled_components() const { + PackedInt64Array components; + + for (const XrSpatialComponentTypeEXT &component_type : enabled_components) { + components.push_back((int64_t)component_type); + } + + return components; +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialComponentMarkerList + +void OpenXRSpatialComponentMarkerList::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_marker_type", "index"), &OpenXRSpatialComponentMarkerList::get_marker_type); + ClassDB::bind_method(D_METHOD("get_marker_id", "index"), &OpenXRSpatialComponentMarkerList::get_marker_id); + ClassDB::bind_method(D_METHOD("get_marker_data", "snapshot", "index"), &OpenXRSpatialComponentMarkerList::get_marker_data); + + BIND_ENUM_CONSTANT(MARKER_TYPE_UNKNOWN); + BIND_ENUM_CONSTANT(MARKER_TYPE_QRCODE); + BIND_ENUM_CONSTANT(MARKER_TYPE_MICRO_QRCODE); + BIND_ENUM_CONSTANT(MARKER_TYPE_ARUCO); + BIND_ENUM_CONSTANT(MARKER_TYPE_APRIL_TAG); + BIND_ENUM_CONSTANT(MARKER_TYPE_MAX); +} + +void OpenXRSpatialComponentMarkerList::set_capacity(uint32_t p_capacity) { + marker_data.resize(p_capacity); + + marker_list.markerCount = uint32_t(marker_data.size()); + marker_list.markers = marker_data.ptrw(); +} + +XrSpatialComponentTypeEXT OpenXRSpatialComponentMarkerList::get_component_type() const { + return XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT; +} + +void *OpenXRSpatialComponentMarkerList::get_structure_data(void *p_next) { + marker_list.next = p_next; + return &marker_list; +} + +OpenXRSpatialComponentMarkerList::MarkerType OpenXRSpatialComponentMarkerList::get_marker_type(int64_t p_index) const { + ERR_FAIL_INDEX_V(p_index, marker_data.size(), MARKER_TYPE_UNKNOWN); + + // We can't simply cast these. + // This may give us problems in the future if we get new types through vendor extensions. + switch (marker_data[p_index].capability) { + case XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT: { + return MARKER_TYPE_QRCODE; + } break; + case XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT: { + return MARKER_TYPE_MICRO_QRCODE; + } break; + case XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT: { + return MARKER_TYPE_ARUCO; + } break; + case XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT: { + return MARKER_TYPE_APRIL_TAG; + } break; + default: { + return MARKER_TYPE_UNKNOWN; + } break; + } +} + +uint32_t OpenXRSpatialComponentMarkerList::get_marker_id(int64_t p_index) const { + ERR_FAIL_INDEX_V(p_index, marker_data.size(), 0); + + return marker_data[p_index].markerId; +} + +Variant OpenXRSpatialComponentMarkerList::get_marker_data(RID p_snapshot, int64_t p_index) const { + ERR_FAIL_INDEX_V(p_index, marker_data.size(), Variant()); + + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, Variant()); + + const XrSpatialBufferEXT &data = marker_data[p_index].data; + switch (data.bufferType) { + case XR_SPATIAL_BUFFER_TYPE_STRING_EXT: { + return se_extension->get_string(p_snapshot, data.bufferId); + } break; + case XR_SPATIAL_BUFFER_TYPE_UINT8_EXT: { + return se_extension->get_uint8_buffer(p_snapshot, data.bufferId); + } break; + default: { + return Variant(); + } break; + } +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRMarkerTracker + +void OpenXRMarkerTracker::_bind_methods() { + ClassDB::bind_method(D_METHOD("set_bounds_size", "bounds_size"), &OpenXRMarkerTracker::set_bounds_size); + ClassDB::bind_method(D_METHOD("get_bounds_size"), &OpenXRMarkerTracker::get_bounds_size); + ADD_PROPERTY(PropertyInfo(Variant::INT, "bounds_size"), "set_bounds_size", "get_bounds_size"); + + ClassDB::bind_method(D_METHOD("set_marker_type", "marker_type"), &OpenXRMarkerTracker::set_marker_type); + ClassDB::bind_method(D_METHOD("get_marker_type"), &OpenXRMarkerTracker::get_marker_type); + ADD_PROPERTY(PropertyInfo(Variant::INT, "marker_type"), "set_marker_type", "get_marker_type"); + + ClassDB::bind_method(D_METHOD("set_marker_id", "marker_id"), &OpenXRMarkerTracker::set_marker_id); + ClassDB::bind_method(D_METHOD("get_marker_id"), &OpenXRMarkerTracker::get_marker_id); + ADD_PROPERTY(PropertyInfo(Variant::INT, "marker_id"), "set_marker_id", "get_marker_id"); + + // As the type of marker data can vary, we can't make this a property. + ClassDB::bind_method(D_METHOD("set_marker_data", "marker_data"), &OpenXRMarkerTracker::set_marker_data); + ClassDB::bind_method(D_METHOD("get_marker_data"), &OpenXRMarkerTracker::get_marker_data); +} + +void OpenXRMarkerTracker::set_bounds_size(const Vector2 &p_bounds_size) { + bounds_size = p_bounds_size; +} + +Vector2 OpenXRMarkerTracker::get_bounds_size() const { + return bounds_size; +} + +void OpenXRMarkerTracker::set_marker_type(OpenXRSpatialComponentMarkerList::MarkerType p_marker_type) { + marker_type = p_marker_type; +} + +OpenXRSpatialComponentMarkerList::MarkerType OpenXRMarkerTracker::get_marker_type() const { + return marker_type; +} + +void OpenXRMarkerTracker::set_marker_id(uint32_t p_id) { + marker_id = p_id; +} + +uint32_t OpenXRMarkerTracker::get_marker_id() const { + return marker_id; +} + +void OpenXRMarkerTracker::set_marker_data(const Variant &p_data) { + marker_data = p_data; +} + +Variant OpenXRMarkerTracker::get_marker_data() const { + return marker_data; +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialMarkerTrackingCapability + +OpenXRSpatialMarkerTrackingCapability *OpenXRSpatialMarkerTrackingCapability::singleton = nullptr; + +OpenXRSpatialMarkerTrackingCapability *OpenXRSpatialMarkerTrackingCapability::get_singleton() { + return singleton; +} + +OpenXRSpatialMarkerTrackingCapability::OpenXRSpatialMarkerTrackingCapability() { + singleton = this; +} + +OpenXRSpatialMarkerTrackingCapability::~OpenXRSpatialMarkerTrackingCapability() { + singleton = nullptr; +} + +void OpenXRSpatialMarkerTrackingCapability::_bind_methods() { + ClassDB::bind_method(D_METHOD("is_qrcode_supported"), &OpenXRSpatialMarkerTrackingCapability::is_qrcode_supported); + ClassDB::bind_method(D_METHOD("is_micro_qrcode_supported"), &OpenXRSpatialMarkerTrackingCapability::is_micro_qrcode_supported); + ClassDB::bind_method(D_METHOD("is_aruco_supported"), &OpenXRSpatialMarkerTrackingCapability::is_aruco_supported); + ClassDB::bind_method(D_METHOD("is_april_tag_supported"), &OpenXRSpatialMarkerTrackingCapability::is_april_tag_supported); +} + +HashMap OpenXRSpatialMarkerTrackingCapability::get_requested_extensions() { + HashMap request_extensions; + + if (GLOBAL_GET_CACHED(bool, "xr/openxr/extensions/spatial_entity/enabled") && GLOBAL_GET_CACHED(bool, "xr/openxr/extensions/spatial_entity/enable_marker_tracking")) { + request_extensions[XR_EXT_SPATIAL_MARKER_TRACKING_EXTENSION_NAME] = &spatial_marker_tracking_ext; + } + + return request_extensions; +} + +void OpenXRSpatialMarkerTrackingCapability::on_session_created(const XrSession p_session) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + + if (!spatial_marker_tracking_ext) { + return; + } + + se_extension->connect(SNAME("spatial_discovery_recommended"), callable_mp(this, &OpenXRSpatialMarkerTrackingCapability::_on_spatial_discovery_recommended)); + + if (GLOBAL_GET_CACHED(bool, "xr/openxr/extensions/spatial_entity/enable_builtin_marker_tracking")) { + // Start by creating our spatial context + _create_spatial_context(); + } +} + +void OpenXRSpatialMarkerTrackingCapability::on_session_destroyed() { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + XRServer *xr_server = XRServer::get_singleton(); + ERR_FAIL_NULL(xr_server); + + // Free and unregister our anchors + for (const KeyValue> &marker_tracker : marker_trackers) { + xr_server->remove_tracker(marker_tracker.value); + } + marker_trackers.clear(); + + // Free our spatial context + if (spatial_context.is_valid()) { + se_extension->free_spatial_context(spatial_context); + spatial_context = RID(); + } + + se_extension->disconnect(SNAME("spatial_discovery_recommended"), callable_mp(this, &OpenXRSpatialMarkerTrackingCapability::_on_spatial_discovery_recommended)); +} + +void OpenXRSpatialMarkerTrackingCapability::on_process() { + if (!spatial_context.is_valid()) { + return; + } + + // Protection against marker discovery happening too often. + if (discovery_cooldown > 0) { + discovery_cooldown--; + } + + // Check if we need to start our discovery. + if (need_discovery && discovery_cooldown == 0 && !discovery_query_result.is_valid()) { + need_discovery = false; + discovery_cooldown = 60; // Set our cooldown to 60 frames, it doesn't need to be an exact science. + + _start_entity_discovery(); + } + + // If we have markers, we do an update query to check for changed positions. + if (!marker_trackers.is_empty()) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + + // We want updates for all anchors + thread_local LocalVector entities; + entities.resize(marker_trackers.size()); + RID *entity = entities.ptr(); + for (const KeyValue> &e : marker_trackers) { + *entity = e.value->get_entity(); + entity++; + } + + // We just want our anchor component + thread_local LocalVector component_types; + component_types.push_back(XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT); + + // And we get our update snapshot, this is NOT async! + RID snapshot = se_extension->update_spatial_entities(spatial_context, entities, component_types, nullptr); + if (snapshot.is_valid()) { + _process_snapshot(snapshot, false); + } + } +} + +bool OpenXRSpatialMarkerTrackingCapability::is_qrcode_supported() { + if (!spatial_marker_tracking_ext) { + return false; + } + + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, false); + + return se_extension->supports_capability(XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT); +} + +bool OpenXRSpatialMarkerTrackingCapability::is_micro_qrcode_supported() { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, false); + + return se_extension->supports_capability(XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT); +} + +bool OpenXRSpatialMarkerTrackingCapability::is_aruco_supported() { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, false); + + return se_extension->supports_capability(XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT); +} + +bool OpenXRSpatialMarkerTrackingCapability::is_april_tag_supported() { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, false); + + return se_extension->supports_capability(XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT); +} + +//////////////////////////////////////////////////////////////////////////// +// Discovery logic + +Ref OpenXRSpatialMarkerTrackingCapability::_create_spatial_context() { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + TypedArray capability_configurations; + + // Create our configuration objects. + // For now we enable all supported markers, will need to give some more user control over this. + if (is_qrcode_supported()) { + qrcode_configuration.instantiate(); + capability_configurations.push_back(qrcode_configuration); + } + + if (is_micro_qrcode_supported()) { + micro_qrcode_configuration.instantiate(); + capability_configurations.push_back(micro_qrcode_configuration); + } + + if (is_aruco_supported()) { + aruco_configuration.instantiate(); + + int aruco_dict = GLOBAL_GET_CACHED(int, "xr/openxr/extensions/spatial_entity/aruco_dict"); + aruco_configuration->set_aruco_dict((XrSpatialMarkerArucoDictEXT)(XR_SPATIAL_MARKER_ARUCO_DICT_4X4_50_EXT + aruco_dict)); + capability_configurations.push_back(aruco_configuration); + } + + if (is_april_tag_supported()) { + april_tag_configuration.instantiate(); + + int april_tag_dict = GLOBAL_GET_CACHED(int, "xr/openxr/extensions/spatial_entity/april_tag_dict"); + april_tag_configuration->set_april_dict((XrSpatialMarkerAprilTagDictEXT)(XR_SPATIAL_MARKER_APRIL_TAG_DICT_16H5_EXT + april_tag_dict)); + capability_configurations.push_back(april_tag_configuration); + } + + if (capability_configurations.is_empty()) { + print_verbose("OpenXR: There are no supported marker types. Marker tracking is not enabled."); + return nullptr; + } + + return se_extension->create_spatial_context(capability_configurations, nullptr, callable_mp(this, &OpenXRSpatialMarkerTrackingCapability::_on_spatial_context_created)); +} + +void OpenXRSpatialMarkerTrackingCapability::_on_spatial_context_created(RID p_spatial_context) { + spatial_context = p_spatial_context; + need_discovery = true; +} + +void OpenXRSpatialMarkerTrackingCapability::_on_spatial_discovery_recommended(RID p_spatial_context) { + if (p_spatial_context == spatial_context) { + // Trigger new discovery. + need_discovery = true; + } +} + +Ref OpenXRSpatialMarkerTrackingCapability::_start_entity_discovery() { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + // Already running or ran discovery, cancel/clean up. + if (discovery_query_result.is_valid()) { + discovery_query_result->cancel_future(); + discovery_query_result.unref(); + } + + // We want both our anchor and persistence component. + Vector component_types; + component_types.push_back(XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT); + component_types.push_back(XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT); + + // Start our new snapshot. + discovery_query_result = se_extension->discover_spatial_entities(spatial_context, component_types, nullptr, callable_mp(this, &OpenXRSpatialMarkerTrackingCapability::_process_snapshot).bind(true)); + + return discovery_query_result; +} + +void OpenXRSpatialMarkerTrackingCapability::_process_snapshot(RID p_snapshot, bool p_is_discovery) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + XRServer *xr_server = XRServer::get_singleton(); + ERR_FAIL_NULL(xr_server); + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + // Make a copy of the markers we have right now, so we know which ones to clean up. + LocalVector current_markers; + if (p_is_discovery) { + current_markers.resize(marker_trackers.size()); + int m = 0; + for (const KeyValue> &marker : marker_trackers) { + current_markers[m++] = marker.key; + } + } + + // Build our component data. + TypedArray component_data; + + // We always need a query result data object. + Ref query_result_data; + query_result_data.instantiate(); + component_data.push_back(query_result_data); + + // Add bounded2D. + Ref bounded2d_list; + bounded2d_list.instantiate(); + component_data.push_back(bounded2d_list); + + // Marker data list. + Ref marker_list; + if (p_is_discovery) { + marker_list.instantiate(); + component_data.push_back(marker_list); + } + + if (se_extension->query_snapshot(p_snapshot, component_data, nullptr)) { + // Now loop through our data and update our markers. + int64_t size = query_result_data->get_capacity(); + + for (int64_t i = 0; i < size; i++) { + XrSpatialEntityIdEXT entity_id = query_result_data->get_entity_id(i); + XrSpatialEntityTrackingStateEXT entity_state = query_result_data->get_entity_state(i); + + // Erase it from our current markers (if we have it, else this is ignored). + current_markers.erase(entity_id); + + if (entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT) { + // We should only get this status on update queries. + // We'll remove the marker. + if (marker_trackers.has(entity_id)) { + Ref marker_tracker = marker_trackers[entity_id]; + + marker_tracker->invalidate_pose(SNAME("default")); + marker_tracker->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT); + + // Remove it from our XRServer. + xr_server->remove_tracker(marker_tracker); + + // Remove it from our trackers. + marker_trackers.erase(entity_id); + } + } else { + // Process our entity. + bool add_to_xr_server = false; + Ref marker_tracker; + + if (marker_trackers.has(entity_id)) { + // We know about this one already. + marker_tracker = marker_trackers[entity_id]; + } else { + // Create a new anchor. + marker_tracker.instantiate(); + marker_tracker->set_entity(se_extension->make_spatial_entity(se_extension->get_spatial_snapshot_context(p_snapshot), entity_id)); + marker_trackers[entity_id] = marker_tracker; + + add_to_xr_server = true; + } + + // Handle component data. + if (entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT) { + marker_tracker->invalidate_pose(SNAME("default")); + marker_tracker->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT); + + // No further component data will be valid in this state, we need to ignore it! + } else if (entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) { + Transform3D transform = bounded2d_list->get_center_pose(i); + marker_tracker->set_pose(SNAME("default"), transform, Vector3(), Vector3()); + marker_tracker->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT); + + // Process our component data. + + // Set bounds size. + marker_tracker->set_bounds_size(bounded2d_list->get_size(i)); + + // Set marker data. + if (p_is_discovery) { + marker_tracker->set_marker_type(marker_list->get_marker_type(i)); + marker_tracker->set_marker_id(marker_list->get_marker_id(i)); + marker_tracker->set_marker_data(marker_list->get_marker_data(p_snapshot, i)); + } + } + + if (add_to_xr_server) { + // Register with XR server. + xr_server->add_tracker(marker_tracker); + } + } + } + + if (p_is_discovery) { + // Remove any markers that are no longer there... + for (const XrSpatialEntityIdEXT &entity_id : current_markers) { + if (marker_trackers.has(entity_id)) { + Ref marker_tracker = marker_trackers[entity_id]; + + // Just in case there are still references out there to this marker, + // reset some stuff. + marker_tracker->invalidate_pose(SNAME("default")); + marker_tracker->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT); + + // Remove it from our XRServer. + xr_server->remove_tracker(marker_tracker); + + // Remove it from our trackers. + marker_trackers.erase(entity_id); + } + } + } + } + + // Now that we're done, clean up our snapshot! + se_extension->free_spatial_snapshot(p_snapshot); + + // And if this was our discovery snapshot, let's reset it. + if (p_is_discovery && discovery_query_result.is_valid() && discovery_query_result->get_result_value() == p_snapshot) { + discovery_query_result.unref(); + } +} diff --git a/modules/openxr/extensions/spatial_entities/openxr_spatial_plane_tracking.cpp b/modules/openxr/extensions/spatial_entities/openxr_spatial_plane_tracking.cpp new file mode 100644 index 00000000000..66492a1e4c8 --- /dev/null +++ b/modules/openxr/extensions/spatial_entities/openxr_spatial_plane_tracking.cpp @@ -0,0 +1,881 @@ +/**************************************************************************/ +/* openxr_spatial_plane_tracking.cpp */ +/**************************************************************************/ +/* This file is part of: */ +/* REDOT ENGINE */ +/* https://redotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2024-present Redot Engine contributors */ +/* (see REDOT_AUTHORS.md) */ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#include "openxr_spatial_plane_tracking.h" + +#include "../../openxr_api.h" +#include "core/config/project_settings.h" +#include "scene/resources/3d/box_shape_3d.h" +#include "scene/resources/3d/concave_polygon_shape_3d.h" +#include "scene/resources/3d/primitive_meshes.h" +#include "servers/xr/xr_server.h" + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialCapabilityConfigurationPlaneTracking + +void OpenXRSpatialCapabilityConfigurationPlaneTracking::_bind_methods() { + ClassDB::bind_method(D_METHOD("supports_mesh_2d"), &OpenXRSpatialCapabilityConfigurationPlaneTracking::get_supports_mesh_2d); + ClassDB::bind_method(D_METHOD("supports_polygons"), &OpenXRSpatialCapabilityConfigurationPlaneTracking::get_supports_polygons); + ClassDB::bind_method(D_METHOD("supports_labels"), &OpenXRSpatialCapabilityConfigurationPlaneTracking::get_supports_labels); + + ClassDB::bind_method(D_METHOD("get_enabled_components"), &OpenXRSpatialCapabilityConfigurationPlaneTracking::_get_enabled_components); +} + +bool OpenXRSpatialCapabilityConfigurationPlaneTracking::has_valid_configuration() const { + OpenXRSpatialPlaneTrackingCapability *capability = OpenXRSpatialPlaneTrackingCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, false); + + return capability->is_supported(); +} + +XrSpatialCapabilityConfigurationBaseHeaderEXT *OpenXRSpatialCapabilityConfigurationPlaneTracking::get_configuration() { + OpenXRSpatialPlaneTrackingCapability *capability = OpenXRSpatialPlaneTrackingCapability::get_singleton(); + ERR_FAIL_NULL_V(capability, nullptr); + + if (capability->is_supported()) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + // Guaranteed components: + plane_enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT); + plane_enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT); + + // Optional components: + if (get_supports_mesh_2d()) { + plane_enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT); + } else if (get_supports_polygons()) { + plane_enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT); + } + if (get_supports_labels()) { + plane_enabled_components.push_back(XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT); + } + + // Set up our enabled components. + plane_config.enabledComponentCount = plane_enabled_components.size(); + plane_config.enabledComponents = plane_enabled_components.ptr(); + + // and return this. + return (XrSpatialCapabilityConfigurationBaseHeaderEXT *)&plane_config; + } + + return nullptr; +} + +bool OpenXRSpatialCapabilityConfigurationPlaneTracking::get_supports_mesh_2d() { + if (supports_mesh_2d == -1) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, false); + + supports_mesh_2d = se_extension->supports_component_type(XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT) ? 1 : 0; + } + + return supports_mesh_2d == 1; +} + +bool OpenXRSpatialCapabilityConfigurationPlaneTracking::get_supports_polygons() { + if (supports_polygons == -1) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, false); + + supports_polygons = se_extension->supports_component_type(XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT) ? 1 : 0; + } + + return supports_polygons == 1; +} + +bool OpenXRSpatialCapabilityConfigurationPlaneTracking::get_supports_labels() { + if (supports_labels == -1) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, false); + + supports_labels = se_extension->supports_component_type(XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT) ? 1 : 0; + } + + return supports_labels == 1; +} + +PackedInt64Array OpenXRSpatialCapabilityConfigurationPlaneTracking::_get_enabled_components() const { + PackedInt64Array components; + + for (const XrSpatialComponentTypeEXT &component_type : plane_enabled_components) { + components.push_back((int64_t)component_type); + } + + return components; +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialComponentPlaneAlignmentList + +void OpenXRSpatialComponentPlaneAlignmentList::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_plane_alignment", "index"), &OpenXRSpatialComponentPlaneAlignmentList::_get_plane_alignment); + + BIND_ENUM_CONSTANT(PLANE_ALIGNMENT_HORIZONTAL_UPWARD); + BIND_ENUM_CONSTANT(PLANE_ALIGNMENT_HORIZONTAL_DOWNWARD); + BIND_ENUM_CONSTANT(PLANE_ALIGNMENT_VERTICAL); + BIND_ENUM_CONSTANT(PLANE_ALIGNMENT_ARBITRARY); +} + +void OpenXRSpatialComponentPlaneAlignmentList::set_capacity(uint32_t p_capacity) { + plane_alignment_data.resize(p_capacity); + + plane_alignment_list.planeAlignmentCount = uint32_t(plane_alignment_data.size()); + plane_alignment_list.planeAlignments = plane_alignment_data.ptrw(); +} + +XrSpatialComponentTypeEXT OpenXRSpatialComponentPlaneAlignmentList::get_component_type() const { + return XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT; +} + +void *OpenXRSpatialComponentPlaneAlignmentList::get_structure_data(void *p_next) { + plane_alignment_list.next = p_next; + return &plane_alignment_list; +} + +XrSpatialPlaneAlignmentEXT OpenXRSpatialComponentPlaneAlignmentList::get_plane_alignment(int64_t p_index) const { + ERR_FAIL_INDEX_V(p_index, plane_alignment_data.size(), XR_SPATIAL_PLANE_ALIGNMENT_MAX_ENUM_EXT); + + return plane_alignment_data[p_index]; +} + +OpenXRSpatialComponentPlaneAlignmentList::PlaneAlignment OpenXRSpatialComponentPlaneAlignmentList::_get_plane_alignment(int64_t p_index) const { + return (PlaneAlignment)get_plane_alignment(p_index); +} + +//////////////////////////////////////////////////////////////////////////// +// Spatial component polygon2d list + +void OpenXRSpatialComponentPolygon2DList::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_transform", "index"), &OpenXRSpatialComponentPolygon2DList::get_transform); + ClassDB::bind_method(D_METHOD("get_vertices", "snapshot", "index"), &OpenXRSpatialComponentPolygon2DList::get_vertices); +} + +void OpenXRSpatialComponentPolygon2DList::set_capacity(uint32_t p_capacity) { + polygon2d_data.resize(p_capacity); + + polygon2d_list.polygonCount = uint32_t(polygon2d_data.size()); + polygon2d_list.polygons = polygon2d_data.ptrw(); +} + +XrSpatialComponentTypeEXT OpenXRSpatialComponentPolygon2DList::get_component_type() const { + return XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT; +} + +void *OpenXRSpatialComponentPolygon2DList::get_structure_data(void *p_next) { + polygon2d_list.next = p_next; + return &polygon2d_list; +} + +Transform3D OpenXRSpatialComponentPolygon2DList::get_transform(int64_t p_index) const { + ERR_FAIL_INDEX_V(p_index, polygon2d_data.size(), Transform3D()); + + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL_V(openxr_api, Transform3D()); + + return openxr_api->transform_from_pose(polygon2d_data[p_index].origin); +} + +PackedVector2Array OpenXRSpatialComponentPolygon2DList::get_vertices(RID p_snapshot, int64_t p_index) const { + ERR_FAIL_INDEX_V(p_index, polygon2d_data.size(), PackedVector2Array()); + + const XrSpatialBufferEXT &buffer = polygon2d_data[p_index].vertexBuffer; + if (buffer.bufferId == XR_NULL_SPATIAL_BUFFER_ID_EXT) { + // We don't have data (yet). + return PackedVector2Array(); + } + + ERR_FAIL_COND_V(buffer.bufferType != XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT, PackedVector2Array()); + + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, PackedVector2Array()); + + return se_extension->get_vector2_buffer(p_snapshot, buffer.bufferId); +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialComponentPlaneSemanticLabelList + +void OpenXRSpatialComponentPlaneSemanticLabelList::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_plane_semantic_label", "index"), &OpenXRSpatialComponentPlaneSemanticLabelList::_get_plane_semantic_label); + + BIND_ENUM_CONSTANT(PLANE_SEMANTIC_LABEL_UNCATEGORIZED); + BIND_ENUM_CONSTANT(PLANE_SEMANTIC_LABEL_FLOOR); + BIND_ENUM_CONSTANT(PLANE_SEMANTIC_LABEL_WALL); + BIND_ENUM_CONSTANT(PLANE_SEMANTIC_LABEL_CEILING); + BIND_ENUM_CONSTANT(PLANE_SEMANTIC_LABEL_TABLE); +} + +void OpenXRSpatialComponentPlaneSemanticLabelList::set_capacity(uint32_t p_capacity) { + plane_semantic_label_data.resize(p_capacity); + + plane_semantic_label_list.semanticLabelCount = uint32_t(plane_semantic_label_data.size()); + plane_semantic_label_list.semanticLabels = plane_semantic_label_data.ptrw(); +} + +XrSpatialComponentTypeEXT OpenXRSpatialComponentPlaneSemanticLabelList::get_component_type() const { + return XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT; +} + +void *OpenXRSpatialComponentPlaneSemanticLabelList::get_structure_data(void *p_next) { + plane_semantic_label_list.next = p_next; + return &plane_semantic_label_list; +} + +XrSpatialPlaneSemanticLabelEXT OpenXRSpatialComponentPlaneSemanticLabelList::get_plane_semantic_label(int64_t p_index) const { + ERR_FAIL_INDEX_V(p_index, plane_semantic_label_data.size(), XR_SPATIAL_PLANE_SEMANTIC_LABEL_MAX_ENUM_EXT); + + return plane_semantic_label_data[p_index]; +} + +OpenXRSpatialComponentPlaneSemanticLabelList::PlaneSemanticLabel OpenXRSpatialComponentPlaneSemanticLabelList::_get_plane_semantic_label(int64_t p_index) const { + return (PlaneSemanticLabel)get_plane_semantic_label(p_index); +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRPlaneTracker + +void OpenXRPlaneTracker::_bind_methods() { + ClassDB::bind_method(D_METHOD("set_bounds_size", "bounds_size"), &OpenXRPlaneTracker::set_bounds_size); + ClassDB::bind_method(D_METHOD("get_bounds_size"), &OpenXRPlaneTracker::get_bounds_size); + ADD_PROPERTY(PropertyInfo(Variant::INT, "bounds_size"), "set_bounds_size", "get_bounds_size"); + + ClassDB::bind_method(D_METHOD("set_plane_alignment", "plane_alignment"), &OpenXRPlaneTracker::set_plane_alignment); + ClassDB::bind_method(D_METHOD("get_plane_alignment"), &OpenXRPlaneTracker::get_plane_alignment); + ADD_PROPERTY(PropertyInfo(Variant::INT, "plane_alignment"), "set_plane_alignment", "get_plane_alignment"); + + ClassDB::bind_method(D_METHOD("set_plane_label", "plane_label"), &OpenXRPlaneTracker::set_plane_label); + ClassDB::bind_method(D_METHOD("get_plane_label"), &OpenXRPlaneTracker::get_plane_label); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "plane_label"), "set_plane_label", "get_plane_label"); + + ClassDB::bind_method(D_METHOD("set_mesh_data", "origin", "vertices", "indices"), &OpenXRPlaneTracker::set_mesh_data, DEFVAL(PackedInt32Array())); + ClassDB::bind_method(D_METHOD("clear_mesh_data"), &OpenXRPlaneTracker::clear_mesh_data); + + ClassDB::bind_method(D_METHOD("get_mesh_offset"), &OpenXRPlaneTracker::get_mesh_offset); + ClassDB::bind_method(D_METHOD("get_mesh"), &OpenXRPlaneTracker::get_mesh); + ClassDB::bind_method(D_METHOD("get_shape", "thickness"), &OpenXRPlaneTracker::get_shape, DEFVAL(0.01)); + + ADD_SIGNAL(MethodInfo("mesh_changed")); +} + +void OpenXRPlaneTracker::set_bounds_size(const Vector2 &p_bounds_size) { + if (Math::abs(bounds_size.x - p_bounds_size.x) > 0.001 || Math::abs(bounds_size.y - p_bounds_size.y) > 0.001) { + bounds_size = p_bounds_size; + + if (!mesh.has_mesh_data) { + // Bounds changing only effects mesh data if we don't have polygon data. + clear_mesh_data(); + emit_signal(SNAME("mesh_changed")); + } + } +} + +Vector2 OpenXRPlaneTracker::get_bounds_size() const { + return bounds_size; +} + +void OpenXRPlaneTracker::set_plane_alignment(OpenXRSpatialComponentPlaneAlignmentList::PlaneAlignment p_plane_alignment) { + if (plane_alignment != p_plane_alignment) { + plane_alignment = p_plane_alignment; + } +} + +OpenXRSpatialComponentPlaneAlignmentList::PlaneAlignment OpenXRPlaneTracker::get_plane_alignment() const { + return plane_alignment; +} + +void OpenXRPlaneTracker::set_plane_label(const String &p_plane_label) { + if (plane_label != p_plane_label) { + plane_label = p_plane_label; + + // Also copy to description, should do something nicer here. + set_tracker_desc(plane_label); + } +} + +String OpenXRPlaneTracker::get_plane_label() const { + return plane_label; +} + +void OpenXRPlaneTracker::set_mesh_data(const Transform3D &p_origin, const PackedVector2Array &p_vertices, const PackedInt32Array &p_indices) { + if (p_vertices.size() < 3) { + if (mesh.has_mesh_data) { + clear_mesh_data(); + emit_signal(SNAME("mesh_changed")); + } + } else { + bool has_changed = !mesh.has_mesh_data; + + mesh.has_mesh_data = true; + mesh.origin = p_origin; + + if (mesh.vertices.size() != p_vertices.size()) { + has_changed = true; + } else { + // Compare the vertices with a bit of margin, we ignore small jittering on vertices. + for (uint32_t i = 0; i < p_vertices.size() && !has_changed; i++) { + const Vector2 &a = p_vertices[i]; + const Vector2 &b = mesh.vertices[i]; + has_changed = (Math::abs(a.x - b.x) > 0.001) || (Math::abs(a.y - b.y) > 0.001); + } + } + if (has_changed) { + mesh.vertices = p_vertices; + } + + // Q: Should we keep our indices list empty if we get polygon data + // and create different meshes/collision shapes as a result? + if (p_indices.is_empty()) { + // Assume polygon, turn into triangle strip... + int count = (p_vertices.size() - 2) * 3; + + // If our vertices haven't changed and our indices are already the correct size, + // assume we don't need to rerun this. + if (has_changed || mesh.indices.size() != count) { + has_changed = true; + + int offset = 1; + mesh.indices.resize(count); + int32_t *idx = mesh.indices.ptrw(); + for (int i = 0; i < count; i += 3) { + idx[i + 0] = 0; + idx[i + 2] = offset++; + idx[i + 1] = offset; + } + } + } else { + if (mesh.indices.size() != p_indices.size()) { + has_changed = true; + } else { + for (uint32_t i = 0; i < p_indices.size() && !has_changed; i++) { + has_changed = mesh.indices[i] != p_indices[i]; + } + } + if (has_changed) { + mesh.indices = p_indices; + } + } + + if (has_changed) { + mesh.mesh.unref(); + mesh.shape3d.unref(); + + emit_signal(SNAME("mesh_changed")); + } + } +} + +void OpenXRPlaneTracker::clear_mesh_data() { + mesh.mesh.unref(); + mesh.shape3d.unref(); + + if (mesh.has_mesh_data) { + mesh.has_mesh_data = false; + mesh.origin = Transform3D(); + mesh.vertices.clear(); + mesh.indices.clear(); + + emit_signal(SNAME("mesh_changed")); + } +} + +Transform3D OpenXRPlaneTracker::get_mesh_offset() const { + Transform3D offset; + + if (mesh.has_mesh_data) { + offset = mesh.origin; + + Ref pose = get_pose(SNAME("default")); + if (pose.is_valid()) { + // Q is this offset * transform.inverse? + offset = pose->get_transform().inverse() * offset; + } + + // Reference frame will already be applied to pose used on our XRNode3D but we do need to apply our scale + XRServer *xr_server = XRServer::get_singleton(); + if (xr_server) { + offset.origin *= xr_server->get_world_scale(); + } + } + + return offset; +} + +Ref OpenXRPlaneTracker::get_mesh() { + // We've already created this? Just return it! + if (mesh.mesh.is_valid()) { + return mesh.mesh; + } + + if (mesh.has_mesh_data) { + Ref array_mesh; + Array arr; + + // We need our vertices as Vector3 + PackedVector3Array vertices; + vertices.resize(mesh.vertices.size()); + const Vector2 *read = mesh.vertices.ptr(); + Vector3 *write = vertices.ptrw(); + for (int v = 0; v < mesh.vertices.size(); v++) { + write[v] = Vector3(read[v].x, read[v].y, 0.0); + } + + // Build our array with data. + arr.resize(RS::ARRAY_MAX); + arr[RS::ARRAY_VERTEX] = vertices; + arr[RS::ARRAY_INDEX] = mesh.indices; + + // Create our array mesh. + array_mesh.instantiate(); + array_mesh->add_surface_from_arrays(Mesh::PrimitiveType::PRIMITIVE_TRIANGLES, arr); + + // Cache this. + mesh.mesh = array_mesh; + } else if (bounds_size.x > 0.0 && bounds_size.y > 0.0) { + // We can use a plane mesh here. + Ref plane_mesh; + + plane_mesh.instantiate(); + plane_mesh->set_orientation(PlaneMesh::Orientation::FACE_Z); + plane_mesh->set_size(bounds_size); + + // Cache this. + mesh.mesh = plane_mesh; + } else { + print_verbose("OpenXR: Can't create mesh for plane, no data."); + } + return mesh.mesh; +} + +Ref OpenXRPlaneTracker::get_shape(real_t p_thickness) { + // We've already created this? Just return it! + if (mesh.shape3d.is_valid()) { + return mesh.shape3d; + } + + if (mesh.has_mesh_data) { + Ref shape; + Vector faces; + + // Get some direct access to our data. + int isize = mesh.indices.size(); + const Vector2 *vr = mesh.vertices.ptr(); + const int32_t *ir = mesh.indices.ptr(); + + // Find our edges. + HashMap edge_counts; + for (int i = 0; i < isize; i += 3) { + for (int j = 0; j < 3; j++) { + Edge e(ir[i + j], ir[i + ((j + 1) % 3)]); + edge_counts[e]++; + } + } + + // Find our outer edges. + thread_local LocalVector outer_edges; + outer_edges.clear(); + for (const KeyValue &e : edge_counts) { + if (e.value > 1) { + outer_edges.push_back(e.key); + } + } + + // Make space for these. + faces.resize(2 * isize + 6 * outer_edges.size()); + Vector3 *write = faces.ptrw(); + + // Add top and bottom. + for (int i = 0; i < isize; i += 3) { + Vector3 a = Vector3(vr[ir[i]].x, vr[ir[i]].y, 0.0); + Vector3 b = Vector3(vr[ir[i + 1]].x, vr[ir[i + 1]].y, 0.0); + Vector3 c = Vector3(vr[ir[i + 2]].x, vr[ir[i + 2]].y, 0.0); + + *write++ = a; + *write++ = b; + *write++ = c; + + a.z = -p_thickness; + b.z = -p_thickness; + c.z = -p_thickness; + + *write++ = a; + *write++ = c; + *write++ = b; + } + + // Add outer edges. + for (const Edge &edge : outer_edges) { + Vector3 a = Vector3(vr[edge.a].x, vr[edge.a].y, 0.0); + Vector3 b = Vector3(vr[edge.b].x, vr[edge.b].y, 0.0); + Vector3 c = b + Vector3(0.0, 0.0, -p_thickness); + Vector3 d = a + Vector3(0.0, 0.0, -p_thickness); + + *write++ = a; + *write++ = b; + *write++ = c; + + *write++ = a; + *write++ = c; + *write++ = d; + } + + // Create our shape. + shape.instantiate(); + shape->set_faces(faces); + + mesh.shape3d = shape; + } else if (bounds_size.x > 0.0 && bounds_size.y > 0.0) { + // We can use a box shape here + Ref box_shape; + box_shape.instantiate(); + box_shape->set_size(Vector3(bounds_size.x, bounds_size.y, p_thickness)); + + mesh.shape3d = box_shape; + } + + return mesh.shape3d; +} + +//////////////////////////////////////////////////////////////////////////// +// OpenXRSpatialPlaneTrackingCapability + +OpenXRSpatialPlaneTrackingCapability *OpenXRSpatialPlaneTrackingCapability::singleton = nullptr; + +OpenXRSpatialPlaneTrackingCapability *OpenXRSpatialPlaneTrackingCapability::get_singleton() { + return singleton; +} + +OpenXRSpatialPlaneTrackingCapability::OpenXRSpatialPlaneTrackingCapability() { + singleton = this; +} + +OpenXRSpatialPlaneTrackingCapability::~OpenXRSpatialPlaneTrackingCapability() { + singleton = nullptr; +} + +void OpenXRSpatialPlaneTrackingCapability::_bind_methods() { + ClassDB::bind_method(D_METHOD("is_supported"), &OpenXRSpatialPlaneTrackingCapability::is_supported); +} + +HashMap OpenXRSpatialPlaneTrackingCapability::get_requested_extensions() { + HashMap request_extensions; + + if (GLOBAL_GET_CACHED(bool, "xr/openxr/extensions/spatial_entity/enabled") && GLOBAL_GET_CACHED(bool, "xr/openxr/extensions/spatial_entity/enable_plane_tracking")) { + request_extensions[XR_EXT_SPATIAL_PLANE_TRACKING_EXTENSION_NAME] = &spatial_plane_tracking_ext; + } + + return request_extensions; +} + +void OpenXRSpatialPlaneTrackingCapability::on_session_created(const XrSession p_session) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + + if (!spatial_plane_tracking_ext) { + return; + } + + spatial_plane_tracking_supported = se_extension->supports_capability(XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT); + if (!spatial_plane_tracking_supported) { + // Supported by XR runtime but not by device? We're done. + return; + } + + se_extension->connect(SNAME("spatial_discovery_recommended"), callable_mp(this, &OpenXRSpatialPlaneTrackingCapability::_on_spatial_discovery_recommended)); + + if (GLOBAL_GET_CACHED(bool, "xr/openxr/extensions/spatial_entity/enable_builtin_plane_detection")) { + // Start by creating our spatial context + _create_spatial_context(); + } +} + +void OpenXRSpatialPlaneTrackingCapability::on_session_destroyed() { + if (!spatial_plane_tracking_supported) { + return; + } + spatial_plane_tracking_supported = false; + + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + XRServer *xr_server = XRServer::get_singleton(); + ERR_FAIL_NULL(xr_server); + + // Free and unregister our anchors + for (const KeyValue> &plane_tracker : plane_trackers) { + xr_server->remove_tracker(plane_tracker.value); + } + plane_trackers.clear(); + + // Free our spatial context + if (spatial_context.is_valid()) { + se_extension->free_spatial_context(spatial_context); + spatial_context = RID(); + } + + se_extension->disconnect(SNAME("spatial_discovery_recommended"), callable_mp(this, &OpenXRSpatialPlaneTrackingCapability::_on_spatial_discovery_recommended)); +} + +void OpenXRSpatialPlaneTrackingCapability::on_process() { + if (!spatial_context.is_valid()) { + return; + } + + // Protection against plane discovery happening too often. + if (discovery_cooldown > 0) { + discovery_cooldown--; + } + + // Check if we need to start our discovery. + if (need_discovery && discovery_cooldown == 0 && !discovery_query_result.is_valid()) { + need_discovery = false; + discovery_cooldown = 60; // Set our cooldown to 60 frames, it doesn't need to be an exact science. + + _start_entity_discovery(); + } +} + +bool OpenXRSpatialPlaneTrackingCapability::is_supported() { + return spatial_plane_tracking_supported; +} + +//////////////////////////////////////////////////////////////////////////// +// Discovery logic +Ref OpenXRSpatialPlaneTrackingCapability::_create_spatial_context() { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + TypedArray capability_configurations; + + // Create our configuration objects. + plane_configuration.instantiate(); + capability_configurations.push_back(plane_configuration); + + return se_extension->create_spatial_context(capability_configurations, nullptr, callable_mp(this, &OpenXRSpatialPlaneTrackingCapability::_on_spatial_context_created)); +} + +void OpenXRSpatialPlaneTrackingCapability::_on_spatial_context_created(RID p_spatial_context) { + spatial_context = p_spatial_context; + need_discovery = true; +} + +void OpenXRSpatialPlaneTrackingCapability::_on_spatial_discovery_recommended(RID p_spatial_context) { + if (p_spatial_context == spatial_context) { + // Trigger new discovery. + need_discovery = true; + } +} + +Ref OpenXRSpatialPlaneTrackingCapability::_start_entity_discovery() { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL_V(se_extension, nullptr); + + // Already running or ran discovery, cancel/clean up. + if (discovery_query_result.is_valid()) { + WARN_PRINT("OpenXR: Starting new discovery before previous discovery has been processed!"); + discovery_query_result->cancel_future(); + discovery_query_result.unref(); + } + + // Start our new snapshot. + discovery_query_result = se_extension->discover_spatial_entities(spatial_context, plane_configuration->get_enabled_components(), nullptr, callable_mp(this, &OpenXRSpatialPlaneTrackingCapability::_process_snapshot)); + + return discovery_query_result; +} + +void OpenXRSpatialPlaneTrackingCapability::_process_snapshot(RID p_snapshot) { + OpenXRSpatialEntityExtension *se_extension = OpenXRSpatialEntityExtension::get_singleton(); + ERR_FAIL_NULL(se_extension); + XRServer *xr_server = XRServer::get_singleton(); + ERR_FAIL_NULL(xr_server); + OpenXRAPI *openxr_api = OpenXRAPI::get_singleton(); + ERR_FAIL_NULL(openxr_api); + + // Make a copy of the planes we have right now, so we know which ones to clean up. + LocalVector current_planes; + current_planes.resize(plane_trackers.size()); + int p = 0; + for (const KeyValue> &plane : plane_trackers) { + current_planes[p++] = plane.key; + } + + // Build our component data + TypedArray component_data; + + // We always need a query result data object + Ref query_result_data; + query_result_data.instantiate(); + component_data.push_back(query_result_data); + + // Add bounded2D + Ref bounded2d_list; + bounded2d_list.instantiate(); + component_data.push_back(bounded2d_list); + + // Plane alignment list + Ref alignment_list; + alignment_list.instantiate(); + component_data.push_back(alignment_list); + + Ref mesh2d_list; + Ref poly2d_list; + if (plane_configuration->get_supports_mesh_2d()) { + mesh2d_list.instantiate(); + component_data.push_back(mesh2d_list); + } else if (plane_configuration->get_supports_polygons()) { + poly2d_list.instantiate(); + component_data.push_back(poly2d_list); + } + + // Plane semantic label + Ref label_list; + if (plane_configuration->get_supports_labels()) { + label_list.instantiate(); + component_data.push_back(label_list); + } + + if (se_extension->query_snapshot(p_snapshot, component_data, nullptr)) { + // Now loop through our data and update our anchors. + // Q we're assuming entity ID, size and state size are equal, is there ever a situation where they would not be? + int64_t size = query_result_data->get_capacity(); + for (int64_t i = 0; i < size; i++) { + XrSpatialEntityIdEXT entity_id = query_result_data->get_entity_id(i); + XrSpatialEntityTrackingStateEXT entity_state = query_result_data->get_entity_state(i); + + // Erase it from our current planes (if we have it, else this is ignored). + current_planes.erase(entity_id); + + if (entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT) { + // We should only get this status on updates as a prelude to needing to remove this marker. + // So we just update the status. + if (plane_trackers.has(entity_id)) { + Ref plane_tracker = plane_trackers[entity_id]; + plane_tracker->invalidate_pose(SNAME("default")); + plane_tracker->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT); + } + } else { + // Process our entity + bool add_to_xr_server = false; + Ref plane_tracker; + + if (plane_trackers.has(entity_id)) { + // We know about this one already + plane_tracker = plane_trackers[entity_id]; + } else { + // Create a new anchor + plane_tracker.instantiate(); + plane_tracker->set_entity(se_extension->make_spatial_entity(se_extension->get_spatial_snapshot_context(p_snapshot), entity_id)); + plane_trackers[entity_id] = plane_tracker; + + add_to_xr_server = true; + } + + // Handle component data + if (entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT) { + plane_tracker->invalidate_pose(SNAME("default")); + plane_tracker->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT); + + // No further component data will be valid in this state, we need to ignore it! + } else if (entity_state == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) { + Transform3D transform = bounded2d_list->get_center_pose(i); + plane_tracker->set_pose(SNAME("default"), transform, Vector3(), Vector3()); + plane_tracker->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT); + + // Process our component data. + plane_tracker->set_bounds_size(bounded2d_list->get_size(i)); + plane_tracker->set_plane_alignment((OpenXRSpatialComponentPlaneAlignmentList::PlaneAlignment)alignment_list->get_plane_alignment(i)); + + if (mesh2d_list.is_valid()) { + plane_tracker->set_mesh_data(mesh2d_list->get_transform(i), mesh2d_list->get_vertices(p_snapshot, i), mesh2d_list->get_indices(p_snapshot, i)); + } else if (poly2d_list.is_valid()) { + plane_tracker->set_mesh_data(poly2d_list->get_transform(i), poly2d_list->get_vertices(p_snapshot, i)); + } else { + // Just in case we set this before. + plane_tracker->clear_mesh_data(); + } + + if (label_list.is_valid()) { + switch (label_list->get_plane_semantic_label(i)) { + case XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT: { + plane_tracker->set_plane_label("Uncategorized plane"); + } break; + case XR_SPATIAL_PLANE_SEMANTIC_LABEL_FLOOR_EXT: { + plane_tracker->set_plane_label("Floor plane"); + } break; + case XR_SPATIAL_PLANE_SEMANTIC_LABEL_WALL_EXT: { + plane_tracker->set_plane_label("Wall plane"); + } break; + case XR_SPATIAL_PLANE_SEMANTIC_LABEL_CEILING_EXT: { + plane_tracker->set_plane_label("Ceiling plane"); + } break; + case XR_SPATIAL_PLANE_SEMANTIC_LABEL_TABLE_EXT: { + plane_tracker->set_plane_label("Table plane"); + } break; + default: { + plane_tracker->set_plane_label("Unknown plane"); + } break; + } + } + } + + if (add_to_xr_server) { + // Register with XR server + xr_server->add_tracker(plane_tracker); + } + } + } + + // Remove any planes that are no longer there... + for (const XrSpatialEntityIdEXT &entity_id : current_planes) { + if (plane_trackers.has(entity_id)) { + Ref plane_tracker = plane_trackers[entity_id]; + + // Just in case there are still references out there to this marker, + // reset some stuff. + plane_tracker->invalidate_pose(SNAME("default")); + plane_tracker->set_spatial_tracking_state(XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT); + + // Remove it from our XRServer + xr_server->remove_tracker(plane_tracker); + + // Remove it from our trackers + plane_trackers.erase(entity_id); + } + } + } + + // Now that we're done, clean up our snapshot! + se_extension->free_spatial_snapshot(p_snapshot); + + // And if this was our discovery snapshot, lets reset it + if (discovery_query_result.is_valid() && discovery_query_result->get_result_value() == p_snapshot) { + discovery_query_result.unref(); + } +} diff --git a/modules/openxr/openxr_api.h b/modules/openxr/openxr_api.h index 0efbf9ce7d1..16562818497 100644 --- a/modules/openxr/openxr_api.h +++ b/modules/openxr/openxr_api.h @@ -49,7 +49,7 @@ #include "core/string/ustring.h" #include "core/templates/rid_owner.h" #include "core/templates/vector.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include "servers/xr/xr_pose.h" #include diff --git a/modules/openxr/scene/openxr_hand.cpp b/modules/openxr/scene/openxr_hand.cpp index de86f002272..d0e6f230e53 100644 --- a/modules/openxr/scene/openxr_hand.cpp +++ b/modules/openxr/scene/openxr_hand.cpp @@ -42,7 +42,7 @@ #include "../openxr_api.h" #include "scene/3d/skeleton_3d.h" -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" void OpenXRHand::_bind_methods() { ClassDB::bind_method(D_METHOD("set_hand", "hand"), &OpenXRHand::set_hand); diff --git a/modules/openxr/scene/openxr_render_model_manager.cpp b/modules/openxr/scene/openxr_render_model_manager.cpp index d36c34a9ccb..77d80f53725 100644 --- a/modules/openxr/scene/openxr_render_model_manager.cpp +++ b/modules/openxr/scene/openxr_render_model_manager.cpp @@ -42,7 +42,7 @@ #include "../openxr_api.h" #include "core/config/project_settings.h" #include "scene/3d/xr/xr_nodes.h" -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" void OpenXRRenderModelManager::_bind_methods() { ClassDB::bind_method(D_METHOD("get_tracker"), &OpenXRRenderModelManager::get_tracker); diff --git a/modules/soundsmith/soundsmith_module.cpp b/modules/soundsmith/soundsmith_module.cpp index 0a060d2d9a6..8f17fddc5a4 100644 --- a/modules/soundsmith/soundsmith_module.cpp +++ b/modules/soundsmith/soundsmith_module.cpp @@ -43,8 +43,8 @@ #include "modules/minimp3/audio_stream_mp3.h" #include "scene/resources/audio_stream_wav.h" +#include "servers/audio/audio_server.h" #include "servers/audio/audio_stream.h" -#include "servers/audio_server.h" #include #include diff --git a/modules/theora/editor/movie_writer_ogv.h b/modules/theora/editor/movie_writer_ogv.h index e14b78bbde4..b62ff0fd898 100644 --- a/modules/theora/editor/movie_writer_ogv.h +++ b/modules/theora/editor/movie_writer_ogv.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #include "servers/movie_writer/movie_writer.h" #include diff --git a/platform/android/audio_driver_opensl.h b/platform/android/audio_driver_opensl.h index 0c614a4cabe..8563095fc94 100644 --- a/platform/android/audio_driver_opensl.h +++ b/platform/android/audio_driver_opensl.h @@ -33,7 +33,7 @@ #pragma once #include "core/os/mutex.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #include #include diff --git a/platform/android/display_server_android.h b/platform/android/display_server_android.h index 9c0cb9bb900..642c10051a6 100644 --- a/platform/android/display_server_android.h +++ b/platform/android/display_server_android.h @@ -32,7 +32,7 @@ #pragma once -#include "servers/display_server.h" +#include "servers/display/display_server.h" #if defined(RD_ENABLED) class RenderingContextDriver; diff --git a/platform/android/java/lib/src/org/godotengine/godot/tts/GodotTTS.java b/platform/android/java/lib/src/org/godotengine/godot/tts/GodotTTS.java index 23a71f0ff9e..63babb86b54 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/tts/GodotTTS.java +++ b/platform/android/java/lib/src/org/godotengine/godot/tts/GodotTTS.java @@ -59,7 +59,7 @@ */ @Keep public class GodotTTS extends UtteranceProgressListener implements TextToSpeech.OnInitListener { - // Note: These constants must be in sync with DisplayServer::TTSUtteranceEvent enum from "servers/display_server.h". + // Note: These constants must be in sync with DisplayServer::TTSUtteranceEvent enum from "servers/display/display_server.h". final private static int EVENT_START = 0; final private static int EVENT_END = 1; final private static int EVENT_CANCEL = 2; diff --git a/platform/android/java_godot_lib_jni.cpp b/platform/android/java_godot_lib_jni.cpp index f0a8be29eac..ee503714d98 100644 --- a/platform/android/java_godot_lib_jni.cpp +++ b/platform/android/java_godot_lib_jni.cpp @@ -51,10 +51,10 @@ #include "core/config/project_settings.h" #include "core/input/input.h" #include "main/main.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #ifndef XR_DISABLED -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" #endif // XR_DISABLED #ifdef TOOLS_ENABLED diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp index b4df09ebc0c..e32472e8afd 100644 --- a/platform/android/os_android.cpp +++ b/platform/android/os_android.cpp @@ -51,7 +51,7 @@ #endif #include "main/main.h" #include "scene/main/scene_tree.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include #include diff --git a/platform/android/os_android.h b/platform/android/os_android.h index 5991f438f15..206d5c50175 100644 --- a/platform/android/os_android.h +++ b/platform/android/os_android.h @@ -36,7 +36,7 @@ #include "core/os/main_loop.h" #include "drivers/unix/os_unix.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" class GodotJavaWrapper; class GodotIOJavaWrapper; diff --git a/platform/android/tts_android.h b/platform/android/tts_android.h index 9181b27e541..eea54ea9c2b 100644 --- a/platform/android/tts_android.h +++ b/platform/android/tts_android.h @@ -36,7 +36,7 @@ #include "core/string/ustring.h" #include "core/templates/hash_map.h" #include "core/variant/array.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include diff --git a/platform/ios/display_layer_ios.mm b/platform/ios/display_layer_ios.mm index c670b127fe0..b3807c0de8f 100644 --- a/platform/ios/display_layer_ios.mm +++ b/platform/ios/display_layer_ios.mm @@ -38,7 +38,7 @@ #include "core/config/project_settings.h" #include "core/os/keyboard.h" #include "main/main.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #import #import diff --git a/platform/linuxbsd/freedesktop_portal_desktop.h b/platform/linuxbsd/freedesktop_portal_desktop.h index 792c311d54d..f2e9f4813fb 100644 --- a/platform/linuxbsd/freedesktop_portal_desktop.h +++ b/platform/linuxbsd/freedesktop_portal_desktop.h @@ -36,7 +36,7 @@ #include "core/os/thread.h" #include "core/os/thread_safe.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" struct DBusMessage; struct DBusConnection; diff --git a/platform/linuxbsd/os_linuxbsd.cpp b/platform/linuxbsd/os_linuxbsd.cpp index 92733216c38..b5a43a753e5 100644 --- a/platform/linuxbsd/os_linuxbsd.cpp +++ b/platform/linuxbsd/os_linuxbsd.cpp @@ -38,8 +38,8 @@ #include "drivers/sdl/joypad_sdl.h" #endif #include "main/main.h" -#include "servers/display_server.h" -#include "servers/rendering_server.h" +#include "servers/display/display_server.h" +#include "servers/rendering/rendering_server.h" #ifdef X11_ENABLED #include "x11/detect_prime_x11.h" diff --git a/platform/linuxbsd/os_linuxbsd.h b/platform/linuxbsd/os_linuxbsd.h index de7e4147e72..f21dab12e47 100644 --- a/platform/linuxbsd/os_linuxbsd.h +++ b/platform/linuxbsd/os_linuxbsd.h @@ -39,7 +39,7 @@ #include "drivers/alsamidi/midi_driver_alsamidi.h" #include "drivers/pulseaudio/audio_driver_pulseaudio.h" #include "drivers/unix/os_unix.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #ifdef FONTCONFIG_ENABLED #ifdef SOWRAP_ENABLED diff --git a/platform/linuxbsd/tts_linux.cpp b/platform/linuxbsd/tts_linux.cpp index ce3f8bd58af..67b952e7b35 100644 --- a/platform/linuxbsd/tts_linux.cpp +++ b/platform/linuxbsd/tts_linux.cpp @@ -33,7 +33,7 @@ #include "tts_linux.h" #include "core/config/project_settings.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" TTS_Linux *TTS_Linux::singleton = nullptr; diff --git a/platform/linuxbsd/tts_linux.h b/platform/linuxbsd/tts_linux.h index e19dc3a711a..a6d54d12e6f 100644 --- a/platform/linuxbsd/tts_linux.h +++ b/platform/linuxbsd/tts_linux.h @@ -38,7 +38,7 @@ #include "core/templates/hash_map.h" #include "core/templates/list.h" #include "core/variant/array.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #ifdef SOWRAP_ENABLED #include "speechd-so_wrap.h" diff --git a/platform/linuxbsd/wayland/display_server_wayland.h b/platform/linuxbsd/wayland/display_server_wayland.h index 399ae5b7ae9..9bc2f4eeebc 100644 --- a/platform/linuxbsd/wayland/display_server_wayland.h +++ b/platform/linuxbsd/wayland/display_server_wayland.h @@ -61,7 +61,7 @@ #include "core/config/project_settings.h" #include "core/input/input.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include #include diff --git a/platform/linuxbsd/wayland/wayland_thread.h b/platform/linuxbsd/wayland/wayland_thread.h index 70bf48280cc..e20e67432aa 100644 --- a/platform/linuxbsd/wayland/wayland_thread.h +++ b/platform/linuxbsd/wayland/wayland_thread.h @@ -85,7 +85,7 @@ #endif // LIBDECOR_ENABLED #include "core/os/thread.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" class WaylandThread { public: diff --git a/platform/linuxbsd/x11/display_server_x11.h b/platform/linuxbsd/x11/display_server_x11.h index 9a92f5226da..85361515c71 100644 --- a/platform/linuxbsd/x11/display_server_x11.h +++ b/platform/linuxbsd/x11/display_server_x11.h @@ -42,10 +42,10 @@ #include "drivers/alsamidi/midi_driver_alsamidi.h" #include "drivers/pulseaudio/audio_driver_pulseaudio.h" #include "drivers/unix/os_unix.h" -#include "servers/audio_server.h" -#include "servers/display_server.h" +#include "servers/audio/audio_server.h" +#include "servers/display/display_server.h" #include "servers/rendering/renderer_compositor.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #if defined(SPEECHD_ENABLED) #include "tts_linux.h" diff --git a/platform/linuxbsd/x11/gl_manager_x11.h b/platform/linuxbsd/x11/gl_manager_x11.h index d3c0cb0d7f7..cc0a5c8e047 100644 --- a/platform/linuxbsd/x11/gl_manager_x11.h +++ b/platform/linuxbsd/x11/gl_manager_x11.h @@ -36,7 +36,7 @@ #include "core/os/os.h" #include "core/templates/local_vector.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #ifdef SOWRAP_ENABLED #include "dynwrappers/xlib-so_wrap.h" diff --git a/platform/linuxbsd/x11/gl_manager_x11_egl.h b/platform/linuxbsd/x11/gl_manager_x11_egl.h index 699ed08bc05..ebd3d168760 100644 --- a/platform/linuxbsd/x11/gl_manager_x11_egl.h +++ b/platform/linuxbsd/x11/gl_manager_x11_egl.h @@ -37,7 +37,7 @@ #include "core/os/os.h" #include "core/templates/local_vector.h" #include "drivers/egl/egl_manager.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include diff --git a/platform/macos/display_server_macos_base.h b/platform/macos/display_server_macos_base.h index 57d0eea1023..56f2c66e361 100644 --- a/platform/macos/display_server_macos_base.h +++ b/platform/macos/display_server_macos_base.h @@ -33,7 +33,7 @@ #pragma once #include "core/input/input.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #define FontVariation __FontVariation diff --git a/platform/macos/embedded_gl_manager.h b/platform/macos/embedded_gl_manager.h index fda05ba5c90..9f97d2af1a8 100644 --- a/platform/macos/embedded_gl_manager.h +++ b/platform/macos/embedded_gl_manager.h @@ -36,7 +36,7 @@ #include "core/os/os.h" #include "core/templates/local_vector.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #import #import diff --git a/platform/macos/gl_manager_macos_angle.h b/platform/macos/gl_manager_macos_angle.h index 6fbeef55804..21329f6d6a6 100644 --- a/platform/macos/gl_manager_macos_angle.h +++ b/platform/macos/gl_manager_macos_angle.h @@ -37,7 +37,7 @@ #include "core/os/os.h" #include "core/templates/local_vector.h" #include "drivers/egl/egl_manager.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" // Suppress redefinition conflicts #define FontVariation __FontVariation diff --git a/platform/macos/gl_manager_macos_legacy.h b/platform/macos/gl_manager_macos_legacy.h index 6242463653b..f56bc425ec1 100644 --- a/platform/macos/gl_manager_macos_legacy.h +++ b/platform/macos/gl_manager_macos_legacy.h @@ -36,7 +36,7 @@ #include "core/os/os.h" #include "core/templates/local_vector.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #import #import diff --git a/platform/macos/godot_button_view.h b/platform/macos/godot_button_view.h index dc5df5611fb..dceb99be64d 100644 --- a/platform/macos/godot_button_view.h +++ b/platform/macos/godot_button_view.h @@ -32,7 +32,7 @@ #pragma once -#include "servers/display_server.h" +#include "servers/display/display_server.h" #import #import diff --git a/platform/macos/godot_content_view.h b/platform/macos/godot_content_view.h index d2e3c9c4bc1..39f6c93ba50 100644 --- a/platform/macos/godot_content_view.h +++ b/platform/macos/godot_content_view.h @@ -32,7 +32,7 @@ #pragma once -#include "servers/display_server.h" +#include "servers/display/display_server.h" #import #import diff --git a/platform/macos/godot_menu_item.h b/platform/macos/godot_menu_item.h index aa45a1fe96a..7aaeff9fbe8 100644 --- a/platform/macos/godot_menu_item.h +++ b/platform/macos/godot_menu_item.h @@ -32,7 +32,7 @@ #pragma once -#include "servers/display_server.h" +#include "servers/display/display_server.h" #import #import diff --git a/platform/macos/godot_window.h b/platform/macos/godot_window.h index be37d6ec776..bac5f4a8b76 100644 --- a/platform/macos/godot_window.h +++ b/platform/macos/godot_window.h @@ -32,7 +32,7 @@ #pragma once -#include "servers/display_server.h" +#include "servers/display/display_server.h" #import #import diff --git a/platform/macos/godot_window_delegate.h b/platform/macos/godot_window_delegate.h index b5b3b604cc8..ff3982c159e 100644 --- a/platform/macos/godot_window_delegate.h +++ b/platform/macos/godot_window_delegate.h @@ -32,7 +32,7 @@ #pragma once -#include "servers/display_server.h" +#include "servers/display/display_server.h" #import #import diff --git a/platform/macos/os_macos.h b/platform/macos/os_macos.h index e8a1068bf73..482c5da26d1 100644 --- a/platform/macos/os_macos.h +++ b/platform/macos/os_macos.h @@ -38,7 +38,7 @@ #import "drivers/coreaudio/audio_driver_coreaudio.h" #import "drivers/coremidi/midi_driver_coremidi.h" #include "drivers/unix/os_unix.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" class JoypadSDL; diff --git a/platform/macos/tts_macos.h b/platform/macos/tts_macos.h index d0e83240b5f..21cad097397 100644 --- a/platform/macos/tts_macos.h +++ b/platform/macos/tts_macos.h @@ -36,7 +36,7 @@ #include "core/templates/hash_map.h" #include "core/templates/list.h" #include "core/variant/array.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #import diff --git a/platform/web/audio_driver_web.h b/platform/web/audio_driver_web.h index 4fb82721d29..a6ee4475bf2 100644 --- a/platform/web/audio_driver_web.h +++ b/platform/web/audio_driver_web.h @@ -37,7 +37,7 @@ #include "core/os/mutex.h" #include "core/os/thread.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" class AudioDriverWeb : public AudioDriver { private: diff --git a/platform/web/display_server_web.h b/platform/web/display_server_web.h index d5c1b8f6de3..7bba21be5ea 100644 --- a/platform/web/display_server_web.h +++ b/platform/web/display_server_web.h @@ -32,7 +32,7 @@ #pragma once -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include "godot_js.h" diff --git a/platform/web/os_web.h b/platform/web/os_web.h index 50081a670db..4d997fcb092 100644 --- a/platform/web/os_web.h +++ b/platform/web/os_web.h @@ -39,7 +39,7 @@ #include "core/input/input.h" #include "drivers/unix/os_unix.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #include diff --git a/platform/windows/display_server_windows.h b/platform/windows/display_server_windows.h index acc7f8b3eb9..a277cd0be82 100644 --- a/platform/windows/display_server_windows.h +++ b/platform/windows/display_server_windows.h @@ -42,11 +42,11 @@ #include "core/os/os.h" #include "drivers/wasapi/audio_driver_wasapi.h" #include "drivers/winmidi/midi_driver_winmidi.h" -#include "servers/audio_server.h" -#include "servers/display_server.h" +#include "servers/audio/audio_server.h" +#include "servers/display/display_server.h" #include "servers/rendering/renderer_compositor.h" #include "servers/rendering/renderer_rd/renderer_compositor_rd.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #ifdef XAUDIO2_ENABLED #include "drivers/xaudio2/audio_driver_xaudio2.h" diff --git a/platform/windows/gl_manager_windows_angle.h b/platform/windows/gl_manager_windows_angle.h index 4ebe2177c6f..570fd024985 100644 --- a/platform/windows/gl_manager_windows_angle.h +++ b/platform/windows/gl_manager_windows_angle.h @@ -37,7 +37,7 @@ #include "core/os/os.h" #include "core/templates/local_vector.h" #include "drivers/egl/egl_manager.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include diff --git a/platform/windows/gl_manager_windows_native.h b/platform/windows/gl_manager_windows_native.h index ed67c5b17dc..c7f12b4a45e 100644 --- a/platform/windows/gl_manager_windows_native.h +++ b/platform/windows/gl_manager_windows_native.h @@ -36,7 +36,7 @@ #include "core/os/os.h" #include "core/templates/local_vector.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 0081a91b6e5..8289bd68d5b 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -48,9 +48,9 @@ #include "drivers/windows/net_socket_winsock.h" #include "drivers/windows/thread_windows.h" #include "main/main.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #include "servers/rendering/rendering_server_default.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" #include #include diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h index e07dfea67c7..a8a132bbbac 100644 --- a/platform/windows/os_windows.h +++ b/platform/windows/os_windows.h @@ -40,7 +40,7 @@ #include "core/os/os.h" #include "drivers/wasapi/audio_driver_wasapi.h" #include "drivers/winmidi/midi_driver_winmidi.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #ifdef XAUDIO2_ENABLED #include "drivers/xaudio2/audio_driver_xaudio2.h" diff --git a/platform/windows/tts_windows.h b/platform/windows/tts_windows.h index e8ed0918335..fabff575b88 100644 --- a/platform/windows/tts_windows.h +++ b/platform/windows/tts_windows.h @@ -36,7 +36,7 @@ #include "core/templates/hash_map.h" #include "core/templates/list.h" #include "core/variant/array.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include #include diff --git a/scene/2d/audio_stream_player_2d.cpp b/scene/2d/audio_stream_player_2d.cpp index 2227752dbd5..8a1e7abd2de 100644 --- a/scene/2d/audio_stream_player_2d.cpp +++ b/scene/2d/audio_stream_player_2d.cpp @@ -44,8 +44,8 @@ #include "scene/audio/audio_stream_player_internal.h" #include "scene/main/viewport.h" #include "scene/resources/world_2d.h" +#include "servers/audio/audio_server.h" #include "servers/audio/audio_stream.h" -#include "servers/audio_server.h" #ifndef PHYSICS_2D_DISABLED #include "scene/2d/physics/area_2d.h" diff --git a/scene/2d/audio_stream_player_2d.h b/scene/2d/audio_stream_player_2d.h index 0791074c2e5..32fcfbb041c 100644 --- a/scene/2d/audio_stream_player_2d.h +++ b/scene/2d/audio_stream_player_2d.h @@ -39,7 +39,7 @@ */ #include "scene/2d/node_2d.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" struct AudioFrame; class AudioStream; diff --git a/scene/2d/mesh_instance_2d.cpp b/scene/2d/mesh_instance_2d.cpp index 8e05349e95e..ffc08a3e1bd 100644 --- a/scene/2d/mesh_instance_2d.cpp +++ b/scene/2d/mesh_instance_2d.cpp @@ -41,7 +41,7 @@ #ifndef NAVIGATION_2D_DISABLED #include "scene/resources/2d/navigation_mesh_source_geometry_data_2d.h" #include "scene/resources/2d/navigation_polygon.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" #include "thirdparty/clipper2/include/clipper2/clipper.h" #include "thirdparty/misc/polypartition.h" diff --git a/scene/2d/multimesh_instance_2d.cpp b/scene/2d/multimesh_instance_2d.cpp index c71ace90420..09f5f3cb374 100644 --- a/scene/2d/multimesh_instance_2d.cpp +++ b/scene/2d/multimesh_instance_2d.cpp @@ -41,7 +41,7 @@ #ifndef NAVIGATION_2D_DISABLED #include "scene/resources/2d/navigation_mesh_source_geometry_data_2d.h" #include "scene/resources/2d/navigation_polygon.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" #include "thirdparty/clipper2/include/clipper2/clipper.h" #include "thirdparty/misc/polypartition.h" diff --git a/scene/2d/navigation/navigation_agent_2d.cpp b/scene/2d/navigation/navigation_agent_2d.cpp index ca7f8bced1b..c058d74bd7f 100644 --- a/scene/2d/navigation/navigation_agent_2d.cpp +++ b/scene/2d/navigation/navigation_agent_2d.cpp @@ -41,7 +41,7 @@ #include "core/math/geometry_2d.h" #include "scene/2d/navigation/navigation_link_2d.h" #include "scene/resources/world_2d.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" void NavigationAgent2D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_rid"), &NavigationAgent2D::get_rid); diff --git a/scene/2d/navigation/navigation_agent_2d.h b/scene/2d/navigation/navigation_agent_2d.h index 2472b83b094..6365247f93d 100644 --- a/scene/2d/navigation/navigation_agent_2d.h +++ b/scene/2d/navigation/navigation_agent_2d.h @@ -39,9 +39,9 @@ */ #include "scene/main/node.h" -#include "servers/navigation/navigation_globals.h" -#include "servers/navigation/navigation_path_query_parameters_2d.h" -#include "servers/navigation/navigation_path_query_result_2d.h" +#include "servers/navigation_2d/navigation_constants_2d.h" +#include "servers/navigation_2d/navigation_path_query_parameters_2d.h" +#include "servers/navigation_2d/navigation_path_query_result_2d.h" class Node2D; diff --git a/scene/2d/navigation/navigation_link_2d.cpp b/scene/2d/navigation/navigation_link_2d.cpp index d88323e22f0..b8e36286124 100644 --- a/scene/2d/navigation/navigation_link_2d.cpp +++ b/scene/2d/navigation/navigation_link_2d.cpp @@ -40,7 +40,7 @@ #include "core/math/geometry_2d.h" #include "scene/resources/world_2d.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" void NavigationLink2D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_rid"), &NavigationLink2D::get_rid); diff --git a/scene/2d/navigation/navigation_obstacle_2d.cpp b/scene/2d/navigation/navigation_obstacle_2d.cpp index 5a86db56e89..720b5585ca0 100644 --- a/scene/2d/navigation/navigation_obstacle_2d.cpp +++ b/scene/2d/navigation/navigation_obstacle_2d.cpp @@ -42,7 +42,7 @@ #include "scene/resources/2d/navigation_mesh_source_geometry_data_2d.h" #include "scene/resources/2d/navigation_polygon.h" #include "scene/resources/world_2d.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" Callable NavigationObstacle2D::_navmesh_source_geometry_parsing_callback; RID NavigationObstacle2D::_navmesh_source_geometry_parser; @@ -79,7 +79,7 @@ void NavigationObstacle2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.0,500,0.01,suffix:px"), "set_radius", "get_radius"); ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR2_ARRAY, "vertices"), "set_vertices", "get_vertices"); - ADD_GROUP("NavigationMesh", ""); + ADD_GROUP("NavigationPolygon", ""); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "affect_navigation_mesh"), "set_affect_navigation_mesh", "get_affect_navigation_mesh"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "carve_navigation_mesh"), "set_carve_navigation_mesh", "get_carve_navigation_mesh"); ADD_GROUP("Avoidance", ""); diff --git a/scene/2d/navigation/navigation_region_2d.cpp b/scene/2d/navigation/navigation_region_2d.cpp index f1608c557aa..7f5dcf636f5 100644 --- a/scene/2d/navigation/navigation_region_2d.cpp +++ b/scene/2d/navigation/navigation_region_2d.cpp @@ -40,7 +40,7 @@ #include "core/math/random_pcg.h" #include "scene/resources/world_2d.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" RID NavigationRegion2D::get_rid() const { return region; diff --git a/scene/2d/physics/area_2d.cpp b/scene/2d/physics/area_2d.cpp index 22a61d46398..4c10cea90b1 100644 --- a/scene/2d/physics/area_2d.cpp +++ b/scene/2d/physics/area_2d.cpp @@ -38,7 +38,7 @@ #include "area_2d.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" void Area2D::set_gravity_space_override_mode(SpaceOverride p_mode) { gravity_space_override = p_mode; diff --git a/scene/2d/physics/character_body_2d.cpp b/scene/2d/physics/character_body_2d.cpp index 8f1215b979f..4dd4336c5ff 100644 --- a/scene/2d/physics/character_body_2d.cpp +++ b/scene/2d/physics/character_body_2d.cpp @@ -39,7 +39,7 @@ #include "character_body_2d.h" #ifndef DISABLE_DEPRECATED -#include "servers/extensions/physics_server_2d_extension.h" +#include "servers/physics_2d/physics_server_2d_extension.h" #endif // So, if you pass 45 as limit, avoid numerical precision errors when angle is 45. diff --git a/scene/2d/physics/collision_object_2d.h b/scene/2d/physics/collision_object_2d.h index 7cf58227a6f..af949095406 100644 --- a/scene/2d/physics/collision_object_2d.h +++ b/scene/2d/physics/collision_object_2d.h @@ -41,7 +41,7 @@ #include "scene/2d/node_2d.h" #include "scene/main/viewport.h" #include "scene/resources/2d/shape_2d.h" -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" class CollisionObject2D : public Node2D { GDCLASS(CollisionObject2D, Node2D); diff --git a/scene/2d/physics/kinematic_collision_2d.h b/scene/2d/physics/kinematic_collision_2d.h index d28ed3a1e73..cd74386dcd6 100644 --- a/scene/2d/physics/kinematic_collision_2d.h +++ b/scene/2d/physics/kinematic_collision_2d.h @@ -39,7 +39,7 @@ */ #include "core/object/ref_counted.h" -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" class CharacterBody2D; class PhysicsBody2D; diff --git a/scene/2d/physics/physics_body_2d.h b/scene/2d/physics/physics_body_2d.h index 666ad05c9db..17138d9e9b4 100644 --- a/scene/2d/physics/physics_body_2d.h +++ b/scene/2d/physics/physics_body_2d.h @@ -41,7 +41,7 @@ #include "scene/2d/physics/collision_object_2d.h" #include "scene/2d/physics/kinematic_collision_2d.h" #include "scene/resources/physics_material.h" -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" class PhysicsBody2D : public CollisionObject2D { GDCLASS(PhysicsBody2D, CollisionObject2D); diff --git a/scene/2d/physics/shape_cast_2d.cpp b/scene/2d/physics/shape_cast_2d.cpp index 3069182696b..17595494371 100644 --- a/scene/2d/physics/shape_cast_2d.cpp +++ b/scene/2d/physics/shape_cast_2d.cpp @@ -41,7 +41,7 @@ #include "core/config/engine.h" #include "scene/2d/physics/collision_object_2d.h" #include "scene/resources/world_2d.h" -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" void ShapeCast2D::set_target_position(const Vector2 &p_point) { target_position = p_point; diff --git a/scene/2d/physics/shape_cast_2d.h b/scene/2d/physics/shape_cast_2d.h index 01abbcaab5a..02d06edc7ef 100644 --- a/scene/2d/physics/shape_cast_2d.h +++ b/scene/2d/physics/shape_cast_2d.h @@ -40,7 +40,7 @@ #include "scene/2d/node_2d.h" #include "scene/resources/2d/shape_2d.h" -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" class CollisionObject2D; diff --git a/scene/2d/physics/static_body_2d.cpp b/scene/2d/physics/static_body_2d.cpp index 31b947e5c6c..d6e0421f754 100644 --- a/scene/2d/physics/static_body_2d.cpp +++ b/scene/2d/physics/static_body_2d.cpp @@ -46,7 +46,7 @@ #include "scene/resources/2d/navigation_mesh_source_geometry_data_2d.h" #include "scene/resources/2d/navigation_polygon.h" #include "scene/resources/2d/rectangle_shape_2d.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" #endif // NAVIGATION_2D_DISABLED Callable StaticBody2D::_navmesh_source_geometry_parsing_callback; diff --git a/scene/2d/polygon_2d.cpp b/scene/2d/polygon_2d.cpp index 2416cde0676..2454b228641 100644 --- a/scene/2d/polygon_2d.cpp +++ b/scene/2d/polygon_2d.cpp @@ -39,14 +39,13 @@ #include "polygon_2d.h" #include "core/math/geometry_2d.h" +#include "skeleton_2d.h" + #ifndef NAVIGATION_2D_DISABLED #include "scene/resources/2d/navigation_mesh_source_geometry_data_2d.h" #include "scene/resources/2d/navigation_polygon.h" -#include "servers/navigation_server_2d.h" -#endif // NAVIGATION_2D_DISABLED -#include "skeleton_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" -#ifndef NAVIGATION_2D_DISABLED Callable Polygon2D::_navmesh_source_geometry_parsing_callback; RID Polygon2D::_navmesh_source_geometry_parser; #endif // NAVIGATION_2D_DISABLED diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index bb4d1ee511b..cc43d04864c 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -42,7 +42,7 @@ #include "core/io/marshalls.h" #ifndef NAVIGATION_2D_DISABLED #include "scene/resources/2d/navigation_mesh_source_geometry_data_2d.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" #endif // NAVIGATION_2D_DISABLED #define TILEMAP_CALL_FOR_LAYER(layer, function, ...) \ diff --git a/scene/2d/tile_map_layer.cpp b/scene/2d/tile_map_layer.cpp index 1953375ea0c..7d1434e9958 100644 --- a/scene/2d/tile_map_layer.cpp +++ b/scene/2d/tile_map_layer.cpp @@ -48,11 +48,11 @@ #include "scene/resources/world_2d.h" #ifndef PHYSICS_2D_DISABLED -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" #endif // PHYSICS_3D_DISABLED #ifndef NAVIGATION_2D_DISABLED -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" Callable TileMapLayer::_navmesh_source_geometry_parsing_callback; RID TileMapLayer::_navmesh_source_geometry_parser; #endif // NAVIGATION_2D_DISABLED diff --git a/scene/3d/audio_stream_player_3d.h b/scene/3d/audio_stream_player_3d.h index 07dee3c2203..e81908b4a6b 100644 --- a/scene/3d/audio_stream_player_3d.h +++ b/scene/3d/audio_stream_player_3d.h @@ -39,7 +39,7 @@ */ #include "scene/3d/node_3d.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #ifndef PHYSICS_3D_DISABLED class Area3D; diff --git a/scene/3d/label_3d.h b/scene/3d/label_3d.h index b950ef4d551..0ee04bac0b1 100644 --- a/scene/3d/label_3d.h +++ b/scene/3d/label_3d.h @@ -41,7 +41,7 @@ #include "scene/3d/visual_instance_3d.h" #include "scene/resources/font.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" class Label3D : public GeometryInstance3D { GDCLASS(Label3D, GeometryInstance3D); diff --git a/scene/3d/mesh_instance_3d.cpp b/scene/3d/mesh_instance_3d.cpp index 7f3f447a63e..723d288affe 100644 --- a/scene/3d/mesh_instance_3d.cpp +++ b/scene/3d/mesh_instance_3d.cpp @@ -50,7 +50,7 @@ #ifndef NAVIGATION_3D_DISABLED #include "scene/resources/3d/navigation_mesh_source_geometry_data_3d.h" #include "scene/resources/navigation_mesh.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" Callable MeshInstance3D::_navmesh_source_geometry_parsing_callback; RID MeshInstance3D::_navmesh_source_geometry_parser; diff --git a/scene/3d/multimesh_instance_3d.cpp b/scene/3d/multimesh_instance_3d.cpp index 72d26301502..068a908ab80 100644 --- a/scene/3d/multimesh_instance_3d.cpp +++ b/scene/3d/multimesh_instance_3d.cpp @@ -41,7 +41,7 @@ #ifndef NAVIGATION_3D_DISABLED #include "scene/resources/3d/navigation_mesh_source_geometry_data_3d.h" #include "scene/resources/navigation_mesh.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" Callable MultiMeshInstance3D::_navmesh_source_geometry_parsing_callback; RID MultiMeshInstance3D::_navmesh_source_geometry_parser; diff --git a/scene/3d/navigation/navigation_agent_3d.cpp b/scene/3d/navigation/navigation_agent_3d.cpp index 33a8e432ae6..3806ef4d42b 100644 --- a/scene/3d/navigation/navigation_agent_3d.cpp +++ b/scene/3d/navigation/navigation_agent_3d.cpp @@ -39,7 +39,7 @@ #include "navigation_agent_3d.h" #include "scene/3d/navigation/navigation_link_3d.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" void NavigationAgent3D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_rid"), &NavigationAgent3D::get_rid); diff --git a/scene/3d/navigation/navigation_agent_3d.h b/scene/3d/navigation/navigation_agent_3d.h index b1173ff4af2..eed921cc13c 100644 --- a/scene/3d/navigation/navigation_agent_3d.h +++ b/scene/3d/navigation/navigation_agent_3d.h @@ -39,9 +39,9 @@ */ #include "scene/main/node.h" -#include "servers/navigation/navigation_globals.h" -#include "servers/navigation/navigation_path_query_parameters_3d.h" -#include "servers/navigation/navigation_path_query_result_3d.h" +#include "servers/navigation_3d/navigation_constants_3d.h" +#include "servers/navigation_3d/navigation_path_query_parameters_3d.h" +#include "servers/navigation_3d/navigation_path_query_result_3d.h" class Node3D; diff --git a/scene/3d/navigation/navigation_link_3d.cpp b/scene/3d/navigation/navigation_link_3d.cpp index b7164553c7a..a2effda8d9a 100644 --- a/scene/3d/navigation/navigation_link_3d.cpp +++ b/scene/3d/navigation/navigation_link_3d.cpp @@ -38,7 +38,7 @@ #include "navigation_link_3d.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" #ifdef DEBUG_ENABLED void NavigationLink3D::_update_debug_mesh() { diff --git a/scene/3d/navigation/navigation_obstacle_3d.cpp b/scene/3d/navigation/navigation_obstacle_3d.cpp index 62f28d5197a..d158beb0ef9 100644 --- a/scene/3d/navigation/navigation_obstacle_3d.cpp +++ b/scene/3d/navigation/navigation_obstacle_3d.cpp @@ -41,7 +41,7 @@ #include "core/math/geometry_2d.h" #include "scene/resources/3d/navigation_mesh_source_geometry_data_3d.h" #include "scene/resources/navigation_mesh.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" Callable NavigationObstacle3D::_navmesh_source_geometry_parsing_callback; RID NavigationObstacle3D::_navmesh_source_geometry_parser; diff --git a/scene/3d/navigation/navigation_region_3d.cpp b/scene/3d/navigation/navigation_region_3d.cpp index ac020137a29..438efdc7806 100644 --- a/scene/3d/navigation/navigation_region_3d.cpp +++ b/scene/3d/navigation/navigation_region_3d.cpp @@ -40,7 +40,7 @@ #include "core/math/random_pcg.h" #include "scene/resources/3d/navigation_mesh_source_geometry_data_3d.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" RID NavigationRegion3D::get_rid() const { return region; diff --git a/scene/3d/physics/area_3d.cpp b/scene/3d/physics/area_3d.cpp index 7a4e397404e..d22d80f677c 100644 --- a/scene/3d/physics/area_3d.cpp +++ b/scene/3d/physics/area_3d.cpp @@ -38,7 +38,7 @@ #include "area_3d.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" void Area3D::set_gravity_space_override_mode(SpaceOverride p_mode) { if (gravity_space_override == p_mode) { diff --git a/scene/3d/physics/character_body_3d.cpp b/scene/3d/physics/character_body_3d.cpp index 25fa10da8dd..d28ee26db5a 100644 --- a/scene/3d/physics/character_body_3d.cpp +++ b/scene/3d/physics/character_body_3d.cpp @@ -39,7 +39,7 @@ #include "character_body_3d.h" #ifndef DISABLE_DEPRECATED -#include "servers/extensions/physics_server_3d_extension.h" +#include "servers/physics_3d/physics_server_3d_extension.h" #endif //so, if you pass 45 as limit, avoid numerical precision errors when angle is 45. diff --git a/scene/3d/physics/kinematic_collision_3d.h b/scene/3d/physics/kinematic_collision_3d.h index 4e75f49e5ba..a428e44895d 100644 --- a/scene/3d/physics/kinematic_collision_3d.h +++ b/scene/3d/physics/kinematic_collision_3d.h @@ -39,7 +39,7 @@ */ #include "core/object/ref_counted.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" class KinematicCollision3D : public RefCounted { GDCLASS(KinematicCollision3D, RefCounted); diff --git a/scene/3d/physics/physics_body_3d.h b/scene/3d/physics/physics_body_3d.h index 195b72661f3..ae17050fa88 100644 --- a/scene/3d/physics/physics_body_3d.h +++ b/scene/3d/physics/physics_body_3d.h @@ -41,7 +41,7 @@ #include "scene/3d/physics/collision_object_3d.h" #include "scene/3d/physics/kinematic_collision_3d.h" #include "scene/resources/physics_material.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" class PhysicsBody3D : public CollisionObject3D { GDCLASS(PhysicsBody3D, CollisionObject3D); diff --git a/scene/3d/physics/soft_body_3d.h b/scene/3d/physics/soft_body_3d.h index bbeff177c0a..4eec7e99a50 100644 --- a/scene/3d/physics/soft_body_3d.h +++ b/scene/3d/physics/soft_body_3d.h @@ -39,7 +39,7 @@ */ #include "scene/3d/mesh_instance_3d.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" class PhysicsBody3D; diff --git a/scene/3d/physics/static_body_3d.cpp b/scene/3d/physics/static_body_3d.cpp index 0ee1c57677e..86685b67745 100644 --- a/scene/3d/physics/static_body_3d.cpp +++ b/scene/3d/physics/static_body_3d.cpp @@ -52,7 +52,7 @@ #include "scene/resources/3d/sphere_shape_3d.h" #include "scene/resources/3d/world_boundary_shape_3d.h" #include "scene/resources/navigation_mesh.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" Callable StaticBody3D::_navmesh_source_geometry_parsing_callback; RID StaticBody3D::_navmesh_source_geometry_parser; diff --git a/scene/3d/xr/xr_body_modifier_3d.cpp b/scene/3d/xr/xr_body_modifier_3d.cpp index 7f45b1685ae..085fc359ef1 100644 --- a/scene/3d/xr/xr_body_modifier_3d.cpp +++ b/scene/3d/xr/xr_body_modifier_3d.cpp @@ -39,7 +39,7 @@ #include "xr_body_modifier_3d.h" #include "scene/3d/skeleton_3d.h" -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" void XRBodyModifier3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_body_tracker", "tracker_name"), &XRBodyModifier3D::set_body_tracker); diff --git a/scene/3d/xr/xr_face_modifier_3d.cpp b/scene/3d/xr/xr_face_modifier_3d.cpp index d5ce9dc83b6..fbc442550f9 100644 --- a/scene/3d/xr/xr_face_modifier_3d.cpp +++ b/scene/3d/xr/xr_face_modifier_3d.cpp @@ -39,7 +39,7 @@ #include "xr_face_modifier_3d.h" #include "servers/xr/xr_face_tracker.h" -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" /// This method takes the name of a mesh blend shape and returns the /// corresponding XRFaceTracker blend shape. If no match is diff --git a/scene/3d/xr/xr_hand_modifier_3d.cpp b/scene/3d/xr/xr_hand_modifier_3d.cpp index ad7344d3595..4473471c042 100644 --- a/scene/3d/xr/xr_hand_modifier_3d.cpp +++ b/scene/3d/xr/xr_hand_modifier_3d.cpp @@ -39,7 +39,7 @@ #include "xr_hand_modifier_3d.h" #include "core/config/project_settings.h" -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" void XRHandModifier3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_hand_tracker", "tracker_name"), &XRHandModifier3D::set_hand_tracker); diff --git a/scene/animation/animation_mixer.cpp b/scene/animation/animation_mixer.cpp index 717f0d115cc..a1d539c936d 100644 --- a/scene/animation/animation_mixer.cpp +++ b/scene/animation/animation_mixer.cpp @@ -46,8 +46,8 @@ #include "scene/animation/animation_player.h" #include "scene/audio/audio_stream_player.h" #include "scene/resources/animation.h" +#include "servers/audio/audio_server.h" #include "servers/audio/audio_stream.h" -#include "servers/audio_server.h" #ifndef _3D_DISABLED #include "scene/3d/audio_stream_player_3d.h" diff --git a/scene/audio/audio_stream_player.h b/scene/audio/audio_stream_player.h index c09e0acc5bc..bfb2a11dddd 100644 --- a/scene/audio/audio_stream_player.h +++ b/scene/audio/audio_stream_player.h @@ -39,7 +39,7 @@ */ #include "scene/main/node.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" struct AudioFrame; class AudioStream; diff --git a/scene/audio/audio_stream_player_internal.h b/scene/audio/audio_stream_player_internal.h index 809ef8d1514..252ef13d97f 100644 --- a/scene/audio/audio_stream_player_internal.h +++ b/scene/audio/audio_stream_player_internal.h @@ -40,7 +40,7 @@ #include "core/object/ref_counted.h" #include "core/templates/safe_refcount.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" class AudioStream; class AudioStreamPlayback; diff --git a/scene/debugger/scene_debugger.cpp b/scene/debugger/scene_debugger.cpp index 39dc292b845..20c1ee468c3 100644 --- a/scene/debugger/scene_debugger.cpp +++ b/scene/debugger/scene_debugger.cpp @@ -52,7 +52,7 @@ #include "scene/main/window.h" #include "scene/resources/packed_scene.h" #include "scene/theme/theme_db.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #ifndef PHYSICS_2D_DISABLED #include "scene/2d/physics/collision_object_2d.h" diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 90805e0b51b..4099c533cfb 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -49,8 +49,8 @@ #include "scene/main/window.h" #include "scene/theme/theme_db.h" #include "scene/theme/theme_owner.h" -#include "servers/rendering_server.h" -#include "servers/text_server.h" +#include "servers/rendering/rendering_server.h" +#include "servers/text/text_server.h" #ifdef TOOLS_ENABLED #include "editor/scene/gui/control_editor_plugin.h" diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp index a920a971127..28fbbd0bae4 100644 --- a/scene/gui/label.cpp +++ b/scene/gui/label.cpp @@ -40,7 +40,7 @@ #include "scene/gui/container.h" #include "scene/theme/theme_db.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" void Label::set_autowrap_mode(TextServer::AutowrapMode p_mode) { if (autowrap_mode == p_mode) { diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 195497842f4..6bb555f4d6b 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -46,8 +46,8 @@ #include "scene/gui/label.h" #include "scene/main/window.h" #include "scene/theme/theme_db.h" -#include "servers/display_server.h" -#include "servers/text_server.h" +#include "servers/display/display_server.h" +#include "servers/text/text_server.h" #ifdef TOOLS_ENABLED #include "editor/settings/editor_settings.h" diff --git a/scene/gui/nine_patch_rect.cpp b/scene/gui/nine_patch_rect.cpp index 08550e9837e..47bd9a867eb 100644 --- a/scene/gui/nine_patch_rect.cpp +++ b/scene/gui/nine_patch_rect.cpp @@ -38,7 +38,7 @@ #include "nine_patch_rect.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" void NinePatchRect::_notification(int p_what) { switch (p_what) { diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index f0931ddbfac..ef784b5e8c8 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -47,7 +47,7 @@ #include "scene/gui/rich_text_effect.h" #include "scene/resources/atlas_texture.h" #include "scene/theme/theme_db.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include "modules/modules_enabled.gen.h" // For regex. #ifdef MODULE_REGEX_ENABLED diff --git a/scene/gui/video_stream_player.cpp b/scene/gui/video_stream_player.cpp index 39fc5186d35..13662f55114 100644 --- a/scene/gui/video_stream_player.cpp +++ b/scene/gui/video_stream_player.cpp @@ -39,7 +39,7 @@ #include "video_stream_player.h" #include "core/os/os.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" int VideoStreamPlayer::sp_get_channel_count() const { if (playback.is_null()) { diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index d77ed5b640a..369c72fa4e6 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -65,11 +65,11 @@ #endif // _3D_DISABLED #ifndef PHYSICS_2D_DISABLED -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" #endif // PHYSICS_2D_DISABLED #ifndef PHYSICS_3D_DISABLED -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" #endif // PHYSICS_3D_DISABLED void SceneTreeTimer::_bind_methods() { diff --git a/scene/main/status_indicator.h b/scene/main/status_indicator.h index 17464b21d9c..df21d9d3cef 100644 --- a/scene/main/status_indicator.h +++ b/scene/main/status_indicator.h @@ -39,7 +39,7 @@ */ #include "scene/main/node.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" class StatusIndicator : public Node { GDCLASS(StatusIndicator, Node); diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 756399624dc..8aa01beae32 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -55,7 +55,7 @@ #include "scene/resources/mesh.h" #include "scene/resources/text_line.h" #include "scene/resources/world_2d.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #include "servers/rendering/rendering_server_globals.h" #ifndef _3D_DISABLED diff --git a/scene/main/window.h b/scene/main/window.h index 17eb4dd52ed..6dbbf3c5a69 100644 --- a/scene/main/window.h +++ b/scene/main/window.h @@ -40,7 +40,7 @@ #include "scene/main/viewport.h" #include "scene/resources/theme.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" class Font; class Shortcut; diff --git a/scene/resources/2d/capsule_shape_2d.cpp b/scene/resources/2d/capsule_shape_2d.cpp index 083589a8ca2..f26e0f55316 100644 --- a/scene/resources/2d/capsule_shape_2d.cpp +++ b/scene/resources/2d/capsule_shape_2d.cpp @@ -39,8 +39,8 @@ #include "capsule_shape_2d.h" #include "core/math/geometry_2d.h" -#include "servers/physics_server_2d.h" -#include "servers/rendering_server.h" +#include "servers/physics_2d/physics_server_2d.h" +#include "servers/rendering/rendering_server.h" Vector CapsuleShape2D::_get_points() const { Vector points; diff --git a/scene/resources/2d/circle_shape_2d.cpp b/scene/resources/2d/circle_shape_2d.cpp index e160b6b1442..b4cfdbfea60 100644 --- a/scene/resources/2d/circle_shape_2d.cpp +++ b/scene/resources/2d/circle_shape_2d.cpp @@ -38,8 +38,8 @@ #include "circle_shape_2d.h" -#include "servers/physics_server_2d.h" -#include "servers/rendering_server.h" +#include "servers/physics_2d/physics_server_2d.h" +#include "servers/rendering/rendering_server.h" bool CircleShape2D::_edit_is_selected_on_click(const Point2 &p_point, double p_tolerance) const { return p_point.length() < get_radius() + p_tolerance; diff --git a/scene/resources/2d/concave_polygon_shape_2d.cpp b/scene/resources/2d/concave_polygon_shape_2d.cpp index 942de200d91..333fc55e48a 100644 --- a/scene/resources/2d/concave_polygon_shape_2d.cpp +++ b/scene/resources/2d/concave_polygon_shape_2d.cpp @@ -39,8 +39,8 @@ #include "concave_polygon_shape_2d.h" #include "core/math/geometry_2d.h" -#include "servers/physics_server_2d.h" -#include "servers/rendering_server.h" +#include "servers/physics_2d/physics_server_2d.h" +#include "servers/rendering/rendering_server.h" bool ConcavePolygonShape2D::_edit_is_selected_on_click(const Point2 &p_point, double p_tolerance) const { Vector s = get_segments(); diff --git a/scene/resources/2d/convex_polygon_shape_2d.cpp b/scene/resources/2d/convex_polygon_shape_2d.cpp index 28b2c2f4701..e588e4a52e3 100644 --- a/scene/resources/2d/convex_polygon_shape_2d.cpp +++ b/scene/resources/2d/convex_polygon_shape_2d.cpp @@ -39,8 +39,8 @@ #include "convex_polygon_shape_2d.h" #include "core/math/geometry_2d.h" -#include "servers/physics_server_2d.h" -#include "servers/rendering_server.h" +#include "servers/physics_2d/physics_server_2d.h" +#include "servers/rendering/rendering_server.h" bool ConvexPolygonShape2D::_edit_is_selected_on_click(const Point2 &p_point, double p_tolerance) const { return Geometry2D::is_point_in_polygon(p_point, points); diff --git a/scene/resources/2d/navigation_polygon.h b/scene/resources/2d/navigation_polygon.h index e05dcc40a7e..081c1706c39 100644 --- a/scene/resources/2d/navigation_polygon.h +++ b/scene/resources/2d/navigation_polygon.h @@ -40,7 +40,7 @@ #include "scene/2d/node_2d.h" #include "scene/resources/navigation_mesh.h" -#include "servers/navigation/navigation_globals.h" +#include "servers/navigation_2d/navigation_constants_2d.h" class NavigationPolygon : public Resource { GDCLASS(NavigationPolygon, Resource); diff --git a/scene/resources/2d/rectangle_shape_2d.cpp b/scene/resources/2d/rectangle_shape_2d.cpp index 13fbf630e57..151c78299f4 100644 --- a/scene/resources/2d/rectangle_shape_2d.cpp +++ b/scene/resources/2d/rectangle_shape_2d.cpp @@ -38,8 +38,8 @@ #include "rectangle_shape_2d.h" -#include "servers/physics_server_2d.h" -#include "servers/rendering_server.h" +#include "servers/physics_2d/physics_server_2d.h" +#include "servers/rendering/rendering_server.h" void RectangleShape2D::_update_shape() { PhysicsServer2D::get_singleton()->shape_set_data(get_rid(), size * 0.5); emit_changed(); diff --git a/scene/resources/2d/segment_shape_2d.cpp b/scene/resources/2d/segment_shape_2d.cpp index f7d38485964..efcef60cc38 100644 --- a/scene/resources/2d/segment_shape_2d.cpp +++ b/scene/resources/2d/segment_shape_2d.cpp @@ -39,8 +39,8 @@ #include "segment_shape_2d.h" #include "core/math/geometry_2d.h" -#include "servers/physics_server_2d.h" -#include "servers/rendering_server.h" +#include "servers/physics_2d/physics_server_2d.h" +#include "servers/rendering/rendering_server.h" bool SegmentShape2D::_edit_is_selected_on_click(const Point2 &p_point, double p_tolerance) const { Vector2 closest = Geometry2D::get_closest_point_to_segment(p_point, a, b); diff --git a/scene/resources/2d/separation_ray_shape_2d.cpp b/scene/resources/2d/separation_ray_shape_2d.cpp index 3b2a36da32d..7b8aa567e48 100644 --- a/scene/resources/2d/separation_ray_shape_2d.cpp +++ b/scene/resources/2d/separation_ray_shape_2d.cpp @@ -38,8 +38,8 @@ #include "separation_ray_shape_2d.h" -#include "servers/physics_server_2d.h" -#include "servers/rendering_server.h" +#include "servers/physics_2d/physics_server_2d.h" +#include "servers/rendering/rendering_server.h" void SeparationRayShape2D::_update_shape() { Dictionary d; diff --git a/scene/resources/2d/shape_2d.cpp b/scene/resources/2d/shape_2d.cpp index 0d25d543e33..24d949af803 100644 --- a/scene/resources/2d/shape_2d.cpp +++ b/scene/resources/2d/shape_2d.cpp @@ -39,7 +39,7 @@ #include "shape_2d.h" #include "core/config/project_settings.h" -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" RID Shape2D::get_rid() const { return shape; diff --git a/scene/resources/2d/tile_set.cpp b/scene/resources/2d/tile_set.cpp index dd00cec25df..0bec00baea5 100644 --- a/scene/resources/2d/tile_set.cpp +++ b/scene/resources/2d/tile_set.cpp @@ -47,7 +47,7 @@ #include "scene/resources/image_texture.h" #ifndef NAVIGATION_2D_DISABLED -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" #endif // NAVIGATION_2D_DISABLED /////////////////////////////// TileMapPattern ////////////////////////////////////// diff --git a/scene/resources/2d/world_boundary_shape_2d.cpp b/scene/resources/2d/world_boundary_shape_2d.cpp index 7f9507a6706..ad04a8f2e50 100644 --- a/scene/resources/2d/world_boundary_shape_2d.cpp +++ b/scene/resources/2d/world_boundary_shape_2d.cpp @@ -39,8 +39,8 @@ #include "world_boundary_shape_2d.h" #include "core/math/geometry_2d.h" -#include "servers/physics_server_2d.h" -#include "servers/rendering_server.h" +#include "servers/physics_2d/physics_server_2d.h" +#include "servers/rendering/rendering_server.h" bool WorldBoundaryShape2D::_edit_is_selected_on_click(const Point2 &p_point, double p_tolerance) const { const Vector2 shape_center = distance * normal; diff --git a/scene/resources/3d/box_shape_3d.cpp b/scene/resources/3d/box_shape_3d.cpp index 5f9364dcbfb..ed0958d9a39 100644 --- a/scene/resources/3d/box_shape_3d.cpp +++ b/scene/resources/3d/box_shape_3d.cpp @@ -39,7 +39,7 @@ #include "box_shape_3d.h" #include "scene/resources/3d/primitive_meshes.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" Vector BoxShape3D::get_debug_mesh_lines() const { Vector lines; diff --git a/scene/resources/3d/capsule_shape_3d.cpp b/scene/resources/3d/capsule_shape_3d.cpp index 05928cd6254..7cbe2f15f0a 100644 --- a/scene/resources/3d/capsule_shape_3d.cpp +++ b/scene/resources/3d/capsule_shape_3d.cpp @@ -39,7 +39,7 @@ #include "capsule_shape_3d.h" #include "scene/resources/3d/primitive_meshes.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" Vector CapsuleShape3D::get_debug_mesh_lines() const { float c_radius = get_radius(); diff --git a/scene/resources/3d/concave_polygon_shape_3d.cpp b/scene/resources/3d/concave_polygon_shape_3d.cpp index ff955d4c6b7..64e5295a0b3 100644 --- a/scene/resources/3d/concave_polygon_shape_3d.cpp +++ b/scene/resources/3d/concave_polygon_shape_3d.cpp @@ -39,7 +39,7 @@ #include "concave_polygon_shape_3d.h" #include "scene/resources/mesh.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" Vector ConcavePolygonShape3D::get_debug_mesh_lines() const { HashSet edges; diff --git a/scene/resources/3d/convex_polygon_shape_3d.cpp b/scene/resources/3d/convex_polygon_shape_3d.cpp index faf0e49ea57..48b0be49bb5 100644 --- a/scene/resources/3d/convex_polygon_shape_3d.cpp +++ b/scene/resources/3d/convex_polygon_shape_3d.cpp @@ -39,7 +39,7 @@ #include "convex_polygon_shape_3d.h" #include "core/math/convex_hull.h" #include "scene/resources/mesh.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" Vector ConvexPolygonShape3D::get_debug_mesh_lines() const { Vector poly_points = get_points(); diff --git a/scene/resources/3d/cylinder_shape_3d.cpp b/scene/resources/3d/cylinder_shape_3d.cpp index 57c1e86313a..28f6c3482a1 100644 --- a/scene/resources/3d/cylinder_shape_3d.cpp +++ b/scene/resources/3d/cylinder_shape_3d.cpp @@ -39,7 +39,7 @@ #include "cylinder_shape_3d.h" #include "scene/resources/3d/primitive_meshes.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" Vector CylinderShape3D::get_debug_mesh_lines() const { float c_radius = get_radius(); diff --git a/scene/resources/3d/height_map_shape_3d.cpp b/scene/resources/3d/height_map_shape_3d.cpp index 7094b7174b5..0759b9b5fb4 100644 --- a/scene/resources/3d/height_map_shape_3d.cpp +++ b/scene/resources/3d/height_map_shape_3d.cpp @@ -40,7 +40,7 @@ #include "core/io/image.h" #include "scene/resources/mesh.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" Vector HeightMapShape3D::get_debug_mesh_lines() const { Vector points; diff --git a/scene/resources/3d/mesh_library.h b/scene/resources/3d/mesh_library.h index 44ddb11efef..6c720ff56e1 100644 --- a/scene/resources/3d/mesh_library.h +++ b/scene/resources/3d/mesh_library.h @@ -42,7 +42,7 @@ #include "core/templates/rb_map.h" #include "scene/resources/mesh.h" #include "scene/resources/navigation_mesh.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #ifndef PHYSICS_3D_DISABLED #include "shape_3d.h" diff --git a/scene/resources/3d/primitive_meshes.cpp b/scene/resources/3d/primitive_meshes.cpp index 71eb38bad2d..37a7f07ffe8 100644 --- a/scene/resources/3d/primitive_meshes.cpp +++ b/scene/resources/3d/primitive_meshes.cpp @@ -42,7 +42,7 @@ #include "core/math/math_funcs.h" #include "scene/resources/theme.h" #include "scene/theme/theme_db.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include "thirdparty/misc/polypartition.h" #define PADDING_REF_SIZE 1024.0 diff --git a/scene/resources/3d/primitive_meshes.h b/scene/resources/3d/primitive_meshes.h index 4de77a4238c..f33385ae775 100644 --- a/scene/resources/3d/primitive_meshes.h +++ b/scene/resources/3d/primitive_meshes.h @@ -40,7 +40,7 @@ #include "scene/resources/font.h" #include "scene/resources/mesh.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" /// @todo Probably should change a few integers to unsigned integers... diff --git a/scene/resources/3d/separation_ray_shape_3d.cpp b/scene/resources/3d/separation_ray_shape_3d.cpp index 0a5892a2146..b92b0707291 100644 --- a/scene/resources/3d/separation_ray_shape_3d.cpp +++ b/scene/resources/3d/separation_ray_shape_3d.cpp @@ -39,7 +39,7 @@ #include "separation_ray_shape_3d.h" #include "scene/resources/mesh.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" Vector SeparationRayShape3D::get_debug_mesh_lines() const { Vector points = { diff --git a/scene/resources/3d/shape_3d.cpp b/scene/resources/3d/shape_3d.cpp index f23f8d41ee1..c448fed2102 100644 --- a/scene/resources/3d/shape_3d.cpp +++ b/scene/resources/3d/shape_3d.cpp @@ -40,7 +40,7 @@ #include "scene/main/scene_tree.h" #include "scene/resources/mesh.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" void Shape3D::add_vertices_to_array(Vector &array, const Transform3D &p_xform) { Vector toadd = get_debug_mesh_lines(); diff --git a/scene/resources/3d/sphere_shape_3d.cpp b/scene/resources/3d/sphere_shape_3d.cpp index af2d7bcb4a0..15fcdc2250c 100644 --- a/scene/resources/3d/sphere_shape_3d.cpp +++ b/scene/resources/3d/sphere_shape_3d.cpp @@ -39,7 +39,7 @@ #include "sphere_shape_3d.h" #include "scene/resources/3d/primitive_meshes.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" Vector SphereShape3D::get_debug_mesh_lines() const { float r = get_radius(); diff --git a/scene/resources/3d/world_3d.cpp b/scene/resources/3d/world_3d.cpp index be0182b8e03..320aae0fdf2 100644 --- a/scene/resources/3d/world_3d.cpp +++ b/scene/resources/3d/world_3d.cpp @@ -43,7 +43,7 @@ #include "scene/resources/camera_attributes.h" #include "scene/resources/environment.h" #ifndef NAVIGATION_3D_DISABLED -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" #endif // NAVIGATION_3D_DISABLED void World3D::_register_camera(Camera3D *p_camera) { diff --git a/scene/resources/3d/world_3d.h b/scene/resources/3d/world_3d.h index bfed45bae82..0d80487b1a2 100644 --- a/scene/resources/3d/world_3d.h +++ b/scene/resources/3d/world_3d.h @@ -41,8 +41,9 @@ #include "core/io/resource.h" #include "scene/resources/compositor.h" #include "scene/resources/environment.h" + #ifndef PHYSICS_3D_DISABLED -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" #endif // PHYSICS_3D_DISABLED class CameraAttributes; diff --git a/scene/resources/3d/world_boundary_shape_3d.cpp b/scene/resources/3d/world_boundary_shape_3d.cpp index 554fac6ccd4..3ea97c68dca 100644 --- a/scene/resources/3d/world_boundary_shape_3d.cpp +++ b/scene/resources/3d/world_boundary_shape_3d.cpp @@ -39,7 +39,7 @@ #include "world_boundary_shape_3d.h" #include "scene/resources/mesh.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" Vector WorldBoundaryShape3D::get_debug_mesh_lines() const { Plane p = get_plane(); diff --git a/scene/resources/audio_stream_polyphonic.cpp b/scene/resources/audio_stream_polyphonic.cpp index 917506e63d3..6de47d7e052 100644 --- a/scene/resources/audio_stream_polyphonic.cpp +++ b/scene/resources/audio_stream_polyphonic.cpp @@ -39,7 +39,7 @@ #include "audio_stream_polyphonic.h" #include "audio_stream_polyphonic.compat.inc" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" constexpr uint64_t ID_MASK = 0xFFFFFFFF; constexpr uint64_t INDEX_SHIFT = 32; diff --git a/scene/resources/audio_stream_polyphonic.h b/scene/resources/audio_stream_polyphonic.h index e584af54c71..f95d29b02ae 100644 --- a/scene/resources/audio_stream_polyphonic.h +++ b/scene/resources/audio_stream_polyphonic.h @@ -40,8 +40,8 @@ #include "core/templates/local_vector.h" #include "scene/scene_string_names.h" +#include "servers/audio/audio_server.h" #include "servers/audio/audio_stream.h" -#include "servers/audio_server.h" class AudioStreamPolyphonic : public AudioStream { GDCLASS(AudioStreamPolyphonic, AudioStream) diff --git a/scene/resources/camera_attributes.cpp b/scene/resources/camera_attributes.cpp index e658b02685e..26eb8ada06a 100644 --- a/scene/resources/camera_attributes.cpp +++ b/scene/resources/camera_attributes.cpp @@ -39,7 +39,7 @@ #include "camera_attributes.h" #include "core/config/project_settings.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" void CameraAttributes::set_exposure_multiplier(float p_multiplier) { exposure_multiplier = p_multiplier; diff --git a/scene/resources/compositor.cpp b/scene/resources/compositor.cpp index c02e947d7c4..8bc02170c94 100644 --- a/scene/resources/compositor.cpp +++ b/scene/resources/compositor.cpp @@ -38,7 +38,7 @@ #include "compositor.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" /* Compositor Effect */ diff --git a/scene/resources/environment.cpp b/scene/resources/environment.cpp index d945f181275..0c93fcaed1b 100644 --- a/scene/resources/environment.cpp +++ b/scene/resources/environment.cpp @@ -40,7 +40,7 @@ #include "core/config/project_settings.h" #include "scene/resources/gradient_texture.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" RID Environment::get_rid() const { return environment; diff --git a/scene/resources/font.h b/scene/resources/font.h index faed83d5d5a..0fcaf6e6ade 100644 --- a/scene/resources/font.h +++ b/scene/resources/font.h @@ -41,7 +41,7 @@ #include "core/io/resource.h" #include "core/templates/lru.h" #include "scene/resources/texture.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" class TextLine; class TextParagraph; diff --git a/scene/resources/material.h b/scene/resources/material.h index 7afcb5d3492..f53ea74dced 100644 --- a/scene/resources/material.h +++ b/scene/resources/material.h @@ -42,7 +42,7 @@ #include "core/templates/self_list.h" #include "scene/resources/shader.h" #include "scene/resources/texture.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class Material : public Resource { GDCLASS(Material, Resource); diff --git a/scene/resources/mesh.h b/scene/resources/mesh.h index 2f0411116ba..7417d8f2b53 100644 --- a/scene/resources/mesh.h +++ b/scene/resources/mesh.h @@ -42,7 +42,7 @@ #include "core/math/face3.h" #include "core/math/triangle_mesh.h" #include "scene/resources/material.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #ifndef PHYSICS_3D_DISABLED #include "scene/resources/3d/shape_3d.h" diff --git a/scene/resources/multimesh.cpp b/scene/resources/multimesh.cpp index 7e72cdbaf2e..be0322e6a9d 100644 --- a/scene/resources/multimesh.cpp +++ b/scene/resources/multimesh.cpp @@ -38,7 +38,7 @@ #include "multimesh.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #ifndef DISABLE_DEPRECATED // Kept for compatibility from 3.x to 4.0. diff --git a/scene/resources/multimesh.h b/scene/resources/multimesh.h index 3cf90a9d9fa..e4cfe587b6c 100644 --- a/scene/resources/multimesh.h +++ b/scene/resources/multimesh.h @@ -39,7 +39,7 @@ */ #include "scene/resources/mesh.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class MultiMesh : public Resource { GDCLASS(MultiMesh, Resource); diff --git a/scene/resources/navigation_mesh.cpp b/scene/resources/navigation_mesh.cpp index 5540d3e245f..7167447fbfe 100644 --- a/scene/resources/navigation_mesh.cpp +++ b/scene/resources/navigation_mesh.cpp @@ -39,7 +39,7 @@ #include "navigation_mesh.h" #ifdef DEBUG_ENABLED -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" #endif // DEBUG_ENABLED void NavigationMesh::create_from_mesh(const Ref &p_mesh) { diff --git a/scene/resources/navigation_mesh.h b/scene/resources/navigation_mesh.h index 92feb1c4adb..c2bf5e34d1f 100644 --- a/scene/resources/navigation_mesh.h +++ b/scene/resources/navigation_mesh.h @@ -40,7 +40,7 @@ #include "core/os/rw_lock.h" #include "scene/resources/mesh.h" -#include "servers/navigation/navigation_globals.h" +#include "servers/navigation_3d/navigation_constants_3d.h" class NavigationMesh : public Resource { GDCLASS(NavigationMesh, Resource); diff --git a/scene/resources/shader.cpp b/scene/resources/shader.cpp index fdaa6822e6a..18196fad48b 100644 --- a/scene/resources/shader.cpp +++ b/scene/resources/shader.cpp @@ -41,9 +41,9 @@ #include "core/io/file_access.h" #include "scene/main/scene_tree.h" +#include "servers/rendering/rendering_server.h" #include "servers/rendering/shader_language.h" #include "servers/rendering/shader_preprocessor.h" -#include "servers/rendering_server.h" #include "texture.h" #ifdef TOOLS_ENABLED diff --git a/scene/resources/style_box_flat.cpp b/scene/resources/style_box_flat.cpp index afd0b60fff4..598c4845688 100644 --- a/scene/resources/style_box_flat.cpp +++ b/scene/resources/style_box_flat.cpp @@ -40,7 +40,7 @@ #include "scene/main/scene_tree.h" #include "scene/main/window.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" float StyleBoxFlat::get_style_margin(Side p_side) const { ERR_FAIL_INDEX_V((int)p_side, 4, 0.0); diff --git a/scene/resources/style_box_line.cpp b/scene/resources/style_box_line.cpp index 5dd0c291dd7..bdeaca195c0 100644 --- a/scene/resources/style_box_line.cpp +++ b/scene/resources/style_box_line.cpp @@ -38,7 +38,7 @@ #include "style_box_line.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" float StyleBoxLine::get_style_margin(Side p_side) const { ERR_FAIL_INDEX_V((int)p_side, 4, 0); diff --git a/scene/resources/text_line.h b/scene/resources/text_line.h index 9b139189cb5..47249d1fe5c 100644 --- a/scene/resources/text_line.h +++ b/scene/resources/text_line.h @@ -39,7 +39,7 @@ */ #include "scene/resources/font.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" /*************************************************************************/ diff --git a/scene/resources/text_paragraph.h b/scene/resources/text_paragraph.h index c279a174b41..5bc666a4844 100644 --- a/scene/resources/text_paragraph.h +++ b/scene/resources/text_paragraph.h @@ -40,7 +40,7 @@ #include "core/templates/local_vector.h" #include "scene/resources/font.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" /*************************************************************************/ diff --git a/scene/resources/texture.h b/scene/resources/texture.h index 92f6bb7cbd8..88d7fcf1b3d 100644 --- a/scene/resources/texture.h +++ b/scene/resources/texture.h @@ -42,8 +42,8 @@ #include "core/math/rect2.h" #include "scene/resources/curve.h" #include "scene/resources/gradient.h" -#include "servers/camera_server.h" -#include "servers/rendering_server.h" +#include "servers/camera/camera_server.h" +#include "servers/rendering/rendering_server.h" class Texture : public Resource { GDCLASS(Texture, Resource); diff --git a/scene/resources/world_2d.cpp b/scene/resources/world_2d.cpp index 87a09ace346..69b01ae47f8 100644 --- a/scene/resources/world_2d.cpp +++ b/scene/resources/world_2d.cpp @@ -40,10 +40,10 @@ #include "core/config/project_settings.h" #include "scene/2d/visible_on_screen_notifier_2d.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #ifndef NAVIGATION_2D_DISABLED -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" #endif // NAVIGATION_2D_DISABLED RID World2D::get_canvas() const { diff --git a/scene/resources/world_2d.h b/scene/resources/world_2d.h index ab392f250d9..4e5b2b9ede0 100644 --- a/scene/resources/world_2d.h +++ b/scene/resources/world_2d.h @@ -41,7 +41,7 @@ #include "core/io/resource.h" #ifndef PHYSICS_2D_DISABLED -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" #endif // PHYSICS_2D_DISABLED class VisibleOnScreenNotifier2D; diff --git a/scene/theme/default_theme.cpp b/scene/theme/default_theme.cpp index f1bea5f07b2..eca48f3453a 100644 --- a/scene/theme/default_theme.cpp +++ b/scene/theme/default_theme.cpp @@ -49,7 +49,7 @@ #include "scene/scene_string_names.h" #include "scene/theme/default_theme_icons.gen.h" #include "scene/theme/theme_db.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" #ifdef BROTLI_ENABLED #include "scene/theme/default_font.gen.h" diff --git a/scene/theme/theme_db.cpp b/scene/theme/theme_db.cpp index c421dfad685..82532f9d372 100644 --- a/scene/theme/theme_db.cpp +++ b/scene/theme/theme_db.cpp @@ -47,7 +47,7 @@ #include "scene/resources/style_box.h" #include "scene/resources/texture.h" #include "scene/theme/default_theme.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" // Default engine theme creation and configuration. diff --git a/scu_builders.py b/scu_builders.py index 30b060ae476..86c0e2fdf60 100644 --- a/scu_builders.py +++ b/scu_builders.py @@ -386,7 +386,8 @@ def generate_scu_files(max_includes_per_scu): process_folder(["servers/rendering/renderer_rd/forward_mobile"]) process_folder(["servers/audio"]) process_folder(["servers/audio/effects"]) - process_folder(["servers/navigation"]) + process_folder(["servers/navigation_2d"]) + process_folder(["servers/navigation_3d"]) process_folder(["servers/xr"]) # Finally change back the path to the calling folder diff --git a/servers/SCsub b/servers/SCsub index 88fddce580a..a2ee659f35f 100644 --- a/servers/SCsub +++ b/servers/SCsub @@ -5,35 +5,26 @@ Import("env") env.servers_sources = [] -env.add_source_files(env.servers_sources, "audio_server.cpp") -env.add_source_files(env.servers_sources, "camera_server.cpp") -env.add_source_files(env.servers_sources, "display_server.cpp") -env.add_source_files(env.servers_sources, "navigation_server_2d.cpp") -env.add_source_files(env.servers_sources, "navigation_server_3d.cpp") env.add_source_files(env.servers_sources, "register_server_types.cpp") -env.add_source_files(env.servers_sources, "rendering_server.cpp") -env.add_source_files(env.servers_sources, "text_server.cpp") SConscript("audio/SCsub") SConscript("camera/SCsub") SConscript("debugger/SCsub") SConscript("display/SCsub") -SConscript("extensions/SCsub") SConscript("movie_writer/SCsub") -SConscript("navigation/SCsub") SConscript("rendering/SCsub") SConscript("text/SCsub") +if not env["disable_navigation_2d"]: + SConscript("navigation_2d/SCsub") if not env["disable_physics_2d"]: - env.add_source_files(env.servers_sources, "physics_server_2d.cpp") - env.add_source_files(env.servers_sources, "physics_server_2d_wrap_mt.cpp") + SConscript("physics_2d/SCsub") +if not env["disable_navigation_3d"]: + SConscript("navigation_3d/SCsub") if not env["disable_physics_3d"]: - env.add_source_files(env.servers_sources, "physics_server_3d.cpp") - env.add_source_files(env.servers_sources, "physics_server_3d_wrap_mt.cpp") - + SConscript("physics_3d/SCsub") if not env["disable_xr"]: - env.add_source_files(env.servers_sources, "xr_server.cpp") SConscript("xr/SCsub") lib = env.add_library("servers", env.servers_sources) diff --git a/servers/audio/audio_driver_dummy.h b/servers/audio/audio_driver_dummy.h index ce2a0a8c57d..b681832ac0b 100644 --- a/servers/audio/audio_driver_dummy.h +++ b/servers/audio/audio_driver_dummy.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #include "core/os/mutex.h" #include "core/os/thread.h" diff --git a/servers/audio_server.cpp b/servers/audio/audio_server.cpp similarity index 100% rename from servers/audio_server.cpp rename to servers/audio/audio_server.cpp diff --git a/servers/audio_server.h b/servers/audio/audio_server.h similarity index 100% rename from servers/audio_server.h rename to servers/audio/audio_server.h diff --git a/servers/audio/audio_stream.h b/servers/audio/audio_stream.h index 7db209fe0e6..08e3b495833 100644 --- a/servers/audio/audio_stream.h +++ b/servers/audio/audio_stream.h @@ -40,7 +40,7 @@ #include "core/io/resource.h" #include "scene/property_list_helper.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" #include "core/object/gdvirtual.gen.inc" #include "core/variant/native_ptr.h" diff --git a/servers/audio/effects/audio_effect_capture.cpp b/servers/audio/effects/audio_effect_capture.cpp index 980000e144c..6a871b1d878 100644 --- a/servers/audio/effects/audio_effect_capture.cpp +++ b/servers/audio/effects/audio_effect_capture.cpp @@ -38,7 +38,7 @@ #include "audio_effect_capture.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" bool AudioEffectCapture::can_get_buffer(int p_frames) const { return buffer.data_left() >= p_frames; diff --git a/servers/audio/effects/audio_effect_chorus.cpp b/servers/audio/effects/audio_effect_chorus.cpp index 13a6c49d791..885f4b16cab 100644 --- a/servers/audio/effects/audio_effect_chorus.cpp +++ b/servers/audio/effects/audio_effect_chorus.cpp @@ -38,7 +38,7 @@ #include "audio_effect_chorus.h" #include "core/math/math_funcs.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" void AudioEffectChorusInstance::process(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) { int todo = p_frame_count; diff --git a/servers/audio/effects/audio_effect_compressor.cpp b/servers/audio/effects/audio_effect_compressor.cpp index b7cad694082..baf2483d931 100644 --- a/servers/audio/effects/audio_effect_compressor.cpp +++ b/servers/audio/effects/audio_effect_compressor.cpp @@ -37,7 +37,7 @@ */ #include "audio_effect_compressor.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" void AudioEffectCompressorInstance::process(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) { float threshold = Math::db_to_linear(base->threshold); diff --git a/servers/audio/effects/audio_effect_delay.cpp b/servers/audio/effects/audio_effect_delay.cpp index ec643febecf..04a772d7743 100644 --- a/servers/audio/effects/audio_effect_delay.cpp +++ b/servers/audio/effects/audio_effect_delay.cpp @@ -39,7 +39,7 @@ #include "audio_effect_delay.h" #include "core/math/math_funcs.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" void AudioEffectDelayInstance::process(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) { int todo = p_frame_count; diff --git a/servers/audio/effects/audio_effect_distortion.cpp b/servers/audio/effects/audio_effect_distortion.cpp index 7ed1839cff0..30cd037a216 100644 --- a/servers/audio/effects/audio_effect_distortion.cpp +++ b/servers/audio/effects/audio_effect_distortion.cpp @@ -38,7 +38,7 @@ #include "audio_effect_distortion.h" #include "core/math/math_funcs.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" void AudioEffectDistortionInstance::process(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) { const float *src = (const float *)p_src_frames; diff --git a/servers/audio/effects/audio_effect_eq.cpp b/servers/audio/effects/audio_effect_eq.cpp index 341223133c7..d508c28e3ff 100644 --- a/servers/audio/effects/audio_effect_eq.cpp +++ b/servers/audio/effects/audio_effect_eq.cpp @@ -38,7 +38,7 @@ #include "audio_effect_eq.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" void AudioEffectEQInstance::process(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) { int band_count = bands[0].size(); diff --git a/servers/audio/effects/audio_effect_filter.cpp b/servers/audio/effects/audio_effect_filter.cpp index c00e4123bf0..f42ca26b9c8 100644 --- a/servers/audio/effects/audio_effect_filter.cpp +++ b/servers/audio/effects/audio_effect_filter.cpp @@ -37,7 +37,7 @@ */ #include "audio_effect_filter.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" template void AudioEffectFilterInstance::_process_filter(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) { diff --git a/servers/audio/effects/audio_effect_hard_limiter.cpp b/servers/audio/effects/audio_effect_hard_limiter.cpp index e5470a331a7..bae8e220d2e 100644 --- a/servers/audio/effects/audio_effect_hard_limiter.cpp +++ b/servers/audio/effects/audio_effect_hard_limiter.cpp @@ -38,7 +38,7 @@ #include "audio_effect_hard_limiter.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" void AudioEffectHardLimiterInstance::process(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) { float sample_rate = AudioServer::get_singleton()->get_mix_rate(); diff --git a/servers/audio/effects/audio_effect_phaser.cpp b/servers/audio/effects/audio_effect_phaser.cpp index 8643422c4da..675d6ba1ff3 100644 --- a/servers/audio/effects/audio_effect_phaser.cpp +++ b/servers/audio/effects/audio_effect_phaser.cpp @@ -37,7 +37,7 @@ */ #include "audio_effect_phaser.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" void AudioEffectPhaserInstance::process(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) { float sampling_rate = AudioServer::get_singleton()->get_mix_rate(); diff --git a/servers/audio/effects/audio_effect_pitch_shift.cpp b/servers/audio/effects/audio_effect_pitch_shift.cpp index 66f26b1c8b9..4f110278985 100644 --- a/servers/audio/effects/audio_effect_pitch_shift.cpp +++ b/servers/audio/effects/audio_effect_pitch_shift.cpp @@ -72,7 +72,7 @@ #include "audio_effect_pitch_shift.h" #include "core/math/math_funcs.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" /* Thirdparty code, so disable clang-format with Redot style */ /* clang-format off */ diff --git a/servers/audio/effects/audio_effect_record.h b/servers/audio/effects/audio_effect_record.h index 26e52249f28..1557d2a1775 100644 --- a/servers/audio/effects/audio_effect_record.h +++ b/servers/audio/effects/audio_effect_record.h @@ -41,7 +41,7 @@ #include "core/os/thread.h" #include "scene/resources/audio_stream_wav.h" #include "servers/audio/audio_effect.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" class AudioEffectRecord; diff --git a/servers/audio/effects/audio_effect_reverb.cpp b/servers/audio/effects/audio_effect_reverb.cpp index e61cd4e4c59..b7ed37b396f 100644 --- a/servers/audio/effects/audio_effect_reverb.cpp +++ b/servers/audio/effects/audio_effect_reverb.cpp @@ -37,7 +37,9 @@ */ #include "audio_effect_reverb.h" -#include "servers/audio_server.h" + +#include "servers/audio/audio_server.h" + void AudioEffectReverbInstance::process(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) { for (int i = 0; i < 2; i++) { Reverb &r = reverb[i]; diff --git a/servers/audio/effects/audio_effect_spectrum_analyzer.cpp b/servers/audio/effects/audio_effect_spectrum_analyzer.cpp index 3d85ff3a506..026a1200fd4 100644 --- a/servers/audio/effects/audio_effect_spectrum_analyzer.cpp +++ b/servers/audio/effects/audio_effect_spectrum_analyzer.cpp @@ -37,7 +37,7 @@ */ #include "audio_effect_spectrum_analyzer.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" /** * FFT routine, @copyright (C)1996 S.M.Bernsee. Sign = -1 is FFT, 1 is iFFT (inverse) diff --git a/servers/audio/effects/audio_effect_stereo_enhance.cpp b/servers/audio/effects/audio_effect_stereo_enhance.cpp index 772a07d92e4..52341507b92 100644 --- a/servers/audio/effects/audio_effect_stereo_enhance.cpp +++ b/servers/audio/effects/audio_effect_stereo_enhance.cpp @@ -38,7 +38,7 @@ #include "audio_effect_stereo_enhance.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" void AudioEffectStereoEnhanceInstance::process(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) { float intensity = base->pan_pullout; diff --git a/servers/camera/camera_feed.cpp b/servers/camera/camera_feed.cpp index db579bae90c..9bceacc1e2b 100644 --- a/servers/camera/camera_feed.cpp +++ b/servers/camera/camera_feed.cpp @@ -38,7 +38,7 @@ #include "camera_feed.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" void CameraFeed::_bind_methods() { ClassDB::bind_method(D_METHOD("get_id"), &CameraFeed::get_id); diff --git a/servers/camera/camera_feed.h b/servers/camera/camera_feed.h index f48e8c58f06..0148b9b451c 100644 --- a/servers/camera/camera_feed.h +++ b/servers/camera/camera_feed.h @@ -40,7 +40,7 @@ #include "core/io/image.h" #include "core/math/transform_2d.h" -#include "servers/camera_server.h" +#include "servers/camera/camera_server.h" /** The camera server is a singleton object that gives access to the various diff --git a/servers/camera_server.cpp b/servers/camera/camera_server.cpp similarity index 99% rename from servers/camera_server.cpp rename to servers/camera/camera_server.cpp index b49dc79e29a..5a8a6d481c0 100644 --- a/servers/camera_server.cpp +++ b/servers/camera/camera_server.cpp @@ -37,9 +37,10 @@ */ #include "camera_server.h" + #include "core/variant/typed_array.h" -#include "rendering_server.h" #include "servers/camera/camera_feed.h" +#include "servers/rendering/rendering_server.h" //////////////////////////////////////////////////////// // CameraServer diff --git a/servers/camera_server.h b/servers/camera/camera_server.h similarity index 100% rename from servers/camera_server.h rename to servers/camera/camera_server.h diff --git a/servers/debugger/servers_debugger.cpp b/servers/debugger/servers_debugger.cpp index 87213a10248..eb3bf467238 100644 --- a/servers/debugger/servers_debugger.cpp +++ b/servers/debugger/servers_debugger.cpp @@ -43,7 +43,7 @@ #include "core/debugger/engine_profiler.h" #include "core/io/resource_loader.h" #include "core/object/script_language.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #define CHECK_SIZE(arr, expected, what) ERR_FAIL_COND_V_MSG((uint32_t)arr.size() < (uint32_t)(expected), false, String("Malformed ") + what + " message from script debugger, message too short. Expected size: " + itos(expected) + ", actual size: " + itos(arr.size())) #define CHECK_END(arr, expected, what) ERR_FAIL_COND_V_MSG((uint32_t)arr.size() > (uint32_t)expected, false, String("Malformed ") + what + " message from script debugger, message too long. Expected size: " + itos(expected) + ", actual size: " + itos(arr.size())) diff --git a/servers/debugger/servers_debugger.h b/servers/debugger/servers_debugger.h index 4c697849795..a24b4856658 100644 --- a/servers/debugger/servers_debugger.h +++ b/servers/debugger/servers_debugger.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class ServersDebugger { public: diff --git a/servers/display_server.compat.inc b/servers/display/display_server.compat.inc similarity index 100% rename from servers/display_server.compat.inc rename to servers/display/display_server.compat.inc diff --git a/servers/display_server.cpp b/servers/display/display_server.cpp similarity index 99% rename from servers/display_server.cpp rename to servers/display/display_server.cpp index 553759b44a0..271a119f06d 100644 --- a/servers/display_server.cpp +++ b/servers/display/display_server.cpp @@ -41,7 +41,7 @@ #include "core/input/input.h" #include "scene/resources/texture.h" -#include "servers/display_server_headless.h" +#include "servers/display/display_server_headless.h" #if defined(VULKAN_ENABLED) #include "drivers/vulkan/rendering_context_driver_vulkan.h" diff --git a/servers/display_server.h b/servers/display/display_server.h similarity index 99% rename from servers/display_server.h rename to servers/display/display_server.h index 8153135787a..354118608fe 100644 --- a/servers/display_server.h +++ b/servers/display/display_server.h @@ -43,8 +43,7 @@ #include "core/io/resource.h" #include "core/os/os.h" #include "core/variant/callable.h" - -#include "display/native_menu.h" +#include "servers/display/native_menu.h" class Texture2D; class AccessibilityDriver; diff --git a/servers/display_server_headless.h b/servers/display/display_server_headless.h similarity index 99% rename from servers/display_server_headless.h rename to servers/display/display_server_headless.h index 93e4ad35d6d..c196f77e84b 100644 --- a/servers/display_server_headless.h +++ b/servers/display/display_server_headless.h @@ -38,8 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/display_server.h" - +#include "servers/display/display_server.h" #include "servers/rendering/dummy/rasterizer_dummy.h" class DisplayServerHeadless : public DisplayServer { diff --git a/servers/extensions/SCsub b/servers/extensions/SCsub deleted file mode 100644 index e7bb57e9f3f..00000000000 --- a/servers/extensions/SCsub +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python -from misc.utility.scons_hints import * - -Import("env") - -env_object = env.Clone() - -env_object.add_source_files(env.servers_sources, "physics_server_2d_extension.cpp") - -if not env["disable_3d"]: - env_object.add_source_files(env.servers_sources, "physics_server_3d_extension.cpp") diff --git a/servers/movie_writer/movie_writer.cpp b/servers/movie_writer/movie_writer.cpp index cf0d350e6d4..aaeca072ad9 100644 --- a/servers/movie_writer/movie_writer.cpp +++ b/servers/movie_writer/movie_writer.cpp @@ -42,8 +42,8 @@ #include "core/os/time.h" #include "scene/main/window.h" #include "servers/audio/audio_driver_dummy.h" -#include "servers/display_server.h" -#include "servers/rendering_server.h" +#include "servers/display/display_server.h" +#include "servers/rendering/rendering_server.h" MovieWriter *MovieWriter::writers[MovieWriter::MAX_WRITERS]; uint32_t MovieWriter::writer_count = 0; diff --git a/servers/movie_writer/movie_writer.h b/servers/movie_writer/movie_writer.h index 5c42fbdbf00..8572b8c007b 100644 --- a/servers/movie_writer/movie_writer.h +++ b/servers/movie_writer/movie_writer.h @@ -40,7 +40,7 @@ #include "core/io/image.h" #include "core/templates/local_vector.h" -#include "servers/audio_server.h" +#include "servers/audio/audio_server.h" class MovieWriter : public Object { GDCLASS(MovieWriter, Object); diff --git a/servers/navigation/nav_heap.h b/servers/nav_heap.h similarity index 98% rename from servers/navigation/nav_heap.h rename to servers/nav_heap.h index 15a5c305046..1fd7254d474 100644 --- a/servers/navigation/nav_heap.h +++ b/servers/nav_heap.h @@ -40,6 +40,8 @@ #include "core/templates/local_vector.h" +// This file contains Heap which is used by both 2D and 3D navigation. + template struct NoopIndexer { void operator()(const T &p_value, uint32_t p_index) {} diff --git a/servers/navigation/SCsub b/servers/navigation/SCsub deleted file mode 100644 index 57335c928fa..00000000000 --- a/servers/navigation/SCsub +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env python -from misc.utility.scons_hints import * - -Import("env") - -if not env["disable_navigation_2d"]: - env.add_source_files(env.servers_sources, "navigation_path_query_parameters_2d.cpp") - env.add_source_files(env.servers_sources, "navigation_path_query_result_2d.cpp") - -if not env["disable_navigation_3d"]: - env.add_source_files(env.servers_sources, "navigation_path_query_parameters_3d.cpp") - env.add_source_files(env.servers_sources, "navigation_path_query_result_3d.cpp") diff --git a/servers/navigation_2d/SCsub b/servers/navigation_2d/SCsub new file mode 100644 index 00000000000..98f918b2458 --- /dev/null +++ b/servers/navigation_2d/SCsub @@ -0,0 +1,6 @@ +#!/usr/bin/env python +from misc.utility.scons_hints import * + +Import("env") + +env.add_source_files(env.servers_sources, "*.cpp") diff --git a/servers/navigation/navigation_utilities.h b/servers/navigation_2d/navigation_constants_2d.h similarity index 75% rename from servers/navigation/navigation_utilities.h rename to servers/navigation_2d/navigation_constants_2d.h index ad7258172b1..e8ebd4d90ec 100644 --- a/servers/navigation/navigation_utilities.h +++ b/servers/navigation_2d/navigation_constants_2d.h @@ -1,5 +1,5 @@ /**************************************************************************/ -/* navigation_utilities.h */ +/* navigation_constants_2d.h */ /**************************************************************************/ /* This file is part of: */ /* REDOT ENGINE */ @@ -41,7 +41,7 @@ #include "core/math/vector3.h" #include "core/variant/typed_array.h" -namespace NavigationUtilities { +namespace NavigationEnums2D { enum PathfindingAlgorithm { PATHFINDING_ALGORITHM_ASTAR = 0, @@ -66,4 +66,30 @@ enum PathMetadataFlags { PATH_INCLUDE_ALL = PATH_INCLUDE_TYPES | PATH_INCLUDE_RIDS | PATH_INCLUDE_OWNERS }; -} //namespace NavigationUtilities +} //namespace NavigationEnums2D + +namespace NavigationDefaults2D { + +// Rasterization. + +// Same as in 3D but larger since 1px is treated as 1m. +constexpr float NAV_MESH_CELL_SIZE = 1.0f; // Must match ProjectSettings default 2D cell_size. +constexpr float NAV_MESH_CELL_SIZE_MIN = 0.01f; +constexpr const char *const NAV_MESH_CELL_SIZE_HINT = "0.001,100,0.001,or_greater"; + +// Map. + +constexpr float EDGE_CONNECTION_MARGIN = 1.0f; +constexpr float LINK_CONNECTION_RADIUS = 4.0f; +constexpr int path_search_max_polygons = 4096; + +// Agent. + +constexpr float AVOIDANCE_AGENT_RADIUS = 10.0; +constexpr float AVOIDANCE_AGENT_MAX_SPEED = 100.0; +constexpr float AVOIDANCE_AGENT_TIME_HORIZON_AGENTS = 1.0; +constexpr float AVOIDANCE_AGENT_TIME_HORIZON_OBSTACLES = 0.0; +constexpr int AVOIDANCE_AGENT_MAX_NEIGHBORS = 10; +constexpr float AVOIDANCE_AGENT_NEIGHBOR_DISTANCE = 500.0; + +} //namespace NavigationDefaults2D diff --git a/servers/navigation/navigation_path_query_parameters_2d.cpp b/servers/navigation_2d/navigation_path_query_parameters_2d.cpp similarity index 99% rename from servers/navigation/navigation_path_query_parameters_2d.cpp rename to servers/navigation_2d/navigation_path_query_parameters_2d.cpp index 6f0f1fb51d7..d0113abe337 100644 --- a/servers/navigation/navigation_path_query_parameters_2d.cpp +++ b/servers/navigation_2d/navigation_path_query_parameters_2d.cpp @@ -38,6 +38,8 @@ #include "navigation_path_query_parameters_2d.h" +#include "core/variant/typed_array.h" + void NavigationPathQueryParameters2D::set_pathfinding_algorithm(const NavigationPathQueryParameters2D::PathfindingAlgorithm p_pathfinding_algorithm) { pathfinding_algorithm = p_pathfinding_algorithm; } diff --git a/servers/navigation/navigation_path_query_parameters_2d.h b/servers/navigation_2d/navigation_path_query_parameters_2d.h similarity index 85% rename from servers/navigation/navigation_path_query_parameters_2d.h rename to servers/navigation_2d/navigation_path_query_parameters_2d.h index edc4823d6ef..1b9dd415125 100644 --- a/servers/navigation/navigation_path_query_parameters_2d.h +++ b/servers/navigation_2d/navigation_path_query_parameters_2d.h @@ -39,8 +39,7 @@ */ #include "core/object/ref_counted.h" -#include "servers/navigation/navigation_globals.h" -#include "servers/navigation/navigation_utilities.h" +#include "servers/navigation_2d/navigation_constants_2d.h" class NavigationPathQueryParameters2D : public RefCounted { GDCLASS(NavigationPathQueryParameters2D, RefCounted); @@ -50,21 +49,21 @@ class NavigationPathQueryParameters2D : public RefCounted { public: enum PathfindingAlgorithm { - PATHFINDING_ALGORITHM_ASTAR = NavigationUtilities::PATHFINDING_ALGORITHM_ASTAR, + PATHFINDING_ALGORITHM_ASTAR = NavigationEnums2D::PATHFINDING_ALGORITHM_ASTAR, }; enum PathPostProcessing { - PATH_POSTPROCESSING_CORRIDORFUNNEL = NavigationUtilities::PATH_POSTPROCESSING_CORRIDORFUNNEL, - PATH_POSTPROCESSING_EDGECENTERED = NavigationUtilities::PATH_POSTPROCESSING_EDGECENTERED, - PATH_POSTPROCESSING_NONE = NavigationUtilities::PATH_POSTPROCESSING_NONE, + PATH_POSTPROCESSING_CORRIDORFUNNEL = NavigationEnums2D::PATH_POSTPROCESSING_CORRIDORFUNNEL, + PATH_POSTPROCESSING_EDGECENTERED = NavigationEnums2D::PATH_POSTPROCESSING_EDGECENTERED, + PATH_POSTPROCESSING_NONE = NavigationEnums2D::PATH_POSTPROCESSING_NONE, }; enum PathMetadataFlags { - PATH_METADATA_INCLUDE_NONE = NavigationUtilities::PathMetadataFlags::PATH_INCLUDE_NONE, - PATH_METADATA_INCLUDE_TYPES = NavigationUtilities::PathMetadataFlags::PATH_INCLUDE_TYPES, - PATH_METADATA_INCLUDE_RIDS = NavigationUtilities::PathMetadataFlags::PATH_INCLUDE_RIDS, - PATH_METADATA_INCLUDE_OWNERS = NavigationUtilities::PathMetadataFlags::PATH_INCLUDE_OWNERS, - PATH_METADATA_INCLUDE_ALL = NavigationUtilities::PathMetadataFlags::PATH_INCLUDE_ALL + PATH_METADATA_INCLUDE_NONE = NavigationEnums2D::PathMetadataFlags::PATH_INCLUDE_NONE, + PATH_METADATA_INCLUDE_TYPES = NavigationEnums2D::PathMetadataFlags::PATH_INCLUDE_TYPES, + PATH_METADATA_INCLUDE_RIDS = NavigationEnums2D::PathMetadataFlags::PATH_INCLUDE_RIDS, + PATH_METADATA_INCLUDE_OWNERS = NavigationEnums2D::PathMetadataFlags::PATH_INCLUDE_OWNERS, + PATH_METADATA_INCLUDE_ALL = NavigationEnums2D::PathMetadataFlags::PATH_INCLUDE_ALL }; private: diff --git a/servers/navigation/navigation_path_query_result_2d.cpp b/servers/navigation_2d/navigation_path_query_result_2d.cpp similarity index 100% rename from servers/navigation/navigation_path_query_result_2d.cpp rename to servers/navigation_2d/navigation_path_query_result_2d.cpp diff --git a/servers/navigation/navigation_path_query_result_2d.h b/servers/navigation_2d/navigation_path_query_result_2d.h similarity index 92% rename from servers/navigation/navigation_path_query_result_2d.h rename to servers/navigation_2d/navigation_path_query_result_2d.h index f12763db940..19ebd278a92 100644 --- a/servers/navigation/navigation_path_query_result_2d.h +++ b/servers/navigation_2d/navigation_path_query_result_2d.h @@ -39,7 +39,8 @@ */ #include "core/object/ref_counted.h" -#include "servers/navigation/navigation_utilities.h" +#include "core/variant/typed_array.h" +#include "servers/navigation_2d/navigation_constants_2d.h" class NavigationPathQueryResult2D : public RefCounted { GDCLASS(NavigationPathQueryResult2D, RefCounted); @@ -55,8 +56,8 @@ class NavigationPathQueryResult2D : public RefCounted { public: enum PathSegmentType { - PATH_SEGMENT_TYPE_REGION = NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_REGION, - PATH_SEGMENT_TYPE_LINK = NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_LINK, + PATH_SEGMENT_TYPE_REGION = NavigationEnums2D::PathSegmentType::PATH_SEGMENT_TYPE_REGION, + PATH_SEGMENT_TYPE_LINK = NavigationEnums2D::PathSegmentType::PATH_SEGMENT_TYPE_LINK, }; void set_path(const Vector &p_path); diff --git a/servers/navigation_server_2d.compat.inc b/servers/navigation_2d/navigation_server_2d.compat.inc similarity index 100% rename from servers/navigation_server_2d.compat.inc rename to servers/navigation_2d/navigation_server_2d.compat.inc diff --git a/servers/navigation_server_2d.cpp b/servers/navigation_2d/navigation_server_2d.cpp similarity index 99% rename from servers/navigation_server_2d.cpp rename to servers/navigation_2d/navigation_server_2d.cpp index 4ead91bc9bb..839de8f6f2c 100644 --- a/servers/navigation_server_2d.cpp +++ b/servers/navigation_2d/navigation_server_2d.cpp @@ -41,8 +41,7 @@ #include "core/config/project_settings.h" #include "scene/main/node.h" -#include "servers/navigation/navigation_globals.h" -#include "servers/navigation_server_2d_dummy.h" +#include "servers/navigation_2d/navigation_server_2d_dummy.h" NavigationServer2D *NavigationServer2D::singleton = nullptr; diff --git a/servers/navigation_server_2d.h b/servers/navigation_2d/navigation_server_2d.h similarity index 99% rename from servers/navigation_server_2d.h rename to servers/navigation_2d/navigation_server_2d.h index 8e0ce1114e0..393f1b81d60 100644 --- a/servers/navigation_server_2d.h +++ b/servers/navigation_2d/navigation_server_2d.h @@ -43,8 +43,8 @@ #include "scene/resources/2d/navigation_mesh_source_geometry_data_2d.h" #include "scene/resources/2d/navigation_polygon.h" -#include "servers/navigation/navigation_path_query_parameters_2d.h" -#include "servers/navigation/navigation_path_query_result_2d.h" +#include "servers/navigation_2d/navigation_path_query_parameters_2d.h" +#include "servers/navigation_2d/navigation_path_query_result_2d.h" #ifdef CLIPPER2_ENABLED class NavMeshGenerator2D; diff --git a/servers/navigation_server_2d_dummy.h b/servers/navigation_2d/navigation_server_2d_dummy.h similarity index 99% rename from servers/navigation_server_2d_dummy.h rename to servers/navigation_2d/navigation_server_2d_dummy.h index c181da5fc39..70d6a271a25 100644 --- a/servers/navigation_server_2d_dummy.h +++ b/servers/navigation_2d/navigation_server_2d_dummy.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" class NavigationServer2DDummy : public NavigationServer2D { GDCLASS(NavigationServer2DDummy, NavigationServer2D); diff --git a/servers/navigation_3d/SCsub b/servers/navigation_3d/SCsub new file mode 100644 index 00000000000..98f918b2458 --- /dev/null +++ b/servers/navigation_3d/SCsub @@ -0,0 +1,6 @@ +#!/usr/bin/env python +from misc.utility.scons_hints import * + +Import("env") + +env.add_source_files(env.servers_sources, "*.cpp") diff --git a/servers/navigation/navigation_globals.h b/servers/navigation_3d/navigation_constants_3d.h similarity index 78% rename from servers/navigation/navigation_globals.h rename to servers/navigation_3d/navigation_constants_3d.h index f2c0b2552eb..4b40d2852be 100644 --- a/servers/navigation/navigation_globals.h +++ b/servers/navigation_3d/navigation_constants_3d.h @@ -1,5 +1,5 @@ /**************************************************************************/ -/* navigation_globals.h */ +/* navigation_constants_3d.h */ /**************************************************************************/ /* This file is part of: */ /* REDOT ENGINE */ @@ -37,6 +37,32 @@ * * [Add any documentation that applies to the entire file here!] */ +namespace NavigationEnums3D { + +enum PathfindingAlgorithm { + PATHFINDING_ALGORITHM_ASTAR = 0, +}; + +enum PathPostProcessing { + PATH_POSTPROCESSING_CORRIDORFUNNEL = 0, + PATH_POSTPROCESSING_EDGECENTERED, + PATH_POSTPROCESSING_NONE, +}; + +enum PathSegmentType { + PATH_SEGMENT_TYPE_REGION = 0, + PATH_SEGMENT_TYPE_LINK +}; + +enum PathMetadataFlags { + PATH_INCLUDE_NONE = 0, + PATH_INCLUDE_TYPES = 1, + PATH_INCLUDE_RIDS = 2, + PATH_INCLUDE_OWNERS = 4, + PATH_INCLUDE_ALL = PATH_INCLUDE_TYPES | PATH_INCLUDE_RIDS | PATH_INCLUDE_OWNERS +}; + +} //namespace NavigationEnums3D namespace NavigationDefaults3D { @@ -70,33 +96,3 @@ constexpr int AVOIDANCE_AGENT_MAX_NEIGHBORS = 10; constexpr float AVOIDANCE_AGENT_NEIGHBOR_DISTANCE = 50.0; /// @} } //namespace NavigationDefaults3D - -namespace NavigationDefaults2D { - -/// @name Rasterization -/// @{ - -// Same as in 3D but larger since 1px is treated as 1m. - -constexpr float NAV_MESH_CELL_SIZE = 1.0f; ///< Must match ProjectSettings default 2D cell_size. -constexpr float NAV_MESH_CELL_SIZE_MIN = 0.01f; -constexpr const char *const NAV_MESH_CELL_SIZE_HINT = "0.001,100,0.001,or_greater"; -/// @} -/// @name Map -/// @{ - -constexpr float EDGE_CONNECTION_MARGIN = 1.0f; -constexpr float LINK_CONNECTION_RADIUS = 4.0f; -constexpr int path_search_max_polygons = 4096; -/// @} -/// @name Agent -/// @{ - -constexpr float AVOIDANCE_AGENT_RADIUS = 10.0; -constexpr float AVOIDANCE_AGENT_MAX_SPEED = 100.0; -constexpr float AVOIDANCE_AGENT_TIME_HORIZON_AGENTS = 1.0; -constexpr float AVOIDANCE_AGENT_TIME_HORIZON_OBSTACLES = 0.0; -constexpr int AVOIDANCE_AGENT_MAX_NEIGHBORS = 10; -constexpr float AVOIDANCE_AGENT_NEIGHBOR_DISTANCE = 500.0; -/// @} -} //namespace NavigationDefaults2D diff --git a/servers/navigation/navigation_path_query_parameters_3d.cpp b/servers/navigation_3d/navigation_path_query_parameters_3d.cpp similarity index 99% rename from servers/navigation/navigation_path_query_parameters_3d.cpp rename to servers/navigation_3d/navigation_path_query_parameters_3d.cpp index 90ac3eb29a8..0cd42e3ba84 100644 --- a/servers/navigation/navigation_path_query_parameters_3d.cpp +++ b/servers/navigation_3d/navigation_path_query_parameters_3d.cpp @@ -38,6 +38,8 @@ #include "navigation_path_query_parameters_3d.h" +#include "core/variant/typed_array.h" + void NavigationPathQueryParameters3D::set_pathfinding_algorithm(const NavigationPathQueryParameters3D::PathfindingAlgorithm p_pathfinding_algorithm) { pathfinding_algorithm = p_pathfinding_algorithm; } diff --git a/servers/navigation/navigation_path_query_parameters_3d.h b/servers/navigation_3d/navigation_path_query_parameters_3d.h similarity index 85% rename from servers/navigation/navigation_path_query_parameters_3d.h rename to servers/navigation_3d/navigation_path_query_parameters_3d.h index dfafd9c596f..85b658b837b 100644 --- a/servers/navigation/navigation_path_query_parameters_3d.h +++ b/servers/navigation_3d/navigation_path_query_parameters_3d.h @@ -39,8 +39,7 @@ */ #include "core/object/ref_counted.h" -#include "servers/navigation/navigation_globals.h" -#include "servers/navigation/navigation_utilities.h" +#include "servers/navigation_3d/navigation_constants_3d.h" class NavigationPathQueryParameters3D : public RefCounted { GDCLASS(NavigationPathQueryParameters3D, RefCounted); @@ -50,21 +49,21 @@ class NavigationPathQueryParameters3D : public RefCounted { public: enum PathfindingAlgorithm { - PATHFINDING_ALGORITHM_ASTAR = NavigationUtilities::PATHFINDING_ALGORITHM_ASTAR, + PATHFINDING_ALGORITHM_ASTAR = NavigationEnums3D::PATHFINDING_ALGORITHM_ASTAR, }; enum PathPostProcessing { - PATH_POSTPROCESSING_CORRIDORFUNNEL = NavigationUtilities::PATH_POSTPROCESSING_CORRIDORFUNNEL, - PATH_POSTPROCESSING_EDGECENTERED = NavigationUtilities::PATH_POSTPROCESSING_EDGECENTERED, - PATH_POSTPROCESSING_NONE = NavigationUtilities::PATH_POSTPROCESSING_NONE, + PATH_POSTPROCESSING_CORRIDORFUNNEL = NavigationEnums3D::PATH_POSTPROCESSING_CORRIDORFUNNEL, + PATH_POSTPROCESSING_EDGECENTERED = NavigationEnums3D::PATH_POSTPROCESSING_EDGECENTERED, + PATH_POSTPROCESSING_NONE = NavigationEnums3D::PATH_POSTPROCESSING_NONE, }; enum PathMetadataFlags { - PATH_METADATA_INCLUDE_NONE = NavigationUtilities::PathMetadataFlags::PATH_INCLUDE_NONE, - PATH_METADATA_INCLUDE_TYPES = NavigationUtilities::PathMetadataFlags::PATH_INCLUDE_TYPES, - PATH_METADATA_INCLUDE_RIDS = NavigationUtilities::PathMetadataFlags::PATH_INCLUDE_RIDS, - PATH_METADATA_INCLUDE_OWNERS = NavigationUtilities::PathMetadataFlags::PATH_INCLUDE_OWNERS, - PATH_METADATA_INCLUDE_ALL = NavigationUtilities::PathMetadataFlags::PATH_INCLUDE_ALL + PATH_METADATA_INCLUDE_NONE = NavigationEnums3D::PathMetadataFlags::PATH_INCLUDE_NONE, + PATH_METADATA_INCLUDE_TYPES = NavigationEnums3D::PathMetadataFlags::PATH_INCLUDE_TYPES, + PATH_METADATA_INCLUDE_RIDS = NavigationEnums3D::PathMetadataFlags::PATH_INCLUDE_RIDS, + PATH_METADATA_INCLUDE_OWNERS = NavigationEnums3D::PathMetadataFlags::PATH_INCLUDE_OWNERS, + PATH_METADATA_INCLUDE_ALL = NavigationEnums3D::PathMetadataFlags::PATH_INCLUDE_ALL }; private: diff --git a/servers/navigation/navigation_path_query_result_3d.cpp b/servers/navigation_3d/navigation_path_query_result_3d.cpp similarity index 100% rename from servers/navigation/navigation_path_query_result_3d.cpp rename to servers/navigation_3d/navigation_path_query_result_3d.cpp diff --git a/servers/navigation/navigation_path_query_result_3d.h b/servers/navigation_3d/navigation_path_query_result_3d.h similarity index 93% rename from servers/navigation/navigation_path_query_result_3d.h rename to servers/navigation_3d/navigation_path_query_result_3d.h index 04f8878bf6d..2774ba962e6 100644 --- a/servers/navigation/navigation_path_query_result_3d.h +++ b/servers/navigation_3d/navigation_path_query_result_3d.h @@ -40,7 +40,7 @@ #include "core/object/ref_counted.h" #include "core/variant/typed_array.h" -#include "servers/navigation/navigation_utilities.h" +#include "servers/navigation_3d/navigation_constants_3d.h" class NavigationPathQueryResult3D : public RefCounted { GDCLASS(NavigationPathQueryResult3D, RefCounted); @@ -56,8 +56,8 @@ class NavigationPathQueryResult3D : public RefCounted { public: enum PathSegmentType { - PATH_SEGMENT_TYPE_REGION = NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_REGION, - PATH_SEGMENT_TYPE_LINK = NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_LINK, + PATH_SEGMENT_TYPE_REGION = NavigationEnums3D::PathSegmentType::PATH_SEGMENT_TYPE_REGION, + PATH_SEGMENT_TYPE_LINK = NavigationEnums3D::PathSegmentType::PATH_SEGMENT_TYPE_LINK, }; void set_path(const Vector &p_path); diff --git a/servers/navigation_server_3d.compat.inc b/servers/navigation_3d/navigation_server_3d.compat.inc similarity index 100% rename from servers/navigation_server_3d.compat.inc rename to servers/navigation_3d/navigation_server_3d.compat.inc diff --git a/servers/navigation_server_3d.cpp b/servers/navigation_3d/navigation_server_3d.cpp similarity index 99% rename from servers/navigation_server_3d.cpp rename to servers/navigation_3d/navigation_server_3d.cpp index 4c53e6494a1..b3825f21010 100644 --- a/servers/navigation_server_3d.cpp +++ b/servers/navigation_3d/navigation_server_3d.cpp @@ -41,8 +41,7 @@ #include "core/config/project_settings.h" #include "scene/main/node.h" -#include "servers/navigation/navigation_globals.h" -#include "servers/navigation_server_3d_dummy.h" +#include "servers/navigation_3d/navigation_server_3d_dummy.h" NavigationServer3D *NavigationServer3D::singleton = nullptr; diff --git a/servers/navigation_server_3d.h b/servers/navigation_3d/navigation_server_3d.h similarity index 99% rename from servers/navigation_server_3d.h rename to servers/navigation_3d/navigation_server_3d.h index 51e59c5abf5..38c5bb7b75b 100644 --- a/servers/navigation_server_3d.h +++ b/servers/navigation_3d/navigation_server_3d.h @@ -43,8 +43,8 @@ #include "scene/resources/3d/navigation_mesh_source_geometry_data_3d.h" #include "scene/resources/navigation_mesh.h" -#include "servers/navigation/navigation_path_query_parameters_3d.h" -#include "servers/navigation/navigation_path_query_result_3d.h" +#include "servers/navigation_3d/navigation_path_query_parameters_3d.h" +#include "servers/navigation_3d/navigation_path_query_result_3d.h" struct NavMeshGeometryParser3D { RID self; diff --git a/servers/navigation_server_3d_dummy.h b/servers/navigation_3d/navigation_server_3d_dummy.h similarity index 99% rename from servers/navigation_server_3d_dummy.h rename to servers/navigation_3d/navigation_server_3d_dummy.h index 8b463e5f839..74477f4eaa9 100644 --- a/servers/navigation_server_3d_dummy.h +++ b/servers/navigation_3d/navigation_server_3d_dummy.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" class NavigationServer3DDummy : public NavigationServer3D { GDCLASS(NavigationServer3DDummy, NavigationServer3D); diff --git a/servers/physics_2d/SCsub b/servers/physics_2d/SCsub new file mode 100644 index 00000000000..98f918b2458 --- /dev/null +++ b/servers/physics_2d/SCsub @@ -0,0 +1,6 @@ +#!/usr/bin/env python +from misc.utility.scons_hints import * + +Import("env") + +env.add_source_files(env.servers_sources, "*.cpp") diff --git a/servers/physics_server_2d.cpp b/servers/physics_2d/physics_server_2d.cpp similarity index 100% rename from servers/physics_server_2d.cpp rename to servers/physics_2d/physics_server_2d.cpp diff --git a/servers/physics_server_2d.h b/servers/physics_2d/physics_server_2d.h similarity index 100% rename from servers/physics_server_2d.h rename to servers/physics_2d/physics_server_2d.h diff --git a/servers/physics_server_2d_dummy.h b/servers/physics_2d/physics_server_2d_dummy.h similarity index 100% rename from servers/physics_server_2d_dummy.h rename to servers/physics_2d/physics_server_2d_dummy.h diff --git a/servers/extensions/physics_server_2d_extension.cpp b/servers/physics_2d/physics_server_2d_extension.cpp similarity index 100% rename from servers/extensions/physics_server_2d_extension.cpp rename to servers/physics_2d/physics_server_2d_extension.cpp diff --git a/servers/extensions/physics_server_2d_extension.h b/servers/physics_2d/physics_server_2d_extension.h similarity index 99% rename from servers/extensions/physics_server_2d_extension.h rename to servers/physics_2d/physics_server_2d_extension.h index 0dc60193433..651e4d01c83 100644 --- a/servers/extensions/physics_server_2d_extension.h +++ b/servers/physics_2d/physics_server_2d_extension.h @@ -42,7 +42,7 @@ #include "core/object/gdvirtual.gen.inc" #include "core/variant/native_ptr.h" #include "core/variant/typed_array.h" -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" class PhysicsDirectBodyState2DExtension : public PhysicsDirectBodyState2D { GDCLASS(PhysicsDirectBodyState2DExtension, PhysicsDirectBodyState2D); diff --git a/servers/physics_server_2d_wrap_mt.cpp b/servers/physics_2d/physics_server_2d_wrap_mt.cpp similarity index 100% rename from servers/physics_server_2d_wrap_mt.cpp rename to servers/physics_2d/physics_server_2d_wrap_mt.cpp diff --git a/servers/physics_server_2d_wrap_mt.h b/servers/physics_2d/physics_server_2d_wrap_mt.h similarity index 99% rename from servers/physics_server_2d_wrap_mt.h rename to servers/physics_2d/physics_server_2d_wrap_mt.h index 8948b765b6b..d2462bd1952 100644 --- a/servers/physics_server_2d_wrap_mt.h +++ b/servers/physics_2d/physics_server_2d_wrap_mt.h @@ -41,7 +41,7 @@ #include "core/object/worker_thread_pool.h" #include "core/os/thread.h" #include "core/templates/command_queue_mt.h" -#include "servers/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d.h" #define ASYNC_COND_PUSH (Thread::get_caller_id() != server_thread) #define ASYNC_COND_PUSH_AND_RET (Thread::get_caller_id() != server_thread && !(doing_sync.is_set() && Thread::is_main_thread())) diff --git a/servers/physics_3d/SCsub b/servers/physics_3d/SCsub new file mode 100644 index 00000000000..98f918b2458 --- /dev/null +++ b/servers/physics_3d/SCsub @@ -0,0 +1,6 @@ +#!/usr/bin/env python +from misc.utility.scons_hints import * + +Import("env") + +env.add_source_files(env.servers_sources, "*.cpp") diff --git a/servers/physics_server_3d.cpp b/servers/physics_3d/physics_server_3d.cpp similarity index 99% rename from servers/physics_server_3d.cpp rename to servers/physics_3d/physics_server_3d.cpp index 785ae1d3741..8ad876ee21e 100644 --- a/servers/physics_server_3d.cpp +++ b/servers/physics_3d/physics_server_3d.cpp @@ -36,8 +36,6 @@ * [Add any documentation that applies to the entire file here!] */ -#ifndef _3D_DISABLED - #include "physics_server_3d.h" #include "core/config/project_settings.h" @@ -1255,5 +1253,3 @@ PhysicsServer3DManager::PhysicsServer3DManager() { PhysicsServer3DManager::~PhysicsServer3DManager() { singleton = nullptr; } - -#endif // _3D_DISABLED diff --git a/servers/physics_server_3d.h b/servers/physics_3d/physics_server_3d.h similarity index 99% rename from servers/physics_server_3d.h rename to servers/physics_3d/physics_server_3d.h index 135bba79242..0953042dbe5 100644 --- a/servers/physics_server_3d.h +++ b/servers/physics_3d/physics_server_3d.h @@ -38,8 +38,6 @@ * [Add any documentation that applies to the entire file here!] */ -#ifndef _3D_DISABLED - #include "core/io/resource.h" #include "core/object/gdvirtual.gen.inc" @@ -1091,5 +1089,3 @@ VARIANT_ENUM_CAST(PhysicsServer3D::G6DOFJointAxisParam); VARIANT_ENUM_CAST(PhysicsServer3D::G6DOFJointAxisFlag); VARIANT_ENUM_CAST(PhysicsServer3D::AreaBodyStatus); VARIANT_ENUM_CAST(PhysicsServer3D::ProcessInfo); - -#endif // _3D_DISABLED diff --git a/servers/physics_server_3d_dummy.h b/servers/physics_3d/physics_server_3d_dummy.h similarity index 99% rename from servers/physics_server_3d_dummy.h rename to servers/physics_3d/physics_server_3d_dummy.h index 4bc88f3a70c..62477947281 100644 --- a/servers/physics_server_3d_dummy.h +++ b/servers/physics_3d/physics_server_3d_dummy.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" class PhysicsDirectBodyState3DDummy : public PhysicsDirectBodyState3D { GDCLASS(PhysicsDirectBodyState3DDummy, PhysicsDirectBodyState3D); diff --git a/servers/extensions/physics_server_3d_extension.cpp b/servers/physics_3d/physics_server_3d_extension.cpp similarity index 100% rename from servers/extensions/physics_server_3d_extension.cpp rename to servers/physics_3d/physics_server_3d_extension.cpp diff --git a/servers/extensions/physics_server_3d_extension.h b/servers/physics_3d/physics_server_3d_extension.h similarity index 99% rename from servers/extensions/physics_server_3d_extension.h rename to servers/physics_3d/physics_server_3d_extension.h index e435c68620f..da5daaf533f 100644 --- a/servers/extensions/physics_server_3d_extension.h +++ b/servers/physics_3d/physics_server_3d_extension.h @@ -42,7 +42,7 @@ #include "core/object/script_language.h" #include "core/variant/native_ptr.h" #include "core/variant/typed_array.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" class PhysicsDirectBodyState3DExtension : public PhysicsDirectBodyState3D { GDCLASS(PhysicsDirectBodyState3DExtension, PhysicsDirectBodyState3D); diff --git a/servers/physics_server_3d_wrap_mt.cpp b/servers/physics_3d/physics_server_3d_wrap_mt.cpp similarity index 100% rename from servers/physics_server_3d_wrap_mt.cpp rename to servers/physics_3d/physics_server_3d_wrap_mt.cpp diff --git a/servers/physics_server_3d_wrap_mt.h b/servers/physics_3d/physics_server_3d_wrap_mt.h similarity index 99% rename from servers/physics_server_3d_wrap_mt.h rename to servers/physics_3d/physics_server_3d_wrap_mt.h index 892388c6e70..22e46a29241 100644 --- a/servers/physics_server_3d_wrap_mt.h +++ b/servers/physics_3d/physics_server_3d_wrap_mt.h @@ -42,7 +42,7 @@ #include "core/object/worker_thread_pool.h" #include "core/os/thread.h" #include "core/templates/command_queue_mt.h" -#include "servers/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d.h" #define ASYNC_COND_PUSH (Thread::get_caller_id() != server_thread) #define ASYNC_COND_PUSH_AND_RET (Thread::get_caller_id() != server_thread && !(doing_sync.is_set() && Thread::is_main_thread())) diff --git a/servers/register_server_types.cpp b/servers/register_server_types.cpp index 848fa3b7498..27313e9b28a 100644 --- a/servers/register_server_types.cpp +++ b/servers/register_server_types.cpp @@ -42,6 +42,7 @@ #include "core/config/project_settings.h" #include "audio/audio_effect.h" +#include "audio/audio_server.h" #include "audio/audio_stream.h" #include "audio/effects/audio_effect_amplify.h" #include "audio/effects/audio_effect_capture.h" @@ -60,12 +61,11 @@ #include "audio/effects/audio_effect_spectrum_analyzer.h" #include "audio/effects/audio_effect_stereo_enhance.h" #include "audio/effects/audio_stream_generator.h" -#include "audio_server.h" #include "camera/camera_feed.h" -#include "camera_server.h" +#include "camera/camera_server.h" #include "debugger/servers_debugger.h" +#include "display/display_server.h" #include "display/native_menu.h" -#include "display_server.h" #include "movie_writer/movie_writer.h" #include "movie_writer/movie_writer_pngwav.h" #include "rendering/renderer_rd/framebuffer_cache_rd.h" @@ -75,37 +75,37 @@ #include "rendering/renderer_rd/uniform_set_cache_rd.h" #include "rendering/rendering_device.h" #include "rendering/rendering_device_binds.h" +#include "rendering/rendering_server.h" #include "rendering/shader_include_db.h" #include "rendering/storage/render_data.h" #include "rendering/storage/render_scene_buffers.h" #include "rendering/storage/render_scene_data.h" -#include "rendering_server.h" #include "servers/rendering/shader_types.h" +#include "text/text_server.h" #include "text/text_server_dummy.h" #include "text/text_server_extension.h" -#include "text_server.h" #ifndef DISABLE_DEPRECATED #include "audio/effects/audio_effect_limiter.h" #endif // 2D physics and navigation. #ifndef NAVIGATION_2D_DISABLED -#include "navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" #endif // NAVIGATION_2D_DISABLED #ifndef PHYSICS_2D_DISABLED -#include "physics_server_2d.h" -#include "physics_server_2d_dummy.h" -#include "servers/extensions/physics_server_2d_extension.h" +#include "servers/physics_2d/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d_dummy.h" +#include "servers/physics_2d/physics_server_2d_extension.h" #endif // PHYSICS_2D_DISABLED // 3D physics and navigation. #ifndef NAVIGATION_3D_DISABLED -#include "navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" #endif // NAVIGATION_3D_DISABLED #ifndef PHYSICS_3D_DISABLED -#include "physics_server_3d.h" -#include "physics_server_3d_dummy.h" -#include "servers/extensions/physics_server_3d_extension.h" +#include "servers/physics_3d/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d_dummy.h" +#include "servers/physics_3d/physics_server_3d_extension.h" #endif // PHYSICS_3D_DISABLED #ifndef XR_DISABLED #include "xr/xr_body_tracker.h" @@ -115,7 +115,7 @@ #include "xr/xr_interface.h" #include "xr/xr_interface_extension.h" #include "xr/xr_positional_tracker.h" -#include "xr_server.h" +#include "xr/xr_server.h" #endif // XR_DISABLED ShaderTypes *shader_types = nullptr; diff --git a/servers/rendering/dummy/rasterizer_dummy.h b/servers/rendering/dummy/rasterizer_dummy.h index 75797d01836..7ad0ea46f68 100644 --- a/servers/rendering/dummy/rasterizer_dummy.h +++ b/servers/rendering/dummy/rasterizer_dummy.h @@ -52,7 +52,7 @@ #include "servers/rendering/dummy/storage/texture_storage.h" #include "servers/rendering/dummy/storage/utilities.h" #include "servers/rendering/renderer_compositor.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class RasterizerDummy : public RendererCompositor { private: diff --git a/servers/rendering/environment/renderer_fog.h b/servers/rendering/environment/renderer_fog.h index 49265239ec5..b563b61a0a6 100644 --- a/servers/rendering/environment/renderer_fog.h +++ b/servers/rendering/environment/renderer_fog.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class RendererFog { public: diff --git a/servers/rendering/environment/renderer_gi.h b/servers/rendering/environment/renderer_gi.h index bb34b942576..12693d062ac 100644 --- a/servers/rendering/environment/renderer_gi.h +++ b/servers/rendering/environment/renderer_gi.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class RendererGI { public: diff --git a/servers/rendering/renderer_canvas_render.h b/servers/rendering/renderer_canvas_render.h index d9d0e73ea00..56b4d691b8b 100644 --- a/servers/rendering/renderer_canvas_render.h +++ b/servers/rendering/renderer_canvas_render.h @@ -39,7 +39,7 @@ */ #include "servers/rendering/rendering_method.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class RendererCanvasRender { public: diff --git a/servers/rendering/renderer_compositor.cpp b/servers/rendering/renderer_compositor.cpp index bbd0f7c9451..82e6b375e64 100644 --- a/servers/rendering/renderer_compositor.cpp +++ b/servers/rendering/renderer_compositor.cpp @@ -41,7 +41,7 @@ #include "core/config/project_settings.h" #ifndef XR_DISABLED -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" #endif // XR_DISABLED RendererCompositor *RendererCompositor::singleton = nullptr; diff --git a/servers/rendering/renderer_rd/effects/copy_effects.h b/servers/rendering/renderer_rd/effects/copy_effects.h index 010d3f986cf..c2623efa983 100644 --- a/servers/rendering/renderer_rd/effects/copy_effects.h +++ b/servers/rendering/renderer_rd/effects/copy_effects.h @@ -52,7 +52,7 @@ #include "servers/rendering/renderer_rd/shaders/effects/specular_merge.glsl.gen.h" #include "servers/rendering/renderer_scene_render.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" namespace RendererRD { diff --git a/servers/rendering/renderer_rd/effects/motion_vectors_store.h b/servers/rendering/renderer_rd/effects/motion_vectors_store.h index 68bce722502..2c109c6c894 100644 --- a/servers/rendering/renderer_rd/effects/motion_vectors_store.h +++ b/servers/rendering/renderer_rd/effects/motion_vectors_store.h @@ -42,7 +42,7 @@ #include "servers/rendering/renderer_rd/shaders/effects/motion_vectors_store.glsl.gen.h" #include "servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.h" #include "servers/rendering/renderer_scene_render.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" namespace RendererRD { class MotionVectorsStore { diff --git a/servers/rendering/renderer_rd/effects/smaa.h b/servers/rendering/renderer_rd/effects/smaa.h index 91deed68400..cf7dc073bdb 100644 --- a/servers/rendering/renderer_rd/effects/smaa.h +++ b/servers/rendering/renderer_rd/effects/smaa.h @@ -45,7 +45,7 @@ #include "servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.h" #include "servers/rendering/renderer_scene_render.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #define RB_SCOPE_SMAA SNAME("rb_smaa") diff --git a/servers/rendering/renderer_rd/effects/ss_effects.h b/servers/rendering/renderer_rd/effects/ss_effects.h index 068dc3cce19..47b6065c6cd 100644 --- a/servers/rendering/renderer_rd/effects/ss_effects.h +++ b/servers/rendering/renderer_rd/effects/ss_effects.h @@ -51,7 +51,7 @@ #include "servers/rendering/renderer_rd/shaders/effects/ssil_importance_map.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/effects/ssil_interleave.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/effects/subsurface_scattering.glsl.gen.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #define RB_SCOPE_SSDS SNAME("rb_ssds") #define RB_SCOPE_SSIL SNAME("rb_ssil") diff --git a/servers/rendering/renderer_rd/effects/tone_mapper.h b/servers/rendering/renderer_rd/effects/tone_mapper.h index acc9bdb799f..83cf65cdbf2 100644 --- a/servers/rendering/renderer_rd/effects/tone_mapper.h +++ b/servers/rendering/renderer_rd/effects/tone_mapper.h @@ -41,7 +41,7 @@ #include "servers/rendering/renderer_rd/pipeline_cache_rd.h" #include "servers/rendering/renderer_rd/shaders/effects/tonemap.glsl.gen.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" namespace RendererRD { diff --git a/servers/rendering/renderer_rd/effects/vrs.cpp b/servers/rendering/renderer_rd/effects/vrs.cpp index a8a7fa8d2d7..15d48adaec1 100644 --- a/servers/rendering/renderer_rd/effects/vrs.cpp +++ b/servers/rendering/renderer_rd/effects/vrs.cpp @@ -42,7 +42,7 @@ #include "../uniform_set_cache_rd.h" #ifndef XR_DISABLED -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" #endif // XR_DISABLED using namespace RendererRD; diff --git a/servers/rendering/renderer_rd/pipeline_hash_map_rd.h b/servers/rendering/renderer_rd/pipeline_hash_map_rd.h index 2244b755f6d..1e27936d390 100644 --- a/servers/rendering/renderer_rd/pipeline_hash_map_rd.h +++ b/servers/rendering/renderer_rd/pipeline_hash_map_rd.h @@ -39,7 +39,7 @@ */ #include "servers/rendering/rendering_device.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #define PRINT_PIPELINE_COMPILATION_KEYS 0 diff --git a/servers/rendering/renderer_rd/shader_rd.h b/servers/rendering/renderer_rd/shader_rd.h index 038b4d71567..445e26306c3 100644 --- a/servers/rendering/renderer_rd/shader_rd.h +++ b/servers/rendering/renderer_rd/shader_rd.h @@ -44,7 +44,7 @@ #include "core/templates/local_vector.h" #include "core/templates/rid_owner.h" #include "core/templates/self_list.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class ShaderRD { public: diff --git a/servers/rendering/renderer_scene_occlusion_cull.h b/servers/rendering/renderer_scene_occlusion_cull.h index 8fae19f4a73..bcdde105c2c 100644 --- a/servers/rendering/renderer_scene_occlusion_cull.h +++ b/servers/rendering/renderer_scene_occlusion_cull.h @@ -40,7 +40,7 @@ #include "core/math/projection.h" #include "core/templates/local_vector.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class RendererSceneOcclusionCull { protected: diff --git a/servers/rendering/renderer_viewport.h b/servers/rendering/renderer_viewport.h index 7585f2d1bfc..8ea46631fbe 100644 --- a/servers/rendering/renderer_viewport.h +++ b/servers/rendering/renderer_viewport.h @@ -41,7 +41,7 @@ #include "core/templates/rid_owner.h" #include "servers/rendering/renderer_scene_render.h" #include "servers/rendering/rendering_method.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include "storage/render_scene_buffers.h" class RendererViewport { diff --git a/servers/rendering/rendering_context_driver.h b/servers/rendering/rendering_context_driver.h index 390d43cb8c5..2206294a904 100644 --- a/servers/rendering/rendering_context_driver.h +++ b/servers/rendering/rendering_context_driver.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/display_server.h" +#include "servers/display/display_server.h" class RenderingDeviceDriver; diff --git a/servers/rendering/rendering_device.h b/servers/rendering/rendering_device.h index 009c88d435c..50c85e04c79 100644 --- a/servers/rendering/rendering_device.h +++ b/servers/rendering/rendering_device.h @@ -44,7 +44,7 @@ #include "core/templates/local_vector.h" #include "core/templates/rid_owner.h" #include "core/variant/typed_array.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include "servers/rendering/rendering_device_commons.h" #include "servers/rendering/rendering_device_driver.h" #include "servers/rendering/rendering_device_graph.h" diff --git a/servers/rendering/rendering_method.h b/servers/rendering/rendering_method.h index 960ae8a8eb0..21fec35e510 100644 --- a/servers/rendering/rendering_method.h +++ b/servers/rendering/rendering_method.h @@ -38,8 +38,8 @@ * [Add any documentation that applies to the entire file here!] */ +#include "servers/rendering/rendering_server.h" #include "servers/rendering/storage/render_scene_buffers.h" -#include "servers/rendering_server.h" #ifdef XR_DISABLED /// RendererSceneCull::render_camera is empty when 3D is disabled, but diff --git a/servers/rendering_server.compat.inc b/servers/rendering/rendering_server.compat.inc similarity index 100% rename from servers/rendering_server.compat.inc rename to servers/rendering/rendering_server.compat.inc diff --git a/servers/rendering_server.cpp b/servers/rendering/rendering_server.cpp similarity index 100% rename from servers/rendering_server.cpp rename to servers/rendering/rendering_server.cpp diff --git a/servers/rendering_server.h b/servers/rendering/rendering_server.h similarity index 99% rename from servers/rendering_server.h rename to servers/rendering/rendering_server.h index ebb56343bbe..77262378fe8 100644 --- a/servers/rendering_server.h +++ b/servers/rendering/rendering_server.h @@ -44,7 +44,7 @@ #include "core/templates/rid.h" #include "core/variant/typed_array.h" #include "core/variant/variant.h" -#include "servers/display_server.h" +#include "servers/display/display_server.h" #include "servers/rendering/rendering_device.h" /// Helper macros for code outside of the rendering server, but that is diff --git a/servers/rendering/rendering_server_default.h b/servers/rendering/rendering_server_default.h index 151ecfe93f7..b4adf327132 100644 --- a/servers/rendering/rendering_server_default.h +++ b/servers/rendering/rendering_server_default.h @@ -46,7 +46,7 @@ #include "renderer_viewport.h" #include "rendering_server_globals.h" #include "servers/rendering/renderer_compositor.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include "servers/server_wrap_mt_common.h" class RenderingServerDefault : public RenderingServer { @@ -133,10 +133,9 @@ class RenderingServerDefault : public RenderingServer { #define MAIN_THREAD_SYNC_WARN WARN_PRINT("Call to " + String(__FUNCTION__) + " causing RenderingServer synchronizations on every frame. This significantly affects performance."); #endif -#include "servers/server_wrap_mt_common.h" - /// @name TEXTURE API /// @{ + /* TEXTURE API */ #define ServerName RendererTextureStorage #define server_name RSG::texture_storage diff --git a/servers/rendering/shader_compiler.h b/servers/rendering/shader_compiler.h index 8bcf986c0f2..d8e36c5c204 100644 --- a/servers/rendering/shader_compiler.h +++ b/servers/rendering/shader_compiler.h @@ -39,8 +39,8 @@ */ #include "core/templates/pair.h" +#include "servers/rendering/rendering_server.h" #include "servers/rendering/shader_language.h" -#include "servers/rendering_server.h" class ShaderCompiler { public: diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp index a5eefb14514..d174e5752af 100644 --- a/servers/rendering/shader_language.cpp +++ b/servers/rendering/shader_language.cpp @@ -41,8 +41,8 @@ #include "core/os/os.h" #include "core/templates/local_vector.h" #include "servers/rendering/renderer_compositor.h" +#include "servers/rendering/rendering_server.h" #include "servers/rendering/rendering_server_globals.h" -#include "servers/rendering_server.h" #include "shader_types.h" #define HAS_WARNING(flag) (warning_flags & flag) diff --git a/servers/rendering/shader_types.h b/servers/rendering/shader_types.h index 322680dd7a5..8728bcd4ee0 100644 --- a/servers/rendering/shader_types.h +++ b/servers/rendering/shader_types.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include "shader_language.h" class ShaderTypes { diff --git a/servers/rendering/storage/camera_attributes_storage.h b/servers/rendering/storage/camera_attributes_storage.h index b674e4c9edc..7757328365a 100644 --- a/servers/rendering/storage/camera_attributes_storage.h +++ b/servers/rendering/storage/camera_attributes_storage.h @@ -39,7 +39,7 @@ */ #include "core/templates/rid_owner.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class RendererCameraAttributes { private: diff --git a/servers/rendering/storage/compositor_storage.h b/servers/rendering/storage/compositor_storage.h index 35e5b5713f7..083bcb78a87 100644 --- a/servers/rendering/storage/compositor_storage.h +++ b/servers/rendering/storage/compositor_storage.h @@ -39,7 +39,7 @@ */ #include "core/templates/rid_owner.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class RendererCompositorStorage { private: diff --git a/servers/rendering/storage/environment_storage.h b/servers/rendering/storage/environment_storage.h index f5693a45316..9b96ec90325 100644 --- a/servers/rendering/storage/environment_storage.h +++ b/servers/rendering/storage/environment_storage.h @@ -39,7 +39,7 @@ */ #include "core/templates/rid_owner.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class RendererEnvironmentStorage { private: diff --git a/servers/rendering/storage/light_storage.h b/servers/rendering/storage/light_storage.h index e15282e9bf6..5b99e69b386 100644 --- a/servers/rendering/storage/light_storage.h +++ b/servers/rendering/storage/light_storage.h @@ -39,7 +39,7 @@ */ #include "render_scene_buffers.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class RendererLightStorage { public: diff --git a/servers/rendering/storage/material_storage.h b/servers/rendering/storage/material_storage.h index 4220d33b93e..a0196cbf57c 100644 --- a/servers/rendering/storage/material_storage.h +++ b/servers/rendering/storage/material_storage.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include "utilities.h" class RendererMaterialStorage { diff --git a/servers/rendering/storage/mesh_storage.h b/servers/rendering/storage/mesh_storage.h index c76fe798bcb..d0105029d58 100644 --- a/servers/rendering/storage/mesh_storage.h +++ b/servers/rendering/storage/mesh_storage.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" #include "utilities.h" class RendererMeshStorage { diff --git a/servers/rendering/storage/particles_storage.h b/servers/rendering/storage/particles_storage.h index 421c84e846b..bfa387dce1b 100644 --- a/servers/rendering/storage/particles_storage.h +++ b/servers/rendering/storage/particles_storage.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class RendererParticlesStorage { public: diff --git a/servers/rendering/storage/render_scene_buffers.h b/servers/rendering/storage/render_scene_buffers.h index 5a608371739..d564237c350 100644 --- a/servers/rendering/storage/render_scene_buffers.h +++ b/servers/rendering/storage/render_scene_buffers.h @@ -39,7 +39,7 @@ */ #include "core/object/ref_counted.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class RenderSceneBuffersConfiguration : public RefCounted { GDCLASS(RenderSceneBuffersConfiguration, RefCounted); diff --git a/servers/rendering/storage/texture_storage.h b/servers/rendering/storage/texture_storage.h index 1ea49c71936..090df21541d 100644 --- a/servers/rendering/storage/texture_storage.h +++ b/servers/rendering/storage/texture_storage.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class RendererTextureStorage { private: diff --git a/servers/rendering/storage/utilities.h b/servers/rendering/storage/utilities.h index 8e49ae9b9ec..bd41eab15c3 100644 --- a/servers/rendering/storage/utilities.h +++ b/servers/rendering/storage/utilities.h @@ -38,7 +38,7 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" class DependencyTracker; diff --git a/servers/text_server.compat.inc b/servers/text/text_server.compat.inc similarity index 100% rename from servers/text_server.compat.inc rename to servers/text/text_server.compat.inc diff --git a/servers/text_server.cpp b/servers/text/text_server.cpp similarity index 99% rename from servers/text_server.cpp rename to servers/text/text_server.cpp index 6bd6d988d33..bcff63870af 100644 --- a/servers/text_server.cpp +++ b/servers/text/text_server.cpp @@ -36,12 +36,12 @@ * [Add any documentation that applies to the entire file here!] */ -#include "servers/text_server.h" +#include "text_server.h" #include "text_server.compat.inc" #include "core/config/project_settings.h" #include "core/variant/typed_array.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" TextServerManager *TextServerManager::singleton = nullptr; diff --git a/servers/text_server.h b/servers/text/text_server.h similarity index 100% rename from servers/text_server.h rename to servers/text/text_server.h diff --git a/servers/text/text_server_extension.h b/servers/text/text_server_extension.h index e17cbbf6aef..5fc1e2a4e86 100644 --- a/servers/text/text_server_extension.h +++ b/servers/text/text_server_extension.h @@ -42,7 +42,7 @@ #include "core/os/thread_safe.h" #include "core/variant/native_ptr.h" #include "core/variant/typed_array.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" class TextServerExtension : public TextServer { GDCLASS(TextServerExtension, TextServer); diff --git a/servers/xr/xr_interface.h b/servers/xr/xr_interface.h index bdffdf85e9f..d50b92ed488 100644 --- a/servers/xr/xr_interface.h +++ b/servers/xr/xr_interface.h @@ -40,7 +40,7 @@ #include "core/math/projection.h" #include "core/os/thread_safe.h" -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" #include "xr_vrs.h" // forward declaration diff --git a/servers/xr/xr_pose.cpp b/servers/xr/xr_pose.cpp index a0dcea5ad04..da660d0f640 100644 --- a/servers/xr/xr_pose.cpp +++ b/servers/xr/xr_pose.cpp @@ -38,7 +38,7 @@ #include "xr_pose.h" -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" void XRPose::_bind_methods() { BIND_ENUM_CONSTANT(XR_TRACKING_CONFIDENCE_NONE); diff --git a/servers/xr/xr_positional_tracker.h b/servers/xr/xr_positional_tracker.h index 8d0894b341f..3bafcd7ca8d 100644 --- a/servers/xr/xr_positional_tracker.h +++ b/servers/xr/xr_positional_tracker.h @@ -40,8 +40,8 @@ #include "core/os/thread_safe.h" #include "servers/xr/xr_pose.h" +#include "servers/xr/xr_server.h" #include "servers/xr/xr_tracker.h" -#include "servers/xr_server.h" /** * The positional tracker object as an object that represents the position and orientation of a tracked object like a controller or headset. diff --git a/servers/xr_server.compat.inc b/servers/xr/xr_server.compat.inc similarity index 100% rename from servers/xr_server.compat.inc rename to servers/xr/xr_server.compat.inc diff --git a/servers/xr_server.cpp b/servers/xr/xr_server.cpp similarity index 99% rename from servers/xr_server.cpp rename to servers/xr/xr_server.cpp index 32227251cb7..ff889279653 100644 --- a/servers/xr_server.cpp +++ b/servers/xr/xr_server.cpp @@ -37,11 +37,12 @@ */ #include "xr_server.h" -#include "core/config/project_settings.h" -#include "xr/xr_interface.h" -#include "xr/xr_positional_tracker.h" #include "xr_server.compat.inc" +#include "core/config/project_settings.h" +#include "servers/xr/xr_interface.h" +#include "servers/xr/xr_positional_tracker.h" + XRServer::XRMode XRServer::xr_mode = XRMODE_DEFAULT; XRServer::XRMode XRServer::get_xr_mode() { diff --git a/servers/xr_server.h b/servers/xr/xr_server.h similarity index 99% rename from servers/xr_server.h rename to servers/xr/xr_server.h index 71efd08c198..b25f5fbdcba 100644 --- a/servers/xr_server.h +++ b/servers/xr/xr_server.h @@ -41,7 +41,7 @@ #include "core/object/ref_counted.h" #include "core/os/thread_safe.h" #include "core/variant/variant.h" -#include "rendering_server.h" +#include "servers/rendering/rendering_server.h" class XRInterface; class XRTracker; diff --git a/servers/xr/xr_tracker.h b/servers/xr/xr_tracker.h index 7781691c225..32b3d6d5ecf 100644 --- a/servers/xr/xr_tracker.h +++ b/servers/xr/xr_tracker.h @@ -39,7 +39,7 @@ */ #include "core/os/thread_safe.h" -#include "servers/xr_server.h" +#include "servers/xr/xr_server.h" /** * The XR tracker object is a common base for all different types of XR trackers. diff --git a/servers/xr/xr_vrs.cpp b/servers/xr/xr_vrs.cpp index 01c81524dff..b0cab447c28 100644 --- a/servers/xr/xr_vrs.cpp +++ b/servers/xr/xr_vrs.cpp @@ -39,7 +39,7 @@ #include "xr_vrs.h" #include "servers/rendering/renderer_scene_render.h" -#include "servers/rendering_server.h" +#include "servers/rendering/rendering_server.h" void XRVRS::_bind_methods() { ClassDB::bind_method(D_METHOD("get_vrs_min_radius"), &XRVRS::get_vrs_min_radius); diff --git a/tests/display_server_mock.h b/tests/display_server_mock.h index 8ad0507e4c7..a18b662bf5b 100644 --- a/tests/display_server_mock.h +++ b/tests/display_server_mock.h @@ -32,7 +32,7 @@ #pragma once -#include "servers/display_server_headless.h" +#include "servers/display/display_server_headless.h" #include "servers/rendering/dummy/rasterizer_dummy.h" diff --git a/tests/scene/test_viewport.h b/tests/scene/test_viewport.h index a3fb28b44ed..a04f5b0c435 100644 --- a/tests/scene/test_viewport.h +++ b/tests/scene/test_viewport.h @@ -42,7 +42,7 @@ #include "scene/2d/physics/area_2d.h" #include "scene/2d/physics/collision_shape_2d.h" #include "scene/resources/2d/rectangle_shape_2d.h" -#include "servers/physics_server_2d_dummy.h" +#include "servers/physics_2d/physics_server_2d_dummy.h" #endif // PHYSICS_2D_DISABLED #include "tests/test_macros.h" diff --git a/tests/servers/test_nav_heap.h b/tests/servers/test_nav_heap.h index 6948867d7e6..5a42a83aa2a 100644 --- a/tests/servers/test_nav_heap.h +++ b/tests/servers/test_nav_heap.h @@ -32,7 +32,7 @@ #pragma once -#include "servers/navigation/nav_heap.h" +#include "servers/nav_heap.h" #include "tests/test_macros.h" diff --git a/tests/servers/test_navigation_server_2d.h b/tests/servers/test_navigation_server_2d.h index d8e5e5e03dc..74a7e9aab4b 100644 --- a/tests/servers/test_navigation_server_2d.h +++ b/tests/servers/test_navigation_server_2d.h @@ -33,7 +33,7 @@ #pragma once #include "modules/navigation_2d/nav_utils_2d.h" -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" #include "scene/2d/polygon_2d.h" diff --git a/tests/servers/test_navigation_server_3d.h b/tests/servers/test_navigation_server_3d.h index 5717f0932ec..1085e7678a9 100644 --- a/tests/servers/test_navigation_server_3d.h +++ b/tests/servers/test_navigation_server_3d.h @@ -34,7 +34,7 @@ #include "scene/3d/mesh_instance_3d.h" #include "scene/resources/3d/primitive_meshes.h" -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" namespace TestNavigationServer3D { diff --git a/tests/servers/test_text_server.h b/tests/servers/test_text_server.h index 8172e76f00a..0836f746a02 100644 --- a/tests/servers/test_text_server.h +++ b/tests/servers/test_text_server.h @@ -35,7 +35,7 @@ #ifdef TOOLS_ENABLED #include "editor/themes/builtin_fonts.gen.h" -#include "servers/text_server.h" +#include "servers/text/text_server.h" #include "tests/test_macros.h" namespace TestTextServer { diff --git a/tests/test_main.cpp b/tests/test_main.cpp index 3eb74332ee7..3cac5587f1e 100644 --- a/tests/test_main.cpp +++ b/tests/test_main.cpp @@ -211,19 +211,19 @@ #include "scene/theme/theme_db.h" #ifndef NAVIGATION_2D_DISABLED -#include "servers/navigation_server_2d.h" +#include "servers/navigation_2d/navigation_server_2d.h" #endif // NAVIGATION_2D_DISABLED #ifndef NAVIGATION_3D_DISABLED -#include "servers/navigation_server_3d.h" +#include "servers/navigation_3d/navigation_server_3d.h" #endif // NAVIGATION_3D_DISABLED #ifndef PHYSICS_2D_DISABLED -#include "servers/physics_server_2d.h" -#include "servers/physics_server_2d_dummy.h" +#include "servers/physics_2d/physics_server_2d.h" +#include "servers/physics_2d/physics_server_2d_dummy.h" #endif // PHYSICS_2D_DISABLED #ifndef PHYSICS_3D_DISABLED -#include "servers/physics_server_3d.h" -#include "servers/physics_server_3d_dummy.h" +#include "servers/physics_3d/physics_server_3d.h" +#include "servers/physics_3d/physics_server_3d_dummy.h" #endif // PHYSICS_3D_DISABLED #include "servers/rendering/rendering_server_default.h"