diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-09-30 17:07:50 +0100 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-09-30 17:07:50 +0100 |
| commit | a2a29a60e5301df2cadf58c1bb18495d02710547 (patch) | |
| tree | 3733a017de47a82b3c654e960f39ce61982f5781 /src/events/Monitors.cpp | |
| parent | e2b72b2975782719759b989853578db95671b069 (diff) | |
tearing: cleanup vars and avoid rendering before drm is ready
Diffstat (limited to 'src/events/Monitors.cpp')
| -rw-r--r-- | src/events/Monitors.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
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) { |
