From ed624a36fc35bcb7f76e8e0e1f54df6a2e679b3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A4=C3=A4tt=C3=A4=20Antti?= Date: Wed, 14 Feb 2018 12:12:40 +0200 Subject: Fix qmlstreamer some more MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -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ää Reviewed-by: Marianne Yrjänä Reviewed-by: Miikka Heikkinen --- src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.cpp | 22 ++++++++++------------ 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; -- cgit v1.2.3