summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorMihai Fufezan <mihai@fufexan.net>2026-04-03 00:36:58 +0300
committerGitHub <noreply@github.com>2026-04-02 22:36:58 +0100
commitf25473b21b45ab8ded4a0dbba69eb6b6660d568e (patch)
tree9ddcc506b7dbee01ef5f92922e643ea9387047a5 /src/render/Renderer.cpp
parentad906a473f2deffba59b40de44936e17e61f95aa (diff)
render: fix layer blur_popups ignoring ignore_alpha when blur is off (#13947)
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 1b735a46..a9643df0 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -916,7 +916,6 @@ void IHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s
renderdata.blockBlurOptimization = pLayer->m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM || pLayer->m_layer == ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND;
renderdata.clipBox = CBox{0, 0, pMonitor->m_size.x, pMonitor->m_size.y}.scale(pMonitor->m_scale);
-
if (renderdata.blur && pLayer->m_ruleApplicator->ignoreAlpha().hasValue()) {
renderdata.discardMode |= DISCARD_ALPHA;
renderdata.discardOpacity = pLayer->m_ruleApplicator->ignoreAlpha().valueOrDefault();
@@ -944,7 +943,13 @@ void IHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s
renderdata.dontRound = true;
renderdata.popup = true;
renderdata.blur = pLayer->m_ruleApplicator->blurPopups().valueOrDefault();
- renderdata.surfaceCounter = 0;
+ renderdata.discardMode &= ~DISCARD_ALPHA;
+ renderdata.discardOpacity = 0.F;
+ if (renderdata.blur && pLayer->m_ruleApplicator->ignoreAlpha().hasValue()) {
+ renderdata.discardMode |= DISCARD_ALPHA;
+ renderdata.discardOpacity = pLayer->m_ruleApplicator->ignoreAlpha().valueOrDefault();
+ }
+ renderdata.surfaceCounter = 0;
if (popups) {
pLayer->m_popupHead->breadthfirst(
[this, &renderdata](WP<Desktop::View::CPopup> popup, void* data) {
@@ -3157,8 +3162,12 @@ void IHyprRenderer::renderSnapshot(WP<Desktop::View::CPopup> popup) {
data.blur = SHOULD_BLUR;
data.blurA = sqrt(popup->m_alpha->value()); // sqrt makes the blur fadeout more realistic.
data.blockBlurOptimization = SHOULD_BLUR; // force no xray on this (popups never have xray)
- if (SHOULD_BLUR)
- data.ignoreAlpha = std::max(*PBLURIGNOREA, 0.01F); /* ignore the alpha 0 regions */
+ if (SHOULD_BLUR) {
+ if (const auto PLAYER = popup->layerOwner(); PLAYER && PLAYER->m_ruleApplicator->ignoreAlpha().hasValue())
+ data.ignoreAlpha = std::max(PLAYER->m_ruleApplicator->ignoreAlpha().valueOrDefault(), 0.01F);
+ else
+ data.ignoreAlpha = std::max(*PBLURIGNOREA, 0.01F); /* ignore the alpha 0 regions */
+ }
m_renderPass.add(makeUnique<CTexPassElement>(std::move(data)));
}