summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 3ec3724a..c81690bc 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -440,11 +440,16 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace*
g_pHyprOpenGL->m_RenderData.renderModif = RENDERMODIFDATA;
// Render layer surfaces below windows for monitor
- for (auto& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]) {
- renderLayer(ls.get(), pMonitor, time);
- }
- for (auto& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]) {
- renderLayer(ls.get(), pMonitor, time);
+ // if we have a fullscreen, opaque window that convers the screen, we can skip this.
+ // TODO: check better with solitary after MR for tearing.
+ const auto PFULLWINDOW = g_pCompositor->getFullscreenWindowOnWorkspace(pWorkspace->m_iID);
+ if (g_pHyprOpenGL->m_RenderData.pCurrentMonData->blurFBDirty || !pWorkspace->m_bHasFullscreenWindow || pWorkspace->m_efFullscreenMode != FULLSCREEN_FULL || !PFULLWINDOW || PFULLWINDOW->m_vRealSize.isBeingAnimated() || !PFULLWINDOW->opaque()) {
+ for (auto& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]) {
+ renderLayer(ls.get(), pMonitor, time);
+ }
+ for (auto& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]) {
+ renderLayer(ls.get(), pMonitor, time);
+ }
}
// pre window pass