diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-03-27 15:10:22 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-05-09 20:06:58 +0000 |
commit | e0f623685b0eff1c12c959dbca3b9753c86a0c89 (patch) | |
tree | 86d7ce8744c7dc5be4bcd652da35f395863003f8 | |
parent | 32cc1fd5c8ddadcb4ee883bb73fafe7be791834a (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.cpp | 21 | ||||
-rw-r--r-- | src/render/backend/jobs/renderviewjobutils_p.h | 14 | ||||
-rw-r--r-- | src/render/backend/renderview.cpp | 23 |
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> ¶meterIds) { Q_FOREACH (const QNodeId ¶mId, 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> ¶meterIds); + +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(¶meters, m_renderer->parameterManager(), + m_data->m_passFilter); + if (m_data->m_techniqueFilter) + parametersFromParametersProvider(¶meters, 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(¶meters, 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()); |