effects/screenshot: fix the screenshot on GLES

We want to multiply the width/height by scale weather or not we are
using GLES or not, otherwise this will only provide part of screen when
used with e.g fullscreen screenshot.
This commit is contained in:
Bhushan Shah 2020-11-03 13:13:36 +05:30 committed by Bhushan Shah
parent 00ce98b7a2
commit 5e6c81eea0

View file

@ -777,15 +777,12 @@ QImage ScreenShotEffect::blitScreenshot(const QRect &geometry, const qreal scale
QImage img;
if (effects->isOpenGLCompositing())
{
int width = geometry.width();
int height = geometry.height();
const QSize nativeSize = geometry.size() * scale;
if (GLRenderTarget::blitSupported() && !GLPlatform::instance()->isGLES()) {
width = static_cast<int>(width * scale);
height = static_cast<int>(height * scale);
img = QImage(width, height, QImage::Format_ARGB32);
GLTexture tex(GL_RGBA8, width, height);
img = QImage(nativeSize.width(), nativeSize.height(), QImage::Format_ARGB32);
GLTexture tex(GL_RGBA8, nativeSize.width(), nativeSize.height());
GLRenderTarget target(tex);
target.blitFromFramebuffer(geometry);
// copy content from framebuffer into image
@ -793,10 +790,10 @@ QImage ScreenShotEffect::blitScreenshot(const QRect &geometry, const qreal scale
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, static_cast<GLvoid*>(img.bits()));
tex.unbind();
} else {
img = QImage(width, height, QImage::Format_ARGB32);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)img.bits());
img = QImage(nativeSize.width(), nativeSize.height(), QImage::Format_ARGB32);
glReadPixels(0, 0, nativeSize.width(), nativeSize.height(), GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)img.bits());
}
ScreenShotEffect::convertFromGLImage(img, width, height);
ScreenShotEffect::convertFromGLImage(img, nativeSize.width(), nativeSize.height());
}
#ifdef KWIN_HAVE_XRENDER_COMPOSITING