3#if __has_include(<openxr/openxr.h>)
4#define RVE_XR_AVAILABLE
5#include "RenderTargetCollection.hpp"
8#define XR_USE_GRAPHICS_API_VULKAN
10#include <RGL/../../src/VkTexture.hpp>
13#define XR_USE_GRAPHICS_API_D3D12
14#include <RGL/../../src/D3D12Texture.hpp>
18#include <openxr/openxr.h>
19#include <openxr/openxr_platform.h>
23#ifdef RVE_XR_AVAILABLE
24 namespace OpenXRIntegration {
30 XrSessionState sessionState = XR_SESSION_STATE_UNKNOWN;
36 std::vector<XrViewConfigurationView> viewConfigurationViews;
37 std::vector <XrCompositionLayerProjectionView> projectionViews;
38 std::vector<XrView> views;
40 union XrSwapchainImage {
42 XrSwapchainImageD3D12KHR d3d12Image;
45 XrSwapchainImageVulkanKHR vkImage;
50 std::vector<std::vector<XrSwapchainImage>> swapchainImages;
51 std::vector<std::vector<std::unique_ptr<RGL::ITexture>>> rglSwapchainImages;
52 std::vector<std::vector<XrSwapchainImage>> depthSwapchainImages;
53 std::vector<std::vector<RGLTexturePtr>> rglDepthSwapchainImages;
55 int64_t swapchain_format, depth_swapchain_format = -1;
56 std::vector<XrSwapchain> swapchains;
57 std::vector<XrSwapchain> depth_swapchains;
62 std::vector<XrCompositionLayerDepthInfoKHR> infos;
68 std::vector<XrSwapchainImage> images;
70 uint32_t swapchain_width, swapchain_height;
72 XrSwapchain swapchain;
78 XrGraphicsBindingD3D12KHR d3d12Binding;
81 XrGraphicsBindingVulkan2KHR vkBinding;
85 XrSessionState state = XR_SESSION_STATE_UNKNOWN;
87 XrDebugUtilsMessengerEXT debugMessenger;
88 XrViewConfigurationType viewConfigurationType;
90 inline static PFN_xrCreateDebugUtilsMessengerEXT ext_xrCreateDebugUtilsMessengerEXT =
nullptr;
91 inline static PFN_xrDestroyDebugUtilsMessengerEXT ext_xrDestroyDebugUtilsMessengerEXT =
nullptr;
93 static constexpr XrPosef identity_pose{
94 .orientation = { .x = 0, .y = 0, .z = 0, .w = 1.0 },
95 .position = { .x = 0, .y = 0, .z = 0 }
100 struct OpenXRInitInfo {
102 RGLCommandQueuePtr commandQueue;
104 void init_openxr(
const OpenXRInitInfo& initInfo);
106 std::vector<RenderViewCollection> CreateRenderTargetCollections();
108 void UpdateXRTargetCollections(std::vector<RenderViewCollection>& collections,
const std::vector<XrView>& views);
109 std::pair<std::vector<XrView>, XrFrameState> BeginXRFrame();
110 void EndXRFrame(XrFrameState& frameState);
int64 int64_t
Definition fwd.hpp:85
uint32 uint32_t
Definition fwd.hpp:131
Definition Animation.hpp:6