diff options
Diffstat (limited to 'src/render/Renderer.cpp')
| -rw-r--r-- | src/render/Renderer.cpp | 38 |
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) { |
