summaryrefslogtreecommitdiffstats
path: root/src/render/backend/qrenderaspect.cpp
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2015-01-14 16:45:59 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-01-17 16:22:58 +0100
commit2719260a3ae9d46e134817ca21465e952cc58952 (patch)
treece97784df1c1428fb19501596c7808cc7f2e258e /src/render/backend/qrenderaspect.cpp
parent13115b1a0b120b7b70d46028e27ca0fc5c050592 (diff)
Add a synchronous mode to QRenderAspect
With this specific mode frames will be rendered one by one when requested from the outside with renderSynchronous. Since it is meant as an integration point, we also provide renderInitialize which allows to inject our own OpenGL context to the renderer. Change-Id: I03a4a70b5b4dd9a79b22504657e9ede7c7554af8 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/backend/qrenderaspect.cpp')
-rw-r--r--src/render/backend/qrenderaspect.cpp25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/render/backend/qrenderaspect.cpp b/src/render/backend/qrenderaspect.cpp
index 43b0894d9..9c28b58c9 100644
--- a/src/render/backend/qrenderaspect.cpp
+++ b/src/render/backend/qrenderaspect.cpp
@@ -110,9 +110,9 @@ QT_BEGIN_NAMESPACE
namespace Qt3D {
-QRenderAspectPrivate::QRenderAspectPrivate(QRenderAspect *qq)
+QRenderAspectPrivate::QRenderAspectPrivate(QRenderAspect::RenderType type, QRenderAspect *qq)
: QAbstractAspectPrivate(qq)
- , m_renderer(new Render::Renderer)
+ , m_renderer(new Render::Renderer(type))
, m_surfaceEventFilter(new Render::PlatformSurfaceFilter(m_renderer))
, m_surface(Q_NULLPTR)
, m_time(0)
@@ -157,7 +157,7 @@ void QRenderAspectPrivate::setSurface(QSurface *surface)
}
QRenderAspect::QRenderAspect(QObject *parent)
- : QAbstractAspect(*new QRenderAspectPrivate(this), parent)
+ : QAbstractAspect(*new QRenderAspectPrivate(Threaded, this), parent)
{
// Won't return until the private RenderThread in Renderer has been created
// The Renderer is set to wait the surface with a wait condition
@@ -165,7 +165,14 @@ QRenderAspect::QRenderAspect(QObject *parent)
registerBackendTypes();
}
+QRenderAspect::QRenderAspect(QRenderAspect::RenderType type, QObject *parent)
+ : QAbstractAspect(*new QRenderAspectPrivate(type, this), parent)
+{
+ registerBackendTypes();
+}
+
QRenderAspect::QRenderAspect(QRenderAspectPrivate &dd, QObject *parent)
+
: QAbstractAspect(dd, parent)
{
registerBackendTypes();
@@ -203,6 +210,18 @@ void QRenderAspect::registerBackendTypes()
registerBackendType<QShaderData>(QBackendNodeFunctorPtr(new Render::RenderNodeFunctor<Render::RenderShaderData, Render::ShaderDataManager>(d->m_renderer->shaderDataManager())));
}
+void QRenderAspect::renderInitialize(QOpenGLContext *context)
+{
+ Q_D(QRenderAspect);
+ d->m_renderer->initialize(context);
+}
+
+void QRenderAspect::renderSynchronous()
+{
+ Q_D(QRenderAspect);
+ d->m_renderer->doRender(1);
+}
+
QVector<QAspectJobPtr> QRenderAspect::jobsToExecute(qint64 time)
{
Q_D(QRenderAspect);