mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-07-03 21:41:19 +12:00
GeneralSettings: Update vsync after settings close (#401)
This commit is contained in:
parent
f41f7b63e8
commit
c3182aedd9
6 changed files with 34 additions and 29 deletions
|
@ -1382,22 +1382,22 @@ VkSurfaceFormatKHR VulkanRenderer::ChooseSwapSurfaceFormat(const std::vector<VkS
|
|||
|
||||
VkPresentModeKHR VulkanRenderer::ChooseSwapPresentMode(const std::vector<VkPresentModeKHR>& modes)
|
||||
{
|
||||
m_vsync_state = (VSync)GetConfig().vsync.GetValue();
|
||||
if (m_vsync_state == VSync::MAILBOX)
|
||||
const auto vsyncState = (VSync)GetConfig().vsync.GetValue();
|
||||
if (vsyncState == VSync::MAILBOX)
|
||||
{
|
||||
if (std::find(modes.cbegin(), modes.cend(), VK_PRESENT_MODE_MAILBOX_KHR) != modes.cend())
|
||||
return VK_PRESENT_MODE_MAILBOX_KHR;
|
||||
|
||||
forceLog_printf("Vulkan: Can't find mailbox present mode");
|
||||
}
|
||||
else if (m_vsync_state == VSync::Immediate)
|
||||
else if (vsyncState == VSync::Immediate)
|
||||
{
|
||||
if (std::find(modes.cbegin(), modes.cend(), VK_PRESENT_MODE_IMMEDIATE_KHR) != modes.cend())
|
||||
return VK_PRESENT_MODE_IMMEDIATE_KHR;
|
||||
|
||||
forceLog_printf("Vulkan: Can't find immediate present mode");
|
||||
}
|
||||
else if (m_vsync_state == VSync::SYNC_AND_LIMIT)
|
||||
else if (vsyncState == VSync::SYNC_AND_LIMIT)
|
||||
{
|
||||
LatteTiming_EnableHostDrivenVSync();
|
||||
// use immediate mode if available, other wise fall back to
|
||||
|
@ -1991,19 +1991,6 @@ void VulkanRenderer::QueryAvailableFormats()
|
|||
}
|
||||
}
|
||||
|
||||
void VulkanRenderer::EnableVSync(int state)
|
||||
{
|
||||
if (m_vsync_state == (VSync)state)
|
||||
return;
|
||||
|
||||
m_vsync_state = (VSync)state;
|
||||
|
||||
// recreate spawn chains (vsync state is checked from config in ChooseSwapPresentMode)
|
||||
RecreateSwapchain(true);
|
||||
if (m_padSwapchainInfo)
|
||||
RecreateSwapchain(false);
|
||||
}
|
||||
|
||||
bool VulkanRenderer::ImguiBegin(bool mainWindow)
|
||||
{
|
||||
if (!Renderer::ImguiBegin(mainWindow))
|
||||
|
@ -2962,6 +2949,16 @@ void VulkanRenderer::RecreateSwapchain(bool main_window)
|
|||
ImguiInit();
|
||||
}
|
||||
|
||||
void VulkanRenderer::UpdateVSyncState(bool main_window)
|
||||
{
|
||||
auto& swapInfo = main_window ? *m_mainSwapchainInfo : *m_padSwapchainInfo;
|
||||
const auto configValue = (VSync)GetConfig().vsync.GetValue();
|
||||
if(swapInfo.m_activeVSyncState != configValue){
|
||||
RecreateSwapchain(main_window);
|
||||
swapInfo.m_activeVSyncState = configValue;
|
||||
}
|
||||
}
|
||||
|
||||
void VulkanRenderer::SwapBuffer(bool main_window)
|
||||
{
|
||||
auto& swapInfo = main_window ? *m_mainSwapchainInfo : *m_padSwapchainInfo;
|
||||
|
@ -2999,6 +2996,8 @@ void VulkanRenderer::SwapBuffer(bool main_window)
|
|||
}
|
||||
}
|
||||
|
||||
UpdateVSyncState(main_window);
|
||||
|
||||
auto& swapinfo = main_window ? *m_mainSwapchainInfo : *m_padSwapchainInfo;
|
||||
AcquireNextSwapchainImage(main_window);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue