diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 73f289c2..1757cba7 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -412,9 +412,14 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec* const bool TRANSFORMERSPRESENT = !pWindow->m_vTransformers.empty(); - if (TRANSFORMERSPRESENT) + if (TRANSFORMERSPRESENT) { g_pHyprOpenGL->bindOffMain(); + for (auto& t : pWindow->m_vTransformers) { + t->preWindowRender(&renderdata); + } + } + if (!pWindow->m_bIsFullscreen || PWORKSPACE->m_efFullscreenMode != FULLSCREEN_FULL) for (auto& wd : pWindow->m_dWindowDecorations) wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha, offset); diff --git a/src/render/Transformer.cpp b/src/render/Transformer.cpp index f99e2d98..c6989d2c 100644 --- a/src/render/Transformer.cpp +++ b/src/render/Transformer.cpp @@ -1 +1,5 @@ -#include "Transformer.hpp" \ No newline at end of file +#include "Transformer.hpp" + +void IWindowTransformer::preWindowRender(SRenderData* pRenderData) { + ; +} \ No newline at end of file diff --git a/src/render/Transformer.hpp b/src/render/Transformer.hpp index 62eb3362..90fdeba9 100644 --- a/src/render/Transformer.hpp +++ b/src/render/Transformer.hpp @@ -2,12 +2,19 @@ #include "Framebuffer.hpp" +struct SRenderData; + // A window transformer can be attached to a window. // If any is attached, Hyprland will render the window to a separate fb, then call the transform() func with it, // and finally render it back to the main fb after all transformers pass. +// +// Worth noting transformers for now only affect the main pass (not popups) class IWindowTransformer { public: // called by Hyprland. For more data about what is being rendered, inspect render data. // returns the out fb. virtual CFramebuffer* transform(CFramebuffer* in) = 0; + + // called by Hyprland before a window main pass is started. + virtual void preWindowRender(SRenderData* pRenderData); }; \ No newline at end of file