Skip to content

Commit af6f932

Browse files
committed
sdfaisnfdsjfhasibcvuweybhfviuwenf whefuwhke
1 parent 37ebdf2 commit af6f932

File tree

3 files changed

+26
-8
lines changed

3 files changed

+26
-8
lines changed

Vulkan.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,12 @@ VkFramebuffer* VulkanCreateFramebuffers(mlx_context mlx, mlx_window win, VkRende
8181
}
8282
return framebuffers;
8383
}
84+
85+
void VulkanDestroyFramebuffers(mlx_context mlx, mlx_window win, VkFramebuffer* framebuffers)
86+
{
87+
VkDevice device = GetMlxFuncs()->mlx_get_vk_device(mlx);
88+
GetVulkanFuncs()->vkDeviceWaitIdle(device);
89+
for(int i = 0; i < GetMlxFuncs()->mlx_get_vk_swapchain_image_count(mlx, win); i++)
90+
GetVulkanFuncs()->vkDestroyFramebuffer(device, framebuffers[i], NULL);
91+
free(framebuffers);
92+
}

Vulkan.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
VkDescriptorPool VulkanCreateDescriptorPool(mlx_context mlx);
99
VkRenderPass VulkanCreateRenderPass(mlx_context mlx, mlx_window win);
1010
VkFramebuffer* VulkanCreateFramebuffers(mlx_context mlx, mlx_window win, VkRenderPass renderpass);
11+
void VulkanDestroyFramebuffers(mlx_context mlx, mlx_window win, VkFramebuffer* framebuffers);
1112

1213
#endif

main.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ typedef struct RenderData
1212
{
1313
VkRenderPass renderpass;
1414
VkFramebuffer* framebuffers;
15+
VkExtent2D swapchain_extent;
1516
mlx_context mlx;
1617
mlx_window win;
1718
mlx_image img;
@@ -21,6 +22,16 @@ void VulkanRender(VkCommandBuffer cmd, void* param)
2122
{
2223
RenderData* data = (RenderData*)param;
2324

25+
VkExtent2D swapchain_extent = GetMlxFuncs()->mlx_get_vk_swapchain_extent(data->mlx, data->win);
26+
if(data->swapchain_extent.width != swapchain_extent.width || data->swapchain_extent.height != swapchain_extent.height)
27+
{
28+
data->swapchain_extent = swapchain_extent;
29+
VulkanDestroyFramebuffers(data->mlx, data->win, data->framebuffers);
30+
GetVulkanFuncs()->vkDestroyRenderPass(GetMlxFuncs()->mlx_get_vk_device(data->mlx), data->renderpass, NULL);
31+
data->renderpass = VulkanCreateRenderPass(data->mlx, data->win);
32+
data->framebuffers = VulkanCreateFramebuffers(data->mlx, data->win, data->renderpass);
33+
}
34+
2435
ImGui_ImplVulkan_NewFrame();
2536
ImGui_ImplSDL2_NewFrame();
2637
igNewFrame();
@@ -34,8 +45,8 @@ void VulkanRender(VkCommandBuffer cmd, void* param)
3445
info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
3546
info.renderPass = data->renderpass;
3647
info.framebuffer = data->framebuffers[GetMlxFuncs()->mlx_get_current_vk_swapchain_image_index(data->mlx, data->win)];
37-
info.renderArea.extent.width = GetMlxFuncs()->mlx_get_vk_swapchain_extent(data->mlx, data->win).width;
38-
info.renderArea.extent.height = GetMlxFuncs()->mlx_get_vk_swapchain_extent(data->mlx, data->win).height;
48+
info.renderArea.extent.width = swapchain_extent.width;
49+
info.renderArea.extent.height = swapchain_extent.height;
3950
GetVulkanFuncs()->vkCmdBeginRenderPass(cmd, &info, VK_SUBPASS_CONTENTS_INLINE);
4051

4152
ImGui_ImplVulkan_RenderDrawData(draw_data, cmd, VK_NULL_HANDLE);
@@ -82,7 +93,7 @@ int main(void)
8293
info.title = "MLX Window";
8394
info.width = 1250;
8495
info.height = 720;
85-
info.is_resizable = false;
96+
info.is_resizable = true;
8697
mlx_window win = mlx_new_window(mlx, &info);
8798

8899
LoadMlxBindings(mlx, GetMlxFuncs());
@@ -126,17 +137,14 @@ int main(void)
126137
data.mlx = mlx;
127138
data.win = win;
128139
data.framebuffers = framebuffers;
140+
data.swapchain_extent = GetMlxFuncs()->mlx_get_vk_swapchain_extent(mlx, win);
129141
data.img = mlx_new_image_from_file(mlx, "MacroLibX/example/42_logo.png", NULL, NULL);
130142

131143
mlx_add_loop_hook(mlx, MlxRender, &data);
132144
GetMlxFuncs()->mlx_add_pre_render_hook(mlx, win, VulkanRender, &data);
133145
mlx_loop(mlx);
134146

135-
GetVulkanFuncs()->vkDeviceWaitIdle(device);
136-
137-
for(int i = 0; i < GetMlxFuncs()->mlx_get_vk_swapchain_image_count(mlx, win); i++)
138-
GetVulkanFuncs()->vkDestroyFramebuffer(device, framebuffers[i], NULL);
139-
free(framebuffers);
147+
VulkanDestroyFramebuffers(mlx, win, framebuffers);
140148

141149
ImGui_ImplVulkan_Shutdown();
142150
ImGui_ImplSDL2_Shutdown();

0 commit comments

Comments
 (0)