@@ -239,7 +239,7 @@ void OpenXRVulkanExtension::get_usable_depth_formats(Vector<int64_t> &p_usable_s
239239}
240240
241241bool OpenXRVulkanExtension::get_swapchain_image_data (XrSwapchain p_swapchain, int64_t p_swapchain_format, uint32_t p_width, uint32_t p_height, uint32_t p_sample_count, uint32_t p_array_size, void **r_swapchain_graphics_data) {
242- XrSwapchainImageVulkanKHR * images = nullptr ;
242+ LocalVector< XrSwapchainImageVulkanKHR> images;
243243
244244 RenderingServer *rendering_server = RenderingServer::get_singleton ();
245245 ERR_FAIL_NULL_V (rendering_server, false );
@@ -253,27 +253,23 @@ bool OpenXRVulkanExtension::get_swapchain_image_data(XrSwapchain p_swapchain, in
253253 return false ;
254254 }
255255
256- images = (XrSwapchainImageVulkanKHR *)memalloc (sizeof (XrSwapchainImageVulkanKHR) * swapchain_length);
257- ERR_FAIL_NULL_V_MSG (images, false , " OpenXR Couldn't allocate memory for swap chain image" );
256+ images.resize (swapchain_length);
258257
259- for (uint64_t i = 0 ; i < swapchain_length; i++ ) {
260- images[i] .type = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR;
261- images[i] .next = nullptr ;
262- images[i] .image = VK_NULL_HANDLE;
258+ for (XrSwapchainImageVulkanKHR &image : images ) {
259+ image .type = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR;
260+ image .next = nullptr ;
261+ image .image = VK_NULL_HANDLE;
263262 }
264263
265- result = xrEnumerateSwapchainImages (p_swapchain, swapchain_length, &swapchain_length, (XrSwapchainImageBaseHeader *)images);
264+ result = xrEnumerateSwapchainImages (p_swapchain, swapchain_length, &swapchain_length, (XrSwapchainImageBaseHeader *)images. ptr () );
266265 if (XR_FAILED (result)) {
267266 print_line (" OpenXR: Failed to get swapchaim images [" , OpenXRAPI::get_singleton ()->get_error_string (result), " ]" );
268- memfree (images);
269267 return false ;
270268 }
271269
272- // SwapchainGraphicsData *data = (SwapchainGraphicsData *)memalloc(sizeof(SwapchainGraphicsData));
273270 SwapchainGraphicsData *data = memnew (SwapchainGraphicsData);
274271 if (data == nullptr ) {
275272 print_line (" OpenXR: Failed to allocate memory for swapchain data" );
276- memfree (images);
277273 return false ;
278274 }
279275 *r_swapchain_graphics_data = data;
@@ -357,13 +353,13 @@ bool OpenXRVulkanExtension::get_swapchain_image_data(XrSwapchain p_swapchain, in
357353 Vector<RID> texture_rids;
358354
359355 // create Godot texture objects for each entry in our swapchain
360- for (uint64_t i = 0 ; i < swapchain_length; i++ ) {
356+ for (const XrSwapchainImageVulkanKHR &swapchain_image : images ) {
361357 RID image_rid = rendering_device->texture_create_from_extension (
362358 p_array_size == 1 ? RenderingDevice::TEXTURE_TYPE_2D : RenderingDevice::TEXTURE_TYPE_2D_ARRAY,
363359 format,
364360 samples,
365361 usage_flags,
366- (uint64_t )images[i] .image ,
362+ (uint64_t )swapchain_image .image ,
367363 p_width,
368364 p_height,
369365 1 ,
@@ -374,8 +370,6 @@ bool OpenXRVulkanExtension::get_swapchain_image_data(XrSwapchain p_swapchain, in
374370
375371 data->texture_rids = texture_rids;
376372
377- memfree (images);
378-
379373 return true ;
380374}
381375
0 commit comments