diff options
| author | jmanc3 <jman12316@live.com> | 2026-01-31 07:39:22 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-31 13:39:22 +0000 |
| commit | db6114c6c53edc4a60695a12d7f857308b6cd6cd (patch) | |
| tree | bda113f366ceaebeab09f63e98546bad31a54b22 /src | |
| parent | cbeb6984e748029ff481d5581d7e4f5279fd3d1a (diff) | |
renderer/pass: fix surface opaque region bounds used in occluding (#13124)
Diffstat (limited to 'src')
| -rw-r--r-- | src/render/pass/Pass.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp index 3910e6a7..b62a4734 100644 --- a/src/render/pass/Pass.cpp +++ b/src/render/pass/Pass.cpp @@ -55,7 +55,16 @@ void CRenderPass::simplify() { auto opaque = el->element->opaqueRegion(); if (!opaque.empty()) { - opaque.scale(g_pHyprOpenGL->m_renderData.pMonitor->m_scale); + // scale and rounding is very particular so we have to use CBoxes scale and round functions + if (opaque.getRects().size() == 1) + opaque = opaque.getExtents().scale(g_pHyprOpenGL->m_renderData.pMonitor->m_scale).round(); + else { + CRegion scaledRegion; + opaque.forEachRect([&scaledRegion](const auto& RECT) { + scaledRegion.add(CBox(RECT.x1, RECT.y1, RECT.x2 - RECT.x1, RECT.y2 - RECT.y1).scale(g_pHyprOpenGL->m_renderData.pMonitor->m_scale).round()); + }); + opaque = scaledRegion; + } // if this intersects the liveBlur region, allow live blur to operate correctly. // do not occlude a border near it. |
