From 577c031599fea8892d884bbaafbad61f3965dc80 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Mon, 13 Feb 2023 20:31:34 +0100 Subject: [PATCH] screencast: Simplify the region path No need to render the intermediate texture into a second intermediate texture. --- src/plugins/screencast/regionscreencastsource.cpp | 14 ++++++++------ src/plugins/screencast/regionscreencastsource.h | 2 ++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/plugins/screencast/regionscreencastsource.cpp b/src/plugins/screencast/regionscreencastsource.cpp index da065e4164..29ed37f6d5 100644 --- a/src/plugins/screencast/regionscreencastsource.cpp +++ b/src/plugins/screencast/regionscreencastsource.cpp @@ -70,7 +70,7 @@ std::chrono::nanoseconds RegionScreenCastSource::clock() const return m_last; } -void RegionScreenCastSource::render(GLFramebuffer *target) +void RegionScreenCastSource::ensureTexture() { if (!m_renderedTexture) { m_renderedTexture.reset(new GLTexture(hasAlphaChannel() ? GL_RGBA8 : GL_RGB8, textureSize())); @@ -82,6 +82,11 @@ void RegionScreenCastSource::render(GLFramebuffer *target) } } } +} + +void RegionScreenCastSource::render(GLFramebuffer *target) +{ + ensureTexture(); GLFramebuffer::pushFramebuffer(target); QRect r(QPoint(), target->size()); @@ -102,11 +107,8 @@ void RegionScreenCastSource::render(GLFramebuffer *target) void RegionScreenCastSource::render(QImage *image) { - GLTexture offscreenTexture(hasAlphaChannel() ? GL_RGBA8 : GL_RGB8, textureSize()); - GLFramebuffer offscreenTarget(&offscreenTexture); - - render(&offscreenTarget); - grabTexture(&offscreenTexture, image); + ensureTexture(); + grabTexture(m_renderedTexture.get(), image); } } diff --git a/src/plugins/screencast/regionscreencastsource.h b/src/plugins/screencast/regionscreencastsource.h index 2cf0d61b2f..5b702d9e23 100644 --- a/src/plugins/screencast/regionscreencastsource.h +++ b/src/plugins/screencast/regionscreencastsource.h @@ -41,6 +41,8 @@ public: void updateOutput(Output *output); private: + void ensureTexture(); + const QRect m_region; const qreal m_scale; std::unique_ptr m_target;