41 lines
1.8 KiB
Diff
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
|
|
|