summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMäättä Antti <antti.maatta@qt.io>2018-02-14 12:12:40 +0200
committerAntti Määttä <antti.maatta@qt.io>2018-02-14 11:52:24 +0000
commited624a36fc35bcb7f76e8e0e1f54df6a2e679b3f (patch)
tree177d2734cb6bbf11334eca3c880662b3a0f83376
parentc4764bd2c8cd06d9ee407fa089c1ec7cb6eb777b (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.cpp22
-rw-r--r--src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.h2
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;