diff --git a/src/widgets/kernel/qopenglwidget.cpp b/src/widgets/kernel/qopenglwidget.cpp index ee0543cedac..65a70ceb02a 100644 --- a/src/widgets/kernel/qopenglwidget.cpp +++ b/src/widgets/kernel/qopenglwidget.cpp @@ -877,11 +877,22 @@ QImage QOpenGLWidgetPrivate::grabFramebuffer() if (!inPaintGL) render(); - resolveSamples(); - q->makeCurrent(); + if (resolvedFbo) { + resolveSamples(); + resolvedFbo->bind(); + } else { + q->makeCurrent(); + } + QImage res = qt_gl_read_framebuffer(q->size() * q->devicePixelRatioF(), false, false); res.setDevicePixelRatio(q->devicePixelRatioF()); + // While we give no guarantees of what is going to be left bound, prefer the + // multisample fbo instead of the resolved one. Clients may continue to + // render straight after calling this function. + if (resolvedFbo) + q->makeCurrent(); + return res; }