diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-17 16:49:31 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-17 16:49:31 -0400 |
| commit | eff34c523b4816bb06ffbc19e6d368cac35f538c (patch) | |
| tree | 26678623a8b854c99598da149e14e183087e9670 /src/window.cpp | |
| parent | f5917baf1f3f7f1766ae3730727f83f7a708439c (diff) | |
large refactor for tick rate and handling vkPresentMode
Diffstat (limited to 'src/window.cpp')
| -rw-r--r-- | src/window.cpp | 55 |
1 files changed, 41 insertions, 14 deletions
diff --git a/src/window.cpp b/src/window.cpp index 2a1b905..6655c88 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -51,12 +51,11 @@ unsigned int transferFamilyIndex; bool shouldRecreateSwapchain = false; unsigned int CURRENT_FRAME = 0; unsigned int selectedSurfaceIndex = -1u; -unsigned int selectedPresentIndex = -1u; unsigned int swapchainLength = 0u; VkSwapchainKHR vkSwapchainKHR = VK_NULL_HANDLE; VkSurfaceFormatKHR vkSurfaceFormatKHR; VkFormat depthFormat; -VkPresentModeKHR vkPresentModeKHR; +VkPresentModeKHR vkPresentModeKHR = VK_PRESENT_MODE_FIFO_KHR; VkExtent2D extent; VkImage *swapchainImages = nullptr; VkImageView *swapchainImageViews = nullptr; @@ -604,22 +603,46 @@ void CreateSwapchain() { height = extent.height < surfaceCapabilities.minImageExtent.height ? surfaceCapabilities.minImageExtent.height : extent.height; extent.height = height > surfaceCapabilities.maxImageExtent.height ? surfaceCapabilities.maxImageExtent.height : height; - if (selectedPresentIndex == -1u) { + vkPresentModeKHR = VK_PRESENT_MODE_FIFO_KHR; + if (pkeSettings.graphicsSettings.isWaitingForVsync == false || pkeSettings.graphicsSettings.isFramerateUnlocked == true) { unsigned int presentModeCount = 0; vkGetPhysicalDeviceSurfacePresentModesKHR(vkPhysicalDevice, vkSurfaceKHR, &presentModeCount, nullptr); VkPresentModeKHR *presentModes = Pke_New<VkPresentModeKHR>(presentModeCount); vkGetPhysicalDeviceSurfacePresentModesKHR(vkPhysicalDevice, vkSurfaceKHR, &presentModeCount, presentModes); - unsigned long mailboxIndex = -1; - unsigned long fifoRelaxedIndex = -1; + uint32_t immediateIndex = -1; + uint32_t fifoRelaxedIndex = -1; + /* + uint32_t mailboxIndex = -1; + uint32_t fifoIndex = -1; + */ for (long i = 0; i < presentModeCount; ++i) { - if (presentModes[i] != VkPresentModeKHR::VK_PRESENT_MODE_MAILBOX_KHR) { - mailboxIndex = i; - } else if (presentModes[i] != VkPresentModeKHR::VK_PRESENT_MODE_FIFO_RELAXED_KHR) { + if (presentModes[i] == VkPresentModeKHR::VK_PRESENT_MODE_IMMEDIATE_KHR) { + immediateIndex = i; + } + else if (presentModes[i] == VkPresentModeKHR::VK_PRESENT_MODE_FIFO_RELAXED_KHR) { fifoRelaxedIndex = i; } + /* + // TODO returns 5 swapchain images, which causes other unhandled issues + else if (presentModes[i] == VkPresentModeKHR::VK_PRESENT_MODE_MAILBOX_KHR) { + mailboxIndex = i; + } + else if (presentModes[i] == VkPresentModeKHR::VK_PRESENT_MODE_FIFO_KHR) { + fifoIndex = i; + } + */ + } + if (fifoRelaxedIndex != -1) { + vkPresentModeKHR = VK_PRESENT_MODE_FIFO_RELAXED_KHR; + } + /* + if (mailboxIndex != -1) { + vkPresentModeKHR = VK_PRESENT_MODE_MAILBOX_KHR; + } else + */ + if (immediateIndex != -1) { + vkPresentModeKHR = VK_PRESENT_MODE_IMMEDIATE_KHR; } - selectedPresentIndex = mailboxIndex != -1ul ? mailboxIndex : fifoRelaxedIndex; - vkPresentModeKHR = presentModes[selectedPresentIndex]; Pke_Delete<VkPresentModeKHR>(presentModes, presentModeCount); } @@ -654,7 +677,8 @@ void CreateSwapchain() { vkSwapchainCreateInfo.queueFamilyIndexCount = 0; } - vkCreateSwapchainKHR(vkDevice, &vkSwapchainCreateInfo, vkAllocator, &vkSwapchainKHR); + VkResult vkResult = vkCreateSwapchainKHR(vkDevice, &vkSwapchainCreateInfo, vkAllocator, &vkSwapchainKHR); + assert(vkResult == VK_SUCCESS); VkImageSubresourceRange vkImageSubresourceRange; vkImageSubresourceRange.aspectMask = VkImageAspectFlagBits::VK_IMAGE_ASPECT_COLOR_BIT; @@ -686,13 +710,16 @@ void CreateSwapchain() { assert(depthImages == nullptr || depthImages == CAFE_BABE(VkImage)); assert(depthImageViews == nullptr || depthImageViews == CAFE_BABE(VkImageView)); - vkGetSwapchainImagesKHR(vkDevice, vkSwapchainKHR, &swapchainLength, nullptr); + vkResult = vkGetSwapchainImagesKHR(vkDevice, vkSwapchainKHR, &swapchainLength, nullptr); + assert(vkResult == VK_SUCCESS); swapchainImages = Pke_New<VkImage>(swapchainLength); - vkGetSwapchainImagesKHR(vkDevice, vkSwapchainKHR, &swapchainLength, swapchainImages); + vkResult = vkGetSwapchainImagesKHR(vkDevice, vkSwapchainKHR, &swapchainLength, swapchainImages); + assert(vkResult == VK_SUCCESS); swapchainImageViews = Pke_New<VkImageView>(swapchainLength); for (long i = 0; i < swapchainLength; ++i) { vkImageViewCreateInfo.image = swapchainImages[i]; - vkCreateImageView(vkDevice, &vkImageViewCreateInfo, vkAllocator, &swapchainImageViews[i]); + vkResult = vkCreateImageView(vkDevice, &vkImageViewCreateInfo, vkAllocator, &swapchainImageViews[i]); + assert(vkResult == VK_SUCCESS); } // render target items |
