summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@theqtcompany.com>2015-09-28 16:33:29 +0200
committerLaszlo Agocs <laszlo.agocs@theqtcompany.com>2015-10-14 11:38:56 +0000
commite82e075e51db598c5a6fe4da399c2b1966a36110 (patch)
tree29c7f458848030489970db38ed063ab3d8eae283 /src
parente7ab9a1fb9ad3b97b534d2e3bc6e54e8d1ac7533 (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.cpp10
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);