void QOpenGLContext::destroy()
{
Q_D(QOpenGLContext);
+ if (d->platformGLContext)
+ emit aboutToBeDestroyed();
if (QOpenGLContext::currentContext() == this)
doneCurrent();
if (d->shareGroup)
}
/*!
+ \fn void QOpenGLContext::aboutToBeDestroyed()
+
+ This signal is emitted before the underlying native OpenGL context is
+ destroyed, such that users may clean up OpenGL resources that might otherwise
+ be left dangling in the case of shared OpenGL contexts.
+
+ If you wish to make the context current in order to do clean-up, make sure to
+ only connect to the signal using a direct connection.
+*/
+
+/*!
If this is the current context for the thread, doneCurrent is called
*/
QOpenGLContext::~QOpenGLContext()
#include <QtTest/QtTest>
+#include <QSignalSpy>
+
class tst_QOpenGL : public QObject
{
Q_OBJECT
void fboRendering();
void fboHandleNulledAfterContextDestroyed();
void openGLPaintDevice();
+ void aboutToBeDestroyed();
};
struct SharedResourceTracker
QCOMPARE(image, fbo.toImage().convertToFormat(QImage::Format_RGB32));
}
+void tst_QOpenGL::aboutToBeDestroyed()
+{
+ QWindow window;
+ window.setGeometry(0, 0, 128, 128);
+ window.create();
+
+ QOpenGLContext *context = new QOpenGLContext;
+ QSignalSpy spy(context, SIGNAL(aboutToBeDestroyed()));
+
+ context->create();
+ context->makeCurrent(&window);
+
+ QCOMPARE(spy.size(), 0);
+
+ delete context;
+
+ QCOMPARE(spy.size(), 1);
+}
+
QTEST_MAIN(tst_QOpenGL)
#include "tst_qopengl.moc"