diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2015-01-14 16:45:59 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-01-17 16:22:58 +0100 |
commit | 2719260a3ae9d46e134817ca21465e952cc58952 (patch) | |
tree | ce97784df1c1428fb19501596c7808cc7f2e258e /src/render/backend/qrenderaspect.cpp | |
parent | 13115b1a0b120b7b70d46028e27ca0fc5c050592 (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.cpp | 25 |
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); |