summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-04-03 14:09:58 +0100
committerVaxry <vaxry@vaxry.net>2024-04-03 14:09:58 +0100
commitefdc1af04420b59917f8530a20ccfabe658f636a (patch)
tree14f40ed9e1dd288264478d1ff5a77e23c6b2ce54 /src/render/Renderer.cpp
parent347b83903474ab9e95fa9d4ba123f6f78ab38d40 (diff)
renderer: some fixes for renderModif
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 446cb9bf..e738de9b 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -760,13 +760,35 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, PHLWORKSPAC
// g_pHyprOpenGL->setMatrixScaleTranslate(translate, scale);
g_pHyprOpenGL->m_RenderData.renderModif = RENDERMODIFDATA;
+ if (!pWorkspace) {
+ // allow rendering without a workspace. In this case, just render layers.
+ g_pHyprOpenGL->blend(true);
+
+ 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);
+ }
+ for (auto& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) {
+ renderLayer(ls.get(), pMonitor, time);
+ }
+ for (auto& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]) {
+ renderLayer(ls.get(), pMonitor, time);
+ }
+
+ g_pHyprOpenGL->m_RenderData.renderModif = {};
+
+ return;
+ }
+
// for storing damage when we optimize for occlusion
CRegion preOccludedDamage{g_pHyprOpenGL->m_RenderData.damage};
// Render layer surfaces below windows for monitor
// 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);
+ const auto PFULLWINDOW = pWorkspace ? g_pCompositor->getFullscreenWindowOnWorkspace(pWorkspace->m_iID) : nullptr;
if (!pWorkspace->m_bHasFullscreenWindow || pWorkspace->m_efFullscreenMode != FULLSCREEN_FULL || !PFULLWINDOW || PFULLWINDOW->m_vRealSize.isBeingAnimated() ||
!PFULLWINDOW->opaque() || pWorkspace->m_vRenderOffset.value() != Vector2D{}) {
@@ -804,8 +826,6 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, PHLWORKSPAC
g_pHyprOpenGL->m_RenderData.damage = preOccludedDamage;
- g_pHyprOpenGL->m_RenderData.renderModif = {};
-
// and then special
for (auto& ws : g_pCompositor->m_vWorkspaces) {
if (ws->m_iMonitorID == pMonitor->ID && ws->m_fAlpha.value() > 0.f && ws->m_bIsSpecialWorkspace) {
@@ -2450,6 +2470,7 @@ void CHyprRenderer::setOccludedForBackLayers(CRegion& region, PHLWORKSPACE pWork
CBox box = {POS.x, POS.y, SIZE.x, SIZE.y};
box.scale(PMONITOR->scale);
+ g_pHyprOpenGL->m_RenderData.renderModif.applyToBox(box);
rg.add(box);
}