From 0dc8347a94f0a71eeed10903d3f3fb09b59def3b Mon Sep 17 00:00:00 2001 From: Miguel Borges de Freitas <92enen@gmail.com> Date: Sat, 4 May 2024 16:56:54 +0100 Subject: Rendering: Set window dirty only on app thread --- xbmc/application/Application.cpp | 11 ++++++++++- xbmc/application/Application.h | 2 ++ xbmc/application/ApplicationPowerHandling.cpp | 6 ------ xbmc/windowing/osx/OpenGL/WindowControllerMacOS.mm | 16 ---------------- 4 files changed, 12 insertions(+), 23 deletions(-) diff --git a/xbmc/application/Application.cpp b/xbmc/application/Application.cpp index 6741845c75..6046d2d82e 100644 --- a/xbmc/application/Application.cpp +++ b/xbmc/application/Application.cpp @@ -809,7 +809,16 @@ void CApplication::Render() return; // render gui layer - if (appPower->GetRenderGUI() && !m_skipGuiRender) + const bool renderGUI = appPower->GetRenderGUI(); + if (m_guiRenderLastState != std::nullopt && renderGUI && m_guiRenderLastState != renderGUI) + { + CGUIComponent* gui = CServiceBroker::GetGUI(); + if (gui) + CServiceBroker::GetGUI()->GetWindowManager().MarkDirty(); + } + m_guiRenderLastState = renderGUI; + + if (renderGUI && !m_skipGuiRender) { if (CServiceBroker::GetWinSystem()->GetGfxContext().GetStereoMode()) { diff --git a/xbmc/application/Application.h b/xbmc/application/Application.h index d31e591bcd..b3eaeb5bd4 100644 --- a/xbmc/application/Application.h +++ b/xbmc/application/Application.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -218,6 +219,7 @@ protected: std::chrono::time_point m_lastRenderTime; bool m_skipGuiRender = false; + std::optional m_guiRenderLastState; std::unique_ptr m_musicInfoScanner; diff --git a/xbmc/application/ApplicationPowerHandling.cpp b/xbmc/application/ApplicationPowerHandling.cpp index 4354b9b626..8000a7ee9e 100644 --- a/xbmc/application/ApplicationPowerHandling.cpp +++ b/xbmc/application/ApplicationPowerHandling.cpp @@ -67,12 +67,6 @@ void CApplicationPowerHandling::ResetNavigationTimer() void CApplicationPowerHandling::SetRenderGUI(bool renderGUI) { - if (renderGUI && !m_renderGUI) - { - CGUIComponent* gui = CServiceBroker::GetGUI(); - if (gui) - CServiceBroker::GetGUI()->GetWindowManager().MarkDirty(); - } m_renderGUI = renderGUI; } diff --git a/xbmc/windowing/osx/OpenGL/WindowControllerMacOS.mm b/xbmc/windowing/osx/OpenGL/WindowControllerMacOS.mm index 4f50a49dbc..c3eaa113c2 100644 --- a/xbmc/windowing/osx/OpenGL/WindowControllerMacOS.mm +++ b/xbmc/windowing/osx/OpenGL/WindowControllerMacOS.mm @@ -22,8 +22,6 @@ @implementation XBMCWindowControllerMacOS -bool m_inFullscreenTransition = false; - - (nullable instancetype)initWithTitle:(NSString*)title defaultSize:(NSSize)size { auto frame = NSMakeRect(0, 0, size.width, size.height); @@ -81,9 +79,6 @@ bool m_inFullscreenTransition = false; - (void)windowWillStartLiveResize:(NSNotification*)notification { - if (m_inFullscreenTransition) - return; - std::shared_ptr appPort = CServiceBroker::GetAppPort(); if (appPort) { @@ -93,9 +88,6 @@ bool m_inFullscreenTransition = false; - (void)windowDidEndLiveResize:(NSNotification*)notification { - if (m_inFullscreenTransition) - return; - std::shared_ptr appPort = CServiceBroker::GetAppPort(); if (appPort) { @@ -196,14 +188,8 @@ bool m_inFullscreenTransition = false; return frameSize; } -- (void)windowWillExitFullScreen:(NSNotification*)notification -{ - m_inFullscreenTransition = true; -} - - (void)windowWillEnterFullScreen:(NSNotification*)pNotification { - m_inFullscreenTransition = true; CWinSystemOSX* winSystem = dynamic_cast(CServiceBroker::GetWinSystem()); if (!winSystem) return; @@ -241,7 +227,6 @@ bool m_inFullscreenTransition = false; - (void)windowDidExitFullScreen:(NSNotification*)pNotification { - m_inFullscreenTransition = false; auto winSystem = dynamic_cast(CServiceBroker::GetWinSystem()); if (!winSystem) return; @@ -268,7 +253,6 @@ bool m_inFullscreenTransition = false; - (void)windowDidEnterFullScreen:(NSNotification*)notification { - m_inFullscreenTransition = false; auto winSystem = dynamic_cast(CServiceBroker::GetWinSystem()); if (!winSystem) return; -- cgit v1.2.3