screencast: Simplify the region path

No need to render the intermediate texture into a second intermediate
texture.
master
Aleix Pol 2 years ago committed by Aleix Pol Gonzalez
parent 6394bccdcb
commit 577c031599

@ -70,7 +70,7 @@ std::chrono::nanoseconds RegionScreenCastSource::clock() const
return m_last; return m_last;
} }
void RegionScreenCastSource::render(GLFramebuffer *target) void RegionScreenCastSource::ensureTexture()
{ {
if (!m_renderedTexture) { if (!m_renderedTexture) {
m_renderedTexture.reset(new GLTexture(hasAlphaChannel() ? GL_RGBA8 : GL_RGB8, textureSize())); 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); GLFramebuffer::pushFramebuffer(target);
QRect r(QPoint(), target->size()); QRect r(QPoint(), target->size());
@ -102,11 +107,8 @@ void RegionScreenCastSource::render(GLFramebuffer *target)
void RegionScreenCastSource::render(QImage *image) void RegionScreenCastSource::render(QImage *image)
{ {
GLTexture offscreenTexture(hasAlphaChannel() ? GL_RGBA8 : GL_RGB8, textureSize()); ensureTexture();
GLFramebuffer offscreenTarget(&offscreenTexture); grabTexture(m_renderedTexture.get(), image);
render(&offscreenTarget);
grabTexture(&offscreenTexture, image);
} }
} }

@ -41,6 +41,8 @@ public:
void updateOutput(Output *output); void updateOutput(Output *output);
private: private:
void ensureTexture();
const QRect m_region; const QRect m_region;
const qreal m_scale; const qreal m_scale;
std::unique_ptr<GLFramebuffer> m_target; std::unique_ptr<GLFramebuffer> m_target;

Loading…
Cancel
Save