diff options
-rw-r--r-- | src/gui/kernel/qopenglcontext_p.h | 7 | ||||
-rw-r--r-- | src/gui/opengl/qopenglframebufferobject.cpp | 5 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/gui/kernel/qopenglcontext_p.h b/src/gui/kernel/qopenglcontext_p.h index 4a746bf12b..7c8c698a7d 100644 --- a/src/gui/kernel/qopenglcontext_p.h +++ b/src/gui/kernel/qopenglcontext_p.h @@ -61,6 +61,7 @@ QT_BEGIN_NAMESPACE class QOpenGLFunctions; class QOpenGLContext; +class QOpenGLFramebufferObject; class QOpenGLMultiGroupSharedResource; class Q_GUI_EXPORT QOpenGLSharedResource @@ -204,6 +205,7 @@ public: , workaround_missingPrecisionQualifiers(false) , active_engine(0) , qgl_current_fbo_invalid(false) + , qgl_current_fbo(Q_NULLPTR) , defaultFboRedirect(0) { requestedFormat = QSurfaceFormat::defaultFormat(); @@ -242,6 +244,11 @@ public: bool qgl_current_fbo_invalid; + // Set and unset in QOpenGLFramebufferObject::bind()/unbind(). + // (Only meaningful for QOGLFBO since an FBO might be bound by other means) + // Saves us from querying the driver for the current FBO in most paths. + QOpenGLFramebufferObject *qgl_current_fbo; + QVariant nativeHandle; GLuint defaultFboRedirect; diff --git a/src/gui/opengl/qopenglframebufferobject.cpp b/src/gui/opengl/qopenglframebufferobject.cpp index 6fc18b1d01..1ee90a0827 100644 --- a/src/gui/opengl/qopenglframebufferobject.cpp +++ b/src/gui/opengl/qopenglframebufferobject.cpp @@ -1068,6 +1068,7 @@ bool QOpenGLFramebufferObject::bind() d->funcs.glBindFramebuffer(GL_FRAMEBUFFER, d->fbo()); QOpenGLContextPrivate::get(current)->qgl_current_fbo_invalid = true; + QOpenGLContextPrivate::get(current)->qgl_current_fbo = this; if (d->format.samples() == 0) { // Create new textures to replace the ones stolen via takeTexture(). @@ -1107,7 +1108,9 @@ bool QOpenGLFramebufferObject::release() if (current) { d->funcs.glBindFramebuffer(GL_FRAMEBUFFER, current->defaultFramebufferObject()); - QOpenGLContextPrivate::get(current)->qgl_current_fbo_invalid = true; + QOpenGLContextPrivate *contextPrv = QOpenGLContextPrivate::get(current); + contextPrv->qgl_current_fbo_invalid = true; + contextPrv->qgl_current_fbo = Q_NULLPTR; } return true; |