diff options
| author | vaxerski <vaxry@vaxry.net> | 2025-01-01 17:26:05 +0100 |
|---|---|---|
| committer | vaxerski <vaxry@vaxry.net> | 2025-01-01 17:26:05 +0100 |
| commit | d64ac472027b9bcd6eefb4c9e86f85311769f7fa (patch) | |
| tree | d27448166f3d9c89581201e51a580b3c426cd0f5 /src/render/pass/Pass.cpp | |
| parent | 4e93b2def5f00f944abbd63a8258ee18bd99ff54 (diff) | |
pass: improve pass debugging
Diffstat (limited to 'src/render/pass/Pass.cpp')
| -rw-r--r-- | src/render/pass/Pass.cpp | 67 |
1 files changed, 64 insertions, 3 deletions
diff --git a/src/render/pass/Pass.cpp b/src/render/pass/Pass.cpp index f71bd562..a2ecddaa 100644 --- a/src/render/pass/Pass.cpp +++ b/src/render/pass/Pass.cpp @@ -3,6 +3,10 @@ #include <algorithm> #include <ranges> #include "../../config/ConfigValue.hpp" +#include "../../desktop/WLSurface.hpp" +#include "../../managers/SeatManager.hpp" +#include "../../managers/eventLoop/EventLoopManager.hpp" +#include "../../Compositor.hpp" bool CRenderPass::empty() const { return false; @@ -120,6 +124,15 @@ CRegion CRenderPass::render(const CRegion& damage_) { return damage; } + if (!*PDEBUGPASS && debugData.present) + debugData = {false}; + else if (*PDEBUGPASS && !debugData.present) { + debugData.present = true; + debugData.keyboardFocusText = g_pHyprOpenGL->renderText("keyboard", Colors::WHITE, 12); + debugData.pointerFocusText = g_pHyprOpenGL->renderText("pointer", Colors::WHITE, 12); + debugData.lastWindowText = g_pHyprOpenGL->renderText("lastWindow", Colors::WHITE, 12); + } + if (WILLBLUR && !*PDEBUGPASS) { // combine blur regions into one that will be expanded CRegion blurRegion; @@ -171,15 +184,63 @@ CRegion CRenderPass::render(const CRegion& damage_) { } 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); + renderDebugData(); + g_pEventLoopManager->doLater([] { + for (auto& m : g_pCompositor->m_vMonitors) { + g_pHyprRenderer->damageMonitor(m); + } + }); } g_pHyprOpenGL->m_RenderData.damage = damage; return damage; } +void CRenderPass::renderDebugData() { + CBox box = {{}, g_pHyprOpenGL->m_RenderData.pMonitor->vecTransformedSize}; + g_pHyprOpenGL->renderRectWithDamage(&box, Colors::RED.modifyA(0.1F), occludedRegion); + g_pHyprOpenGL->renderRectWithDamage(&box, Colors::GREEN.modifyA(0.1F), totalLiveBlurRegion); + + std::unordered_map<CWLSurfaceResource*, float> offsets; + + // render focus stuff + auto renderHLSurface = [&offsets](SP<CTexture> texture, SP<CWLSurfaceResource> surface, const CHyprColor& color) { + if (!surface || !texture) + return; + + auto hlSurface = CWLSurface::fromResource(surface); + if (!hlSurface) + return; + + auto bb = hlSurface->getSurfaceBoxGlobal(); + + if (!bb.has_value()) + return; + + CBox box = bb->copy().translate(-g_pHyprOpenGL->m_RenderData.pMonitor->vecPosition).scale(g_pHyprOpenGL->m_RenderData.pMonitor->scale); + + if (box.intersection(CBox{{}, g_pHyprOpenGL->m_RenderData.pMonitor->vecSize}).empty()) + return; + + if (offsets.contains(surface.get())) + box.translate(Vector2D{0.F, offsets[surface.get()]}); + else + offsets[surface.get()] = 0; + + g_pHyprOpenGL->renderRectWithDamage(&box, Colors::PURPLE.modifyA(0.1F), CRegion{0, 0, INT32_MAX, INT32_MAX}); + box = {box.pos(), texture->m_vSize}; + g_pHyprOpenGL->renderRectWithDamage(&box, CHyprColor{0.F, 0.F, 0.F, 0.2F}, CRegion{0, 0, INT32_MAX, INT32_MAX}, std::min(5.0, box.size().y)); + g_pHyprOpenGL->renderTexture(texture, &box, 1.F); + + offsets[surface.get()] += texture->m_vSize.y; + }; + + renderHLSurface(debugData.keyboardFocusText, g_pSeatManager->state.keyboardFocus.lock(), Colors::PURPLE.modifyA(0.1F)); + 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)); +} + float CRenderPass::oneBlurRadius() { // TODO: is this exact range correct? static auto PBLURSIZE = CConfigValue<Hyprlang::INT>("decoration:blur:size"); |
