From e3050a8ec94be86800fa0363a77aa1b85b663135 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 9 Mar 2025 12:20:36 +1100 Subject: [PATCH] attempt at fixing resizing issues --- src/render_vulkan.c | 16 ++++++++-------- src/render_vulkan.h | 8 +++++++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/render_vulkan.c b/src/render_vulkan.c index 0fb92c1..31460a3 100644 --- a/src/render_vulkan.c +++ b/src/render_vulkan.c @@ -266,11 +266,8 @@ b32 _FinishFrame() }; result = vkQueuePresentKHR(renderer.vk.queues.graphics_queue, &present_info); - if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_SUBOPTIMAL_KHR || renderer.resize_requested) - { - renderer.resize_requested = false; + if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_SUBOPTIMAL_KHR || renderer.pending.resized) ResizeSwapchain(); - } else if (result != VK_SUCCESS) { Printf("vkQueuePresentKHR failure: %s", VkResultStr(result)); @@ -285,9 +282,9 @@ b32 _FinishFrame() static void _SetRenderResolution(u32 x, u32 y) { - renderer.vk.sc.extent.width = x; - renderer.vk.sc.extent.height = y; - renderer.resize_requested = true; + renderer.pending.render_width = x; + renderer.pending.render_height = y; + renderer.pending.resized = true; } @@ -308,10 +305,13 @@ static void ResizeSwapchain() DestroyDrawImages(); + renderer.vk.sc.extent.width = renderer.pending.render_width; + renderer.vk.sc.extent.height = renderer.pending.render_height; + Assert(CreateSwapchain(), "Unable to recreate swapchain"); Assert(CreateDrawImages(), "Unable to recreate draw images"); - renderer.resize_requested = false; + renderer.pending.resized = false; } // UTIL diff --git a/src/render_vulkan.h b/src/render_vulkan.h index 42ab995..ed20f40 100644 --- a/src/render_vulkan.h +++ b/src/render_vulkan.h @@ -251,10 +251,16 @@ typedef struct { #endif } Vulkan_t; +typedef struct { + u16 render_width; + u16 render_height; + b8 resized; +} PendingUpdates; + typedef struct { Vulkan_t vk; FrameState frame_state; - b32 resize_requested; + PendingUpdates pending; Arena *arena; Arena *perm_arena; } Renderer_t;