summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2025-01-01 14:11:21 +0100
committervaxerski <vaxry@vaxry.net>2025-01-01 14:11:21 +0100
commit4e93b2def5f00f944abbd63a8258ee18bd99ff54 (patch)
tree827fc23fc614a597c6cc5818eb05dd6a32858c04 /src/render/Renderer.cpp
parentaff34089c4d66b951d25a0dc1867f7fb93d61a7d (diff)
renderer: use a render pass for render modif in client render
fixes #8918
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp38
1 files changed, 20 insertions, 18 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 391492b0..9aa794b4 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -22,6 +22,7 @@
#include "pass/TexPassElement.hpp"
#include "pass/ClearPassElement.hpp"
#include "pass/RectPassElement.hpp"
+#include "pass/RendererHintsPassElement.hpp"
#include "pass/SurfacePassElement.hpp"
#include "debug/Log.hpp"
@@ -780,18 +781,12 @@ void CHyprRenderer::renderSessionLockSurface(SSessionLockSurface* pSurface, PHLM
}
void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, timespec* time, const Vector2D& translate, const float& scale) {
- static auto PDIMSPECIAL = CConfigValue<Hyprlang::FLOAT>("decoration:dim_special");
- static auto PBLURSPECIAL = CConfigValue<Hyprlang::INT>("decoration:blur:special");
- static auto PBLUR = CConfigValue<Hyprlang::INT>("decoration:blur:enabled");
- static auto PRENDERTEX = CConfigValue<Hyprlang::INT>("misc:disable_hyprland_logo");
- static auto PBACKGROUNDCOLOR = CConfigValue<Hyprlang::INT>("misc:background_color");
- static auto PXPMODE = CConfigValue<Hyprlang::INT>("render:xp_mode");
-
- SRenderModifData RENDERMODIFDATA;
- if (translate != Vector2D{0, 0})
- RENDERMODIFDATA.modifs.emplace_back(std::make_pair<>(SRenderModifData::eRenderModifType::RMOD_TYPE_TRANSLATE, translate));
- if (scale != 1.f)
- RENDERMODIFDATA.modifs.emplace_back(std::make_pair<>(SRenderModifData::eRenderModifType::RMOD_TYPE_SCALE, scale));
+ static auto PDIMSPECIAL = CConfigValue<Hyprlang::FLOAT>("decoration:dim_special");
+ static auto PBLURSPECIAL = CConfigValue<Hyprlang::INT>("decoration:blur:special");
+ static auto PBLUR = CConfigValue<Hyprlang::INT>("decoration:blur:enabled");
+ static auto PRENDERTEX = CConfigValue<Hyprlang::INT>("misc:disable_hyprland_logo");
+ static auto PBACKGROUNDCOLOR = CConfigValue<Hyprlang::INT>("misc:background_color");
+ static auto PXPMODE = CConfigValue<Hyprlang::INT>("render:xp_mode");
if (!pMonitor)
return;
@@ -805,7 +800,19 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
// todo: matrices are buggy atm for some reason, but probably would be preferable in the long run
// g_pHyprOpenGL->saveMatrix();
// g_pHyprOpenGL->setMatrixScaleTranslate(translate, scale);
- g_pHyprOpenGL->m_RenderData.renderModif = RENDERMODIFDATA;
+
+ SRenderModifData RENDERMODIFDATA;
+ if (translate != Vector2D{0, 0})
+ RENDERMODIFDATA.modifs.emplace_back(std::make_pair<>(SRenderModifData::eRenderModifType::RMOD_TYPE_TRANSLATE, translate));
+ if (scale != 1.f)
+ RENDERMODIFDATA.modifs.emplace_back(std::make_pair<>(SRenderModifData::eRenderModifType::RMOD_TYPE_SCALE, scale));
+
+ CScopeGuard x([] {});
+
+ if (!RENDERMODIFDATA.modifs.empty()) {
+ g_pHyprRenderer->m_sRenderPass.add(makeShared<CRendererHintsPassElement>(CRendererHintsPassElement::SData{RENDERMODIFDATA}));
+ x = CScopeGuard([] { g_pHyprRenderer->m_sRenderPass.add(makeShared<CRendererHintsPassElement>(CRendererHintsPassElement::SData{SRenderModifData{}})); });
+ }
if (!pWorkspace) {
// allow rendering without a workspace. In this case, just render layers.
@@ -828,8 +835,6 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
renderLayer(ls.lock(), pMonitor, time);
}
- g_pHyprOpenGL->m_RenderData.renderModif = {};
-
return;
}
@@ -933,7 +938,6 @@ void CHyprRenderer::renderAllClientsForWorkspace(PHLMONITOR pMonitor, PHLWORKSPA
renderDragIcon(pMonitor, time);
//g_pHyprOpenGL->restoreMatrix();
- g_pHyprOpenGL->m_RenderData.renderModif = {};
}
void CHyprRenderer::renderLockscreen(PHLMONITOR pMonitor, timespec* now, const CBox& geometry) {
@@ -1436,9 +1440,7 @@ void CHyprRenderer::renderWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace
translate = Vector2D{};
}
- g_pHyprOpenGL->m_RenderData.pWorkspace = pWorkspace;
renderAllClientsForWorkspace(pMonitor, pWorkspace, now, translate, scale);
- g_pHyprOpenGL->m_RenderData.pWorkspace = nullptr;
}
void CHyprRenderer::sendFrameEventsToWorkspace(PHLMONITOR pMonitor, PHLWORKSPACE pWorkspace, timespec* now) {