From 1569f46bdcffc9b4af3eed295aa29fa85e33f60c Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Tue, 21 Jun 2016 14:44:41 +0200 Subject: [PATCH] Make QSGEngine::initialize backend-independent Allow calling initialize(nullptr) regardless of which scenegraph backend is in use. Change-Id: Ie5965dcd12d423255d5eb85fed255107cac2acb9 Reviewed-by: Allan Sandfeld Jensen --- src/quick/scenegraph/qsgcontext_p.h | 2 ++ .../scenegraph/qsgdefaultrendercontext.cpp | 2 +- .../scenegraph/qsgdefaultrendercontext_p.h | 2 +- src/quick/scenegraph/util/qsgengine.cpp | 22 +++++++++---------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/quick/scenegraph/qsgcontext_p.h b/src/quick/scenegraph/qsgcontext_p.h index 2fef0ff1e8..2527be0480 100644 --- a/src/quick/scenegraph/qsgcontext_p.h +++ b/src/quick/scenegraph/qsgcontext_p.h @@ -122,6 +122,8 @@ public: virtual QSGTexture *createTexture(const QImage &image, uint flags = CreateTexture_Alpha) const = 0; virtual QSGRenderer *createRenderer() = 0; + virtual void setAttachToGraphicsContext(bool attach) { Q_UNUSED(attach); } + void registerFontengineForCleanup(QFontEngine *engine); Q_SIGNALS: diff --git a/src/quick/scenegraph/qsgdefaultrendercontext.cpp b/src/quick/scenegraph/qsgdefaultrendercontext.cpp index 92e7f983a0..870c0488c3 100644 --- a/src/quick/scenegraph/qsgdefaultrendercontext.cpp +++ b/src/quick/scenegraph/qsgdefaultrendercontext.cpp @@ -273,7 +273,7 @@ void QSGDefaultRenderContext::initializeShader(QSGMaterialShader *shader) shader->initialize(); } -void QSGDefaultRenderContext::setAttachToGLContext(bool attach) +void QSGDefaultRenderContext::setAttachToGraphicsContext(bool attach) { Q_ASSERT(!isValid()); m_attachToGLContext = attach; diff --git a/src/quick/scenegraph/qsgdefaultrendercontext_p.h b/src/quick/scenegraph/qsgdefaultrendercontext_p.h index bfb15b1eb9..c5e08c07f0 100644 --- a/src/quick/scenegraph/qsgdefaultrendercontext_p.h +++ b/src/quick/scenegraph/qsgdefaultrendercontext_p.h @@ -88,7 +88,7 @@ public: virtual void compileShader(QSGMaterialShader *shader, QSGMaterial *material, const char *vertexCode = 0, const char *fragmentCode = 0); virtual void initializeShader(QSGMaterialShader *shader); - void setAttachToGLContext(bool attach); + void setAttachToGraphicsContext(bool attach) override; static QSGDefaultRenderContext *from(QOpenGLContext *context); diff --git a/src/quick/scenegraph/util/qsgengine.cpp b/src/quick/scenegraph/util/qsgengine.cpp index 26a3d66077..f4d86bba04 100644 --- a/src/quick/scenegraph/util/qsgengine.cpp +++ b/src/quick/scenegraph/util/qsgengine.cpp @@ -115,23 +115,21 @@ QSGEngine::~QSGEngine() */ void QSGEngine::initialize(QOpenGLContext *context) { -#ifndef QT_NO_OPENGL Q_D(QSGEngine); - if (QOpenGLContext::currentContext() != context) { +#ifdef QT_NO_OPENGL + if (context && QOpenGLContext::currentContext() != context) { qWarning("WARNING: The context must be current before calling QSGEngine::initialize."); return; } - - auto openGLRenderContext = static_cast(d->sgRenderContext.data()); - - if (openGLRenderContext != nullptr && !openGLRenderContext->isValid()) { - openGLRenderContext->setAttachToGLContext(false); - openGLRenderContext->initialize(context); - connect(context, &QOpenGLContext::aboutToBeDestroyed, this, &QSGEngine::invalidate); - } -#else - Q_UNUSED(context) #endif + if (d->sgRenderContext && !d->sgRenderContext->isValid()) { + d->sgRenderContext->setAttachToGraphicsContext(false); + d->sgRenderContext->initialize(context); +#ifndef QT_NO_OPENGL + if (context) + connect(context, &QOpenGLContext::aboutToBeDestroyed, this, &QSGEngine::invalidate); +#endif + } } /*!