summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-03-27 15:10:22 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-05-09 20:06:58 +0000
commite0f623685b0eff1c12c959dbca3b9753c86a0c89 (patch)
tree86d7ce8744c7dc5be4bcd652da35f395863003f8
parent32cc1fd5c8ddadcb4ee883bb73fafe7be791834a (diff)
RenderView: lookup RenderPassFilter/TechniqueFilter Parameters
These will override the Parameters defined in Material/Effect/Technique/RenderPass with RenderPassFilter having a higher priority than TechniqueFilter. Change-Id: I39e31b989ea2a752d4bab7b4023c6e0a0167e75d Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/render/backend/jobs/renderviewjobutils.cpp21
-rw-r--r--src/render/backend/jobs/renderviewjobutils_p.h14
-rw-r--r--src/render/backend/renderview.cpp23
3 files changed, 37 insertions, 21 deletions
diff --git a/src/render/backend/jobs/renderviewjobutils.cpp b/src/render/backend/jobs/renderviewjobutils.cpp
index 1fcd06c19..22725eb06 100644
--- a/src/render/backend/jobs/renderviewjobutils.cpp
+++ b/src/render/backend/jobs/renderviewjobutils.cpp
@@ -303,7 +303,7 @@ ParameterInfoList::iterator findParamInfo(ParameterInfoList *params, const QStri
return it;
}
-static void addParametersForIds(ParameterInfoList *params, ParameterManager *manager,
+void addParametersForIds(ParameterInfoList *params, ParameterManager *manager,
const QList<QNodeId> &parameterIds)
{
Q_FOREACH (const QNodeId &paramId, parameterIds) {
@@ -330,22 +330,9 @@ void parametersFromMaterialEffectTechnique(ParameterInfoList *infoList,
//
// That way a user can override defaults in Effect's and Techniques on a
// object manner and a Technique can override global defaults from the Effect.
- if (material)
- addParametersForIds(infoList, manager, material->parameters());
-
- if (technique)
- addParametersForIds(infoList, manager, technique->parameters());
-
- if (effect)
- addParametersForIds(infoList, manager, effect->parameters());
-}
-
-void parametersFromRenderPass(ParameterInfoList *infoList,
- ParameterManager *manager,
- RenderRenderPass *pass)
-{
- if (pass)
- addParametersForIds(infoList, manager, pass->parameters());
+ parametersFromParametersProvider(infoList, manager, material);
+ parametersFromParametersProvider(infoList, manager, technique);
+ parametersFromParametersProvider(infoList, manager, effect);
}
RenderStateSet *buildRenderStateSet(const QList<RenderState*> &states, QFrameAllocator *allocator)
diff --git a/src/render/backend/jobs/renderviewjobutils_p.h b/src/render/backend/jobs/renderviewjobutils_p.h
index 4f9418dfe..9bfe0fa8f 100644
--- a/src/render/backend/jobs/renderviewjobutils_p.h
+++ b/src/render/backend/jobs/renderviewjobutils_p.h
@@ -38,7 +38,7 @@
#define QT3D_RENDERVIEWJOBUTILS_P_H
#include <Qt3DRenderer/qt3drenderer_global.h>
-
+#include <Qt3DCore/qnodeid.h>
#include <QtCore/qhash.h>
#include <QtCore/qvariant.h>
@@ -105,6 +105,18 @@ Q_AUTOTEST_EXPORT void parametersFromRenderPass(ParameterInfoList *infoList,
ParameterManager *manager,
RenderRenderPass *pass);
+Q_AUTOTEST_EXPORT void addParametersForIds(ParameterInfoList *params, ParameterManager *manager,
+ const QList<QNodeId> &parameterIds);
+
+template<class T>
+void parametersFromParametersProvider(ParameterInfoList *infoList,
+ ParameterManager *manager,
+ T *pass)
+{
+ if (pass)
+ addParametersForIds(infoList, manager, pass->parameters());
+}
+
Q_AUTOTEST_EXPORT ParameterInfoList::iterator findParamInfo(ParameterInfoList *infoList,
const QString &name);
diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp
index c26db6a9a..fce61d34f 100644
--- a/src/render/backend/renderview.cpp
+++ b/src/render/backend/renderview.cpp
@@ -376,6 +376,24 @@ void RenderView::buildRenderCommands(RenderEntity *node)
effect = m_renderer->effectManager()->lookupResource(material->effect());
RenderTechnique *technique = findTechniqueForEffect(m_renderer, this, effect);
+ ParameterInfoList parameters;
+ // Order set:
+ // 1 Pass Filter
+ // 2 Technique Filter
+ // 3 Material
+ // 4 Effect
+ // 5 Technique
+ // 6 RenderPass
+
+ // Add Parameters define in techniqueFilter and passFilter
+ // passFilter have priority over techniqueFilter
+ if (m_data->m_passFilter)
+ parametersFromParametersProvider(&parameters, m_renderer->parameterManager(),
+ m_data->m_passFilter);
+ if (m_data->m_techniqueFilter)
+ parametersFromParametersProvider(&parameters, m_renderer->parameterManager(),
+ m_data->m_techniqueFilter);
+
RenderRenderPassList passes;
if (technique) {
passes = findRenderPassesForTechnique(m_renderer, this, technique);
@@ -386,8 +404,7 @@ void RenderView::buildRenderCommands(RenderEntity *node)
passes << m_renderer->renderPassManager()->data(m_renderer->defaultRenderPassHandle());
}
- // Get the parameters for our selected rendering setup
- ParameterInfoList parameters;
+ // Get the parameters for our selected rendering setup (override what was defined in the technique/pass filter)
parametersFromMaterialEffectTechnique(&parameters, m_renderer->parameterManager(), material, effect, technique);
// 1 RenderCommand per RenderPass pass on an Entity with a Mesh
@@ -395,7 +412,7 @@ void RenderView::buildRenderCommands(RenderEntity *node)
// Add the RenderRenderPass Parameters
ParameterInfoList globalParameter = parameters;
- parametersFromRenderPass(&globalParameter, m_renderer->parameterManager(), pass);
+ parametersFromParametersProvider(&globalParameter, m_renderer->parameterManager(), pass);
RenderCommand *command = m_allocator->allocate<RenderCommand>();
command->m_depth = m_data->m_eyePos.distanceToPoint(node->worldBoundingVolume()->center());