summaryrefslogtreecommitdiffstats
path: root/modules/openxr/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'modules/openxr/extensions')
-rw-r--r--modules/openxr/extensions/openxr_extension_wrapper.h2
-rw-r--r--modules/openxr/extensions/openxr_fb_passthrough_extension_wrapper.cpp24
-rw-r--r--modules/openxr/extensions/openxr_fb_passthrough_extension_wrapper.h15
-rw-r--r--modules/openxr/extensions/openxr_hand_tracking_extension.cpp4
-rw-r--r--modules/openxr/extensions/openxr_opengl_extension.cpp4
-rw-r--r--modules/openxr/extensions/openxr_vulkan_extension.cpp10
6 files changed, 26 insertions, 33 deletions
diff --git a/modules/openxr/extensions/openxr_extension_wrapper.h b/modules/openxr/extensions/openxr_extension_wrapper.h
index 920bfe74b7..31f8d23268 100644
--- a/modules/openxr/extensions/openxr_extension_wrapper.h
+++ b/modules/openxr/extensions/openxr_extension_wrapper.h
@@ -36,8 +36,6 @@
#include "core/templates/hash_map.h"
#include "core/templates/rid.h"
-#include "thirdparty/openxr/src/common/xr_linear.h"
-
#include <openxr/openxr.h>
class OpenXRAPI;
diff --git a/modules/openxr/extensions/openxr_fb_passthrough_extension_wrapper.cpp b/modules/openxr/extensions/openxr_fb_passthrough_extension_wrapper.cpp
index 569895a620..f730f2bd2c 100644
--- a/modules/openxr/extensions/openxr_fb_passthrough_extension_wrapper.cpp
+++ b/modules/openxr/extensions/openxr_fb_passthrough_extension_wrapper.cpp
@@ -107,10 +107,6 @@ bool OpenXRFbPassthroughExtensionWrapper::is_passthrough_enabled() {
return fb_passthrough_ext && passthrough_handle != XR_NULL_HANDLE && passthrough_layer != XR_NULL_HANDLE;
}
-bool OpenXRFbPassthroughExtensionWrapper::is_composition_passthrough_layer_ready() {
- return fb_passthrough_ext && passthrough_handle != XR_NULL_HANDLE && composition_passthrough_layer.layerHandle != XR_NULL_HANDLE;
-}
-
bool OpenXRFbPassthroughExtensionWrapper::start_passthrough() {
if (passthrough_handle == XR_NULL_HANDLE) {
return false;
@@ -128,6 +124,13 @@ bool OpenXRFbPassthroughExtensionWrapper::start_passthrough() {
}
// Create the passthrough layer
+ XrPassthroughLayerCreateInfoFB passthrough_layer_config = {
+ XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB,
+ nullptr,
+ passthrough_handle,
+ XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB,
+ XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB,
+ };
result = xrCreatePassthroughLayerFB(OpenXRAPI::get_singleton()->get_session(), &passthrough_layer_config, &passthrough_layer);
if (!is_valid_passthrough_result(result, "Failed to create the passthrough layer")) {
stop_passthrough();
@@ -140,14 +143,18 @@ bool OpenXRFbPassthroughExtensionWrapper::start_passthrough() {
print_error("Main viewport doesn't have transparent background! Passthrough may not properly render.");
}
- composition_passthrough_layer.layerHandle = passthrough_layer;
-
return true;
}
void OpenXRFbPassthroughExtensionWrapper::on_session_created(const XrSession session) {
if (fb_passthrough_ext) {
// Create the passthrough feature and start it.
+ XrPassthroughCreateInfoFB passthrough_create_info = {
+ XR_TYPE_PASSTHROUGH_CREATE_INFO_FB,
+ nullptr,
+ 0,
+ };
+
XrResult result = xrCreatePassthroughFB(OpenXRAPI::get_singleton()->get_session(), &passthrough_create_info, &passthrough_handle);
if (!OpenXRAPI::get_singleton()->xr_result(result, "Failed to create passthrough")) {
passthrough_handle = XR_NULL_HANDLE;
@@ -157,7 +164,8 @@ void OpenXRFbPassthroughExtensionWrapper::on_session_created(const XrSession ses
}
XrCompositionLayerBaseHeader *OpenXRFbPassthroughExtensionWrapper::get_composition_layer() {
- if (is_composition_passthrough_layer_ready()) {
+ if (is_passthrough_enabled()) {
+ composition_passthrough_layer.layerHandle = passthrough_layer;
return (XrCompositionLayerBaseHeader *)&composition_passthrough_layer;
} else {
return nullptr;
@@ -169,8 +177,6 @@ void OpenXRFbPassthroughExtensionWrapper::stop_passthrough() {
return;
}
- composition_passthrough_layer.layerHandle = XR_NULL_HANDLE;
-
XrResult result;
if (passthrough_layer != XR_NULL_HANDLE) {
// Destroy the layer
diff --git a/modules/openxr/extensions/openxr_fb_passthrough_extension_wrapper.h b/modules/openxr/extensions/openxr_fb_passthrough_extension_wrapper.h
index 619313809d..045e424202 100644
--- a/modules/openxr/extensions/openxr_fb_passthrough_extension_wrapper.h
+++ b/modules/openxr/extensions/openxr_fb_passthrough_extension_wrapper.h
@@ -211,27 +211,12 @@ private:
Viewport *get_main_viewport();
- bool is_composition_passthrough_layer_ready();
-
static OpenXRFbPassthroughExtensionWrapper *singleton;
bool fb_passthrough_ext = false; // required for any passthrough functionality
bool fb_triangle_mesh_ext = false; // only use for projected passthrough
- XrPassthroughCreateInfoFB passthrough_create_info = {
- XR_TYPE_PASSTHROUGH_CREATE_INFO_FB,
- nullptr,
- 0,
- };
XrPassthroughFB passthrough_handle = XR_NULL_HANDLE;
-
- XrPassthroughLayerCreateInfoFB passthrough_layer_config = {
- XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB,
- nullptr,
- passthrough_handle,
- XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB,
- XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB,
- };
XrPassthroughLayerFB passthrough_layer = XR_NULL_HANDLE;
XrCompositionLayerPassthroughFB composition_passthrough_layer = {
diff --git a/modules/openxr/extensions/openxr_hand_tracking_extension.cpp b/modules/openxr/extensions/openxr_hand_tracking_extension.cpp
index 6fffa1ed07..65559afed0 100644
--- a/modules/openxr/extensions/openxr_hand_tracking_extension.cpp
+++ b/modules/openxr/extensions/openxr_hand_tracking_extension.cpp
@@ -134,6 +134,10 @@ void OpenXRHandTrackingExtension::on_process() {
// process our hands
const XrTime time = OpenXRAPI::get_singleton()->get_next_frame_time(); // This data will be used for the next frame we render
+ if (time == 0) {
+ // we don't have timing info yet, or we're skipping a frame...
+ return;
+ }
XrResult result;
diff --git a/modules/openxr/extensions/openxr_opengl_extension.cpp b/modules/openxr/extensions/openxr_opengl_extension.cpp
index 39b5c61e8e..9038e9f458 100644
--- a/modules/openxr/extensions/openxr_opengl_extension.cpp
+++ b/modules/openxr/extensions/openxr_opengl_extension.cpp
@@ -278,8 +278,8 @@ bool OpenXROpenGLExtension::get_swapchain_image_data(XrSwapchain p_swapchain, in
}
bool OpenXROpenGLExtension::create_projection_fov(const XrFovf p_fov, double p_z_near, double p_z_far, Projection &r_camera_matrix) {
- XrMatrix4x4f matrix;
- XrMatrix4x4f_CreateProjectionFov(&matrix, GRAPHICS_OPENGL, p_fov, (float)p_z_near, (float)p_z_far);
+ OpenXRUtil::XrMatrix4x4f matrix;
+ OpenXRUtil::XrMatrix4x4f_CreateProjectionFov(&matrix, OpenXRUtil::GRAPHICS_OPENGL, p_fov, (float)p_z_near, (float)p_z_far);
for (int j = 0; j < 4; j++) {
for (int i = 0; i < 4; i++) {
diff --git a/modules/openxr/extensions/openxr_vulkan_extension.cpp b/modules/openxr/extensions/openxr_vulkan_extension.cpp
index 90c1c62050..9429d9e082 100644
--- a/modules/openxr/extensions/openxr_vulkan_extension.cpp
+++ b/modules/openxr/extensions/openxr_vulkan_extension.cpp
@@ -233,9 +233,9 @@ void OpenXRVulkanExtension::get_usable_swapchain_formats(Vector<int64_t> &p_usab
}
void OpenXRVulkanExtension::get_usable_depth_formats(Vector<int64_t> &p_usable_swap_chains) {
- p_usable_swap_chains.push_back(VK_FORMAT_R32_SFLOAT);
p_usable_swap_chains.push_back(VK_FORMAT_D24_UNORM_S8_UINT);
p_usable_swap_chains.push_back(VK_FORMAT_D32_SFLOAT_S8_UINT);
+ p_usable_swap_chains.push_back(VK_FORMAT_D32_SFLOAT);
}
bool OpenXRVulkanExtension::get_swapchain_image_data(XrSwapchain p_swapchain, int64_t p_swapchain_format, uint32_t p_width, uint32_t p_height, uint32_t p_sample_count, uint32_t p_array_size, void **r_swapchain_graphics_data) {
@@ -308,8 +308,8 @@ bool OpenXRVulkanExtension::get_swapchain_image_data(XrSwapchain p_swapchain, in
format = RenderingDevice::DATA_FORMAT_B8G8R8A8_UINT;
usage_flags |= RenderingDevice::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
break;
- case VK_FORMAT_R32_SFLOAT:
- format = RenderingDevice::DATA_FORMAT_R32_SFLOAT;
+ case VK_FORMAT_D32_SFLOAT:
+ format = RenderingDevice::DATA_FORMAT_D32_SFLOAT;
usage_flags |= RenderingDevice::TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
break;
case VK_FORMAT_D24_UNORM_S8_UINT:
@@ -381,8 +381,8 @@ bool OpenXRVulkanExtension::get_swapchain_image_data(XrSwapchain p_swapchain, in
bool OpenXRVulkanExtension::create_projection_fov(const XrFovf p_fov, double p_z_near, double p_z_far, Projection &r_camera_matrix) {
// Even though this is a Vulkan renderer we're using OpenGL coordinate systems
- XrMatrix4x4f matrix;
- XrMatrix4x4f_CreateProjectionFov(&matrix, GRAPHICS_OPENGL, p_fov, (float)p_z_near, (float)p_z_far);
+ OpenXRUtil::XrMatrix4x4f matrix;
+ OpenXRUtil::XrMatrix4x4f_CreateProjectionFov(&matrix, OpenXRUtil::GRAPHICS_OPENGL, p_fov, (float)p_z_near, (float)p_z_far);
for (int j = 0; j < 4; j++) {
for (int i = 0; i < 4; i++) {