summaryrefslogtreecommitdiffstats
path: root/src/render/frontend
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2016-01-20 16:33:53 +0100
committerPaul Lemire <paul.lemire@kdab.com>2016-01-22 14:29:34 +0000
commit86177b98e27a9d376e35039454986ff7de8f3104 (patch)
tree6ac256365641f538128666917f0b5090d873320a /src/render/frontend
parent31e4d157c6b0af0c04546af643707a3811583455 (diff)
QAspectEngine/QAbstractAspects: get rid of setData
Getting rid of set data and the refactoring on setting the surface implies that: - Given the FrameGraph configuration, there may be several RenderViews each having a different RenderSurfaceSelector/Window - This means that the Renderer/QRenderAspect can't know about the surface before reading the scene - This means that the Renderer may be dealing with more than 1 window - This means that initialization, render and shutdown procedures will have to be updated accordingly Therefore the Renderer was refactored to: - Be initialized without knowing about a surface - For each RenderView, check the surface and if different from the previous one: * Make the context current with it * Create the appropriate glHelpers (as Surfaces may have != formats) TO DO: - Fix picking - Fix windows exposition - Fix shutdown / detection of all windows beging closed Change-Id: I49d070b05f46be4b26cfb57e494feba145d1da9c Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/frontend')
-rw-r--r--src/render/frontend/qrenderaspect.cpp73
-rw-r--r--src/render/frontend/qrenderaspect.h7
2 files changed, 22 insertions, 58 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index 860445e48..bd14694cd 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -216,11 +216,8 @@ void QRenderAspectPrivate::setSurface(QSurface *surface)
m_surfaceSize = surface->size();
// If the window/offscreen surface has a native surface, tell the renderer
- if (hasPlatformSurface) {
- m_renderer->setSurface(surface);
- m_renderer->setSurfaceSize(m_surfaceSize);
- m_renderer->setDevicePixelRatio(m_devicePixelRatio);
- }
+ // if (hasPlatformSurface)
+ // m_renderer->setSurface(surface);
}
}
@@ -398,59 +395,31 @@ QVector<Qt3DCore::QAspectJobPtr> QRenderAspect::jobsToExecute(qint64 time)
// Clear any old dependencies from previous frames
d->m_cleanupJob->removeDependency(QWeakPointer<QAspectJob>());
- // Do not create any more RenderView jobs when the platform surface is gone.
- if (d->m_renderer->surface()) {
- // Traverse the current framegraph and create jobs to populate
- // RenderBins with RenderCommands
- QVector<QAspectJobPtr> renderBinJobs = d->m_renderer->renderBinJobs();
- // TODO: Add wrapper around ThreadWeaver::Collection
- for (int i = 0; i < renderBinJobs.size(); ++i) {
- QAspectJobPtr renderBinJob = renderBinJobs.at(i);
- renderBinJob->addDependency(d->m_updateBoundingVolumeJob);
- jobs.append(renderBinJob);
- d->m_cleanupJob->addDependency(renderBinJob);
- }
+ // Note: We need the RenderBinJobs to set the surface
+ // so we must create the RenderViews in all cases
+
+ // Traverse the current framegraph and create jobs to populate
+ // RenderBins with RenderCommands
+ QVector<QAspectJobPtr> renderBinJobs = d->m_renderer->renderBinJobs();
+ // TODO: Add wrapper around ThreadWeaver::Collection
+ for (int i = 0; i < renderBinJobs.size(); ++i) {
+ QAspectJobPtr renderBinJob = renderBinJobs.at(i);
+ renderBinJob->addDependency(d->m_updateBoundingVolumeJob);
+ jobs.append(renderBinJob);
+ d->m_cleanupJob->addDependency(renderBinJob);
}
jobs.append(d->m_cleanupJob);
}
return jobs;
}
-const QSize &QRenderAspect::surfaceSize() const
-{
- Q_D(const QRenderAspect);
- return d->m_surfaceSize;
-}
-
-void QRenderAspect::setSurfaceSize(const QSize &s)
-{
- Q_D(QRenderAspect);
- d->m_surfaceSize = s;
- if (d->m_renderer)
- d->m_renderer->setSurfaceSize(s);
-}
-
-qreal QRenderAspect::devicePixelRatio() const
-{
- Q_D(const QRenderAspect);
- return d->m_devicePixelRatio;
-}
-
-void QRenderAspect::setDevicePixelRatio(qreal r)
-{
- Q_D(QRenderAspect);
- d->m_devicePixelRatio = r;
- if (d->m_renderer)
- d->m_renderer->setDevicePixelRatio(r);
-}
-
void QRenderAspect::onRootEntityChanged(Qt3DCore::QEntity *rootEntity)
{
Q_D(QRenderAspect);
d->m_renderer->setSceneRoot(d, d->m_renderer->nodeManagers()->lookupResource<Render::Entity, Render::EntityManager>(rootEntity->id()));
}
-void QRenderAspect::onInitialize(const QVariantMap &data)
+void QRenderAspect::onInitialize()
{
// TODO: Remove the m_initialized variable and split out onInitialize()
// and setting a resource (the QSurface) on the aspects.
@@ -471,13 +440,13 @@ void QRenderAspect::onInitialize(const QVariantMap &data)
d->m_initialized = true;
}
- QSurface *surface = Q_NULLPTR;
- const QVariant &v = data.value(QStringLiteral("surface"));
- if (v.isValid())
- surface = v.value<QSurface *>();
+ // QSurface *surface = Q_NULLPTR;
+ // const QVariant &v = data.value(QStringLiteral("surface"));
+ // if (v.isValid())
+ // surface = v.value<QSurface *>();
- if (surface)
- d->setSurface(surface);
+ // if (surface)
+ // d->setSurface(surface);
if (d->m_aspectManager)
d->m_renderer->registerEventFilter(d->services()->eventFilterService());
diff --git a/src/render/frontend/qrenderaspect.h b/src/render/frontend/qrenderaspect.h
index 2a9cd0eed..6df8b20ff 100644
--- a/src/render/frontend/qrenderaspect.h
+++ b/src/render/frontend/qrenderaspect.h
@@ -70,18 +70,13 @@ public:
QVector<Qt3DCore::QAspectJobPtr> jobsToExecute(qint64 time) Q_DECL_OVERRIDE;
- const QSize &surfaceSize() const;
- void setSurfaceSize(const QSize &s);
- qreal devicePixelRatio() const;
- void setDevicePixelRatio(qreal r);
-
protected:
void registerBackendTypes();
QRenderAspect(QRenderAspectPrivate &dd, QObject *parent);
Q_DECLARE_PRIVATE(QRenderAspect)
void onRootEntityChanged(Qt3DCore::QEntity *rootObject) Q_DECL_OVERRIDE;
- void onInitialize(const QVariantMap &data) Q_DECL_OVERRIDE;
+ void onInitialize() Q_DECL_OVERRIDE;
void onCleanup() Q_DECL_OVERRIDE;
QVector<Qt3DCore::QAspectJobPtr> createRenderBufferJobs();