From d50ad2475c45de0bcf14a2476b194de7322a35f7 Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Sat, 18 Apr 2026 13:35:16 +0300 Subject: renderer: simplify shadows (#14047) --- src/render/OpenGL.cpp | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'src/render/OpenGL.cpp') diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 358e4702..9883d8fc 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -2253,30 +2253,33 @@ void CHyprOpenGLImpl::renderRoundedShadow(const CBox& box, int round, float roun shader->setUniformFloat2(SHADER_TOP_LEFT, sc(TOPLEFT.x), sc(TOPLEFT.y)); shader->setUniformFloat2(SHADER_BOTTOM_RIGHT, sc(BOTTOMRIGHT.x), sc(BOTTOMRIGHT.y)); shader->setUniformFloat2(SHADER_FULL_SIZE, sc(FULLSIZE.x), sc(FULLSIZE.y)); - shader->setUniformFloat(SHADER_RADIUS, range + round); + shader->setUniformFloat(SHADER_RADIUS, round); shader->setUniformFloat(SHADER_ROUNDING_POWER, roundingPower); shader->setUniformFloat(SHADER_RANGE, range); shader->setUniformFloat(SHADER_SHADOW_POWER, SHADOWPOWER); glBindVertexArray(shader->getUniformLocation(SHADER_SHADER_VAO)); + CRegion drawRegion; + if (g_pHyprRenderer->m_renderData.clipBox.width != 0 && g_pHyprRenderer->m_renderData.clipBox.height != 0) { - CRegion damageClip{g_pHyprRenderer->m_renderData.clipBox.x, g_pHyprRenderer->m_renderData.clipBox.y, g_pHyprRenderer->m_renderData.clipBox.width, - g_pHyprRenderer->m_renderData.clipBox.height}; - damageClip.intersect(g_pHyprRenderer->m_renderData.damage); + drawRegion = {g_pHyprRenderer->m_renderData.clipBox.x, g_pHyprRenderer->m_renderData.clipBox.y, g_pHyprRenderer->m_renderData.clipBox.width, + g_pHyprRenderer->m_renderData.clipBox.height}; + drawRegion.intersect(g_pHyprRenderer->m_renderData.damage); + } else + drawRegion = g_pHyprRenderer->m_renderData.damage; - if (!damageClip.empty()) { - damageClip.forEachRect([this](const auto& RECT) { - scissor(&RECT, g_pHyprRenderer->m_renderData.transformDamage); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - }); - } - } else { - g_pHyprRenderer->m_renderData.damage.forEachRect([this](const auto& RECT) { + if (g_pHyprRenderer->m_renderData.currentWindow) { + auto PWINDOW = g_pHyprRenderer->m_renderData.currentWindow.lock(); + shader->setUniformFloat(SHADER_THICK, PWINDOW->getRealBorderSize() + PWINDOW->rounding()); + drawRegion.subtract(PWINDOW->surfaceLogicalBox().value().copy().scale(g_pHyprRenderer->m_renderData.pMonitor->m_scale).expand(-PWINDOW->rounding())); + } + + if (!drawRegion.empty()) + drawRegion.forEachRect([this](const auto& RECT) { scissor(&RECT, g_pHyprRenderer->m_renderData.transformDamage); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); }); - } glBindVertexArray(0); } -- cgit v1.2.3