diff --git a/hyprexpo/OverviewPassElement.cpp b/hyprexpo/OverviewPassElement.cpp index 1fc88e7..ef40486 100644 --- a/hyprexpo/OverviewPassElement.cpp +++ b/hyprexpo/OverviewPassElement.cpp @@ -6,8 +6,9 @@ COverviewPassElement::COverviewPassElement() { ; } -void COverviewPassElement::draw(const CRegion& damage) { +std::vector> COverviewPassElement::draw() { g_pOverview->fullRender(); + return {}; } bool COverviewPassElement::needsLiveBlur() { diff --git a/hyprexpo/OverviewPassElement.hpp b/hyprexpo/OverviewPassElement.hpp index f9d5a37..d3b4a07 100644 --- a/hyprexpo/OverviewPassElement.hpp +++ b/hyprexpo/OverviewPassElement.hpp @@ -8,12 +8,14 @@ class COverviewPassElement : public IPassElement { COverviewPassElement(); virtual ~COverviewPassElement() = default; - virtual void draw(const CRegion& damage); + virtual std::vector> draw() override; virtual bool needsLiveBlur(); virtual bool needsPrecomputeBlur(); virtual std::optional boundingBox(); virtual CRegion opaqueRegion(); + virtual ePassElementType type() override { return EK_CUSTOM; } + virtual const char* passName() { return "COverviewPassElement"; } diff --git a/hyprexpo/main.cpp b/hyprexpo/main.cpp index 1f74f38..3b3dff1 100644 --- a/hyprexpo/main.cpp +++ b/hyprexpo/main.cpp @@ -263,5 +263,5 @@ APICALL EXPORT void PLUGIN_EXIT() { g_unloading = true; - g_pConfigManager->reload(); // we need to reload now to clear all the gestures + Config::mgr()->reload(); // we need to reload now to clear all the gestures } diff --git a/hyprexpo/overview.cpp b/hyprexpo/overview.cpp index 00bb8c9..ac48816 100644 --- a/hyprexpo/overview.cpp +++ b/hyprexpo/overview.cpp @@ -1,6 +1,12 @@ #include "overview.hpp" #include +#include +#include +#include +#include +using namespace Hyprutils::String; #define private public +#define protected public #include #include #include @@ -20,10 +26,10 @@ static void damageMonitor(WP thispt } COverview::~COverview() { - g_pHyprRenderer->makeEGLCurrent(); + images.clear(); // otherwise we get a vram leak Cursor::overrideController->unsetOverride(Cursor::CURSOR_OVERRIDE_UNKNOWN); - g_pHyprOpenGL->markBlurDirtyForMonitor(pMonitor.lock()); + // (pMonitor.lock()); } COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn_), swipe(swipe_) { @@ -43,12 +49,12 @@ COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn // process the method bool methodCenter = true; int methodStartID = pMonitor->activeWorkspaceID(); - CVarList method{*PMETHOD, 0, 's', true}; + CConstVarList method{*PMETHOD, 0, 's', true}; if (method.size() < 2) Log::logger->log(Log::ERR, "[he] invalid workspace_method"); else { methodCenter = method[0] == "center"; - methodStartID = getWorkspaceIDNameFromString(method[1]).id; + methodStartID = getWorkspaceIDNameFromString(std::string(method[1])).id; if (methodStartID == WORKSPACE_INVALID) methodStartID = pMonitor->activeWorkspaceID(); } @@ -120,7 +126,7 @@ COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn pMonitor->m_activeWorkspace = startedOn; } - g_pHyprRenderer->makeEGLCurrent(); + Vector2D tileSize = pMonitor->m_size / SIDE_LENGTH; Vector2D tileRenderSize = (pMonitor->m_size - Vector2D{GAP_WIDTH * pMonitor->m_scale, GAP_WIDTH * pMonitor->m_scale} * (SIDE_LENGTH - 1)) / SIDE_LENGTH; @@ -141,12 +147,12 @@ COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn for (size_t i = 0; i < (size_t)(SIDE_LENGTH * SIDE_LENGTH); ++i) { COverview::SWorkspaceImage& image = images[i]; - image.fb.alloc(monbox.w, monbox.h, PMONITOR->m_output->state->state().drmFormat); + image.fb = makeShared(); image.fb->alloc(monbox.w, monbox.h, PMONITOR->m_output->state->state().drmFormat); CRegion fakeDamage{0, 0, INT16_MAX, INT16_MAX}; - g_pHyprRenderer->beginRender(PMONITOR, fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, &image.fb); + g_pHyprRenderer->beginRender(PMONITOR, fakeDamage, Render::RENDER_MODE_FULL_FAKE, nullptr, image.fb); - g_pHyprOpenGL->clear(CHyprColor{0, 0, 0, 1.0}); + g_pHyprRenderer->draw(CClearPassElement::SClearData{CHyprColor{0, 0, 0, 1.0}}); const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(image.workspaceID); @@ -175,7 +181,7 @@ COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn image.box = {(i % SIDE_LENGTH) * tileRenderSize.x + (i % SIDE_LENGTH) * GAP_WIDTH, (i / SIDE_LENGTH) * tileRenderSize.y + (i / SIDE_LENGTH) * GAP_WIDTH, tileRenderSize.x, tileRenderSize.y}; - g_pHyprOpenGL->m_renderData.blockScreenShader = true; + g_pHyprRenderer->m_renderData.blockScreenShader = true; g_pHyprRenderer->endRender(); } @@ -189,10 +195,10 @@ COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn // zoom on the current workspace. // const auto& TILE = images[std::clamp(currentid, 0, SIDE_LENGTH * SIDE_LENGTH)]; - g_pAnimationManager->createAnimation(pMonitor->m_size * pMonitor->m_size / tileSize, size, g_pConfigManager->getAnimationPropertyConfig("windowsMove"), AVARDAMAGE_NONE); + g_pAnimationManager->createAnimation(pMonitor->m_size * pMonitor->m_size / tileSize, size, Config::animationTree()->getAnimationPropertyConfig("windowsMove"), AVARDAMAGE_NONE); g_pAnimationManager->createAnimation((-((pMonitor->m_size / (double)SIDE_LENGTH) * Vector2D{currentid % SIDE_LENGTH, currentid / SIDE_LENGTH}) * pMonitor->m_scale) * (pMonitor->m_size / tileSize), - pos, g_pConfigManager->getAnimationPropertyConfig("windowsMove"), AVARDAMAGE_NONE); + pos, Config::animationTree()->getAnimationPropertyConfig("windowsMove"), AVARDAMAGE_NONE); size->setUpdateCallback(damageMonitor); pos->setUpdateCallback(damageMonitor); @@ -257,7 +263,7 @@ void COverview::redrawID(int id, bool forcelowres) { blockOverviewRendering = true; - g_pHyprRenderer->makeEGLCurrent(); + id = std::clamp(id, 0, SIDE_LENGTH * SIDE_LENGTH); @@ -273,15 +279,15 @@ void COverview::redrawID(int id, bool forcelowres) { auto& image = images[id]; - if (image.fb.m_size != monbox.size()) { - image.fb.release(); - image.fb.alloc(monbox.w, monbox.h, pMonitor->m_output->state->state().drmFormat); + if (image.fb->m_size != monbox.size()) { + image.fb->release(); + image.fb = makeShared(); image.fb->alloc(monbox.w, monbox.h, pMonitor->m_output->state->state().drmFormat); } CRegion fakeDamage{0, 0, INT16_MAX, INT16_MAX}; - g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, &image.fb); + g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, Render::RENDER_MODE_FULL_FAKE, nullptr, image.fb); - g_pHyprOpenGL->clear(CHyprColor{0, 0, 0, 1.0}); + g_pHyprRenderer->draw(CClearPassElement::SClearData{CHyprColor{0, 0, 0, 1.0}}); const auto PWORKSPACE = image.pWorkspace; @@ -309,7 +315,7 @@ void COverview::redrawID(int id, bool forcelowres) { } else g_pHyprRenderer->renderWorkspace(pMonitor.lock(), PWORKSPACE, Time::steadyNow(), monbox); - g_pHyprOpenGL->m_renderData.blockScreenShader = true; + g_pHyprRenderer->m_renderData.blockScreenShader = true; g_pHyprRenderer->endRender(); pMonitor->m_activeSpecialWorkspace = openSpecial; @@ -443,7 +449,7 @@ void COverview::fullRender() { Vector2D tileSize = (SIZE / SIDE_LENGTH); Vector2D tileRenderSize = (SIZE - Vector2D{GAPSIZE, GAPSIZE} * (SIDE_LENGTH - 1)) / SIDE_LENGTH; - g_pHyprOpenGL->clear(BG_COLOR.stripA()); + g_pHyprRenderer->draw(CClearPassElement::SClearData{BG_COLOR.stripA()}); for (size_t y = 0; y < (size_t)SIDE_LENGTH; ++y) { for (size_t x = 0; x < (size_t)SIDE_LENGTH; ++x) { @@ -451,7 +457,7 @@ void COverview::fullRender() { texbox.scale(pMonitor->m_scale).translate(pos->value()); texbox.round(); CRegion damage{0, 0, INT16_MAX, INT16_MAX}; - g_pHyprOpenGL->renderTextureInternal(images[x + y * SIDE_LENGTH].fb.getTexture(), texbox, {.damage = &damage, .a = 1.0}); + Render::GL::g_pHyprOpenGL->renderTextureInternal(images[x + y * SIDE_LENGTH].fb->getTexture(), texbox, {.damage = &damage, .a = 1.0}); } } } diff --git a/hyprexpo/overview.hpp b/hyprexpo/overview.hpp index 144add9..0e873fd 100644 --- a/hyprexpo/overview.hpp +++ b/hyprexpo/overview.hpp @@ -5,6 +5,9 @@ #include "globals.hpp" #include #include +#include +#include +using namespace Hyprutils::Memory; #include #include #include @@ -54,7 +57,7 @@ class COverview { bool damageDirty = false; struct SWorkspaceImage { - CFramebuffer fb; + SP fb; int64_t workspaceID = -1; PHLWORKSPACE pWorkspace; CBox box;