diff options
| author | UjinT34 <41110182+UjinT34@users.noreply.github.com> | 2026-04-18 13:35:16 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-18 11:35:16 +0100 |
| commit | d50ad2475c45de0bcf14a2476b194de7322a35f7 (patch) | |
| tree | e23809110c86a9996bbb351ad450c0b9abb63396 /src/render/OpenGL.cpp | |
| parent | 593fd5650a89863071d4e224bf4370e95da2c0f0 (diff) | |
renderer: simplify shadows (#14047)
Diffstat (limited to 'src/render/OpenGL.cpp')
| -rw-r--r-- | src/render/OpenGL.cpp | 29 |
1 files changed, 16 insertions, 13 deletions
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<float>(TOPLEFT.x), sc<float>(TOPLEFT.y)); shader->setUniformFloat2(SHADER_BOTTOM_RIGHT, sc<float>(BOTTOMRIGHT.x), sc<float>(BOTTOMRIGHT.y)); shader->setUniformFloat2(SHADER_FULL_SIZE, sc<float>(FULLSIZE.x), sc<float>(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); } |
