nix-stuff/roles/kde/patches/kwin-pr6985.patch

41 lines
1.8 KiB
Diff

From 45a5d8844b36404334301f5da6e75f1a345e0c80 Mon Sep 17 00:00:00 2001
From: Xaver Hugl <xaver.hugl@gmail.com>
Date: Fri, 10 Jan 2025 13:45:30 +0000
Subject: [PATCH] plugins/screencast: call ItemRenderer::begin/endFrame
The OpenGL renderer references the explicit sync release points for client buffers
during rendering, and releases them in endFrame. If endFrame never gets called though
(for example because we're doing direct scanout) then the release points never get
signaled, and the client very quickly runs out of buffers to use and freezes.
BUG: 495287
(cherry picked from commit b1031ea63eaa8c9bf5c70157d1b6bf8eb0f5a74a)
Co-authored-by: Xaver Hugl <xaver.hugl@gmail.com>
---
src/plugins/screencast/windowscreencastsource.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/plugins/screencast/windowscreencastsource.cpp b/src/plugins/screencast/windowscreencastsource.cpp
index 24ef92aad7b..b396eed46f9 100644
--- a/src/plugins/screencast/windowscreencastsource.cpp
+++ b/src/plugins/screencast/windowscreencastsource.cpp
@@ -75,11 +75,11 @@ void WindowScreenCastSource::render(GLFramebuffer *target)
RenderTarget renderTarget(target);
RenderViewport viewport(m_window->clientGeometry(), 1, renderTarget);
- GLFramebuffer::pushFramebuffer(target);
+ Compositor::self()->scene()->renderer()->beginFrame(renderTarget, viewport);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
Compositor::self()->scene()->renderer()->renderItem(renderTarget, viewport, m_window->windowItem(), Scene::PAINT_WINDOW_TRANSFORMED, infiniteRegion(), WindowPaintData{});
- GLFramebuffer::popFramebuffer();
+ Compositor::self()->scene()->renderer()->endFrame();
}
std::chrono::nanoseconds WindowScreenCastSource::clock() const
--
GitLab