summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qopenglcontext.cpp10
-rw-r--r--src/gui/kernel/qopenglcontext.h2
-rw-r--r--src/gui/kernel/qopenglcontext_p.h1
-rw-r--r--src/gui/opengl/qopengltexture.cpp3
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; });
}
}