30 std::vector<XrSwapchainImageBaseHeader *> images;
33 CHECK_XR(xrEnumerateSwapchainImages(swapchain, 0, &image_count,
nullptr),
34 "Failed to get count of swapchain images to create for the VR session.");
36 CHECK_XR(xrEnumerateSwapchainImages(swapchain, images.size(), &image_count, images[0]),
37 "Failed to create swapchain images for the VR session.");
43 const XrSession &session,
44 const XrViewConfigurationView &view_config)
47 XrSwapchainCreateInfo create_info = {XR_TYPE_SWAPCHAIN_CREATE_INFO};
48 uint32_t format_count = 0;
50 CHECK_XR(xrEnumerateSwapchainFormats(session, 0, &format_count,
nullptr),
51 "Failed to get count of swapchain image formats.");
52 std::vector<int64_t> swapchain_formats(format_count);
53 CHECK_XR(xrEnumerateSwapchainFormats(
54 session, swapchain_formats.size(), &format_count, swapchain_formats.data()),
55 "Failed to get swapchain image formats.");
56 assert(swapchain_formats.size() == format_count);
59 swapchain_formats, format_, is_srgb_buffer_);
62 "Error: No format matching OpenXR runtime supported swapchain formats found.");
65 create_info.usageFlags = XR_SWAPCHAIN_USAGE_SAMPLED_BIT | XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT |
66 XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT;
67 create_info.format = *chosen_format;
68 create_info.sampleCount = view_config.recommendedSwapchainSampleCount;
69 create_info.width = view_config.recommendedImageRectWidth;
70 create_info.height = view_config.recommendedImageRectHeight;
71 create_info.faceCount = 1;
72 create_info.arraySize = 1;
73 create_info.mipCount = 1;
75 CHECK_XR(xrCreateSwapchain(session, &create_info, &oxr_->swapchain),
76 "Failed to create OpenXR swapchain.");
78 image_width_ = create_info.width;
79 image_height_ = create_info.height;
106 XrSwapchainImageAcquireInfo acquire_info = {XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO};
107 XrSwapchainImageWaitInfo wait_info = {XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO};
110 CHECK_XR(xrAcquireSwapchainImage(oxr_->swapchain, &acquire_info, &image_idx),
111 "Failed to acquire swapchain image for the VR session.");
112 wait_info.timeout = XR_INFINITE_DURATION;
113 CHECK_XR(xrWaitSwapchainImage(oxr_->swapchain, &wait_info),
114 "Failed to acquire swapchain image for the VR session.");
116 return oxr_->swapchain_images[image_idx];