diff options
author | Paul Lemire <paul.lemire350@gmail.com> | 2015-08-06 19:05:26 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2015-08-07 19:43:17 +0000 |
commit | 0e8b923ec0f9ab07ba542b86b284234df91486e4 (patch) | |
tree | a58727b760d8eca2343bf7731070879dd4b964e3 | |
parent | 1f8e2ee5fd8b66f6a10440166134972016a78c21 (diff) |
RenderGeometryRenderer/GeometryFunctor: everything is now hooked up
Change-Id: I70bcd536ef7d4fbeb3b5ad8a9593af7bd984a0af
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/render/backend/jobs/loadgeometryjob.cpp | 3 | ||||
-rw-r--r-- | src/render/backend/qrenderaspect.cpp | 3 | ||||
-rw-r--r-- | src/render/backend/renderbuffer.cpp | 1 | ||||
-rw-r--r-- | src/render/backend/renderer.cpp | 5 | ||||
-rw-r--r-- | src/render/backend/rendergeometryrenderer.cpp | 18 | ||||
-rw-r--r-- | src/render/backend/rendergeometryrenderer_p.h | 1 |
6 files changed, 28 insertions, 3 deletions
diff --git a/src/render/backend/jobs/loadgeometryjob.cpp b/src/render/backend/jobs/loadgeometryjob.cpp index ed5af49ea..a5efb5d00 100644 --- a/src/render/backend/jobs/loadgeometryjob.cpp +++ b/src/render/backend/jobs/loadgeometryjob.cpp @@ -57,7 +57,8 @@ LoadGeometryJob::~LoadGeometryJob() void LoadGeometryJob::run() { RenderGeometryRenderer *geometryRenderer = m_renderer->geometryRendererManager()->data(m_handle); - // TO DO: Do something + if (geometryRenderer != Q_NULLPTR) + geometryRenderer->executeFunctor(); } } // Render diff --git a/src/render/backend/qrenderaspect.cpp b/src/render/backend/qrenderaspect.cpp index af1284b81..3e8f46638 100644 --- a/src/render/backend/qrenderaspect.cpp +++ b/src/render/backend/qrenderaspect.cpp @@ -302,6 +302,9 @@ QVector<QAspectJobPtr> QRenderAspect::jobsToExecute(qint64 time) const QVector<QAspectJobPtr> bufferJobs = d->m_renderer->createRenderBufferJobs(); jobs.append(bufferJobs); + const QVector<QAspectJobPtr> geometryJobs = d->m_renderer->createGeometryRendererJobs(); + jobs.append(geometryJobs); + // Create jobs to update transforms and bounding volumes // We can only update bounding volumes once all world transforms are known d->m_boundingVolumeJob->addDependency(d->m_worldTransformJob); diff --git a/src/render/backend/renderbuffer.cpp b/src/render/backend/renderbuffer.cpp index 423255786..d7ff4bca4 100644 --- a/src/render/backend/renderbuffer.cpp +++ b/src/render/backend/renderbuffer.cpp @@ -76,6 +76,7 @@ void RenderBuffer::setManager(BufferManager *manager) void RenderBuffer::executeFunctor() { + Q_ASSERT(m_functor); m_data = (*m_functor)(); } diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp index cfe88ddc3..1c285a045 100644 --- a/src/render/backend/renderer.cpp +++ b/src/render/backend/renderer.cpp @@ -75,6 +75,7 @@ #include <Qt3DRenderer/private/vsyncframeadvanceservice_p.h> #include <Qt3DRenderer/private/buffermanager_p.h> #include <Qt3DRenderer/private/loadbufferjob_p.h> +#include <Qt3DRenderer/private/loadgeometryjob_p.h> #include <Qt3DRenderer/private/geometryrenderermanager_p.h> #include <Qt3DCore/qcameralens.h> @@ -792,7 +793,9 @@ QVector<QAspectJobPtr> Renderer::createGeometryRendererJobs() Q_FOREACH (const QNodeId &geoRendererId, dirtyGeometryRenderers) { HGeometryRenderer geometryRendererHandle = m_geometryRendererManager->lookupHandle(geoRendererId); if (!geometryRendererHandle.isNull()) { - // TO DO: Create new job + LoadGeometryJobPtr job(new LoadGeometryJob(geometryRendererHandle)); + job->setRenderer(this); + dirtyGeometryRendererJobs.push_back(job); } } diff --git a/src/render/backend/rendergeometryrenderer.cpp b/src/render/backend/rendergeometryrenderer.cpp index cac9aa8c9..08ff49768 100644 --- a/src/render/backend/rendergeometryrenderer.cpp +++ b/src/render/backend/rendergeometryrenderer.cpp @@ -37,6 +37,7 @@ #include "rendergeometryrenderer_p.h" #include <Qt3DCore/qscenepropertychange.h> #include <Qt3DRenderer/private/geometryrenderermanager_p.h> +#include <Qt3DCore/qbackendscenepropertychange.h> QT_BEGIN_NAMESPACE @@ -45,7 +46,7 @@ namespace Qt3D { namespace Render { RenderGeometryRenderer::RenderGeometryRenderer() - : QBackendNode(ReadOnly) + : QBackendNode(ReadWrite) , m_instanceCount(0) , m_primitiveCount(0) , m_baseVertex(0) @@ -163,6 +164,21 @@ void RenderGeometryRenderer::sceneChangeEvent(const QSceneChangePtr &e) // Add to dirty list in manager } +void RenderGeometryRenderer::executeFunctor() +{ + Q_ASSERT(m_functor); + QGeometry *geometry = (*m_functor)(); + + QBackendScenePropertyChangePtr e(new QBackendScenePropertyChange(NodeUpdated, peerUuid())); + e->setPropertyName("geometry"); + // The Frontend element has to perform the clone + // So that the objects are created in the main thread + e->setValue(QVariant::fromValue(geometry)); + e->setTargetNode(peerUuid()); + notifyObservers(e); + // Maybe we could also send a status to help troubleshoot errors +} + void RenderGeometryRenderer::unsetDirty() { m_dirty = false; diff --git a/src/render/backend/rendergeometryrenderer_p.h b/src/render/backend/rendergeometryrenderer_p.h index 8c77821d1..baa81048c 100644 --- a/src/render/backend/rendergeometryrenderer_p.h +++ b/src/render/backend/rendergeometryrenderer_p.h @@ -59,6 +59,7 @@ public: void setManager(GeometryRendererManager *manager); void updateFromPeer(QNode *peer) Q_DECL_OVERRIDE; void sceneChangeEvent(const QSceneChangePtr &e) Q_DECL_OVERRIDE; + void executeFunctor(); inline QNodeId geometryId() const { return m_geometryId; } inline int instanceCount() const { return m_instanceCount; } |