summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2023-07-20 18:03:47 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2023-07-20 18:03:47 +0200
commitff598b0827ca179c57ff2e97806cd65b69374699 (patch)
treeff5a760988331b9d93be6668f48ec747b8af53f9 /src
parente5dd133808acd1ca1c7060f04d4224e1d9aac79d (diff)
renderer: don't occlude when pre-blur is queued
Diffstat (limited to 'src')
-rw-r--r--src/render/OpenGL.cpp12
-rw-r--r--src/render/OpenGL.hpp1
-rw-r--r--src/render/Renderer.cpp3
3 files changed, 11 insertions, 5 deletions
diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp
index 6b72e820..fe028f08 100644
--- a/src/render/OpenGL.cpp
+++ b/src/render/OpenGL.cpp
@@ -945,16 +945,20 @@ void CHyprOpenGLImpl::preBlurForCurrentMonitor() {
}
void CHyprOpenGLImpl::preWindowPass() {
- static auto* const PBLURNEWOPTIMIZE = &g_pConfigManager->getConfigValuePtr("decoration:blur_new_optimizations")->intValue;
- static auto* const PBLUR = &g_pConfigManager->getConfigValuePtr("decoration:blur")->intValue;
-
- if (!m_RenderData.pCurrentMonData->blurFBDirty || !*PBLURNEWOPTIMIZE || !*PBLUR || !m_RenderData.pCurrentMonData->blurFBShouldRender)
+ if (!preBlurQueued())
return;
// blur the main FB, it will be rendered onto the mirror
preBlurForCurrentMonitor();
}
+bool CHyprOpenGLImpl::preBlurQueued() {
+ static auto* const PBLURNEWOPTIMIZE = &g_pConfigManager->getConfigValuePtr("decoration:blur_new_optimizations")->intValue;
+ static auto* const PBLUR = &g_pConfigManager->getConfigValuePtr("decoration:blur")->intValue;
+
+ return !(!m_RenderData.pCurrentMonData->blurFBDirty || !*PBLURNEWOPTIMIZE || !*PBLUR || !m_RenderData.pCurrentMonData->blurFBShouldRender);
+}
+
void CHyprOpenGLImpl::renderTextureWithBlur(const CTexture& tex, wlr_box* pBox, float a, wlr_surface* pSurface, int round, bool blockBlurOptimization) {
RASSERT(m_RenderData.pMonitor, "Tried to render texture with blur without begin()!");
diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp
index 8e834eeb..c2d3a708 100644
--- a/src/render/OpenGL.hpp
+++ b/src/render/OpenGL.hpp
@@ -132,6 +132,7 @@ class CHyprOpenGLImpl {
void markBlurDirtyForMonitor(CMonitor*);
void preWindowPass();
+ bool preBlurQueued();
void preRender(CMonitor*);
void saveBufferForMirror();
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 4514a3d4..dcb6c123 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -480,7 +480,8 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace*
if (!pWorkspace->m_bHasFullscreenWindow || pWorkspace->m_efFullscreenMode != FULLSCREEN_FULL || !PFULLWINDOW || PFULLWINDOW->m_vRealSize.isBeingAnimated() ||
!PFULLWINDOW->opaque() || pWorkspace->m_vRenderOffset.vec() != Vector2D{}) {
- setOccludedForBackLayers(g_pHyprOpenGL->m_RenderData.damage, pWorkspace);
+ if (!g_pHyprOpenGL->preBlurQueued())
+ setOccludedForBackLayers(g_pHyprOpenGL->m_RenderData.damage, pWorkspace);
for (auto& ls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]) {
renderLayer(ls.get(), pMonitor, time);