diff options
Diffstat (limited to 'modules/openxr/openxr_api.h')
-rw-r--r-- | modules/openxr/openxr_api.h | 54 |
1 files changed, 39 insertions, 15 deletions
diff --git a/modules/openxr/openxr_api.h b/modules/openxr/openxr_api.h index 7ec622364b..e835366200 100644 --- a/modules/openxr/openxr_api.h +++ b/modules/openxr/openxr_api.h @@ -57,6 +57,31 @@ class OpenXRInterface; class OpenXRAPI { +public: + class OpenXRSwapChainInfo { + private: + XrSwapchain swapchain = XR_NULL_HANDLE; + void *swapchain_graphics_data = nullptr; + uint32_t image_index = 0; + bool image_acquired = false; + bool skip_acquire_swapchain = false; + + static Vector<OpenXRSwapChainInfo> free_queue; + + public: + _FORCE_INLINE_ XrSwapchain get_swapchain() const { return swapchain; } + _FORCE_INLINE_ bool is_image_acquired() const { return image_acquired; } + + bool create(XrSwapchainCreateFlags p_create_flags, XrSwapchainUsageFlags p_usage_flags, int64_t p_swapchain_format, uint32_t p_width, uint32_t p_height, uint32_t p_sample_count, uint32_t p_array_size); + void queue_free(); + static void free_queued(); + void free(); + + bool acquire(XrBool32 &p_should_render); + bool release(); + RID get_image(); + }; + private: // our singleton static OpenXRAPI *singleton; @@ -137,20 +162,16 @@ private: OPENXR_SWAPCHAIN_MAX }; - struct OpenXRSwapChainInfo { - XrSwapchain swapchain = XR_NULL_HANDLE; - void *swapchain_graphics_data = nullptr; - uint32_t image_index = 0; - bool image_acquired = false; - bool skip_acquire_swapchain = false; - }; - - OpenXRSwapChainInfo swapchains[OPENXR_SWAPCHAIN_MAX]; + int64_t color_swapchain_format = 0; + int64_t depth_swapchain_format = 0; + Size2i main_swapchain_size = { 0, 0 }; + OpenXRSwapChainInfo main_swapchains[OPENXR_SWAPCHAIN_MAX]; XrSpace play_space = XR_NULL_HANDLE; XrSpace view_space = XR_NULL_HANDLE; bool view_pose_valid = false; XRPose::TrackingConfidence head_pose_confidence = XRPose::XR_TRACKING_CONFIDENCE_NONE; + bool has_xr_viewport = false; bool emulating_local_floor = false; bool should_reset_emulated_floor_height = false; @@ -238,14 +259,11 @@ private: bool setup_view_space(); bool load_supported_swapchain_formats(); bool is_swapchain_format_supported(int64_t p_swapchain_format); - bool create_swapchains(); + bool obtain_swapchain_formats(); + bool create_main_swapchains(Size2i p_size); + void free_main_swapchains(); void destroy_session(); - // swapchains - bool create_swapchain(XrSwapchainUsageFlags p_usage_flags, int64_t p_swapchain_format, uint32_t p_width, uint32_t p_height, uint32_t p_sample_count, uint32_t p_array_size, XrSwapchain &r_swapchain, void **r_swapchain_graphics_data); - bool acquire_image(OpenXRSwapChainInfo &p_swapchain); - bool release_image(OpenXRSwapChainInfo &p_swapchain); - // action map struct Tracker { // Trackers represent tracked physical objects such as controllers, pucks, etc. String name; // Name for this tracker (i.e. "/user/hand/left") @@ -314,6 +332,7 @@ public: XrInstance get_instance() const { return instance; }; XrSystemId get_system_id() const { return system_id; }; XrSession get_session() const { return session; }; + OpenXRGraphicsExtensionWrapper *get_graphics_extension() const { return graphics_extension; }; String get_runtime_name() const { return runtime_name; }; String get_runtime_version() const { return runtime_version; }; @@ -338,6 +357,7 @@ public: String get_error_string(XrResult result) const; String get_swapchain_format_name(int64_t p_swapchain_format) const; + OpenXRInterface *get_xr_interface() const { return xr_interface; } void set_xr_interface(OpenXRInterface *p_xr_interface); static void register_extension_wrapper(OpenXRExtensionWrapper *p_extension_wrapper); static void unregister_extension_wrapper(OpenXRExtensionWrapper *p_extension_wrapper); @@ -405,6 +425,10 @@ public: // Play space. Size2 get_play_space_bounds() const; + // swapchains + int64_t get_color_swapchain_format() const { return color_swapchain_format; } + int64_t get_depth_swapchain_format() const { return depth_swapchain_format; } + // action map String get_default_action_map_resource_name(); |