summaryrefslogtreecommitdiffstats
path: root/modules/openxr/scene/openxr_composition_layer.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-05-29 22:13:56 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-05-29 22:13:56 +0200
commitd1f6d4c8c3c56206c0fd0679012160fd2d5d94cd (patch)
tree9aff374c0cf3b7c6cfc82390053daef6d20f47bb /modules/openxr/scene/openxr_composition_layer.cpp
parent76237c5f9bee9895d0913d55a064e95716d86800 (diff)
parent6a8f2f00ac41d8977b0085203980f889a9644e23 (diff)
downloadredot-engine-d1f6d4c8c3c56206c0fd0679012160fd2d5d94cd.tar.gz
Merge pull request #92339 from devloglogan/comp-layer-reference-frame
Apply reference frame transform to `OpenXRCompositionLayer` nodes
Diffstat (limited to 'modules/openxr/scene/openxr_composition_layer.cpp')
-rw-r--r--modules/openxr/scene/openxr_composition_layer.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/modules/openxr/scene/openxr_composition_layer.cpp b/modules/openxr/scene/openxr_composition_layer.cpp
index b02f3082ab..f69a907be9 100644
--- a/modules/openxr/scene/openxr_composition_layer.cpp
+++ b/modules/openxr/scene/openxr_composition_layer.cpp
@@ -151,6 +151,16 @@ void OpenXRCompositionLayer::update_fallback_mesh() {
should_update_fallback_mesh = true;
}
+XrPosef OpenXRCompositionLayer::get_openxr_pose() {
+ Transform3D reference_frame = XRServer::get_singleton()->get_reference_frame();
+ Transform3D transform = reference_frame.inverse() * get_transform();
+ Quaternion quat(transform.basis.orthonormalized());
+ return {
+ { (float)quat.x, (float)quat.y, (float)quat.z, (float)quat.w },
+ { (float)transform.origin.x, (float)transform.origin.y, (float)transform.origin.z }
+ };
+}
+
bool OpenXRCompositionLayer::is_viewport_in_use(SubViewport *p_viewport) {
for (const OpenXRCompositionLayer *other_composition_layer : composition_layer_nodes) {
if (other_composition_layer != this && other_composition_layer->is_inside_tree() && other_composition_layer->get_layer_viewport() == p_viewport) {