Changeset View
Changeset View
Standalone View
Standalone View
effects/screenshot/screenshot.cpp
Show First 20 Lines • Show All 542 Lines • ▼ Show 20 Line(s) | 525 | { | |||
---|---|---|---|---|---|
543 | return QString(); | 543 | return QString(); | ||
544 | } | 544 | } | ||
545 | 545 | | |||
546 | QImage ScreenShotEffect::blitScreenshot(const QRect &geometry) | 546 | QImage ScreenShotEffect::blitScreenshot(const QRect &geometry) | ||
547 | { | 547 | { | ||
548 | QImage img; | 548 | QImage img; | ||
549 | if (effects->isOpenGLCompositing()) | 549 | if (effects->isOpenGLCompositing()) | ||
550 | { | 550 | { | ||
551 | if (!GLRenderTarget::blitSupported()) { | 551 | if (GLRenderTarget::blitSupported() && !GLPlatform::instance()->isGLES()) { | ||
552 | qCDebug(KWINEFFECTS) << "Framebuffer Blit not supported"; | 552 | img = QImage(geometry.size(), QImage::Format_ARGB32); | ||
553 | return img; | | |||
554 | } | | |||
555 | GLTexture tex(GL_RGBA8, geometry.width(), geometry.height()); | 553 | GLTexture tex(GL_RGBA8, geometry.width(), geometry.height()); | ||
556 | GLRenderTarget target(tex); | 554 | GLRenderTarget target(tex); | ||
557 | target.blitFromFramebuffer(geometry); | 555 | target.blitFromFramebuffer(geometry); | ||
558 | // copy content from framebuffer into image | 556 | // copy content from framebuffer into image | ||
559 | tex.bind(); | 557 | tex.bind(); | ||
558 | glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)img.bits()); | ||||
559 | tex.unbind(); | ||||
560 | } else if (GLPlatform::instance()->isGLES()) { | ||||
graesslin: just use else here. glReadPixels is available on desktop gl. | |||||
560 | img = QImage(geometry.size(), QImage::Format_ARGB32); | 561 | img = QImage(geometry.size(), QImage::Format_ARGB32); | ||
561 | if (GLPlatform::instance()->isGLES()) { | | |||
562 | glReadPixels(0, 0, img.width(), img.height(), GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)img.bits()); | 562 | glReadPixels(0, 0, img.width(), img.height(), GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)img.bits()); | ||
563 | } else { | 563 | } else { | ||
564 | glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)img.bits()); | 564 | qCDebug(KWINEFFECTS) << "Neither framebuffer blit nor glReadPixels supported."; | ||
565 | return img; | ||||
565 | } | 566 | } | ||
566 | tex.unbind(); | | |||
567 | ScreenShotEffect::convertFromGLImage(img, geometry.width(), geometry.height()); | 567 | ScreenShotEffect::convertFromGLImage(img, geometry.width(), geometry.height()); | ||
568 | } | 568 | } | ||
569 | 569 | | |||
570 | #ifdef KWIN_HAVE_XRENDER_COMPOSITING | 570 | #ifdef KWIN_HAVE_XRENDER_COMPOSITING | ||
571 | if (effects->compositingType() == XRenderCompositing) { | 571 | if (effects->compositingType() == XRenderCompositing) { | ||
572 | xcb_image_t *xImage = NULL; | 572 | xcb_image_t *xImage = NULL; | ||
573 | img = xPictureToImage(effects->xrenderBufferPicture(), geometry, &xImage); | 573 | img = xPictureToImage(effects->xrenderBufferPicture(), geometry, &xImage); | ||
574 | if (xImage) { | 574 | if (xImage) { | ||
▲ Show 20 Lines • Show All 81 Lines • Show Last 20 Lines |
just use else here. glReadPixels is available on desktop gl.