mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-23 16:49:48 +01:00
debug: add debug:pass for debugging the render pass
This commit is contained in:
parent
e536b02248
commit
1830296df3
3 changed files with 31 additions and 2 deletions
|
@ -413,6 +413,7 @@ CConfigManager::CConfigManager() {
|
||||||
m_pConfig->addConfigValue("debug:log_damage", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("debug:log_damage", Hyprlang::INT{0});
|
||||||
m_pConfig->addConfigValue("debug:overlay", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("debug:overlay", Hyprlang::INT{0});
|
||||||
m_pConfig->addConfigValue("debug:damage_blink", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("debug:damage_blink", Hyprlang::INT{0});
|
||||||
|
m_pConfig->addConfigValue("debug:pass", Hyprlang::INT{0});
|
||||||
m_pConfig->addConfigValue("debug:disable_logs", Hyprlang::INT{1});
|
m_pConfig->addConfigValue("debug:disable_logs", Hyprlang::INT{1});
|
||||||
m_pConfig->addConfigValue("debug:disable_time", Hyprlang::INT{1});
|
m_pConfig->addConfigValue("debug:disable_time", Hyprlang::INT{1});
|
||||||
m_pConfig->addConfigValue("debug:enable_stdout_logs", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("debug:enable_stdout_logs", Hyprlang::INT{0});
|
||||||
|
|
|
@ -21,6 +21,8 @@ void CRenderPass::add(SP<IPassElement> el) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRenderPass::simplify() {
|
void CRenderPass::simplify() {
|
||||||
|
static auto PDEBUGPASS = CConfigValue<Hyprlang::INT>("debug:pass");
|
||||||
|
|
||||||
// TODO: use precompute blur for instances where there is nothing in between
|
// TODO: use precompute blur for instances where there is nothing in between
|
||||||
|
|
||||||
// if there is live blur, we need to NOT occlude any area where it will be influenced
|
// if there is live blur, we need to NOT occlude any area where it will be influenced
|
||||||
|
@ -78,6 +80,20 @@ void CRenderPass::simplify() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
newDamage.subtract(opaque);
|
newDamage.subtract(opaque);
|
||||||
|
if (*PDEBUGPASS)
|
||||||
|
occludedRegion.add(opaque);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*PDEBUGPASS) {
|
||||||
|
for (auto& el2 : m_vPassElements) {
|
||||||
|
if (!el2->element->needsLiveBlur())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const auto BB = el2->element->boundingBox();
|
||||||
|
RASSERT(BB, "No bounding box for an element with live blur is illegal");
|
||||||
|
|
||||||
|
totalLiveBlurRegion.add(*BB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -87,9 +103,13 @@ void CRenderPass::clear() {
|
||||||
}
|
}
|
||||||
|
|
||||||
CRegion CRenderPass::render(const CRegion& damage_) {
|
CRegion CRenderPass::render(const CRegion& damage_) {
|
||||||
const auto WILLBLUR = std::ranges::any_of(m_vPassElements, [](const auto& el) { return el->element->needsLiveBlur(); });
|
static auto PDEBUGPASS = CConfigValue<Hyprlang::INT>("debug:pass");
|
||||||
|
|
||||||
damage = damage_.copy();
|
const auto WILLBLUR = std::ranges::any_of(m_vPassElements, [](const auto& el) { return el->element->needsLiveBlur(); });
|
||||||
|
|
||||||
|
damage = *PDEBUGPASS ? CRegion{CBox{{}, {INT32_MAX, INT32_MAX}}} : damage_.copy();
|
||||||
|
occludedRegion = CRegion{};
|
||||||
|
totalLiveBlurRegion = CRegion{};
|
||||||
|
|
||||||
if (damage.empty()) {
|
if (damage.empty()) {
|
||||||
g_pHyprOpenGL->m_RenderData.damage = damage;
|
g_pHyprOpenGL->m_RenderData.damage = damage;
|
||||||
|
@ -145,6 +165,12 @@ CRegion CRenderPass::render(const CRegion& damage_) {
|
||||||
el->element->draw(el->elementDamage);
|
el->element->draw(el->elementDamage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (*PDEBUGPASS) {
|
||||||
|
CBox monbox = {{}, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize};
|
||||||
|
g_pHyprOpenGL->renderRectWithDamage(&monbox, CHyprColor{1.F, 0.1F, 0.1F, 0.5F}, occludedRegion);
|
||||||
|
g_pHyprOpenGL->renderRectWithDamage(&monbox, CHyprColor{0.1F, 1.F, 0.1F, 0.5F}, totalLiveBlurRegion);
|
||||||
|
}
|
||||||
|
|
||||||
g_pHyprOpenGL->m_RenderData.damage = damage;
|
g_pHyprOpenGL->m_RenderData.damage = damage;
|
||||||
return damage;
|
return damage;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,8 @@ class CRenderPass {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CRegion damage;
|
CRegion damage;
|
||||||
|
CRegion occludedRegion;
|
||||||
|
CRegion totalLiveBlurRegion;
|
||||||
|
|
||||||
struct SPassElementData {
|
struct SPassElementData {
|
||||||
CRegion elementDamage;
|
CRegion elementDamage;
|
||||||
|
|
Loading…
Reference in a new issue