You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
OpenXR: Improve swapchain logic and fix swapchain update when render target multiplier is changed.
This commit is contained in:
@@ -58,12 +58,28 @@ class OpenXRInterface;
|
||||
|
||||
class OpenXRAPI {
|
||||
public:
|
||||
struct OpenXRSwapChainInfo {
|
||||
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:
|
||||
@@ -148,12 +164,14 @@ private:
|
||||
|
||||
int64_t color_swapchain_format = 0;
|
||||
int64_t depth_swapchain_format = 0;
|
||||
OpenXRSwapChainInfo swapchains[OPENXR_SWAPCHAIN_MAX];
|
||||
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;
|
||||
@@ -241,7 +259,9 @@ 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();
|
||||
|
||||
// action map
|
||||
@@ -312,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; };
|
||||
|
||||
@@ -406,11 +427,7 @@ public:
|
||||
|
||||
// swapchains
|
||||
int64_t get_color_swapchain_format() const { return color_swapchain_format; }
|
||||
bool create_swapchain(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, XrSwapchain &r_swapchain, void **r_swapchain_graphics_data);
|
||||
void free_swapchain(OpenXRSwapChainInfo &p_swapchain);
|
||||
bool acquire_image(OpenXRSwapChainInfo &p_swapchain);
|
||||
RID get_image(OpenXRSwapChainInfo &p_swapchain);
|
||||
bool release_image(OpenXRSwapChainInfo &p_swapchain);
|
||||
int64_t get_depth_swapchain_format() const { return depth_swapchain_format; }
|
||||
|
||||
// action map
|
||||
String get_default_action_map_resource_name();
|
||||
|
||||
Reference in New Issue
Block a user