diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2015-06-05 15:48:38 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-06-05 15:48:38 +0100 |
commit | 8f58119cd18d69fac28528f0a7536cb9fccc15e3 (patch) | |
tree | 844835179ebeca6724c62e47c2cd22650025ef1f /src/render/backend/jobs | |
parent | 2e778e83cb12c830dbbf4887d107e1788a0ce605 (diff) | |
parent | ca2ae5592d4a2eb01f0254c712159657c79c9449 (diff) |
Merge branch '5.5' into dev
Change-Id: I8b3235703b7ceeb23de0b07753bed5f29436da31
Diffstat (limited to 'src/render/backend/jobs')
-rw-r--r-- | src/render/backend/jobs/renderviewjob.cpp | 5 | ||||
-rw-r--r-- | src/render/backend/jobs/renderviewjobutils.cpp | 42 | ||||
-rw-r--r-- | src/render/backend/jobs/renderviewjobutils_p.h | 29 |
3 files changed, 53 insertions, 23 deletions
diff --git a/src/render/backend/jobs/renderviewjob.cpp b/src/render/backend/jobs/renderviewjob.cpp index c263a66b8..9115b90ed 100644 --- a/src/render/backend/jobs/renderviewjob.cpp +++ b/src/render/backend/jobs/renderviewjob.cpp @@ -67,8 +67,9 @@ void RenderViewJob::run() setRenderViewConfigFromFrameGraphLeafNode(renderView, m_fgLeaf); // Build RenderCommand should perform the culling as we have no way to determine - // if a child has a mesh in the view frustrum while its parent isn't contained in it. - renderView->buildRenderCommands(m_renderer->renderSceneRoot()); + // if a child has a mesh in the view frustum while its parent isn't contained in it. + if (!renderView->noDraw()) + renderView->buildRenderCommands(m_renderer->renderSceneRoot()); // Sorts RenderCommand renderView->sort(); diff --git a/src/render/backend/jobs/renderviewjobutils.cpp b/src/render/backend/jobs/renderviewjobutils.cpp index 8093b87df..231b0c1bd 100644 --- a/src/render/backend/jobs/renderviewjobutils.cpp +++ b/src/render/backend/jobs/renderviewjobutils.cpp @@ -56,6 +56,7 @@ #include <Qt3DRenderer/private/shadervariables_p.h> #include <Qt3DRenderer/private/managers_p.h> #include <Qt3DRenderer/private/rendershaderdata_p.h> +#include <Qt3DRenderer/private/statesetnode_p.h> QT_BEGIN_NAMESPACE @@ -111,7 +112,8 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN case FrameGraphNode::RenderTarget: { // Can be set once and we take render target nearest to the leaf node - QNodeId renderTargetUid = static_cast<const RenderTargetSelector *>(node)->renderTargetUuid(); + const RenderTargetSelector *targetSelector = static_cast<const RenderTargetSelector *>(node); + QNodeId renderTargetUid = targetSelector->renderTargetUuid(); HTarget renderTargetHandle = renderer->renderTargetManager()->lookupHandle(renderTargetUid); if (rv->renderTargetHandle().isNull()) { rv->setRenderTargetHandle(renderTargetHandle); @@ -119,11 +121,17 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN RenderTarget *renderTarget = renderer->renderTargetManager()->data(renderTargetHandle); if (renderTarget) { // Add renderTarget Handle and build renderCommand AttachmentPack + + // Copy draw buffers list + rv->setDrawBuffers(targetSelector->drawBuffers()); + + // Copy attachments Q_FOREACH (const QNodeId &attachmentId, renderTarget->renderAttachments()) { RenderAttachment *attachment = renderer->attachmentManager()->lookupResource(attachmentId); if (attachment) rv->addRenderAttachment(attachment->attachment()); } + } } break; @@ -164,6 +172,18 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN // in a prior step to build the list of RenderViewJobs break; + case FrameGraphNode::StateSet: { + const Render::StateSetNode *rStateSet = static_cast<const Render::StateSetNode *>(node); + // Create global RenderStateSet for renderView + rv->setStateSet(buildRenderStateSet(rStateSet->renderStates(), rv->allocator())); + break; + } + + case FrameGraphNode::NoDraw: { + rv->setNoDraw(true); + break; + } + default: // Should never get here qCWarning(Backend) << "Unhandled FrameGraphNode type"; @@ -290,7 +310,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) { @@ -317,24 +337,16 @@ 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()); + parametersFromParametersProvider(infoList, manager, material); + parametersFromParametersProvider(infoList, manager, technique); + parametersFromParametersProvider(infoList, manager, effect); } -RenderStateSet *buildRenderStateSet(RenderRenderPass *pass, QFrameAllocator *allocator) +RenderStateSet *buildRenderStateSet(const QList<RenderState*> &states, QFrameAllocator *allocator) { - if (!pass || pass->renderStates().isEmpty()) - return Q_NULLPTR; - RenderStateSet *stateSet = allocator->allocate<RenderStateSet>(); - Q_FOREACH (RenderState *renderState, pass->renderStates()) { + Q_FOREACH (RenderState *renderState, states) { stateSet->addState(renderState); } diff --git a/src/render/backend/jobs/renderviewjobutils_p.h b/src/render/backend/jobs/renderviewjobutils_p.h index 6c2f64562..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> @@ -63,6 +63,7 @@ class Renderer; class ShaderDataManager; struct ShaderUniform; class RenderShaderData; +class RenderState; Q_AUTOTEST_EXPORT void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphNode *fgLeaf); @@ -79,8 +80,8 @@ Q_AUTOTEST_EXPORT RenderRenderPassList findRenderPassesForTechnique(Renderer *re struct ParameterInfo { ParameterInfo(const QString &name = QString(), const QVariant &value = QVariant()) - : name(name) - , value(value) + : name(name) + , value(value) {} QString name; @@ -100,10 +101,26 @@ Q_AUTOTEST_EXPORT void parametersFromMaterialEffectTechnique(ParameterInfoList * RenderEffect *effect, RenderTechnique *technique); +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); -Q_AUTOTEST_EXPORT RenderStateSet *buildRenderStateSet(RenderRenderPass *pass, +Q_AUTOTEST_EXPORT RenderStateSet *buildRenderStateSet(const QList<RenderState*> &states, QFrameAllocator *allocator); @@ -113,8 +130,8 @@ struct Q_AUTOTEST_EXPORT UniformBlockValueBuilder ~UniformBlockValueBuilder(); void buildActiveUniformNameValueMapHelper(const QString &blockName, - const QString &qmlPropertyName, - const QVariant &value); + const QString &qmlPropertyName, + const QVariant &value); void buildActiveUniformNameValueMapStructHelper(RenderShaderData *rShaderData, const QString &blockName, const QString &qmlPropertyName = QString()); |