From b5ea887f072fa055cf23ec389ed81e3ee4c5319a Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Thu, 16 Apr 2026 19:47:53 +0100 Subject: debug/overlay: optimize rendering, cleanup and nicetify (#14097) optimizes the rendering, drops direct cairo, fixes up api. Also improves the visuals etc of the overlay --- src/render/GLRenderer.cpp | 2 +- src/render/Renderer.cpp | 25 ++++++++++++++++++------- src/render/Renderer.hpp | 3 +++ 3 files changed, 22 insertions(+), 8 deletions(-) (limited to 'src/render') diff --git a/src/render/GLRenderer.cpp b/src/render/GLRenderer.cpp index aefdc67a..129295ac 100644 --- a/src/render/GLRenderer.cpp +++ b/src/render/GLRenderer.cpp @@ -9,7 +9,7 @@ #include "../protocols/PresentationTime.hpp" #include "../protocols/core/DataDevice.hpp" #include "../protocols/core/Compositor.hpp" -#include "../debug/HyprDebugOverlay.hpp" +#include "../debug/Overlay.hpp" #include "../helpers/Monitor.hpp" #include "pass/TexPassElement.hpp" #include "pass/SurfacePassElement.hpp" diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index df1106b0..acd83f8f 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -25,7 +25,7 @@ #include "../protocols/LinuxDMABUF.hpp" #include "../helpers/sync/SyncTimeline.hpp" #include "../hyprerror/HyprError.hpp" -#include "../debug/HyprDebugOverlay.hpp" +#include "../debug/Overlay.hpp" #include "../notification/NotificationOverlay.hpp" #include "../layout/LayoutManager.hpp" #include "../layout/space/Space.hpp" @@ -1523,6 +1523,17 @@ SP IHyprRenderer::renderText(const std::string& text, CHyprColor col, return tex; } +SP IHyprRenderer::renderText(Hyprgraphics::CTextResource::STextResourceData&& data) { + auto res = makeAtomicShared(std::move(data)); + g_pAsyncResourceGatherer->enqueue(res); + g_pAsyncResourceGatherer->await(res); + + if (!res->m_asset.cairoSurface) + return nullptr; + + return createTexture(res->m_asset.pixelSize.x, res->m_asset.pixelSize.y, res->m_asset.cairoSurface->data()); +} + void IHyprRenderer::ensureLockTexturesRendered(bool load) { static bool loaded = false; @@ -1913,7 +1924,7 @@ void IHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) { if (*PDEBUGOVERLAY == 1) { renderStart = std::chrono::high_resolution_clock::now(); - g_pDebugOverlay->frameData(pMonitor); + Debug::overlay()->frameData(pMonitor); } if (!g_pCompositor->m_sessionActive) @@ -2062,7 +2073,7 @@ void IHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) { // for drawing the debug overlay if (pMonitor == g_pCompositor->m_monitors.front() && *PDEBUGOVERLAY == 1) { renderStartOverlay = std::chrono::high_resolution_clock::now(); - g_pDebugOverlay->draw(); + Debug::overlay()->draw(); endRenderOverlay = std::chrono::high_resolution_clock::now(); } @@ -2140,13 +2151,13 @@ void IHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) { if (*PDEBUGOVERLAY == 1) { const float durationUs = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - renderStart).count() / 1000.f; - g_pDebugOverlay->renderData(pMonitor, durationUs); + Debug::overlay()->renderData(pMonitor, durationUs); if (pMonitor == g_pCompositor->m_monitors.front()) { const float noOverlayUs = durationUs - std::chrono::duration_cast(endRenderOverlay - renderStartOverlay).count() / 1000.f; - g_pDebugOverlay->renderDataNoOverlay(pMonitor, noOverlayUs); + Debug::overlay()->renderDataNoOverlay(pMonitor, noOverlayUs); } else - g_pDebugOverlay->renderDataNoOverlay(pMonitor, durationUs); + Debug::overlay()->renderDataNoOverlay(pMonitor, durationUs); } } @@ -2850,7 +2861,7 @@ bool IHyprRenderer::shouldRenderCursor() { } std::tuple IHyprRenderer::getRenderTimes(PHLMONITOR pMonitor) { - const auto POVERLAY = &g_pDebugOverlay->m_monitorOverlays[pMonitor]; + const auto POVERLAY = &Debug::overlay()->m_monitorOverlays[pMonitor]; float avgRenderTime = 0; float maxRenderTime = 0; diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index 42592f2c..f52b9e3a 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -31,6 +31,8 @@ #include "Framebuffer.hpp" #include "Texture.hpp" +#include + struct SMonitorRule; class CWorkspace; class CInputPopup; @@ -164,6 +166,7 @@ namespace Render { virtual SP createTexture(const SP buffer, bool keepDataCopy = false); virtual SP renderText(const std::string& text, CHyprColor col, int pt, bool italic = false, const std::string& fontFamily = "", int maxWidth = 0, int weight = 400); + virtual SP renderText(Hyprgraphics::CTextResource::STextResourceData&& data); SP loadAsset(const std::string& filename); virtual bool shouldUseNewBlurOptimizations(PHLLS pLayer, PHLWINDOW pWindow); virtual bool explicitSyncSupported() = 0; -- cgit v1.2.3