summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/render/OpenGL.cpp4
-rw-r--r--src/render/Renderer.cpp6
2 files changed, 7 insertions, 3 deletions
diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp
index 94bb1872..0e84fb7f 100644
--- a/src/render/OpenGL.cpp
+++ b/src/render/OpenGL.cpp
@@ -1287,6 +1287,8 @@ void CHyprOpenGLImpl::clearWithTex() {
}
void CHyprOpenGLImpl::destroyMonitorResources(CMonitor* pMonitor) {
+ wlr_output_attach_render(pMonitor->output, nullptr);
+
g_pHyprOpenGL->m_mMonitorRenderResources[pMonitor].mirrorFB.release();
g_pHyprOpenGL->m_mMonitorRenderResources[pMonitor].primaryFB.release();
g_pHyprOpenGL->m_mMonitorRenderResources[pMonitor].mirrorSwapFB.release();
@@ -1298,4 +1300,6 @@ void CHyprOpenGLImpl::destroyMonitorResources(CMonitor* pMonitor) {
g_pHyprOpenGL->m_mMonitorBGTextures.erase(pMonitor);
Debug::log(LOG, "Monitor %s -> destroyed all render data", pMonitor->szName.c_str());
+
+ wlr_output_rollback(pMonitor->output);
}
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 67d8912e..52114197 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -1159,9 +1159,6 @@ bool CHyprRenderer::applyMonitorRule(CMonitor* pMonitor, SMonitorRule* pMonitorR
wlr_output_enable_adaptive_sync(pMonitor->output, 0);
}
- // update renderer
- g_pHyprOpenGL->destroyMonitorResources(pMonitor);
-
if (!wlr_output_commit(pMonitor->output)) {
Debug::log(ERR, "Couldn't commit output named %s", pMonitor->output->name);
return true;
@@ -1193,6 +1190,9 @@ bool CHyprRenderer::applyMonitorRule(CMonitor* pMonitor, SMonitorRule* pMonitorR
wlr_output_enable(pMonitor->output, true);
+ // update renderer (here because it will call rollback, so we cannot do this before committing)
+ g_pHyprOpenGL->destroyMonitorResources(pMonitor);
+
// updato wlroots
Events::listener_change(nullptr, nullptr);