summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-04-10 14:22:17 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-04-10 14:22:17 +0200
commit0d50f45482999222f7fffe8b4ce15f53caaaff91 (patch)
tree9f89b5ee47703aef10ab57219206be1af37f3965
parentd899558bbc8c0ecf7909a6186f72781944b51e7c (diff)
parentb67eba8399ca62dc2c8cca8d7f496400061e4b44 (diff)
downloadredot-engine-0d50f45482999222f7fffe8b4ce15f53caaaff91.tar.gz
Merge pull request #90416 from BastiaanOlij/openxr_fix_reverse_z
OpenXR: Apply fix for reverse Z
-rw-r--r--modules/openxr/openxr_api.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/modules/openxr/openxr_api.cpp b/modules/openxr/openxr_api.cpp
index 5438f5020c..1fe402341b 100644
--- a/modules/openxr/openxr_api.cpp
+++ b/modules/openxr/openxr_api.cpp
@@ -1204,10 +1204,12 @@ bool OpenXRAPI::create_main_swapchains(Size2i p_size) {
depth_views[i].subImage.imageRect.offset.y = 0;
depth_views[i].subImage.imageRect.extent.width = main_swapchain_size.width;
depth_views[i].subImage.imageRect.extent.height = main_swapchain_size.height;
+ // OpenXR spec says that: minDepth < maxDepth.
depth_views[i].minDepth = 0.0;
depth_views[i].maxDepth = 1.0;
- depth_views[i].nearZ = 0.01; // Near and far Z will be set to the correct values in fill_projection_matrix
- depth_views[i].farZ = 100.0;
+ // But we can reverse near and far for reverse-Z.
+ depth_views[i].nearZ = 100.0; // Near and far Z will be set to the correct values in fill_projection_matrix
+ depth_views[i].farZ = 0.01;
}
};
@@ -1802,8 +1804,9 @@ bool OpenXRAPI::get_view_projection(uint32_t p_view, double p_z_near, double p_z
// if we're using depth views, make sure we update our near and far there...
if (depth_views != nullptr) {
for (uint32_t i = 0; i < view_count; i++) {
- depth_views[i].nearZ = p_z_near;
- depth_views[i].farZ = p_z_far;
+ // As we are using reverse-Z these need to be flipped.
+ depth_views[i].nearZ = p_z_far;
+ depth_views[i].farZ = p_z_near;
}
}