summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/protocols/ToplevelExport.cpp2
-rw-r--r--src/render/Renderer.cpp7
-rw-r--r--src/render/Renderer.hpp1
3 files changed, 7 insertions, 3 deletions
diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp
index 458171d0..b7751511 100644
--- a/src/protocols/ToplevelExport.cpp
+++ b/src/protocols/ToplevelExport.cpp
@@ -341,7 +341,9 @@ bool CToplevelExportProtocolManager::copyFrameShm(SToplevelFrame* frame, timespe
g_pHyprOpenGL->clear(CColor(0, 0, 0, 255));
// render client at 0,0
+ g_pHyprRenderer->m_bBlockSurfaceFeedback = g_pHyprRenderer->shouldRenderWindow(frame->pWindow); // block the feedback to avoid spamming the surface if it's visible
g_pHyprRenderer->renderWindow(frame->pWindow, PMONITOR, now, false, RENDER_PASS_ALL, true, true);
+ g_pHyprRenderer->m_bBlockSurfaceFeedback = false;
// copy pixels
const auto PFORMAT = get_gles2_format_from_drm(format);
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 69adb40d..1bca6e34 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -51,9 +51,10 @@ void renderSurface(struct wlr_surface* surface, int x, int y, void* data) {
g_pHyprOpenGL->renderTexture(TEXTURE, &windowBox, RDATA->fadeAlpha * RDATA->alpha, rounding, true);
}
- wlr_surface_send_frame_done(surface, RDATA->when);
-
- wlr_presentation_surface_sampled_on_output(g_pCompositor->m_sWLRPresentation, surface, RDATA->output);
+ if (!g_pHyprRenderer->m_bBlockSurfaceFeedback) {
+ wlr_surface_send_frame_done(surface, RDATA->when);
+ wlr_presentation_surface_sampled_on_output(g_pCompositor->m_sWLRPresentation, surface, RDATA->output);
+ }
// reset the UV, we might've set it above
g_pHyprOpenGL->m_RenderData.primarySurfaceUVTopLeft = Vector2D(-1, -1);
diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp
index 068f5588..38feeb79 100644
--- a/src/render/Renderer.hpp
+++ b/src/render/Renderer.hpp
@@ -46,6 +46,7 @@ public:
void calculateUVForWindowSurface(CWindow*, wlr_surface*, bool main = false);
bool m_bWindowRequestedCursorHide = false;
+ bool m_bBlockSurfaceFeedback = false;
CWindow* m_pLastScanout = nullptr;
DAMAGETRACKINGMODES damageTrackingModeFromStr(const std::string&);