mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-08-07 15:41:58 -07:00
renderer: precompute fullalpha (#10319)
precompute it once instead of calculating it every single call, was showing up as a lot of time wasted in profiling.
This commit is contained in:
@@ -519,10 +519,12 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T
|
|||||||
|
|
||||||
EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOW);
|
EMIT_HOOK_EVENT("render", RENDER_PRE_WINDOW);
|
||||||
|
|
||||||
|
const auto fullAlpha = renderdata.alpha * renderdata.fadeAlpha;
|
||||||
|
|
||||||
if (*PDIMAROUND && pWindow->m_windowData.dimAround.valueOrDefault() && !m_bRenderingSnapshot && mode != RENDER_PASS_POPUP) {
|
if (*PDIMAROUND && pWindow->m_windowData.dimAround.valueOrDefault() && !m_bRenderingSnapshot && mode != RENDER_PASS_POPUP) {
|
||||||
CBox monbox = {0, 0, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y};
|
CBox monbox = {0, 0, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y};
|
||||||
CRectPassElement::SRectData data;
|
CRectPassElement::SRectData data;
|
||||||
data.color = CHyprColor(0, 0, 0, *PDIMAROUND * renderdata.alpha * renderdata.fadeAlpha);
|
data.color = CHyprColor(0, 0, 0, *PDIMAROUND * fullAlpha);
|
||||||
data.box = monbox;
|
data.box = monbox;
|
||||||
m_renderPass.add(makeShared<CRectPassElement>(data));
|
m_renderPass.add(makeShared<CRectPassElement>(data));
|
||||||
}
|
}
|
||||||
@@ -555,14 +557,14 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T
|
|||||||
if (wd->getDecorationLayer() != DECORATION_LAYER_BOTTOM)
|
if (wd->getDecorationLayer() != DECORATION_LAYER_BOTTOM)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha);
|
wd->draw(pMonitor, fullAlpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto const& wd : pWindow->m_windowDecorations) {
|
for (auto const& wd : pWindow->m_windowDecorations) {
|
||||||
if (wd->getDecorationLayer() != DECORATION_LAYER_UNDER)
|
if (wd->getDecorationLayer() != DECORATION_LAYER_UNDER)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha);
|
wd->draw(pMonitor, fullAlpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -603,7 +605,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T
|
|||||||
if (wd->getDecorationLayer() != DECORATION_LAYER_OVER)
|
if (wd->getDecorationLayer() != DECORATION_LAYER_OVER)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha);
|
wd->draw(pMonitor, fullAlpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -674,7 +676,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T
|
|||||||
if (wd->getDecorationLayer() != DECORATION_LAYER_OVERLAY)
|
if (wd->getDecorationLayer() != DECORATION_LAYER_OVERLAY)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha);
|
wd->draw(pMonitor, fullAlpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user