From a2a29a60e5301df2cadf58c1bb18495d02710547 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sat, 30 Sep 2023 17:07:50 +0100 Subject: tearing: cleanup vars and avoid rendering before drm is ready --- src/events/Monitors.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'src/events/Monitors.cpp') diff --git a/src/events/Monitors.cpp b/src/events/Monitors.cpp index 24e7cc26..0b90ba1e 100644 --- a/src/events/Monitors.cpp +++ b/src/events/Monitors.cpp @@ -149,19 +149,22 @@ void Events::listener_monitorFrame(void* owner, void* data) { if (!PMONITOR->m_bEnabled) return; - if (PMONITOR->ignoreNextFlipEvent) { - PMONITOR->ignoreNextFlipEvent = false; - return; - } + PMONITOR->tearingState.busy = false; + + if (PMONITOR->tearingState.activelyTearing) { - PMONITOR->renderingFromVblankEvent = true; + if (!PMONITOR->tearingState.frameScheduledWhileBusy) + return; // we did not schedule a frame yet to be displayed, but we are tearing. Why render? + + PMONITOR->tearingState.nextRenderTorn = true; + } static auto* const PENABLERAT = &g_pConfigManager->getConfigValuePtr("misc:render_ahead_of_time")->intValue; static auto* const PRATSAFE = &g_pConfigManager->getConfigValuePtr("misc:render_ahead_safezone")->intValue; PMONITOR->lastPresentationTimer.reset(); - if (*PENABLERAT) { + if (*PENABLERAT && !PMONITOR->tearingState.nextRenderTorn) { if (!PMONITOR->RATScheduled) { // render g_pHyprRenderer->renderMonitor(PMONITOR); @@ -188,8 +191,6 @@ void Events::listener_monitorFrame(void* owner, void* data) { } else { g_pHyprRenderer->renderMonitor(PMONITOR); } - - PMONITOR->renderingFromVblankEvent = false; } void Events::listener_monitorDestroy(void* owner, void* data) { -- cgit v1.2.3