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/renderviewjobutils.cpp | |
parent | 2e778e83cb12c830dbbf4887d107e1788a0ce605 (diff) | |
parent | ca2ae5592d4a2eb01f0254c712159657c79c9449 (diff) |
Merge branch '5.5' into dev
Change-Id: I8b3235703b7ceeb23de0b07753bed5f29436da31
Diffstat (limited to 'src/render/backend/jobs/renderviewjobutils.cpp')
-rw-r--r-- | src/render/backend/jobs/renderviewjobutils.cpp | 42 |
1 files changed, 27 insertions, 15 deletions
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); } |