summaryrefslogtreecommitdiff
path: root/src/render/pass/Pass.cpp
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2025-01-05 19:49:27 +0100
committervaxerski <vaxry@vaxry.net>2025-01-05 19:49:31 +0100
commit391ff29110e3fb9711b98e92cee44182dda2e2ba (patch)
tree84804b609ab15457f6abbcc4fbc22bd9c37eb51c /src/render/pass/Pass.cpp
parenta5c14370c11287cbf520c8f427179c665ac9c891 (diff)
pass: improve pass debug mode
Diffstat (limited to 'src/render/pass/Pass.cpp')
-rw-r--r--src/render/pass/Pass.cpp42
1 files changed, 37 insertions, 5 deletions
diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp
index 3e1282f0..0489e985 100644
--- a/src/render/pass/Pass.cpp
+++ b/src/render/pass/Pass.cpp
@@ -88,7 +88,7 @@ void CRenderPass::simplify() {
}
newDamage.subtract(opaque);
if (*PDEBUGPASS)
- occludedRegion.add(opaque);
+ occludedRegions.emplace_back(opaque);
}
}
@@ -114,9 +114,11 @@ CRegion CRenderPass::render(const CRegion& damage_) {
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{};
+ damage = *PDEBUGPASS ? CRegion{CBox{{}, {INT32_MAX, INT32_MAX}}} : damage_.copy();
+ if (*PDEBUGPASS) {
+ occludedRegions.clear();
+ totalLiveBlurRegion = CRegion{};
+ }
if (damage.empty()) {
g_pHyprOpenGL->m_RenderData.damage = damage;
@@ -198,7 +200,9 @@ CRegion CRenderPass::render(const CRegion& damage_) {
void CRenderPass::renderDebugData() {
CBox box = {{}, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize};
- g_pHyprOpenGL->renderRectWithDamage(&box, Colors::RED.modifyA(0.1F), occludedRegion);
+ for (const auto& rg : occludedRegions) {
+ g_pHyprOpenGL->renderRectWithDamage(&box, Colors::RED.modifyA(0.1F), rg);
+ }
g_pHyprOpenGL->renderRectWithDamage(&box, Colors::GREEN.modifyA(0.1F), totalLiveBlurRegion);
std::unordered_map<CWLSurfaceResource*, float> offsets;
@@ -239,6 +243,34 @@ void CRenderPass::renderDebugData() {
renderHLSurface(debugData.pointerFocusText, g_pSeatManager->state.pointerFocus.lock(), Colors::ORANGE.modifyA(0.1F));
if (g_pCompositor->m_pLastWindow)
renderHLSurface(debugData.lastWindowText, g_pCompositor->m_pLastWindow->m_pWLSurface->resource(), Colors::LIGHT_BLUE.modifyA(0.1F));
+
+ const auto DISCARDED_ELEMENTS = std::count_if(m_vPassElements.begin(), m_vPassElements.end(), [](const auto& e) { return e->discard; });
+ auto tex = g_pHyprOpenGL->renderText(std::format("occlusion layers: {}\npass elements: {} ({} discarded)\nviewport: {:X0}", occludedRegions.size(), m_vPassElements.size(),
+ DISCARDED_ELEMENTS, g_pHyprOpenGL->m_RenderData.pMonitor->vecPixelSize),
+ Colors::WHITE, 12);
+
+ if (tex) {
+ box = CBox{{0.F, g_pHyprOpenGL->m_RenderData.pMonitor->vecSize.y - tex->m_vSize.y}, tex->m_vSize}.scale(g_pHyprOpenGL->m_RenderData.pMonitor->scale);
+ g_pHyprOpenGL->renderTexture(tex, &box, 1.F);
+ }
+
+ std::string passStructure;
+ auto yn = [](const bool val) -> const char* { return val ? "yes" : "no"; };
+ auto tick = [](const bool val) -> const char* { return val ? "✔" : "✖"; };
+ for (const auto& el : m_vPassElements | std::views::reverse) {
+ passStructure += std::format("{} {} (bb: {} op: {})\n", tick(!el->discard), el->element->passName(), yn(el->element->boundingBox().has_value()),
+ yn(!el->element->opaqueRegion().empty()));
+ }
+
+ if (!passStructure.empty())
+ passStructure.pop_back();
+
+ tex = g_pHyprOpenGL->renderText(passStructure, Colors::WHITE, 12);
+ if (tex) {
+ box = CBox{{g_pHyprOpenGL->m_RenderData.pMonitor->vecSize.x - tex->m_vSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->vecSize.y - tex->m_vSize.y}, tex->m_vSize}.scale(
+ g_pHyprOpenGL->m_RenderData.pMonitor->scale);
+ g_pHyprOpenGL->renderTexture(tex, &box, 1.F);
+ }
}
float CRenderPass::oneBlurRadius() {