diff options
author | Samuel Rødal <samuel.rodal@nokia.com> | 2011-09-07 09:30:53 +0200 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@nokia.com> | 2011-09-07 10:09:36 +0200 |
commit | e2be53891fe218c9a1a63c2d385d149d2b1f982f (patch) | |
tree | dd88bf4a6d6f78bb97638a662e2a41c37dc206df | |
parent | fa0407bdb50262f8748e955cf698181cc6906542 (diff) |
Fixed tst_QGL::destroyFBOAfterContext().
Properly free QOpenGLContext in QGLContext::reset(), if we own it.
Change-Id: Ibd913283cf8b3b8a4dc6295a878a22a3989309a7
Reviewed-on: http://codereview.qt.nokia.com/4320
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
-rw-r--r-- | src/opengl/qgl.cpp | 1 | ||||
-rw-r--r-- | src/opengl/qgl_p.h | 2 | ||||
-rw-r--r-- | src/opengl/qgl_qpa.cpp | 12 |
3 files changed, 13 insertions, 2 deletions
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index a78c602701..ad53b20098 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1532,6 +1532,7 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format) q->setDevice(dev); guiGlContext = 0; + ownContext = false; fbo = 0; crWin = false; initDone = false; diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 6f418a9818..668728be20 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -299,6 +299,8 @@ public: void swapRegion(const QRegion ®ion); QOpenGLContext *guiGlContext; + bool ownContext; + void setupSharing(); QGLFormat glFormat; diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 46dfd54adf..afa2772a6f 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -148,7 +148,9 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) widget->winId();//make window } - delete d->guiGlContext; + if (d->ownContext) + delete d->guiGlContext; + d->ownContext = true; QOpenGLContext *shareGlContext = shareContext ? shareContext->d_func()->guiGlContext : 0; d->guiGlContext = new QOpenGLContext; d->guiGlContext->setFormat(winFormat); @@ -180,8 +182,13 @@ void QGLContext::reset() d->initDone = false; QGLContextGroup::removeShare(this); if (d->guiGlContext) { - d->guiGlContext->setQGLContextHandle(0,0); + if (d->ownContext) + delete d->guiGlContext; + else + d->guiGlContext->setQGLContextHandle(0,0); + d->guiGlContext = 0; } + d->ownContext = false; } void QGLContext::makeCurrent() @@ -385,6 +392,7 @@ QGLContext::QGLContext(QOpenGLContext *context) d->init(0, QGLFormat::fromSurfaceFormat(context->format())); d->guiGlContext = context; d->guiGlContext->setQGLContextHandle(this,qDeleteQGLContext); + d->ownContext = false; d->valid = context->isValid(); d->setupSharing(); } |