Changeset View
Changeset View
Standalone View
Standalone View
effects/screenshot/screenshot.cpp
Show First 20 Lines • Show All 543 Lines • ▼ Show 20 Line(s) | |||||
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()) { | ||
552 | qCDebug(KWINEFFECTS) << "Framebuffer Blit not supported"; | 552 | qCWarning(KWINEFFECTS) << "Framebuffer Blit might not be supported, and this may yield empty screenshot"; | ||
553 | return img; | | |||
554 | } | 553 | } | ||
555 | GLTexture tex(GL_RGBA8, geometry.width(), geometry.height()); | 554 | GLTexture tex(GL_RGBA8, geometry.width(), geometry.height()); | ||
556 | GLRenderTarget target(tex); | 555 | GLRenderTarget target(tex); | ||
557 | target.blitFromFramebuffer(geometry); | 556 | target.blitFromFramebuffer(geometry); | ||
558 | // copy content from framebuffer into image | 557 | // copy content from framebuffer into image | ||
559 | tex.bind(); | 558 | tex.bind(); | ||
560 | img = QImage(geometry.size(), QImage::Format_ARGB32); | 559 | img = QImage(geometry.size(), QImage::Format_ARGB32); | ||
561 | if (GLPlatform::instance()->isGLES()) { | 560 | if (GLPlatform::instance()->isGLES()) { | ||
562 | glReadPixels(0, 0, img.width(), img.height(), GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)img.bits()); | 561 | glReadPixels(0, 0, img.width(), img.height(), GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)img.bits()); | ||
563 | } else { | 562 | } else { | ||
564 | glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)img.bits()); | 563 | glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)img.bits()); | ||
565 | } | 564 | } | ||
566 | tex.unbind(); | 565 | tex.unbind(); | ||
567 | ScreenShotEffect::convertFromGLImage(img, geometry.width(), geometry.height()); | 566 | ScreenShotEffect::convertFromGLImage(img, geometry.width(), geometry.height()); | ||
568 | } | 567 | } | ||
569 | 568 | | |||
570 | #ifdef KWIN_HAVE_XRENDER_COMPOSITING | 569 | #ifdef KWIN_HAVE_XRENDER_COMPOSITING | ||
graesslin: just use else here. glReadPixels is available on desktop gl. | |||||
571 | if (effects->compositingType() == XRenderCompositing) { | 570 | if (effects->compositingType() == XRenderCompositing) { | ||
572 | xcb_image_t *xImage = NULL; | 571 | xcb_image_t *xImage = NULL; | ||
573 | img = xPictureToImage(effects->xrenderBufferPicture(), geometry, &xImage); | 572 | img = xPictureToImage(effects->xrenderBufferPicture(), geometry, &xImage); | ||
574 | if (xImage) { | 573 | if (xImage) { | ||
575 | xcb_image_destroy(xImage); | 574 | xcb_image_destroy(xImage); | ||
576 | } | 575 | } | ||
577 | } | 576 | } | ||
578 | #endif | 577 | #endif | ||
▲ Show 20 Lines • Show All 77 Lines • Show Last 20 Lines |
just use else here. glReadPixels is available on desktop gl.