diff options
author | Johan Klokkhammer Helsing <johan.helsing@qt.io> | 2019-12-12 12:58:11 +0100 |
---|---|---|
committer | Johan Klokkhammer Helsing <johan.helsing@qt.io> | 2020-01-20 15:03:15 +0100 |
commit | 06bb315beb6c2c398223cfe52cbc7f66e14a8557 (patch) | |
tree | 5224974a8d2cfa34780809ed87be82a7f544827e | |
parent | 35a461d0261af4178e560df3e3c8fd6fd19bdeb5 (diff) | |
download | qtbase-06bb315beb6c2c398223cfe52cbc7f66e14a8557.tar.gz |
Remove QOpenGLTextureHelper dependency from QOpenGLContext
It's now just a pointer to a forward declared class
Task-number: QTBUG-74409
Change-Id: I34df385154dcff2bbba2f6318825ab5258fa6695
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
-rw-r--r-- | src/gui/kernel/qopenglcontext.cpp | 10 | ||||
-rw-r--r-- | src/gui/kernel/qopenglcontext.h | 2 | ||||
-rw-r--r-- | src/gui/kernel/qopenglcontext_p.h | 1 | ||||
-rw-r--r-- | src/gui/opengl/qopengltexture.cpp | 3 |
4 files changed, 10 insertions, 6 deletions
diff --git a/src/gui/kernel/qopenglcontext.cpp b/src/gui/kernel/qopenglcontext.cpp index 124b39f2a9..ab71434c13 100644 --- a/src/gui/kernel/qopenglcontext.cpp +++ b/src/gui/kernel/qopenglcontext.cpp @@ -56,8 +56,6 @@ #include <private/qopenglextensions_p.h> #include <private/qopenglversionfunctionsfactory_p.h> -#include <private/qopengltexturehelper_p.h> - #include <QDebug> #ifndef QT_OPENGL_ES_2 @@ -664,7 +662,10 @@ void QOpenGLContext::destroy() qDeleteAll(d->versionFunctions); d->versionFunctions.clear(); - delete d->textureFunctions; + if (d->textureFunctionsDestroyCallback) { + d->textureFunctionsDestroyCallback(); + d->textureFunctionsDestroyCallback = nullptr; + } d->textureFunctions = nullptr; d->nativeHandle = QVariant(); @@ -1388,10 +1389,11 @@ QOpenGLTextureHelper* QOpenGLContext::textureFunctions() const /*! \internal */ -void QOpenGLContext::setTextureFunctions(QOpenGLTextureHelper* textureFuncs) +void QOpenGLContext::setTextureFunctions(QOpenGLTextureHelper* textureFuncs, std::function<void()> destroyCallback) { Q_D(QOpenGLContext); d->textureFunctions = textureFuncs; + d->textureFunctionsDestroyCallback = destroyCallback; } /*! diff --git a/src/gui/kernel/qopenglcontext.h b/src/gui/kernel/qopenglcontext.h index 9cfaa52f17..f19dde465a 100644 --- a/src/gui/kernel/qopenglcontext.h +++ b/src/gui/kernel/qopenglcontext.h @@ -243,7 +243,7 @@ private: void removeExternalFunctions(QAbstractOpenGLFunctions *f); QOpenGLTextureHelper* textureFunctions() const; - void setTextureFunctions(QOpenGLTextureHelper* textureFuncs); + void setTextureFunctions(QOpenGLTextureHelper* textureFuncs, std::function<void()> destroyCallback); void destroy(); diff --git a/src/gui/kernel/qopenglcontext_p.h b/src/gui/kernel/qopenglcontext_p.h index 833cfb20c3..7770b1ce02 100644 --- a/src/gui/kernel/qopenglcontext_p.h +++ b/src/gui/kernel/qopenglcontext_p.h @@ -240,6 +240,7 @@ public: QOpenGLFunctions *functions; mutable QSet<QByteArray> extensionNames; QOpenGLTextureHelper* textureFunctions; + std::function<void()> textureFunctionsDestroyCallback; GLint max_texture_size; diff --git a/src/gui/opengl/qopengltexture.cpp b/src/gui/opengl/qopengltexture.cpp index fd282e3ba0..35d90898e5 100644 --- a/src/gui/opengl/qopengltexture.cpp +++ b/src/gui/opengl/qopengltexture.cpp @@ -151,7 +151,8 @@ void QOpenGLTexturePrivate::initializeOpenGLFunctions() texFuncs = context->textureFunctions(); if (!texFuncs) { texFuncs = new QOpenGLTextureHelper(context); - context->setTextureFunctions(texFuncs); + auto *funcs = texFuncs; // lets us capture by pointer value below + context->setTextureFunctions(funcs, [funcs] { delete funcs; }); } } |