diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2025-10-02 12:01:16 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-02 12:01:16 +0200 |
| commit | c467bb26406a35b8bbfac6478e6382d1d79b6664 (patch) | |
| tree | a4f69a18994b57196aad1a396cc14d51acb4f035 /src | |
| parent | e0c96276df75accc853a30186ae5de580b2c725f (diff) | |
renderer: fix popup fadeout blur (#11756)
popups dont get no xray
Diffstat (limited to 'src')
| -rw-r--r-- | src/render/Renderer.cpp | 16 | ||||
| -rw-r--r-- | src/render/pass/TexPassElement.cpp | 18 | ||||
| -rw-r--r-- | src/render/pass/TexPassElement.hpp | 1 |
3 files changed, 22 insertions, 13 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 65d8a074..0626271e 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -2598,16 +2598,16 @@ void CHyprRenderer::renderSnapshot(WP<CPopup> popup) { const bool SHOULD_BLUR = shouldBlur(popup); CTexPassElement::SRenderData data; - data.flipEndFrame = true; - data.tex = FBDATA->getTexture(); - data.box = {{}, PMONITOR->m_transformedSize}; - data.a = popup->m_alpha->value(); - data.damage = fakeDamage; - data.blur = SHOULD_BLUR; - data.blurA = sqrt(popup->m_alpha->value()); // sqrt makes the blur fadeout more realistic. + data.flipEndFrame = true; + data.tex = FBDATA->getTexture(); + data.box = {{}, PMONITOR->m_transformedSize}; + data.a = popup->m_alpha->value(); + data.damage = fakeDamage; + 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 */ - ; m_renderPass.add(makeUnique<CTexPassElement>(std::move(data))); } diff --git a/src/render/pass/TexPassElement.cpp b/src/render/pass/TexPassElement.cpp index 4702c0e4..39853a64 100644 --- a/src/render/pass/TexPassElement.cpp +++ b/src/render/pass/TexPassElement.cpp @@ -36,13 +36,21 @@ void CTexPassElement::draw(const CRegion& damage) { g_pHyprOpenGL->m_renderData.discardOpacity = *m_data.ignoreAlpha; } - if (m_data.blur) - g_pHyprOpenGL->renderTexture( - m_data.tex, m_data.box, - {.a = m_data.a, .blur = true, .blurA = m_data.blurA, .overallA = 1.F, .round = m_data.round, .roundingPower = m_data.roundingPower, .blockBlurOptimization = false}); - else + if (m_data.blur) { + g_pHyprOpenGL->renderTexture(m_data.tex, m_data.box, + { + .a = m_data.a, + .blur = true, + .blurA = m_data.blurA, + .overallA = 1.F, + .round = m_data.round, + .roundingPower = m_data.roundingPower, + .blockBlurOptimization = m_data.blockBlurOptimization.value_or(false), + }); + } else { g_pHyprOpenGL->renderTexture(m_data.tex, m_data.box, {.damage = m_data.damage.empty() ? &damage : &m_data.damage, .a = m_data.a, .round = m_data.round, .roundingPower = m_data.roundingPower}); + } } bool CTexPassElement::needsLiveBlur() { diff --git a/src/render/pass/TexPassElement.hpp b/src/render/pass/TexPassElement.hpp index 4257357e..a922843d 100644 --- a/src/render/pass/TexPassElement.hpp +++ b/src/render/pass/TexPassElement.hpp @@ -21,6 +21,7 @@ class CTexPassElement : public IPassElement { CBox clipBox; bool blur = false; std::optional<float> ignoreAlpha; + std::optional<bool> blockBlurOptimization; }; CTexPassElement(const SRenderData& data); |
