diff options
author | Määttä Antti <antti.maatta@qt.io> | 2018-02-14 12:12:40 +0200 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2018-02-14 11:52:24 +0000 |
commit | ed624a36fc35bcb7f76e8e0e1f54df6a2e679b3f (patch) | |
tree | 177d2734cb6bbf11334eca3c880662b3a0f83376 | |
parent | c4764bd2c8cd06d9ee407fa089c1ec7cb6eb777b (diff) |
Fix qmlstreamer some more
-The qmlstreamer context must be created when the initialize gets called
since its called from different thread than setItem.
-Always render the qmlstreamer in render since layer subpresentations are
not rendered to texture.
Change-Id: Id0637b5fe577d1941b2f093d1c1cdcbb2ddcdc4f
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Marianne Yrjänä <marianne.yrjana@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r-- | src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.cpp | 22 | ||||
-rw-r--r-- | src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.h | 2 |
2 files changed, 11 insertions, 13 deletions
diff --git a/src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.cpp b/src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.cpp index 2f2e9161..de7ebde4 100644 --- a/src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.cpp +++ b/src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.cpp @@ -128,7 +128,6 @@ Q3DSQmlStreamRenderer::Q3DSQmlStreamRenderer() , m_vao(nullptr) , m_vertices(nullptr) , m_context(nullptr) - , m_shareContext(nullptr) , m_offscreenSurface(nullptr) , m_renderObject(nullptr) , m_renderThread(nullptr) @@ -204,10 +203,16 @@ void Q3DSQmlStreamRenderer::cleanup() bool Q3DSQmlStreamRenderer::initialize(QOpenGLContext *context, QSurface *surface) { Q_UNUSED(surface); + if (!m_context) { + m_context = new QOpenGLContext(); + m_context->setShareContext(context); + m_context->setFormat(context->format()); + m_context->create(); + + m_context->moveToThread(m_renderThread); + } if (!m_rootItem) { - if (!m_shareContext) - m_shareContext = context; return true; } @@ -215,12 +220,6 @@ bool Q3DSQmlStreamRenderer::initialize(QOpenGLContext *context, QSurface *surfac Q_ASSERT(QOpenGLContext::areSharing(context, m_context)); return true; } - m_context = new QOpenGLContext(); - m_context->setShareContext(context); - m_context->setFormat(context->format()); - m_context->create(); - - m_context->moveToThread(m_renderThread); m_rootItem->setParentItem(m_quickWindow->contentItem()); updateSizes(); @@ -343,8 +342,8 @@ void Q3DSQmlStreamRenderer::setItem(QQuickItem *item) if (item && m_rootItem != item) { m_rootItem = item; - if (m_shareContext) - initialize(m_shareContext, nullptr); + if (m_context) + initialize(m_context, nullptr); } } } @@ -463,7 +462,6 @@ void Q3DSQmlStreamRenderer::render() func->glDrawArrays(GL_TRIANGLES, 0, 6); func->glEnable(GL_DEPTH_TEST); - m_update = false; m_program->release(); m_vao->release(); } diff --git a/src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.h b/src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.h index 7bc5c482..7cb1dacf 100644 --- a/src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.h +++ b/src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.h @@ -106,7 +106,7 @@ private: QOpenGLShaderProgram *m_program; QOpenGLVertexArrayObject *m_vao; QOpenGLBuffer *m_vertices; - QOpenGLContext *m_context, *m_shareContext; + QOpenGLContext *m_context; QOffscreenSurface *m_offscreenSurface; Q3DSQmlStreamEventHandler *m_renderObject; |