From 0ce95894a366640ab38952b432f9d40a38bae499 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Sat, 14 Feb 2026 09:27:45 +0800 Subject: [PATCH] [Fix] (MG_Backend/DirectVulkan): fix present mode pick logic --- .../DirectVulkan/Renderer/VulkanRenderer.cpp | 10 +++++----- .../MG_Backend/DirectVulkan/Renderer/VulkanRenderer.h | 11 ++++++----- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp b/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp index 7967dfdc..cefeb100 100644 --- a/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp +++ b/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp @@ -338,11 +338,11 @@ namespace MobileGL::MG_Backend::DirectVulkan { VkPresentModeKHR VulkanRenderer::ChooseSwapchainPresentMode( const Vector& availablePresentModes) { - for (const auto& presentMode : availablePresentModes) { - if (presentMode == VK_PRESENT_MODE_IMMEDIATE_KHR) { - return presentMode; - } else if (presentMode == VK_PRESENT_MODE_MAILBOX_KHR) { - return presentMode; + for (auto desiredPresentMode : s_desiredPresentModes) { + for (const auto& presentMode : availablePresentModes) { + if (presentMode == desiredPresentMode) { + return presentMode; + } } } diff --git a/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.h b/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.h index 4fb21edc..bd7401ed 100644 --- a/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.h +++ b/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.h @@ -19,11 +19,6 @@ #define ENUM_STR_CASE(c) case c: return #c; namespace MobileGL::MG_Backend::DirectVulkan { - class VulkanContext; - class SwapchainManager; - class PipelineManager; - struct FrameContext; - using RenderCallback = std::function; struct RendererConfig { @@ -119,6 +114,12 @@ namespace MobileGL::MG_Backend::DirectVulkan { static Bool GetMoreCapablePhysicalDevice(VkPhysicalDevice newVkDevice, VkSurfaceKHR surface, const PhysicalDevice& compareWithDevice, PhysicalDevice& outBetterDevice); static VkSurfaceFormatKHR ChooseSwapchainSurfaceFormat(const Vector& availableFormats); static VkPresentModeKHR ChooseSwapchainPresentMode(const Vector& availablePresentModes); + static constexpr VkPresentModeKHR s_desiredPresentModes[] { + VK_PRESENT_MODE_MAILBOX_KHR, + VK_PRESENT_MODE_IMMEDIATE_KHR, + VK_PRESENT_MODE_FIFO_RELAXED_KHR, + VK_PRESENT_MODE_FIFO_KHR + }; static constexpr const char* s_validationLayerNames[] = { "VK_LAYER_KHRONOS_validation" };