summaryrefslogtreecommitdiff
path: root/src/render/OpenGL.cpp
diff options
context:
space:
mode:
authorUjinT34 <41110182+UjinT34@users.noreply.github.com>2026-04-18 13:35:16 +0300
committerGitHub <noreply@github.com>2026-04-18 11:35:16 +0100
commitd50ad2475c45de0bcf14a2476b194de7322a35f7 (patch)
treee23809110c86a9996bbb351ad450c0b9abb63396 /src/render/OpenGL.cpp
parent593fd5650a89863071d4e224bf4370e95da2c0f0 (diff)
renderer: simplify shadows (#14047)
Diffstat (limited to 'src/render/OpenGL.cpp')
-rw-r--r--src/render/OpenGL.cpp29
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);
}