summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2023-10-21 19:25:44 +0100
committerVaxry <vaxry@vaxry.net>2023-10-21 19:25:44 +0100
commit95db9108e55ee1498bb23600e5f0a909d7685a4a (patch)
tree35e9dbd7afd1876b016c559b7fc6cf7dd5f0978d /src/render
parenta61eb7694df25a75f45502ed64b1536fda370c1d (diff)
transformers: allow modifying renderdata pre-pass
Diffstat (limited to 'src/render')
-rw-r--r--src/render/Renderer.cpp7
-rw-r--r--src/render/Transformer.cpp6
-rw-r--r--src/render/Transformer.hpp7
3 files changed, 18 insertions, 2 deletions
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