diff options
author | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2015-09-28 16:33:29 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2015-10-14 11:38:56 +0000 |
commit | e82e075e51db598c5a6fe4da399c2b1966a36110 (patch) | |
tree | 29c7f458848030489970db38ed063ab3d8eae283 /src | |
parent | e7ab9a1fb9ad3b97b534d2e3bc6e54e8d1ac7533 (diff) |
QOpenGLWidget: Do not recurse when calling grabFramebuffer() from paintGL()
Task-number: QTBUG-48450
Change-Id: I14b1ff40727f705d8b89371b4d3bb5d6adc139fe
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/widgets/kernel/qopenglwidget.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/widgets/kernel/qopenglwidget.cpp b/src/widgets/kernel/qopenglwidget.cpp index 92f6066936..ee0543ceda 100644 --- a/src/widgets/kernel/qopenglwidget.cpp +++ b/src/widgets/kernel/qopenglwidget.cpp @@ -559,7 +559,8 @@ public: flushPending(false), paintDevice(0), updateBehavior(QOpenGLWidget::NoPartialUpdate), - requestedSamples(0) + requestedSamples(0), + inPaintGL(false) { requestedFormat = QSurfaceFormat::defaultFormat(); } @@ -602,6 +603,7 @@ public: QSurfaceFormat requestedFormat; QOpenGLWidget::UpdateBehavior updateBehavior; int requestedSamples; + bool inPaintGL; }; void QOpenGLWidgetPaintDevicePrivate::beginPaint() @@ -823,7 +825,9 @@ void QOpenGLWidgetPrivate::invokeUserPaint() QOpenGLContextPrivate::get(ctx)->defaultFboRedirect = fbo->handle(); f->glViewport(0, 0, q->width() * q->devicePixelRatioF(), q->height() * q->devicePixelRatioF()); + inPaintGL = true; q->paintGL(); + inPaintGL = false; flushPending = true; QOpenGLContextPrivate::get(ctx)->defaultFboRedirect = 0; @@ -870,7 +874,9 @@ QImage QOpenGLWidgetPrivate::grabFramebuffer() if (!initialized) return QImage(); - render(); + if (!inPaintGL) + render(); + resolveSamples(); q->makeCurrent(); QImage res = qt_gl_read_framebuffer(q->size() * q->devicePixelRatioF(), false, false); |