|
@@ -144,7 +144,6 @@ bool OpenXRCompositionLayerExtension::create_android_surface_swapchain(XrSwapcha
|
|
OpenXRAPI *openxr_api = OpenXRAPI::get_singleton();
|
|
OpenXRAPI *openxr_api = OpenXRAPI::get_singleton();
|
|
ERR_FAIL_NULL_V(openxr_api, false);
|
|
ERR_FAIL_NULL_V(openxr_api, false);
|
|
|
|
|
|
- // @todo We need a way to add to the next pointer chain.
|
|
|
|
XrResult result = xrCreateSwapchainAndroidSurfaceKHR(openxr_api->get_session(), p_info, r_swapchain, r_surface);
|
|
XrResult result = xrCreateSwapchainAndroidSurfaceKHR(openxr_api->get_session(), p_info, r_swapchain, r_surface);
|
|
if (XR_FAILED(result)) {
|
|
if (XR_FAILED(result)) {
|
|
print_line("OpenXR: Failed to create Android surface swapchain [", openxr_api->get_error_string(result), "]");
|
|
print_line("OpenXR: Failed to create Android surface swapchain [", openxr_api->get_error_string(result), "]");
|
|
@@ -254,11 +253,19 @@ void OpenXRViewportCompositionLayerProvider::create_android_surface() {
|
|
ERR_FAIL_COND(android_surface.swapchain != XR_NULL_HANDLE || android_surface.surface.is_valid());
|
|
ERR_FAIL_COND(android_surface.swapchain != XR_NULL_HANDLE || android_surface.surface.is_valid());
|
|
ERR_FAIL_COND(!openxr_api || !openxr_api->is_running());
|
|
ERR_FAIL_COND(!openxr_api || !openxr_api->is_running());
|
|
|
|
|
|
|
|
+ void *next_pointer = nullptr;
|
|
|
|
+ for (OpenXRExtensionWrapper *wrapper : openxr_api->get_registered_extension_wrappers()) {
|
|
|
|
+ void *np = wrapper->set_android_surface_swapchain_create_info_and_get_next_pointer(extension_property_values, next_pointer);
|
|
|
|
+ if (np != nullptr) {
|
|
|
|
+ next_pointer = np;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
// The XR_FB_android_surface_swapchain_create extension mandates that format, sampleCount,
|
|
// The XR_FB_android_surface_swapchain_create extension mandates that format, sampleCount,
|
|
// faceCount, arraySize, and mipCount must be zero.
|
|
// faceCount, arraySize, and mipCount must be zero.
|
|
XrSwapchainCreateInfo info = {
|
|
XrSwapchainCreateInfo info = {
|
|
XR_TYPE_SWAPCHAIN_CREATE_INFO, // type
|
|
XR_TYPE_SWAPCHAIN_CREATE_INFO, // type
|
|
- nullptr, // next
|
|
|
|
|
|
+ next_pointer, // next
|
|
0, // createFlags
|
|
0, // createFlags
|
|
XR_SWAPCHAIN_USAGE_SAMPLED_BIT | XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT | XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT, // usageFlags
|
|
XR_SWAPCHAIN_USAGE_SAMPLED_BIT | XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT | XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT, // usageFlags
|
|
0, // format
|
|
0, // format
|