mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-24 06:45:58 +01:00
parent
d74607e414
commit
5489f9f07a
3 changed files with 9 additions and 6 deletions
|
@ -583,14 +583,14 @@ void CHyprOpenGLImpl::renderRect(CBox* box, const CColor& col, int round) {
|
||||||
renderRectWithDamage(box, col, &m_RenderData.damage, round);
|
renderRectWithDamage(box, col, &m_RenderData.damage, round);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHyprOpenGLImpl::renderRectWithBlur(CBox* box, const CColor& col, int round, float blurA) {
|
void CHyprOpenGLImpl::renderRectWithBlur(CBox* box, const CColor& col, int round, float blurA, bool xray) {
|
||||||
if (m_RenderData.damage.empty())
|
if (m_RenderData.damage.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CRegion damage{m_RenderData.damage};
|
CRegion damage{m_RenderData.damage};
|
||||||
damage.intersect(*box);
|
damage.intersect(*box);
|
||||||
|
|
||||||
CFramebuffer* POUTFB = blurMainFramebufferWithDamage(blurA, &damage);
|
CFramebuffer* POUTFB = xray ? &m_RenderData.pCurrentMonData->blurFB : blurMainFramebufferWithDamage(blurA, &damage);
|
||||||
|
|
||||||
m_RenderData.currentFB->bind();
|
m_RenderData.currentFB->bind();
|
||||||
|
|
||||||
|
@ -1233,6 +1233,9 @@ void CHyprOpenGLImpl::preRender(CMonitor* pMonitor) {
|
||||||
if (pWindow->m_sAdditionalConfigData.forceNoBlur)
|
if (pWindow->m_sAdditionalConfigData.forceNoBlur)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (pWindow->m_pWLSurface.small() && !pWindow->m_pWLSurface.m_bFillIgnoreSmall)
|
||||||
|
return true;
|
||||||
|
|
||||||
const auto PSURFACE = pWindow->m_pWLSurface.wlr();
|
const auto PSURFACE = pWindow->m_pWLSurface.wlr();
|
||||||
|
|
||||||
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(pWindow->m_iWorkspaceID);
|
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(pWindow->m_iWorkspaceID);
|
||||||
|
|
|
@ -120,7 +120,7 @@ class CHyprOpenGLImpl {
|
||||||
void end();
|
void end();
|
||||||
|
|
||||||
void renderRect(CBox*, const CColor&, int round = 0);
|
void renderRect(CBox*, const CColor&, int round = 0);
|
||||||
void renderRectWithBlur(CBox*, const CColor&, int round = 0, float blurA = 1.f);
|
void renderRectWithBlur(CBox*, const CColor&, int round = 0, float blurA = 1.f, bool xray = false);
|
||||||
void renderRectWithDamage(CBox*, const CColor&, CRegion* damage, int round = 0);
|
void renderRectWithDamage(CBox*, const CColor&, CRegion* damage, int round = 0);
|
||||||
void renderTexture(wlr_texture*, CBox*, float a, int round = 0, bool allowCustomUV = false);
|
void renderTexture(wlr_texture*, CBox*, float a, int round = 0, bool allowCustomUV = false);
|
||||||
void renderTexture(const CTexture&, CBox*, float a, int round = 0, bool discardActive = false, bool allowCustomUV = false);
|
void renderTexture(const CTexture&, CBox*, float a, int round = 0, bool discardActive = false, bool allowCustomUV = false);
|
||||||
|
@ -142,6 +142,7 @@ class CHyprOpenGLImpl {
|
||||||
void makeLayerSnapshot(SLayerSurface*);
|
void makeLayerSnapshot(SLayerSurface*);
|
||||||
void renderSnapshot(CWindow**);
|
void renderSnapshot(CWindow**);
|
||||||
void renderSnapshot(SLayerSurface**);
|
void renderSnapshot(SLayerSurface**);
|
||||||
|
bool shouldUseNewBlurOptimizations(SLayerSurface* pLayer, CWindow* pWindow);
|
||||||
|
|
||||||
void clear(const CColor&);
|
void clear(const CColor&);
|
||||||
void clearWithTex();
|
void clearWithTex();
|
||||||
|
@ -223,8 +224,6 @@ class CHyprOpenGLImpl {
|
||||||
|
|
||||||
void preBlurForCurrentMonitor();
|
void preBlurForCurrentMonitor();
|
||||||
|
|
||||||
bool shouldUseNewBlurOptimizations(SLayerSurface* pLayer, CWindow* pWindow);
|
|
||||||
|
|
||||||
bool passRequiresIntrospection(CMonitor* pMonitor);
|
bool passRequiresIntrospection(CMonitor* pMonitor);
|
||||||
|
|
||||||
friend class CHyprRenderer;
|
friend class CHyprRenderer;
|
||||||
|
|
|
@ -502,7 +502,8 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec*
|
||||||
if (pWindow->m_pWLSurface.small() && !pWindow->m_pWLSurface.m_bFillIgnoreSmall && renderdata.blur && *PBLUR) {
|
if (pWindow->m_pWLSurface.small() && !pWindow->m_pWLSurface.m_bFillIgnoreSmall && renderdata.blur && *PBLUR) {
|
||||||
CBox wb = {renderdata.x - pMonitor->vecPosition.x, renderdata.y - pMonitor->vecPosition.y, renderdata.w, renderdata.h};
|
CBox wb = {renderdata.x - pMonitor->vecPosition.x, renderdata.y - pMonitor->vecPosition.y, renderdata.w, renderdata.h};
|
||||||
wb.scale(pMonitor->scale).round();
|
wb.scale(pMonitor->scale).round();
|
||||||
g_pHyprOpenGL->renderRectWithBlur(&wb, CColor(0, 0, 0, 0), renderdata.dontRound ? 0 : renderdata.rounding - 1, renderdata.fadeAlpha);
|
g_pHyprOpenGL->renderRectWithBlur(&wb, CColor(0, 0, 0, 0), renderdata.dontRound ? 0 : renderdata.rounding - 1, renderdata.fadeAlpha,
|
||||||
|
g_pHyprOpenGL->shouldUseNewBlurOptimizations(nullptr, pWindow));
|
||||||
renderdata.blur = false;
|
renderdata.blur = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue