Last active
December 5, 2024 16:44
-
-
Save fredemmott/497b03882525c8e70eefe9579da42969 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/src/injectables/OpenXRKneeboard.cpp b/src/injectables/OpenXRKneeboard.cpp | |
| index 0c3f6d51..5cdbb322 100644 | |
| --- a/src/injectables/OpenXRKneeboard.cpp | |
| +++ b/src/injectables/OpenXRKneeboard.cpp | |
| @@ -50,6 +50,9 @@ | |
| #include <openxr/openxr_platform.h> | |
| #include <openxr/openxr_reflection.h> | |
| +// From OpenXR v1.1 SDK for XrPosef_Multiply | |
| +#include "xr_linear.h" | |
| + | |
| namespace OpenKneeboard { | |
| namespace { | |
| @@ -109,9 +112,7 @@ static inline std::string_view xrresult_to_string(XrResult code) { | |
| switch (code) { | |
| #define XR_RESULT_CASE(enum_name, value) \ | |
| case enum_name: \ | |
| - return { \ | |
| - #enum_name \ | |
| - }; \ | |
| + return {#enum_name}; \ | |
| XR_LIST_ENUM_XrResult(XR_RESULT_CASE) | |
| #undef XR_RESULT_CASE | |
| default: | |
| @@ -370,18 +371,26 @@ XrResult OpenXRKneeboard::xrEndFrame( | |
| SHM::SHARED_TEXTURE_IS_PREMULTIPLIED, | |
| "Use premultiplied alpha in shared texture, or pass " | |
| "XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT"); | |
| + | |
| + XrSpaceLocation localInView {XR_TYPE_SPACE_LOCATION}; | |
| + OPENKNEEBOARD_ALWAYS_ASSERT(XR_SUCCEEDED(gNext->xrLocateSpace( | |
| + mLocalSpace, mViewSpace, frameEndInfo->displayTime, &localInView))); | |
| + const auto kneeboardInLocal = this->GetXrPosef(params.mKneeboardPose); | |
| + XrPosef kneeboardInView {}; | |
| + XrPosef_Multiply(&kneeboardInView, &localInView.pose, &kneeboardInLocal); | |
| + | |
| addedXRLayers.push_back({ | |
| .type = XR_TYPE_COMPOSITION_LAYER_QUAD, | |
| .next = nullptr, | |
| .layerFlags = XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT, | |
| - .space = mLocalSpace, | |
| + .space = mViewSpace, | |
| .eyeVisibility = XR_EYE_VISIBILITY_BOTH, | |
| .subImage = XrSwapchainSubImage { | |
| .swapchain = mSwapchain, | |
| .imageRect = destRect.StaticCast<int, XrRect2Di>(), | |
| .imageArrayIndex = 0, | |
| }, | |
| - .pose = this->GetXrPosef(params.mKneeboardPose), | |
| + .pose = kneeboardInView, | |
| .size = { params.mKneeboardSize.x, params.mKneeboardSize.y }, | |
| }); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment