summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/render/backend/renderer.cpp11
-rw-r--r--src/render/backend/renderer_p.h6
-rw-r--r--src/render/jobs/job_common_p.h2
-rw-r--r--src/render/jobs/jobs.pri8
-rw-r--r--src/render/jobs/updateshaderdatatransformjob.cpp (renamed from src/render/jobs/framepreparationjob.cpp)90
-rw-r--r--src/render/jobs/updateshaderdatatransformjob_p.h (renamed from src/render/jobs/framepreparationjob_p.h)18
-rw-r--r--tests/benchmarks/render/jobs/tst_bench_jobs.cpp4
7 files changed, 67 insertions, 72 deletions
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp
index 0fb0a0887..e83a47e9e 100644
--- a/src/render/backend/renderer.cpp
+++ b/src/render/backend/renderer.cpp
@@ -153,7 +153,7 @@ Renderer::Renderer(QRenderAspect::RenderType type)
, m_pickBoundingVolumeJob(PickBoundingVolumeJobPtr::create(this))
, m_time(0)
, m_settings(nullptr)
- , m_framePreparationJob(Render::FramePreparationJobPtr::create())
+ , m_updateShaderDataTransformJob(Render::UpdateShaderDataTransformJobPtr::create())
, m_cleanupJob(Render::FrameCleanupJobPtr::create())
, m_worldTransformJob(Render::UpdateWorldTransformJobPtr::create())
, m_expandBoundingVolumeJob(Render::ExpandBoundingVolumeJobPtr::create())
@@ -178,10 +178,10 @@ Renderer::Renderer(QRenderAspect::RenderType type)
m_updateWorldBoundingVolumeJob->addDependency(m_worldTransformJob);
m_updateWorldBoundingVolumeJob->addDependency(m_calculateBoundingVolumeJob);
m_expandBoundingVolumeJob->addDependency(m_updateWorldBoundingVolumeJob);
- m_framePreparationJob->addDependency(m_worldTransformJob);
+ m_updateShaderDataTransformJob->addDependency(m_worldTransformJob);
// All world stuff depends on the RenderEntity's localBoundingVolume
- m_pickBoundingVolumeJob->addDependency(m_framePreparationJob);
+ m_pickBoundingVolumeJob->addDependency(m_updateShaderDataTransformJob);
m_defaultRenderStateSet = new RenderStateSet;
m_defaultRenderStateSet->addState(RenderStateSet::createState<DepthTest>(GL_LESS));
@@ -224,7 +224,7 @@ void Renderer::setNodeManagers(NodeManagers *managers)
{
m_nodesManager = managers;
- m_framePreparationJob->setManagers(m_nodesManager);
+ m_updateShaderDataTransformJob->setManagers(m_nodesManager);
m_cleanupJob->setManagers(m_nodesManager);
m_calculateBoundingVolumeJob->setManagers(m_nodesManager);
m_pickBoundingVolumeJob->setManagers(m_nodesManager);
@@ -359,7 +359,6 @@ void Renderer::setSceneRoot(QBackendNodeFactory *factory, Entity *sgRoot)
qCDebug(Backend) << Q_FUNC_INFO << "DUMPING SCENE";
// Set the scene root on the jobs
- m_framePreparationJob->setRoot(m_renderSceneRoot);
m_worldTransformJob->setRoot(m_renderSceneRoot);
m_expandBoundingVolumeJob->setRoot(m_renderSceneRoot);
m_calculateBoundingVolumeJob->setRoot(m_renderSceneRoot);
@@ -1011,7 +1010,7 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs()
}
// Add jobs
- renderBinJobs.push_back(m_framePreparationJob);
+ renderBinJobs.push_back(m_updateShaderDataTransformJob);
renderBinJobs.push_back(m_expandBoundingVolumeJob);
renderBinJobs.push_back(m_updateWorldBoundingVolumeJob);
renderBinJobs.push_back(m_calculateBoundingVolumeJob);
diff --git a/src/render/backend/renderer_p.h b/src/render/backend/renderer_p.h
index cc6646fdc..8951551be 100644
--- a/src/render/backend/renderer_p.h
+++ b/src/render/backend/renderer_p.h
@@ -65,7 +65,7 @@
#include <Qt3DRender/private/expandboundingvolumejob_p.h>
#include <Qt3DRender/private/updateworldtransformjob_p.h>
#include <Qt3DRender/private/calcboundingvolumejob_p.h>
-#include <Qt3DRender/private/framepreparationjob_p.h>
+#include <Qt3DRender/private/updateshaderdatatransformjob_p.h>
#include <Qt3DRender/private/framecleanupjob_p.h>
#include <Qt3DRender/private/updateworldboundingvolumejob_p.h>
#include <Qt3DRender/private/platformsurfacefilter_p.h>
@@ -183,7 +183,7 @@ public:
inline FrameCleanupJobPtr frameCleanupJob() const { return m_cleanupJob; }
inline ExpandBoundingVolumeJobPtr expandBoundingVolumeJob() const { return m_expandBoundingVolumeJob; }
- inline FramePreparationJobPtr framePreparationJob() const { return m_framePreparationJob; }
+ inline UpdateShaderDataTransformJobPtr updateShaderDataTransformJob() const { return m_updateShaderDataTransformJob; }
inline CalculateBoundingVolumeJobPtr calculateBoundingVolumeJob() const { return m_calculateBoundingVolumeJob; }
inline UpdateWorldTransformJobPtr updateWorldTransformJob() const { return m_worldTransformJob; }
inline UpdateWorldBoundingVolumeJobPtr updateWorldBoundingVolumeJob() const { return m_updateWorldBoundingVolumeJob; }
@@ -284,7 +284,7 @@ private:
RenderSettings *m_settings;
- FramePreparationJobPtr m_framePreparationJob;
+ UpdateShaderDataTransformJobPtr m_updateShaderDataTransformJob;
FrameCleanupJobPtr m_cleanupJob;
UpdateWorldTransformJobPtr m_worldTransformJob;
ExpandBoundingVolumeJobPtr m_expandBoundingVolumeJob;
diff --git a/src/render/jobs/job_common_p.h b/src/render/jobs/job_common_p.h
index a5a8bb8e2..a30e75408 100644
--- a/src/render/jobs/job_common_p.h
+++ b/src/render/jobs/job_common_p.h
@@ -64,7 +64,7 @@ namespace JobTypes {
enum JobType {
LoadBuffer = 1,
FrameCleanup,
- FramePreparation,
+ UpdateShaderDataTransform,
CalcBoundingVolume,
CalcTriangleVolume,
LoadGeometry,
diff --git a/src/render/jobs/jobs.pri b/src/render/jobs/jobs.pri
index 9ad8f9bc0..3d64976da 100644
--- a/src/render/jobs/jobs.pri
+++ b/src/render/jobs/jobs.pri
@@ -5,7 +5,6 @@ HEADERS += \
$$PWD/renderviewjobutils_p.h \
$$PWD/loadscenejob_p.h \
$$PWD/framecleanupjob_p.h \
- $$PWD/framepreparationjob_p.h \
$$PWD/loadtexturedatajob_p.h \
$$PWD/loadbufferjob_p.h \
$$PWD/loadgeometryjob_p.h \
@@ -23,14 +22,14 @@ HEADERS += \
$$PWD/lightgatherer_p.h \
$$PWD/expandboundingvolumejob_p.h \
$$PWD/updateworldboundingvolumejob_p.h \
- $$PWD/sendrendercapturejob_p.h
+ $$PWD/sendrendercapturejob_p.h \
+ $$PWD/updateshaderdatatransformjob_p.h
SOURCES += \
$$PWD/updateworldtransformjob.cpp \
$$PWD/renderviewjobutils.cpp \
$$PWD/loadscenejob.cpp \
$$PWD/framecleanupjob.cpp \
- $$PWD/framepreparationjob.cpp \
$$PWD/loadtexturedatajob.cpp \
$$PWD/loadbufferjob.cpp \
$$PWD/loadgeometryjob.cpp \
@@ -45,4 +44,5 @@ SOURCES += \
$$PWD/lightgatherer.cpp \
$$PWD/expandboundingvolumejob.cpp \
$$PWD/updateworldboundingvolumejob.cpp \
- $$PWD/sendrendercapturejob.cpp
+ $$PWD/sendrendercapturejob.cpp \
+ $$PWD/updateshaderdatatransformjob.cpp
diff --git a/src/render/jobs/framepreparationjob.cpp b/src/render/jobs/updateshaderdatatransformjob.cpp
index ef5b4bdb4..a24517d51 100644
--- a/src/render/jobs/framepreparationjob.cpp
+++ b/src/render/jobs/updateshaderdatatransformjob.cpp
@@ -37,7 +37,7 @@
**
****************************************************************************/
-#include "framepreparationjob_p.h"
+#include "updateshaderdatatransformjob_p.h"
#include <Qt3DRender/private/nodemanagers_p.h>
#include <Qt3DRender/private/entity_p.h>
#include <Qt3DRender/private/shaderdata_p.h>
@@ -58,71 +58,69 @@ QT_BEGIN_NAMESPACE
namespace Qt3DRender {
namespace Render {
-FramePreparationJob::FramePreparationJob()
- : m_root(nullptr)
- , m_manager(nullptr)
+UpdateShaderDataTransformJob::UpdateShaderDataTransformJob()
+ : m_manager(nullptr)
{
- SET_JOB_RUN_STAT_TYPE(this, JobTypes::FramePreparation, 0);
+ SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateShaderDataTransform, 0);
}
-FramePreparationJob::~FramePreparationJob()
+UpdateShaderDataTransformJob::~UpdateShaderDataTransformJob()
{
}
-void FramePreparationJob::setRoot(Entity *root)
-{
- m_root = root;
-}
-
-void FramePreparationJob::setManagers(NodeManagers *manager)
+void UpdateShaderDataTransformJob::setManagers(NodeManagers *manager)
{
m_manager = manager;
}
-void FramePreparationJob::run()
+void UpdateShaderDataTransformJob::run()
{
- parseNodeTree(m_root);
+ parseNodes();
}
-void FramePreparationJob::parseNodeTree(Entity *node)
+void UpdateShaderDataTransformJob::parseNodes()
{
- // Update transform properties in ShaderDatas and Lights
- const QVector<ShaderData *> shaderDatas = node->renderComponents<ShaderData>();
- for (ShaderData *r : shaderDatas)
- r->updateWorldTransform(*node->worldTransform());
+ EntityManager *manager = m_manager->renderNodesManager();
+ const QVector<HEntity> handles = manager->activeHandles();
- // Look if for the GeometryRender/Geometry the attributes and or buffers are dirty
- // in which case we need to recompute the triangle list
- GeometryRenderer *geomRenderer = node->renderComponent<GeometryRenderer>();
- const Qt3DCore::QNodeId geomRendererId = node->componentUuid<GeometryRenderer>();
- Geometry *geom = nullptr;
- if (geomRenderer &&
- (geom = m_manager->lookupResource<Geometry, GeometryManager>(geomRenderer->geometryId())) != nullptr) {
- if (!m_manager->geometryRendererManager()->isGeometryRendererScheduledForTriangleDataRefresh(geomRendererId)) {
- // Check if the attributes or buffers are dirty
- bool dirty = geomRenderer->isDirty();
- Attribute *attr = nullptr;
- const auto attrIds = geom->attributes();
- for (const Qt3DCore::QNodeId attrId : attrIds) {
- if ((attr = m_manager->attributeManager()->lookupResource(attrId)) != nullptr) {
- dirty |= attr->isDirty();
- if (!dirty) {
- Buffer *buffer = nullptr;
- if ((buffer = m_manager->bufferManager()->lookupResource(attr->bufferId())) != nullptr)
- dirty = buffer->isDirty();
+ for (const HEntity handle : handles) {
+ Entity *node = manager->data(handle);
+ // Update transform properties in ShaderDatas and Lights
+ const QVector<ShaderData *> shaderDatas = node->renderComponents<ShaderData>();
+ for (ShaderData *r : shaderDatas)
+ r->updateWorldTransform(*node->worldTransform());
+
+ // TO DO: This will be moved to a separate job in a follow up commit
+
+ // Look if for the GeometryRender/Geometry the attributes and or buffers are dirty
+ // in which case we need to recompute the triangle list
+ GeometryRenderer *geomRenderer = node->renderComponent<GeometryRenderer>();
+ Geometry *geom = nullptr;
+ if (geomRenderer &&
+ (geom = m_manager->lookupResource<Geometry, GeometryManager>(geomRenderer->geometryId())) != nullptr) {
+ const Qt3DCore::QNodeId geomRendererId = geomRenderer->peerId();
+ if (!m_manager->geometryRendererManager()->isGeometryRendererScheduledForTriangleDataRefresh(geomRendererId)) {
+ // Check if the attributes or buffers are dirty
+ bool dirty = geomRenderer->isDirty();
+ Attribute *attr = nullptr;
+ const auto attrIds = geom->attributes();
+ for (const Qt3DCore::QNodeId attrId : attrIds) {
+ if ((attr = m_manager->attributeManager()->lookupResource(attrId)) != nullptr) {
+ dirty |= attr->isDirty();
+ if (!dirty) {
+ Buffer *buffer = nullptr;
+ if ((buffer = m_manager->bufferManager()->lookupResource(attr->bufferId())) != nullptr)
+ dirty = buffer->isDirty();
+ }
+ if (dirty)
+ break;
}
- if (dirty)
- break;
}
+ if (dirty)
+ m_manager->geometryRendererManager()->requestTriangleDataRefreshForGeometryRenderer(geomRendererId);
}
- if (dirty)
- m_manager->geometryRendererManager()->requestTriangleDataRefreshForGeometryRenderer(geomRendererId);
}
}
-
- const QVector<Entity *> children = node->children();
- for (Entity *c : children)
- parseNodeTree(c);
}
} // namespace Render
diff --git a/src/render/jobs/framepreparationjob_p.h b/src/render/jobs/updateshaderdatatransformjob_p.h
index 35db5862d..7951121e1 100644
--- a/src/render/jobs/framepreparationjob_p.h
+++ b/src/render/jobs/updateshaderdatatransformjob_p.h
@@ -37,8 +37,8 @@
**
****************************************************************************/
-#ifndef QT3DRENDER_RENDER_FRAMEPREPARATIONJOB_H
-#define QT3DRENDER_RENDER_FRAMEPREPARATIONJOB_H
+#ifndef QT3DRENDER_RENDER_UPDATESHADERDATATRANSFORMJOB_H
+#define QT3DRENDER_RENDER_UPDATESHADERDATATRANSFORMJOB_H
//
// W A R N I N G
@@ -63,26 +63,24 @@ namespace Render {
class NodeManagers;
class Entity;
-class QT3DRENDERSHARED_PRIVATE_EXPORT FramePreparationJob : public Qt3DCore::QAspectJob
+class QT3DRENDERSHARED_PRIVATE_EXPORT UpdateShaderDataTransformJob : public Qt3DCore::QAspectJob
{
public:
- FramePreparationJob();
- ~FramePreparationJob();
+ UpdateShaderDataTransformJob();
+ ~UpdateShaderDataTransformJob();
- void setRoot(Entity *root);
void setManagers(NodeManagers *manager);
protected:
void run() Q_DECL_FINAL;
private:
- void parseNodeTree(Entity *node);
+ void parseNodes();
- Entity *m_root;
NodeManagers *m_manager;
};
-typedef QSharedPointer<FramePreparationJob> FramePreparationJobPtr;
+typedef QSharedPointer<UpdateShaderDataTransformJob> UpdateShaderDataTransformJobPtr;
} // namespace Render
@@ -90,4 +88,4 @@ typedef QSharedPointer<FramePreparationJob> FramePreparationJobPtr;
QT_END_NAMESPACE
-#endif // QT3DRENDER_RENDER_FRAMEPREPARATIONJOB_H
+#endif // QT3DRENDER_RENDER_UPDATESHADERDATATRANSFORMJOB_H
diff --git a/tests/benchmarks/render/jobs/tst_bench_jobs.cpp b/tests/benchmarks/render/jobs/tst_bench_jobs.cpp
index 8cf1941d5..454cb9f6a 100644
--- a/tests/benchmarks/render/jobs/tst_bench_jobs.cpp
+++ b/tests/benchmarks/render/jobs/tst_bench_jobs.cpp
@@ -106,8 +106,8 @@ namespace Qt3DRender {
QVector<Qt3DCore::QAspectJobPtr> framePreparationJob()
{
- static_cast<Render::Renderer *>(d_func()->m_renderer)->m_framePreparationJob->setRoot(d_func()->m_renderer->sceneRoot());
- return QVector<Qt3DCore::QAspectJobPtr>() << static_cast<Render::Renderer *>(d_func()->m_renderer)->m_framePreparationJob;
+ static_cast<Render::Renderer *>(d_func()->m_renderer)->m_updateShaderDataTransformJob->setManagers(d_func()->m_renderer->nodeManagers());
+ return QVector<Qt3DCore::QAspectJobPtr>() << static_cast<Render::Renderer *>(d_func()->m_renderer)->m_updateShaderDataTransformJob;
}
QVector<Qt3DCore::QAspectJobPtr> frameCleanupJob()