renderpass: use unique ptr instead of shared ptr

lets use unique ptrs instead of refcounting shared ptr when its not
needed, use rvalue reference to construct in vector directly.
This commit is contained in:
Tom Englund
2025-07-10 10:44:59 +02:00
committed by Vaxry
parent 6375e471f3
commit f5af40afce
15 changed files with 46 additions and 46 deletions

View File

@@ -271,5 +271,5 @@ void CHyprDebugOverlay::draw() {
CTexPassElement::SRenderData data;
data.tex = m_texture;
data.box = {0, 0, PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y};
g_pHyprRenderer->m_renderPass.add(makeShared<CTexPassElement>(std::move(data)));
g_pHyprRenderer->m_renderPass.add(makeUnique<CTexPassElement>(std::move(data)));
}

View File

@@ -248,7 +248,7 @@ void CHyprNotificationOverlay::draw(PHLMONITOR pMonitor) {
data.box = {0, 0, MONSIZE.x, MONSIZE.y};
data.a = 1.F;
g_pHyprRenderer->m_renderPass.add(makeShared<CTexPassElement>(std::move(data)));
g_pHyprRenderer->m_renderPass.add(makeUnique<CTexPassElement>(std::move(data)));
}
bool CHyprNotificationOverlay::hasAny() {

View File

@@ -208,7 +208,7 @@ void CHyprError::draw() {
data.box = monbox;
data.a = m_fadeOpacity->value();
g_pHyprRenderer->m_renderPass.add(makeShared<CTexPassElement>(std::move(data)));
g_pHyprRenderer->m_renderPass.add(makeUnique<CTexPassElement>(std::move(data)));
}
void CHyprError::destroy() {

View File

@@ -629,7 +629,7 @@ void CPointerManager::renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time::
data.tex = texture;
data.box = box.round();
g_pHyprRenderer->m_renderPass.add(makeShared<CTexPassElement>(std::move(data)));
g_pHyprRenderer->m_renderPass.add(makeUnique<CTexPassElement>(std::move(data)));
if (m_currentCursorImage.surface)
m_currentCursorImage.surface->resource()->frame(now);

View File

@@ -814,7 +814,7 @@ void CWLDataDeviceProtocol::renderDND(PHLMONITOR pMonitor, const Time::steady_tp
CTexPassElement::SRenderData data;
data.tex = m_dnd.dndSurface->m_current.texture;
data.box = box;
g_pHyprRenderer->m_renderPass.add(makeShared<CTexPassElement>(std::move(data)));
g_pHyprRenderer->m_renderPass.add(makeUnique<CTexPassElement>(std::move(data)));
CBox damageBox = CBox{surfacePos, m_dnd.dndSurface->m_current.size}.expand(5);
g_pHyprRenderer->damageBox(damageBox);

View File

@@ -2120,7 +2120,7 @@ void CHyprOpenGLImpl::preWindowPass() {
if (!preBlurQueued())
return;
g_pHyprRenderer->m_renderPass.add(makeShared<CPreBlurElement>());
g_pHyprRenderer->m_renderPass.add(makeUnique<CPreBlurElement>());
}
bool CHyprOpenGLImpl::preBlurQueued() {
@@ -2545,7 +2545,7 @@ void CHyprOpenGLImpl::renderMirrored() {
if (!PFB->isAllocated() || !PFB->getTexture())
return;
g_pHyprRenderer->m_renderPass.add(makeShared<CClearPassElement>(CClearPassElement::SClearData{CHyprColor(0, 0, 0, 0)}));
g_pHyprRenderer->m_renderPass.add(makeUnique<CClearPassElement>(CClearPassElement::SClearData{CHyprColor(0, 0, 0, 0)}));
CTexPassElement::SRenderData data;
data.tex = PFB->getTexture();
@@ -2556,7 +2556,7 @@ void CHyprOpenGLImpl::renderMirrored() {
.transform(wlTransformToHyprutils(invertTransform(mirrored->m_transform)))
.translate(-monitor->m_transformedSize / 2.0);
g_pHyprRenderer->m_renderPass.add(makeShared<CTexPassElement>(std::move(data)));
g_pHyprRenderer->m_renderPass.add(makeUnique<CTexPassElement>(std::move(data)));
}
void CHyprOpenGLImpl::renderSplash(cairo_t* const CAIRO, cairo_surface_t* const CAIROSURFACE, double offsetY, const Vector2D& size) {
@@ -2946,7 +2946,7 @@ void CHyprOpenGLImpl::clearWithTex() {
data.box = {0, 0, m_renderData.pMonitor->m_transformedSize.x, m_renderData.pMonitor->m_transformedSize.y};
data.flipEndFrame = true;
data.tex = TEXIT->second.getTexture();
g_pHyprRenderer->m_renderPass.add(makeShared<CTexPassElement>(std::move(data)));
g_pHyprRenderer->m_renderPass.add(makeUnique<CTexPassElement>(std::move(data)));
}
}

View File

@@ -529,7 +529,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T
CRectPassElement::SRectData data;
data.color = CHyprColor(0, 0, 0, *PDIMAROUND * fullAlpha);
data.box = monbox;
m_renderPass.add(makeShared<CRectPassElement>(data));
m_renderPass.add(makeUnique<CRectPassElement>(data));
}
renderdata.pos.x += pWindow->m_floatingOffset.x;
@@ -585,7 +585,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T
data.blur = true;
data.blurA = renderdata.fadeAlpha;
data.xray = g_pHyprOpenGL->shouldUseNewBlurOptimizations(nullptr, pWindow);
m_renderPass.add(makeShared<CRectPassElement>(data));
m_renderPass.add(makeUnique<CRectPassElement>(data));
renderdata.blur = false;
}
@@ -596,7 +596,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T
renderdata.texture = s->m_current.texture;
renderdata.surface = s;
renderdata.mainSurface = s == pWindow->m_wlSurface->resource();
m_renderPass.add(makeShared<CSurfacePassElement>(renderdata));
m_renderPass.add(makeUnique<CSurfacePassElement>(renderdata));
renderdata.surfaceCounter++;
},
nullptr);
@@ -664,7 +664,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T
renderdata.texture = s->m_current.texture;
renderdata.surface = s;
renderdata.mainSurface = false;
m_renderPass.add(makeShared<CSurfacePassElement>(renderdata));
m_renderPass.add(makeUnique<CSurfacePassElement>(renderdata));
renderdata.surfaceCounter++;
},
data);
@@ -703,7 +703,7 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s
CRectPassElement::SRectData data;
data.box = {0, 0, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y};
data.color = CHyprColor(0, 0, 0, *PDIMAROUND * pLayer->m_alpha->value());
m_renderPass.add(makeShared<CRectPassElement>(data));
m_renderPass.add(makeUnique<CRectPassElement>(data));
}
if (pLayer->m_fadingOut) {
@@ -741,7 +741,7 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s
renderdata.texture = s->m_current.texture;
renderdata.surface = s;
renderdata.mainSurface = s == pLayer->m_surface->resource();
m_renderPass.add(makeShared<CSurfacePassElement>(renderdata));
m_renderPass.add(makeUnique<CSurfacePassElement>(renderdata));
renderdata.surfaceCounter++;
},
&renderdata);
@@ -762,7 +762,7 @@ void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::s
renderdata.texture = popup->m_wlSurface->resource()->m_current.texture;
renderdata.surface = popup->m_wlSurface->resource();
renderdata.mainSurface = false;
m_renderPass.add(makeShared<CSurfacePassElement>(renderdata));
m_renderPass.add(makeUnique<CSurfacePassElement>(renderdata));
renderdata.surfaceCounter++;
},
&renderdata);
@@ -797,7 +797,7 @@ void CHyprRenderer::renderIMEPopup(CInputPopup* pPopup, PHLMONITOR pMonitor, con
renderdata.texture = s->m_current.texture;
renderdata.surface = s;
renderdata.mainSurface = s == SURF;
m_renderPass.add(makeShared<CSurfacePassElement>(renderdata));
m_renderPass.add(makeUnique<CSurfacePassElement>(renderdata));
renderdata.surfaceCounter++;
},
&renderdata);
@@ -818,7 +818,7 @@ void CHyprRenderer::renderSessionLockSurface(WP<SSessionLockSurface> pSurface, P
renderdata.texture = s->m_current.texture;
renderdata.surface = s;
renderdata.mainSurface = s == pSurface->surface->surface();
m_renderPass.add(makeShared<CSurfacePassElement>(renderdata));
m_renderPass.add(makeUnique<CSurfacePassElement>(renderdata));
renderdata.surfaceCounter++;
},
&renderdata);
@@ -851,11 +851,11 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
RENDERMODIFDATA.modifs.emplace_back(std::make_pair<>(SRenderModifData::eRenderModifType::RMOD_TYPE_SCALE, scale));
if (!RENDERMODIFDATA.modifs.empty())
g_pHyprRenderer->m_renderPass.add(makeShared<CRendererHintsPassElement>(CRendererHintsPassElement::SData{RENDERMODIFDATA}));
g_pHyprRenderer->m_renderPass.add(makeUnique<CRendererHintsPassElement>(CRendererHintsPassElement::SData{RENDERMODIFDATA}));
CScopeGuard x([&RENDERMODIFDATA] {
if (!RENDERMODIFDATA.modifs.empty()) {
g_pHyprRenderer->m_renderPass.add(makeShared<CRendererHintsPassElement>(CRendererHintsPassElement::SData{SRenderModifData{}}));
g_pHyprRenderer->m_renderPass.add(makeUnique<CRendererHintsPassElement>(CRendererHintsPassElement::SData{SRenderModifData{}}));
}
});
@@ -863,7 +863,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
// allow rendering without a workspace. In this case, just render layers.
if (*PRENDERTEX /* inverted cfg flag */)
m_renderPass.add(makeShared<CClearPassElement>(CClearPassElement::SClearData{CHyprColor(*PBACKGROUNDCOLOR)}));
m_renderPass.add(makeUnique<CClearPassElement>(CClearPassElement::SClearData{CHyprColor(*PBACKGROUNDCOLOR)}));
else
g_pHyprOpenGL->clearWithTex(); // will apply the hypr "wallpaper"
@@ -888,7 +888,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
if (!*PXPMODE) {
if (*PRENDERTEX /* inverted cfg flag */)
m_renderPass.add(makeShared<CClearPassElement>(CClearPassElement::SClearData{CHyprColor(*PBACKGROUNDCOLOR)}));
m_renderPass.add(makeUnique<CClearPassElement>(CClearPassElement::SClearData{CHyprColor(*PBACKGROUNDCOLOR)}));
else
g_pHyprOpenGL->clearWithTex(); // will apply the hypr "wallpaper"
@@ -919,7 +919,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
data.box = {translate.x, translate.y, pMonitor->m_transformedSize.x * scale, pMonitor->m_transformedSize.y * scale};
data.color = CHyprColor(0, 0, 0, *PDIMSPECIAL * (ANIMOUT ? (1.0 - SPECIALANIMPROGRS) : SPECIALANIMPROGRS));
g_pHyprRenderer->m_renderPass.add(makeShared<CRectPassElement>(data));
g_pHyprRenderer->m_renderPass.add(makeUnique<CRectPassElement>(data));
}
if (*PBLURSPECIAL && *PBLUR) {
@@ -929,7 +929,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
data.blur = true;
data.blurA = (ANIMOUT ? (1.0 - SPECIALANIMPROGRS) : SPECIALANIMPROGRS);
g_pHyprRenderer->m_renderPass.add(makeShared<CRectPassElement>(data));
g_pHyprRenderer->m_renderPass.add(makeUnique<CRectPassElement>(data));
}
}
@@ -1374,7 +1374,7 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) {
CRectPassElement::SRectData data;
data.box = {0, 0, pMonitor->m_transformedSize.x, pMonitor->m_transformedSize.y};
data.color = CHyprColor(1.0, 0.0, 1.0, 100.0 / 255.0);
m_renderPass.add(makeShared<CRectPassElement>(data));
m_renderPass.add(makeUnique<CRectPassElement>(data));
damageBlinkCleanup = 1;
} else if (*PDAMAGEBLINK) {
damageBlinkCleanup++;
@@ -2474,7 +2474,7 @@ void CHyprRenderer::renderSnapshot(PHLWINDOW pWindow) {
data.box = {0, 0, g_pHyprOpenGL->m_renderData.pMonitor->m_pixelSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_pixelSize.y};
data.color = CHyprColor(0, 0, 0, *PDIMAROUND * pWindow->m_alpha->value());
m_renderPass.add(makeShared<CRectPassElement>(data));
m_renderPass.add(makeUnique<CRectPassElement>(data));
}
if (shouldBlur(pWindow)) {
@@ -2487,7 +2487,7 @@ void CHyprRenderer::renderSnapshot(PHLWINDOW pWindow) {
data.roundingPower = pWindow->roundingPower();
data.xray = pWindow->m_windowData.xray.valueOr(false);
m_renderPass.add(makeShared<CRectPassElement>(std::move(data)));
m_renderPass.add(makeUnique<CRectPassElement>(std::move(data)));
}
CTexPassElement::SRenderData data;
@@ -2497,7 +2497,7 @@ void CHyprRenderer::renderSnapshot(PHLWINDOW pWindow) {
data.a = pWindow->m_alpha->value();
data.damage = fakeDamage;
m_renderPass.add(makeShared<CTexPassElement>(std::move(data)));
m_renderPass.add(makeUnique<CTexPassElement>(std::move(data)));
}
void CHyprRenderer::renderSnapshot(PHLLS pLayer) {
@@ -2539,7 +2539,7 @@ void CHyprRenderer::renderSnapshot(PHLLS pLayer) {
if (SHOULD_BLUR)
data.ignoreAlpha = pLayer->m_ignoreAlpha ? pLayer->m_ignoreAlphaValue : 0.01F /* ignore the alpha 0 regions */;
m_renderPass.add(makeShared<CTexPassElement>(std::move(data)));
m_renderPass.add(makeUnique<CTexPassElement>(std::move(data)));
}
bool CHyprRenderer::shouldBlur(PHLLS ls) {

View File

@@ -89,7 +89,7 @@ void CHyprBorderDecoration::draw(PHLMONITOR pMonitor, float const& a) {
data.lerp = m_window->m_borderFadeAnimationProgress->value();
}
g_pHyprRenderer->m_renderPass.add(makeShared<CBorderPassElement>(data));
g_pHyprRenderer->m_renderPass.add(makeUnique<CBorderPassElement>(data));
}
eDecorationType CHyprBorderDecoration::getDecorationType() {

View File

@@ -90,7 +90,7 @@ void CHyprDropShadowDecoration::draw(PHLMONITOR pMonitor, float const& a) {
CShadowPassElement::SShadowData data;
data.deco = this;
data.a = a;
g_pHyprRenderer->m_renderPass.add(makeShared<CShadowPassElement>(data));
g_pHyprRenderer->m_renderPass.add(makeUnique<CShadowPassElement>(data));
}
void CHyprDropShadowDecoration::render(PHLMONITOR pMonitor, float const& a) {

View File

@@ -172,21 +172,21 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) {
double first = rect.w - (*PROUNDING * 2);
rectdata.round = *PROUNDING;
rectdata.clipBox = CBox{rect.pos() - Vector2D{PADDING, 0.F}, Vector2D{first + PADDING, rect.h}};
g_pHyprRenderer->m_renderPass.add(makeShared<CRectPassElement>(rectdata));
g_pHyprRenderer->m_renderPass.add(makeUnique<CRectPassElement>(rectdata));
rectdata.round = 0;
rectdata.clipBox = CBox{rect.pos() + Vector2D{first, 0.F}, Vector2D{rect.w - first + PADDING, rect.h}};
} else if (i == barsToDraw - 1) {
double first = *PROUNDING * 2;
rectdata.round = 0;
rectdata.clipBox = CBox{rect.pos() - Vector2D{PADDING, 0.F}, Vector2D{first + PADDING, rect.h}};
g_pHyprRenderer->m_renderPass.add(makeShared<CRectPassElement>(rectdata));
g_pHyprRenderer->m_renderPass.add(makeUnique<CRectPassElement>(rectdata));
rectdata.round = *PROUNDING;
rectdata.clipBox = CBox{rect.pos() + Vector2D{first, 0.F}, Vector2D{rect.w - first + PADDING, rect.h}};
}
} else
rectdata.round = *PROUNDING;
}
g_pHyprRenderer->m_renderPass.add(makeShared<CRectPassElement>(rectdata));
g_pHyprRenderer->m_renderPass.add(makeUnique<CRectPassElement>(rectdata));
}
rect = {ASSIGNEDBOX.x + xoff - pMonitor->m_position.x + m_window->m_floatingOffset.x,
@@ -212,21 +212,21 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) {
double first = rect.w - (*PGRADIENTROUNDING * 2);
data.round = *PGRADIENTROUNDING;
data.clipBox = CBox{rect.pos() - Vector2D{PADDING, 0.F}, Vector2D{first + PADDING, rect.h}};
g_pHyprRenderer->m_renderPass.add(makeShared<CTexPassElement>(data));
g_pHyprRenderer->m_renderPass.add(makeUnique<CTexPassElement>(data));
data.round = 0;
data.clipBox = CBox{rect.pos() + Vector2D{first, 0.F}, Vector2D{rect.w - first + PADDING, rect.h}};
} else if (i == barsToDraw - 1) {
double first = *PGRADIENTROUNDING * 2;
data.round = 0;
data.clipBox = CBox{rect.pos() - Vector2D{PADDING, 0.F}, Vector2D{first + PADDING, rect.h}};
g_pHyprRenderer->m_renderPass.add(makeShared<CTexPassElement>(data));
g_pHyprRenderer->m_renderPass.add(makeUnique<CTexPassElement>(data));
data.round = *PGRADIENTROUNDING;
data.clipBox = CBox{rect.pos() + Vector2D{first, 0.F}, Vector2D{rect.w - first + PADDING, rect.h}};
}
} else
data.round = *PGRADIENTROUNDING;
}
g_pHyprRenderer->m_renderPass.add(makeShared<CTexPassElement>(data));
g_pHyprRenderer->m_renderPass.add(makeUnique<CTexPassElement>(data));
}
}
@@ -256,7 +256,7 @@ void CHyprGroupBarDecoration::draw(PHLMONITOR pMonitor, float const& a) {
data.tex = titleTex;
data.box = rect;
data.a = a;
g_pHyprRenderer->m_renderPass.add(makeShared<CTexPassElement>(std::move(data)));
g_pHyprRenderer->m_renderPass.add(makeUnique<CTexPassElement>(std::move(data)));
}
}

View File

@@ -22,4 +22,4 @@ class CClearPassElement : public IPassElement {
private:
SClearData m_data;
};
};

View File

@@ -18,8 +18,8 @@ bool CRenderPass::single() const {
return m_passElements.size() == 1;
}
void CRenderPass::add(SP<IPassElement> el) {
m_passElements.emplace_back(makeShared<SPassElementData>(CRegion{}, el));
void CRenderPass::add(UP<IPassElement>&& el) {
m_passElements.emplace_back(makeUnique<SPassElementData>(CRegion{}, std::move(el)));
}
void CRenderPass::simplify() {

View File

@@ -11,7 +11,7 @@ class CRenderPass {
bool empty() const;
bool single() const;
void add(SP<IPassElement> elem);
void add(UP<IPassElement>&& elem);
void clear();
void removeAllOfType(const std::string& type);
@@ -24,11 +24,11 @@ class CRenderPass {
struct SPassElementData {
CRegion elementDamage;
SP<IPassElement> element;
UP<IPassElement> element;
bool discard = false;
};
std::vector<SP<SPassElementData>> m_passElements;
std::vector<UP<SPassElementData>> m_passElements;
void simplify();
float oneBlurRadius();

View File

@@ -16,4 +16,4 @@ bool CShadowPassElement::needsLiveBlur() {
bool CShadowPassElement::needsPrecomputeBlur() {
return false;
}
}

View File

@@ -23,4 +23,4 @@ class CShadowPassElement : public IPassElement {
private:
SShadowData m_data;
};
};