41 XrSystemGetInfo systemInfo{ XR_TYPE_SYSTEM_GET_INFO };
45 if (SUCCEEDED(result)) {
46 LogManager::getSingleton().logMessage(
"OpenXR: Headset detected");
49 else if (result == XR_ERROR_FORM_FACTOR_UNAVAILABLE) {
50 LogManager::getSingleton().logMessage(
"OpenXR: No headset detected. Trying again in one second...");
51 using namespace std::chrono_literals;
52 std::this_thread::sleep_for(1s);
107 XrGraphicsBindingD3D11KHR graphicsBinding{ XR_TYPE_GRAPHICS_BINDING_D3D11_KHR };
108 graphicsBinding.device = device.get();
110 XrSessionCreateInfo createInfo{ XR_TYPE_SESSION_CREATE_INFO };
111 createInfo.next = &graphicsBinding;
115 XrReferenceSpaceCreateInfo spaceCreateInfo{ XR_TYPE_REFERENCE_SPACE_CREATE_INFO };
129 uint32_t swapchainFormatCount;
132 std::vector<int64_t> swapchainFormats(swapchainFormatCount);
134 _sessionHandle.
Get(), (uint32_t)swapchainFormats.size(), &swapchainFormatCount, swapchainFormats.data()));
137 auto SelectPixelFormat = [](
const std::vector<int64_t>& runtimePreferredFormats,
138 const std::vector<DXGI_FORMAT>& applicationSupportedFormats) {
139 auto found = std::find_first_of(std::begin(runtimePreferredFormats),
140 std::end(runtimePreferredFormats),
141 std::begin(applicationSupportedFormats),
142 std::end(applicationSupportedFormats));
143 if (found == std::end(runtimePreferredFormats)) {
144 THROW(
"No runtime swapchain format is supported.");
146 return (DXGI_FORMAT)*found;
149 const static std::vector<DXGI_FORMAT> SupportedColorFormats = {
150 DXGI_FORMAT_R8G8B8A8_UNORM,
151 DXGI_FORMAT_B8G8R8A8_UNORM,
152 DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
153 DXGI_FORMAT_B8G8R8A8_UNORM_SRGB,
156 const static std::vector<DXGI_FORMAT> SupportedDepthFormats = {
157 DXGI_FORMAT_D32_FLOAT,
158 DXGI_FORMAT_D16_UNORM,
159 DXGI_FORMAT_D24_UNORM_S8_UINT,
160 DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
163 DXGI_FORMAT colorSwapchainFormat = SelectPixelFormat(swapchainFormats, SupportedColorFormats);
164 DXGI_FORMAT depthSwapchainFormat = SelectPixelFormat(swapchainFormats, SupportedDepthFormats);
166 return { colorSwapchainFormat, depthSwapchainFormat };