mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Vulkan: Renaming demo/helper structures. Tidying up examples main.cpp.
This commit is contained in:
		| @@ -36,10 +36,12 @@ HOW TO UPDATE? | |||||||
| Breaking Changes: | Breaking Changes: | ||||||
| - Examples: Vulkan: Added extra parameter to ImGui_ImplVulkan_RenderDrawData(). Engine/app is | - Examples: Vulkan: Added extra parameter to ImGui_ImplVulkan_RenderDrawData(). Engine/app is | ||||||
|   in charge of owning/storing 1 ImGui_ImplVulkan_FrameRenderBuffers per in-flight rendering frame. |   in charge of owning/storing 1 ImGui_ImplVulkan_FrameRenderBuffers per in-flight rendering frame. | ||||||
|   (The demo helper ImGui_ImplVulkanH_WindowData structure carries them.) (#2461, #2348, #2378, #2097) |   (The demo helper ImGui_ImplVulkanH_Window structure carries them.) (#2461, #2348, #2378, #2097) | ||||||
| - Examples: Vulkan: Added MinImageCount field in ImGui_ImplVulkan_InitInfo, required during | - Examples: Vulkan: Added MinImageCount field in ImGui_ImplVulkan_InitInfo, required during | ||||||
|   initialization to specify the number of in-flight image requested by swap chains. |   initialization to specify the number of in-flight image requested by swap chains. | ||||||
|   (was previously a hard #define IMGUI_VK_QUEUED_FRAMES 2). (#2071, #1677) [@nathanvoglsam] |   (was previously a hard #define IMGUI_VK_QUEUED_FRAMES 2). (#2071, #1677) [@nathanvoglsam] | ||||||
|  | - Examples: Vulkan: Tidying up the demo/internals helpers (most engine/app should not rely | ||||||
|  |   on them but it is possible you have!). | ||||||
|  |  | ||||||
|  |  | ||||||
| Other Changes: | Other Changes: | ||||||
|   | |||||||
| @@ -40,10 +40,11 @@ static VkDebugReportCallbackEXT     g_DebugReport = VK_NULL_HANDLE; | |||||||
| static VkPipelineCache          g_PipelineCache = VK_NULL_HANDLE; | static VkPipelineCache          g_PipelineCache = VK_NULL_HANDLE; | ||||||
| static VkDescriptorPool         g_DescriptorPool = VK_NULL_HANDLE; | static VkDescriptorPool         g_DescriptorPool = VK_NULL_HANDLE; | ||||||
|  |  | ||||||
| static ImGui_ImplVulkanH_WindowData g_WindowData; | static ImGui_ImplVulkanH_Window g_WindowData; | ||||||
| static int                      g_MinImageCount = 2; | static int                      g_MinImageCount = 2; | ||||||
| static bool                         g_WantSwapChainRebuild = false; | static bool                     g_SwapChainRebuild = false; | ||||||
| static int                          g_ResizeWidth = 0, g_ResizeHeight = 0; | static int                      g_SwapChainResizeWidth = 0; | ||||||
|  | static int                      g_SwapChainResizeHeight = 0; | ||||||
|  |  | ||||||
| static void check_vk_result(VkResult err) | static void check_vk_result(VkResult err) | ||||||
| { | { | ||||||
| @@ -192,7 +193,7 @@ static void SetupVulkan(const char** extensions, uint32_t extensions_count) | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| static void SetupVulkanWindow(ImGui_ImplVulkanH_WindowData* wd, VkSurfaceKHR surface, int width, int height) | static void SetupVulkanWindow(ImGui_ImplVulkanH_Window* wd, VkSurfaceKHR surface, int width, int height) | ||||||
| { | { | ||||||
|     wd->Surface = surface; |     wd->Surface = surface; | ||||||
|  |  | ||||||
| @@ -220,8 +221,8 @@ static void SetupVulkanWindow(ImGui_ImplVulkanH_WindowData* wd, VkSurfaceKHR sur | |||||||
|     //printf("[vulkan] Selected PresentMode = %d\n", wd->PresentMode); |     //printf("[vulkan] Selected PresentMode = %d\n", wd->PresentMode); | ||||||
|  |  | ||||||
|     // Create SwapChain, RenderPass, Framebuffer, etc. |     // Create SwapChain, RenderPass, Framebuffer, etc. | ||||||
|     ImGui_ImplVulkanH_CreateWindowData(g_Instance, g_PhysicalDevice, g_Device, wd, g_QueueFamily, g_Allocator, width, height, g_MinImageCount); |     IM_ASSERT(g_MinImageCount >= 2); | ||||||
|     IM_ASSERT(wd->FramesQueueSize >= 2); |     ImGui_ImplVulkanH_CreateWindow(g_Instance, g_PhysicalDevice, g_Device, wd, g_QueueFamily, g_Allocator, width, height, g_MinImageCount); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void CleanupVulkan() | static void CleanupVulkan() | ||||||
| @@ -240,14 +241,14 @@ static void CleanupVulkan() | |||||||
|  |  | ||||||
| static void CleanupVulkanWindow() | static void CleanupVulkanWindow() | ||||||
| { | { | ||||||
|     // In a normal engine/app integration, you wouldn't use the ImGui_ImplVulkanH_WindowData helpers, |     // In a normal engine/app integration, you wouldn't use the ImGui_ImplVulkanH_Window helpers, | ||||||
|     // however you would instead need to call ImGui_ImplVulkan_DestroyFrameRenderBuffers() on each  |     // however you would instead need to call ImGui_ImplVulkan_DestroyFrameRenderBuffers() on each  | ||||||
|     // ImGui_ImplVulkan_FrameRenderBuffers structure that you own. |     // ImGui_ImplVulkan_FrameRenderBuffers structure that you own. | ||||||
|     ImGui_ImplVulkanH_WindowData* wd = &g_WindowData; |     ImGui_ImplVulkanH_Window* wd = &g_WindowData; | ||||||
|     ImGui_ImplVulkanH_DestroyWindowData(g_Instance, g_Device, wd, g_Allocator); |     ImGui_ImplVulkanH_DestroyWindow(g_Instance, g_Device, wd, g_Allocator); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void FrameRender(ImGui_ImplVulkanH_WindowData* wd) | static void FrameRender(ImGui_ImplVulkanH_Window* wd) | ||||||
| { | { | ||||||
|     VkResult err; |     VkResult err; | ||||||
|  |  | ||||||
| @@ -255,7 +256,7 @@ static void FrameRender(ImGui_ImplVulkanH_WindowData* wd) | |||||||
|     err = vkAcquireNextImageKHR(g_Device, wd->Swapchain, UINT64_MAX, image_acquired_semaphore, VK_NULL_HANDLE, &wd->FrameIndex); |     err = vkAcquireNextImageKHR(g_Device, wd->Swapchain, UINT64_MAX, image_acquired_semaphore, VK_NULL_HANDLE, &wd->FrameIndex); | ||||||
|     check_vk_result(err); |     check_vk_result(err); | ||||||
|  |  | ||||||
|     ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex]; |     ImGui_ImplVulkanH_Frame* fd = &wd->Frames[wd->FrameIndex]; | ||||||
|     { |     { | ||||||
|         err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, UINT64_MAX);    // wait indefinitely instead of periodically checking |         err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, UINT64_MAX);    // wait indefinitely instead of periodically checking | ||||||
|         check_vk_result(err); |         check_vk_result(err); | ||||||
| @@ -308,9 +309,9 @@ static void FrameRender(ImGui_ImplVulkanH_WindowData* wd) | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| static void FramePresent(ImGui_ImplVulkanH_WindowData* wd) | static void FramePresent(ImGui_ImplVulkanH_Window* wd) | ||||||
| { | { | ||||||
|     ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex]; |     ImGui_ImplVulkanH_Frame* fd = &wd->Frames[wd->FrameIndex]; | ||||||
|     VkPresentInfoKHR info = {}; |     VkPresentInfoKHR info = {}; | ||||||
|     info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; |     info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; | ||||||
|     info.waitSemaphoreCount = 1; |     info.waitSemaphoreCount = 1; | ||||||
| @@ -329,14 +330,14 @@ static void glfw_error_callback(int error, const char* description) | |||||||
|  |  | ||||||
| static void glfw_resize_callback(GLFWwindow*, int w, int h) | static void glfw_resize_callback(GLFWwindow*, int w, int h) | ||||||
| { | { | ||||||
|     g_WantSwapChainRebuild = true; |     g_SwapChainRebuild = true; | ||||||
|     g_ResizeWidth = w; |     g_SwapChainResizeWidth = w; | ||||||
|     g_ResizeHeight = h; |     g_SwapChainResizeHeight = h; | ||||||
| } | } | ||||||
|  |  | ||||||
| int main(int, char**) | int main(int, char**) | ||||||
| { | { | ||||||
|     // Setup window |     // Setup GLFW window | ||||||
|     glfwSetErrorCallback(glfw_error_callback); |     glfwSetErrorCallback(glfw_error_callback); | ||||||
|     if (!glfwInit()) |     if (!glfwInit()) | ||||||
|         return 1; |         return 1; | ||||||
| @@ -363,7 +364,7 @@ int main(int, char**) | |||||||
|     int w, h; |     int w, h; | ||||||
|     glfwGetFramebufferSize(window, &w, &h); |     glfwGetFramebufferSize(window, &w, &h); | ||||||
|     glfwSetFramebufferSizeCallback(window, glfw_resize_callback); |     glfwSetFramebufferSizeCallback(window, glfw_resize_callback); | ||||||
|     ImGui_ImplVulkanH_WindowData* wd = &g_WindowData; |     ImGui_ImplVulkanH_Window* wd = &g_WindowData; | ||||||
|     SetupVulkanWindow(wd, surface, w, h); |     SetupVulkanWindow(wd, surface, w, h); | ||||||
|  |  | ||||||
|     // Setup Dear ImGui context |     // Setup Dear ImGui context | ||||||
| @@ -450,12 +451,13 @@ int main(int, char**) | |||||||
|         // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. |         // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. | ||||||
|         // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. |         // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. | ||||||
|         glfwPollEvents(); |         glfwPollEvents(); | ||||||
|         if (g_WantSwapChainRebuild) |  | ||||||
|  |         if (g_SwapChainRebuild) | ||||||
|         { |         { | ||||||
|             ImGui_ImplVulkanH_CreateWindowData(g_Instance, g_PhysicalDevice, g_Device, &g_WindowData, g_QueueFamily, g_Allocator, g_ResizeWidth, g_ResizeHeight, g_MinImageCount); |             g_SwapChainRebuild = false; | ||||||
|  |             ImGui_ImplVulkanH_CreateWindow(g_Instance, g_PhysicalDevice, g_Device, &g_WindowData, g_QueueFamily, g_Allocator, g_SwapChainResizeWidth, g_SwapChainResizeHeight, g_MinImageCount); | ||||||
|             ImGui_ImplVulkan_SetSwapChainMinImageCount(g_MinImageCount); |             ImGui_ImplVulkan_SetSwapChainMinImageCount(g_MinImageCount); | ||||||
|             g_WindowData.FrameIndex = 0; |             g_WindowData.FrameIndex = 0; | ||||||
|             g_WantSwapChainRebuild = false; |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Start the Dear ImGui frame |         // Start the Dear ImGui frame | ||||||
|   | |||||||
| @@ -32,9 +32,11 @@ static VkDebugReportCallbackEXT     g_DebugReport = VK_NULL_HANDLE; | |||||||
| static VkPipelineCache          g_PipelineCache = VK_NULL_HANDLE; | static VkPipelineCache          g_PipelineCache = VK_NULL_HANDLE; | ||||||
| static VkDescriptorPool         g_DescriptorPool = VK_NULL_HANDLE; | static VkDescriptorPool         g_DescriptorPool = VK_NULL_HANDLE; | ||||||
|  |  | ||||||
| static ImGui_ImplVulkanH_WindowData g_WindowData; | static ImGui_ImplVulkanH_Window g_WindowData; | ||||||
| static uint32_t                 g_MinImageCount = 2; | static uint32_t                 g_MinImageCount = 2; | ||||||
| static bool                         g_WantSwapChainRebuild = false; | static bool                     g_SwapChainRebuild = false; | ||||||
|  | static int                      g_SwapChainResizeWidth = 0; | ||||||
|  | static int                      g_SwapChainResizeHeight = 0; | ||||||
|  |  | ||||||
| static void check_vk_result(VkResult err) | static void check_vk_result(VkResult err) | ||||||
| { | { | ||||||
| @@ -183,7 +185,7 @@ static void SetupVulkan(const char** extensions, uint32_t extensions_count) | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| static void SetupVulkanWindow(ImGui_ImplVulkanH_WindowData* wd, VkSurfaceKHR surface, int width, int height) | static void SetupVulkanWindow(ImGui_ImplVulkanH_Window* wd, VkSurfaceKHR surface, int width, int height) | ||||||
| { | { | ||||||
|     wd->Surface = surface; |     wd->Surface = surface; | ||||||
|  |  | ||||||
| @@ -211,8 +213,8 @@ static void SetupVulkanWindow(ImGui_ImplVulkanH_WindowData* wd, VkSurfaceKHR sur | |||||||
|     //printf("[vulkan] Selected PresentMode = %d\n", wd->PresentMode); |     //printf("[vulkan] Selected PresentMode = %d\n", wd->PresentMode); | ||||||
|  |  | ||||||
|     // Create SwapChain, RenderPass, Framebuffer, etc. |     // Create SwapChain, RenderPass, Framebuffer, etc. | ||||||
|     ImGui_ImplVulkanH_CreateWindowData(g_Instance, g_PhysicalDevice, g_Device, wd, g_QueueFamily, g_Allocator, width, height, g_MinImageCount); |     IM_ASSERT(g_MinImageCount >= 2); | ||||||
|     IM_ASSERT(wd->FramesQueueSize >= 2); |     ImGui_ImplVulkanH_CreateWindow(g_Instance, g_PhysicalDevice, g_Device, wd, g_QueueFamily, g_Allocator, width, height, g_MinImageCount); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void CleanupVulkan() | static void CleanupVulkan() | ||||||
| @@ -231,14 +233,14 @@ static void CleanupVulkan() | |||||||
|  |  | ||||||
| static void CleanupVulkanWindow() | static void CleanupVulkanWindow() | ||||||
| { | { | ||||||
|     // In a normal engine/app integration, you wouldn't use the ImGui_ImplVulkanH_WindowData helpers, |     // In a normal engine/app integration, you wouldn't use the ImGui_ImplVulkanH_Window helpers, | ||||||
|     // however you would instead need to call ImGui_ImplVulkan_DestroyFrameRenderBuffers() on each  |     // however you would instead need to call ImGui_ImplVulkan_DestroyFrameRenderBuffers() on each  | ||||||
|     // ImGui_ImplVulkan_FrameRenderBuffers structure that you own. |     // ImGui_ImplVulkan_FrameRenderBuffers structure that you own. | ||||||
|     ImGui_ImplVulkanH_WindowData* wd = &g_WindowData; |     ImGui_ImplVulkanH_Window* wd = &g_WindowData; | ||||||
|     ImGui_ImplVulkanH_DestroyWindowData(g_Instance, g_Device, wd, g_Allocator); |     ImGui_ImplVulkanH_DestroyWindow(g_Instance, g_Device, wd, g_Allocator); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void FrameRender(ImGui_ImplVulkanH_WindowData* wd) | static void FrameRender(ImGui_ImplVulkanH_Window* wd) | ||||||
| { | { | ||||||
|     VkResult err; |     VkResult err; | ||||||
|  |  | ||||||
| @@ -246,7 +248,7 @@ static void FrameRender(ImGui_ImplVulkanH_WindowData* wd) | |||||||
|     err = vkAcquireNextImageKHR(g_Device, wd->Swapchain, UINT64_MAX, image_acquired_semaphore, VK_NULL_HANDLE, &wd->FrameIndex); |     err = vkAcquireNextImageKHR(g_Device, wd->Swapchain, UINT64_MAX, image_acquired_semaphore, VK_NULL_HANDLE, &wd->FrameIndex); | ||||||
|     check_vk_result(err); |     check_vk_result(err); | ||||||
|  |  | ||||||
|     ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex]; |     ImGui_ImplVulkanH_Frame* fd = &wd->Frames[wd->FrameIndex]; | ||||||
|     { |     { | ||||||
|         err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, UINT64_MAX);    // wait indefinitely instead of periodically checking |         err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, UINT64_MAX);    // wait indefinitely instead of periodically checking | ||||||
|         check_vk_result(err); |         check_vk_result(err); | ||||||
| @@ -299,9 +301,9 @@ static void FrameRender(ImGui_ImplVulkanH_WindowData* wd) | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| static void FramePresent(ImGui_ImplVulkanH_WindowData* wd) | static void FramePresent(ImGui_ImplVulkanH_Window* wd) | ||||||
| { | { | ||||||
|     ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex]; |     ImGui_ImplVulkanH_Frame* fd = &wd->Frames[wd->FrameIndex]; | ||||||
|     VkPresentInfoKHR info = {}; |     VkPresentInfoKHR info = {}; | ||||||
|     info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; |     info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; | ||||||
|     info.waitSemaphoreCount = 1; |     info.waitSemaphoreCount = 1; | ||||||
| @@ -348,7 +350,7 @@ int main(int, char**) | |||||||
|     // Create Framebuffers |     // Create Framebuffers | ||||||
|     int w, h; |     int w, h; | ||||||
|     SDL_GetWindowSize(window, &w, &h); |     SDL_GetWindowSize(window, &w, &h); | ||||||
|     ImGui_ImplVulkanH_WindowData* wd = &g_WindowData; |     ImGui_ImplVulkanH_Window* wd = &g_WindowData; | ||||||
|     SetupVulkanWindow(wd, surface, w, h); |     SetupVulkanWindow(wd, surface, w, h); | ||||||
|  |  | ||||||
|     // Setup Dear ImGui context |     // Setup Dear ImGui context | ||||||
| @@ -441,18 +443,18 @@ int main(int, char**) | |||||||
|                 done = true; |                 done = true; | ||||||
|             if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_RESIZED && event.window.windowID == SDL_GetWindowID(window)) |             if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_RESIZED && event.window.windowID == SDL_GetWindowID(window)) | ||||||
|             { |             { | ||||||
|                 g_WindowData.Width = (int)event.window.data1; |                 g_SwapChainResizeWidth = (int)event.window.data1; | ||||||
|                 g_WindowData.Height = (int)event.window.data2; |                 g_SwapChainResizeHeight = (int)event.window.data2; | ||||||
|                 g_WantSwapChainRebuild = true; |                 g_SwapChainRebuild = true; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (g_WantSwapChainRebuild) |         if (g_SwapChainRebuild) | ||||||
|         { |         { | ||||||
|             ImGui_ImplVulkanH_CreateWindowData(g_Instance, g_PhysicalDevice, g_Device, &g_WindowData, g_QueueFamily, g_Allocator, g_WindowData.Width, g_WindowData.Height, g_MinImageCount); |             g_SwapChainRebuild = false; | ||||||
|  |             ImGui_ImplVulkanH_CreateWindow(g_Instance, g_PhysicalDevice, g_Device, &g_WindowData, g_QueueFamily, g_Allocator, g_SwapChainResizeWidth, g_SwapChainResizeHeight, g_MinImageCount); | ||||||
|             ImGui_ImplVulkan_SetSwapChainMinImageCount(g_MinImageCount); |             ImGui_ImplVulkan_SetSwapChainMinImageCount(g_MinImageCount); | ||||||
|             g_WindowData.FrameIndex = 0; |             g_WindowData.FrameIndex = 0; | ||||||
|             g_WantSwapChainRebuild = false; |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Start the Dear ImGui frame |         // Start the Dear ImGui frame | ||||||
|   | |||||||
| @@ -20,9 +20,9 @@ | |||||||
|  |  | ||||||
| // CHANGELOG | // CHANGELOG | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
| //  2019-XX-XX: *BREAKING CHANGE*: Vulkan: Added extra parameter to ImGui_ImplVulkan_RenderDrawData(). Engine/app is in charge of owning/storing 1 ImGui_ImplVulkan_FrameRenderBuffers per in-flight rendering frame. (The demo helper ImGui_ImplVulkanH_WindowData structure carries them.) | //  2019-XX-XX: *BREAKING CHANGE*: Vulkan: Added extra parameter to ImGui_ImplVulkan_RenderDrawData(). Engine/app is in charge of owning/storing 1 ImGui_ImplVulkan_FrameRenderBuffers per in-flight rendering frame. (The demo helper ImGui_ImplVulkanH_Window structure carries them.) | ||||||
| //  2019-XX-XX: *BREAKING CHANGE*: Vulkan: Added MinImageCount field in ImGui_ImplVulkan_InitInfo, required for initialization (was previously a hard #define IMGUI_VK_QUEUED_FRAMES 2). Added ImGui_ImplVulkan_SetSwapChainMinImageCount(). | //  2019-XX-XX: *BREAKING CHANGE*: Vulkan: Added MinImageCount field in ImGui_ImplVulkan_InitInfo, required for initialization (was previously a hard #define IMGUI_VK_QUEUED_FRAMES 2). Added ImGui_ImplVulkan_SetSwapChainMinImageCount(). | ||||||
| //  2019-XX-XX: Vulkan: Added VkInstance argument to ImGui_ImplVulkanH_CreateWindowData() optional helper. | //  2019-XX-XX: Vulkan: Added VkInstance argument to ImGui_ImplVulkanH_CreateWindow() optional helper. | ||||||
| //  2019-04-04: Vulkan: Avoid passing negative coordinates to vkCmdSetScissor, which debug validation layers do not like. | //  2019-04-04: Vulkan: Avoid passing negative coordinates to vkCmdSetScissor, which debug validation layers do not like. | ||||||
| //  2019-04-01: Vulkan: Support for 32-bit index buffer (#define ImDrawIdx unsigned int). | //  2019-04-01: Vulkan: Support for 32-bit index buffer (#define ImDrawIdx unsigned int). | ||||||
| //  2019-02-16: Vulkan: Viewport and clipping rectangles correctly using draw_data->FramebufferScale to allow retina display. | //  2019-02-16: Vulkan: Viewport and clipping rectangles correctly using draw_data->FramebufferScale to allow retina display. | ||||||
| @@ -63,9 +63,9 @@ static VkDeviceMemory           g_UploadBufferMemory = VK_NULL_HANDLE; | |||||||
| static VkBuffer                 g_UploadBuffer = VK_NULL_HANDLE; | static VkBuffer                 g_UploadBuffer = VK_NULL_HANDLE; | ||||||
|  |  | ||||||
| // Forward Declarations | // Forward Declarations | ||||||
| void ImGui_ImplVulkanH_DestroyFrameData(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_FrameData* fd, const VkAllocationCallbacks* allocator); | void ImGui_ImplVulkanH_DestroyFrame(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_Frame* fd, const VkAllocationCallbacks* allocator); | ||||||
| void ImGui_ImplVulkanH_CreateWindowDataSwapChain(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator, int w, int h, uint32_t min_image_count); | void ImGui_ImplVulkanH_CreateWindowSwapChain(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wd, const VkAllocationCallbacks* allocator, int w, int h, uint32_t min_image_count); | ||||||
| void ImGui_ImplVulkanH_CreateWindowDataCommandBuffers(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, uint32_t queue_family, const VkAllocationCallbacks* allocator); | void ImGui_ImplVulkanH_CreateWindowCommandBuffers(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wd, uint32_t queue_family, const VkAllocationCallbacks* allocator); | ||||||
|  |  | ||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
| // SHADERS | // SHADERS | ||||||
| @@ -877,7 +877,7 @@ VkPresentModeKHR ImGui_ImplVulkanH_SelectPresentMode(VkPhysicalDevice physical_d | |||||||
|     return VK_PRESENT_MODE_FIFO_KHR; // Always available |     return VK_PRESENT_MODE_FIFO_KHR; // Always available | ||||||
| } | } | ||||||
|  |  | ||||||
| void ImGui_ImplVulkanH_CreateWindowDataCommandBuffers(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, uint32_t queue_family, const VkAllocationCallbacks* allocator) | void ImGui_ImplVulkanH_CreateWindowCommandBuffers(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wd, uint32_t queue_family, const VkAllocationCallbacks* allocator) | ||||||
| { | { | ||||||
|     IM_ASSERT(instance != VK_NULL_HANDLE && physical_device != VK_NULL_HANDLE && device != VK_NULL_HANDLE); |     IM_ASSERT(instance != VK_NULL_HANDLE && physical_device != VK_NULL_HANDLE && device != VK_NULL_HANDLE); | ||||||
|     (void)instance; |     (void)instance; | ||||||
| @@ -888,7 +888,7 @@ void ImGui_ImplVulkanH_CreateWindowDataCommandBuffers(VkInstance instance, VkPhy | |||||||
|     VkResult err; |     VkResult err; | ||||||
|     for (uint32_t i = 0; i < wd->FramesQueueSize; i++) |     for (uint32_t i = 0; i < wd->FramesQueueSize; i++) | ||||||
|     { |     { | ||||||
|         ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[i]; |         ImGui_ImplVulkanH_Frame* fd = &wd->Frames[i]; | ||||||
|         { |         { | ||||||
|             VkCommandPoolCreateInfo info = {}; |             VkCommandPoolCreateInfo info = {}; | ||||||
|             info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; |             info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; | ||||||
| @@ -937,17 +937,17 @@ int ImGui_ImplVulkanH_GetMinImageCountFromPresentMode(VkPresentModeKHR present_m | |||||||
| } | } | ||||||
|  |  | ||||||
| // Also destroy old swap chain and in-flight frames data, if any. | // Also destroy old swap chain and in-flight frames data, if any. | ||||||
| void ImGui_ImplVulkanH_CreateWindowDataSwapChain(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator, int w, int h, uint32_t min_image_count) | void ImGui_ImplVulkanH_CreateWindowSwapChain(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wd, const VkAllocationCallbacks* allocator, int w, int h, uint32_t min_image_count) | ||||||
| { | { | ||||||
|     VkResult err; |     VkResult err; | ||||||
|     VkSwapchainKHR old_swapchain = wd->Swapchain; |     VkSwapchainKHR old_swapchain = wd->Swapchain; | ||||||
|     err = vkDeviceWaitIdle(device); |     err = vkDeviceWaitIdle(device); | ||||||
|     check_vk_result(err); |     check_vk_result(err); | ||||||
|  |  | ||||||
|     // We don't use ImGui_ImplVulkanH_DestroyWindowData() because we want to preserve the old swapchain to create the new one. |     // We don't use ImGui_ImplVulkanH_DestroyWindow() because we want to preserve the old swapchain to create the new one. | ||||||
|     // Destroy old Framebuffer |     // Destroy old Framebuffer | ||||||
|     for (uint32_t i = 0; i < wd->FramesQueueSize; i++) |     for (uint32_t i = 0; i < wd->FramesQueueSize; i++) | ||||||
|         ImGui_ImplVulkanH_DestroyFrameData(instance, device, &wd->Frames[i], allocator); |         ImGui_ImplVulkanH_DestroyFrame(instance, device, &wd->Frames[i], allocator); | ||||||
|     delete[] wd->Frames; |     delete[] wd->Frames; | ||||||
|     wd->Frames = NULL; |     wd->Frames = NULL; | ||||||
|     wd->FramesQueueSize = 0; |     wd->FramesQueueSize = 0; | ||||||
| @@ -1003,7 +1003,7 @@ void ImGui_ImplVulkanH_CreateWindowDataSwapChain(VkInstance instance, VkPhysical | |||||||
|         check_vk_result(err); |         check_vk_result(err); | ||||||
|  |  | ||||||
|         IM_ASSERT(wd->Frames == NULL); |         IM_ASSERT(wd->Frames == NULL); | ||||||
|         wd->Frames = new ImGui_ImplVulkanH_FrameData[wd->FramesQueueSize]; |         wd->Frames = new ImGui_ImplVulkanH_Frame[wd->FramesQueueSize]; | ||||||
|         memset(wd->Frames, 0, sizeof(wd->Frames[0]) * wd->FramesQueueSize); |         memset(wd->Frames, 0, sizeof(wd->Frames[0]) * wd->FramesQueueSize); | ||||||
|         for (uint32_t i = 0; i < wd->FramesQueueSize; i++) |         for (uint32_t i = 0; i < wd->FramesQueueSize; i++) | ||||||
|             wd->Frames[i].Backbuffer = backbuffers[i]; |             wd->Frames[i].Backbuffer = backbuffers[i]; | ||||||
| @@ -1062,7 +1062,7 @@ void ImGui_ImplVulkanH_CreateWindowDataSwapChain(VkInstance instance, VkPhysical | |||||||
|         info.subresourceRange = image_range; |         info.subresourceRange = image_range; | ||||||
|         for (uint32_t i = 0; i < wd->FramesQueueSize; i++) |         for (uint32_t i = 0; i < wd->FramesQueueSize; i++) | ||||||
|         { |         { | ||||||
|             ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[i]; |             ImGui_ImplVulkanH_Frame* fd = &wd->Frames[i]; | ||||||
|             info.image = fd->Backbuffer; |             info.image = fd->Backbuffer; | ||||||
|             err = vkCreateImageView(device, &info, allocator, &fd->BackbufferView); |             err = vkCreateImageView(device, &info, allocator, &fd->BackbufferView); | ||||||
|             check_vk_result(err); |             check_vk_result(err); | ||||||
| @@ -1082,7 +1082,7 @@ void ImGui_ImplVulkanH_CreateWindowDataSwapChain(VkInstance instance, VkPhysical | |||||||
|         info.layers = 1; |         info.layers = 1; | ||||||
|         for (uint32_t i = 0; i < wd->FramesQueueSize; i++) |         for (uint32_t i = 0; i < wd->FramesQueueSize; i++) | ||||||
|         { |         { | ||||||
|             ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[i]; |             ImGui_ImplVulkanH_Frame* fd = &wd->Frames[i]; | ||||||
|             attachment[0] = fd->BackbufferView; |             attachment[0] = fd->BackbufferView; | ||||||
|             err = vkCreateFramebuffer(device, &info, allocator, &fd->Framebuffer); |             err = vkCreateFramebuffer(device, &info, allocator, &fd->Framebuffer); | ||||||
|             check_vk_result(err); |             check_vk_result(err); | ||||||
| @@ -1090,29 +1090,29 @@ void ImGui_ImplVulkanH_CreateWindowDataSwapChain(VkInstance instance, VkPhysical | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| void ImGui_ImplVulkanH_CreateWindowData(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, uint32_t queue_family, const VkAllocationCallbacks* allocator, int width, int height, uint32_t min_image_count) | void ImGui_ImplVulkanH_CreateWindow(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wd, uint32_t queue_family, const VkAllocationCallbacks* allocator, int width, int height, uint32_t min_image_count) | ||||||
| { | { | ||||||
|     ImGui_ImplVulkanH_CreateWindowDataSwapChain(instance, physical_device, device, wd, allocator, width, height, min_image_count); |     ImGui_ImplVulkanH_CreateWindowSwapChain(instance, physical_device, device, wd, allocator, width, height, min_image_count); | ||||||
|     ImGui_ImplVulkanH_CreateWindowDataCommandBuffers(instance, physical_device, device, wd, queue_family, allocator); |     ImGui_ImplVulkanH_CreateWindowCommandBuffers(instance, physical_device, device, wd, queue_family, allocator); | ||||||
| } | } | ||||||
|  |  | ||||||
| void ImGui_ImplVulkanH_DestroyWindowData(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator) | void ImGui_ImplVulkanH_DestroyWindow(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_Window* wd, const VkAllocationCallbacks* allocator) | ||||||
| { | { | ||||||
|     vkDeviceWaitIdle(device); // FIXME: We could wait on the Queue if we had the queue in wd-> (otherwise VulkanH functions can't use globals) |     vkDeviceWaitIdle(device); // FIXME: We could wait on the Queue if we had the queue in wd-> (otherwise VulkanH functions can't use globals) | ||||||
|     //vkQueueWaitIdle(g_Queue); |     //vkQueueWaitIdle(g_Queue); | ||||||
|  |  | ||||||
|     for (uint32_t i = 0; i < wd->FramesQueueSize; i++) |     for (uint32_t i = 0; i < wd->FramesQueueSize; i++) | ||||||
|         ImGui_ImplVulkanH_DestroyFrameData(instance, device, &wd->Frames[i], allocator); |         ImGui_ImplVulkanH_DestroyFrame(instance, device, &wd->Frames[i], allocator); | ||||||
|     delete[] wd->Frames; |     delete[] wd->Frames; | ||||||
|     wd->Frames = NULL; |     wd->Frames = NULL; | ||||||
|     vkDestroyRenderPass(device, wd->RenderPass, allocator); |     vkDestroyRenderPass(device, wd->RenderPass, allocator); | ||||||
|     vkDestroySwapchainKHR(device, wd->Swapchain, allocator); |     vkDestroySwapchainKHR(device, wd->Swapchain, allocator); | ||||||
|     vkDestroySurfaceKHR(instance, wd->Surface, allocator); |     vkDestroySurfaceKHR(instance, wd->Surface, allocator); | ||||||
|  |  | ||||||
|     *wd = ImGui_ImplVulkanH_WindowData(); |     *wd = ImGui_ImplVulkanH_Window(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void ImGui_ImplVulkanH_DestroyFrameData(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_FrameData* fd, const VkAllocationCallbacks* allocator) | void ImGui_ImplVulkanH_DestroyFrame(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_Frame* fd, const VkAllocationCallbacks* allocator) | ||||||
| { | { | ||||||
|     (void)instance; |     (void)instance; | ||||||
|     vkDestroyFence(device, fd->Fence, allocator); |     vkDestroyFence(device, fd->Fence, allocator); | ||||||
|   | |||||||
| @@ -83,19 +83,20 @@ IMGUI_IMPL_API void     ImGui_ImplVulkan_DestroyDeviceObjects(); | |||||||
| // (The ImGui_ImplVulkanH_XXX functions do not interact with any of the state used by the regular ImGui_ImplVulkan_XXX functions) | // (The ImGui_ImplVulkanH_XXX functions do not interact with any of the state used by the regular ImGui_ImplVulkan_XXX functions) | ||||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||||
|  |  | ||||||
| struct ImGui_ImplVulkanH_FrameData; | struct ImGui_ImplVulkanH_Frame; | ||||||
| struct ImGui_ImplVulkanH_WindowData; | struct ImGui_ImplVulkanH_Window; | ||||||
|  |  | ||||||
| IMGUI_IMPL_API void                 ImGui_ImplVulkanH_CreateWindowData(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, uint32_t queue_family, const VkAllocationCallbacks* allocator, int w, int h, uint32_t min_image_count); | // Helpers | ||||||
| IMGUI_IMPL_API void                 ImGui_ImplVulkanH_DestroyWindowData(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator); | IMGUI_IMPL_API void                 ImGui_ImplVulkanH_CreateWindow(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wnd, uint32_t queue_family, const VkAllocationCallbacks* allocator, int w, int h, uint32_t min_image_count); | ||||||
|  | IMGUI_IMPL_API void                 ImGui_ImplVulkanH_DestroyWindow(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_Window* wnd, const VkAllocationCallbacks* allocator); | ||||||
| IMGUI_IMPL_API VkSurfaceFormatKHR   ImGui_ImplVulkanH_SelectSurfaceFormat(VkPhysicalDevice physical_device, VkSurfaceKHR surface, const VkFormat* request_formats, int request_formats_count, VkColorSpaceKHR request_color_space); | IMGUI_IMPL_API VkSurfaceFormatKHR   ImGui_ImplVulkanH_SelectSurfaceFormat(VkPhysicalDevice physical_device, VkSurfaceKHR surface, const VkFormat* request_formats, int request_formats_count, VkColorSpaceKHR request_color_space); | ||||||
| IMGUI_IMPL_API VkPresentModeKHR     ImGui_ImplVulkanH_SelectPresentMode(VkPhysicalDevice physical_device, VkSurfaceKHR surface, const VkPresentModeKHR* request_modes, int request_modes_count); | IMGUI_IMPL_API VkPresentModeKHR     ImGui_ImplVulkanH_SelectPresentMode(VkPhysicalDevice physical_device, VkSurfaceKHR surface, const VkPresentModeKHR* request_modes, int request_modes_count); | ||||||
| IMGUI_IMPL_API int                  ImGui_ImplVulkanH_GetMinImageCountFromPresentMode(VkPresentModeKHR present_mode); | IMGUI_IMPL_API int                  ImGui_ImplVulkanH_GetMinImageCountFromPresentMode(VkPresentModeKHR present_mode); | ||||||
|  |  | ||||||
| // Helper structure to hold the data needed by one rendering frame | // Helper structure to hold the data needed by one rendering frame | ||||||
| // (Used by example's main.cpp. Used by multi-viewport features. Probably NOT used by your own app.) | // (Used by example's main.cpp. Used by multi-viewport features. Probably NOT used by your own engine/app.) | ||||||
| // [Please zero-clear before use!] | // [Please zero-clear before use!] | ||||||
| struct ImGui_ImplVulkanH_FrameData | struct ImGui_ImplVulkanH_Frame | ||||||
| { | { | ||||||
|     VkCommandPool       CommandPool; |     VkCommandPool       CommandPool; | ||||||
|     VkCommandBuffer     CommandBuffer; |     VkCommandBuffer     CommandBuffer; | ||||||
| @@ -109,8 +110,8 @@ struct ImGui_ImplVulkanH_FrameData | |||||||
| }; | }; | ||||||
|  |  | ||||||
| // Helper structure to hold the data needed by one rendering context into one OS window | // Helper structure to hold the data needed by one rendering context into one OS window | ||||||
| // (Used by example's main.cpp. Used by multi-viewport features. Probably NOT used by your own app.) | // (Used by example's main.cpp. Used by multi-viewport features. Probably NOT used by your own engine/app.) | ||||||
| struct ImGui_ImplVulkanH_WindowData | struct ImGui_ImplVulkanH_Window | ||||||
| { | { | ||||||
|     int                 Width; |     int                 Width; | ||||||
|     int                 Height; |     int                 Height; | ||||||
| @@ -123,9 +124,9 @@ struct ImGui_ImplVulkanH_WindowData | |||||||
|     VkClearValue        ClearValue; |     VkClearValue        ClearValue; | ||||||
|     uint32_t            FrameIndex;             // Current frame being rendered to (0 <= FrameIndex < FrameInFlightCount) |     uint32_t            FrameIndex;             // Current frame being rendered to (0 <= FrameIndex < FrameInFlightCount) | ||||||
|     uint32_t            FramesQueueSize;        // Number of simultaneous in-flight frames (returned by vkGetSwapchainImagesKHR, usually derived from min_image_count) |     uint32_t            FramesQueueSize;        // Number of simultaneous in-flight frames (returned by vkGetSwapchainImagesKHR, usually derived from min_image_count) | ||||||
|     ImGui_ImplVulkanH_FrameData* Frames; |     ImGui_ImplVulkanH_Frame* Frames; | ||||||
|  |  | ||||||
|     ImGui_ImplVulkanH_WindowData()  |     ImGui_ImplVulkanH_Window()  | ||||||
|     {  |     {  | ||||||
|         memset(this, 0, sizeof(*this));  |         memset(this, 0, sizeof(*this));  | ||||||
|         PresentMode = VK_PRESENT_MODE_MAX_ENUM_KHR; |         PresentMode = VK_PRESENT_MODE_MAX_ENUM_KHR; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user