summaryrefslogtreecommitdiffstats
path: root/src/render/backend/qrenderaspect.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-01-09 10:10:13 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-01-18 15:30:47 +0100
commit074263ba87e73c67e355ee5dc5037477090f6957 (patch)
tree18bf0672f9c93c5a1a64d50d6723791f50637f6f /src/render/backend/qrenderaspect.cpp
parent67ffbd60ed6f383f3629a1848587da049c3ff3c9 (diff)
RenderShaderData handling entirely reworked
- UBO created for each Shader/ShaderData - We deal with nested QShaderData by looking for QNodeId only instead of looking for QShaderData* - We update only the values that have changed into the UBO - A CleanupFrameJob was added to properly clear all RenderShaderData set for updates after a frame - RenderShaderData is cleared of all UBO rendering logic - BlockToUBO contains all the updated properties for a given UBO in a RenderView, that solves the issue of properties being updated in the RenderShaderData while performing a draw call Note: the QShaderData transformed properties were commented for now deferred-examples and playground qml updates to follow Change-Id: I8ecf155288c154f41b505cf465d31f5eb8a71b5d Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/backend/qrenderaspect.cpp')
-rw-r--r--src/render/backend/qrenderaspect.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/render/backend/qrenderaspect.cpp b/src/render/backend/qrenderaspect.cpp
index 9c28b58c9..e8ab17f0a 100644
--- a/src/render/backend/qrenderaspect.cpp
+++ b/src/render/backend/qrenderaspect.cpp
@@ -73,6 +73,7 @@
#include <Qt3DRenderer/private/renderannotation_p.h>
#include <Qt3DRenderer/private/renderentity_p.h>
#include <Qt3DRenderer/private/renderer_p.h>
+#include <Qt3DRenderer/private/rendershaderdata_p.h>
#include <Qt3DRenderer/private/renderpassfilternode_p.h>
#include <Qt3DRenderer/private/rendertargetselectornode_p.h>
#include <Qt3DRenderer/private/techniquefilternode_p.h>
@@ -88,6 +89,7 @@
#include <Qt3DRenderer/private/loadmeshdatajob_p.h>
#include <Qt3DRenderer/private/updateboundingvolumejob_p.h>
#include <Qt3DRenderer/private/updateworldtransformjob_p.h>
+#include <Qt3DRenderer/private/framecleanupjob_p.h>
#include <Qt3DCore/qentity.h>
#include <Qt3DCore/qtransform.h>
#include <Qt3DCore/qnodevisitor.h>
@@ -207,7 +209,7 @@ void QRenderAspect::registerBackendTypes()
registerBackendType<QSortMethod>(QBackendNodeFunctorPtr(new Render::FrameGraphNodeFunctor<Render::SortMethod, QSortMethod>(d->m_renderer->frameGraphManager())));
registerBackendType<QFrameGraph>(QBackendNodeFunctorPtr(new Render::FrameGraphComponentFunctor(d->m_renderer)));
registerBackendType<QParameter>(QBackendNodeFunctorPtr(new Render::RenderNodeFunctor<Render::RenderParameter, Render::ParameterManager>(d->m_renderer->parameterManager())));
- registerBackendType<QShaderData>(QBackendNodeFunctorPtr(new Render::RenderNodeFunctor<Render::RenderShaderData, Render::ShaderDataManager>(d->m_renderer->shaderDataManager())));
+ registerBackendType<QShaderData>(QBackendNodeFunctorPtr(new Render::RenderShaderDataFunctor(d->m_renderer->shaderDataManager())));
}
void QRenderAspect::renderInitialize(QOpenGLContext *context)
@@ -263,11 +265,14 @@ QVector<QAspectJobPtr> QRenderAspect::jobsToExecute(qint64 time)
// RenderBins with RenderCommands
QVector<QAspectJobPtr> renderBinJobs = d->m_renderer->createRenderBinJobs();
// TODO: Add wrapper around ThreadWeaver::Collection
+ Render::FrameCleanupJobPtr cleanupJob(new Render::FrameCleanupJob(d->m_renderer));
for (int i = 0; i < renderBinJobs.size(); ++i) {
QAspectJobPtr renderBinJob = renderBinJobs.at(i);
renderBinJob->addDependency(boundingVolumeJob);
jobs.append(renderBinJob);
+ cleanupJob->addDependency(renderBinJob);
}
+ jobs.append(cleanupJob);
}
return jobs;
}