summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjmanc3 <jman12316@live.com>2026-01-31 07:39:22 -0600
committerGitHub <noreply@github.com>2026-01-31 13:39:22 +0000
commitdb6114c6c53edc4a60695a12d7f857308b6cd6cd (patch)
treebda113f366ceaebeab09f63e98546bad31a54b22 /src
parentcbeb6984e748029ff481d5581d7e4f5279fd3d1a (diff)
renderer/pass: fix surface opaque region bounds used in occluding (#13124)
Diffstat (limited to 'src')
-rw-r--r--src/render/pass/Pass.cpp11
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.