summaryrefslogtreecommitdiffstats
path: root/src/render/backend/jobs/renderviewjobutils.cpp
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2015-06-05 15:48:38 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-06-05 15:48:38 +0100
commit8f58119cd18d69fac28528f0a7536cb9fccc15e3 (patch)
tree844835179ebeca6724c62e47c2cd22650025ef1f /src/render/backend/jobs/renderviewjobutils.cpp
parent2e778e83cb12c830dbbf4887d107e1788a0ce605 (diff)
parentca2ae5592d4a2eb01f0254c712159657c79c9449 (diff)
Merge branch '5.5' into dev
Diffstat (limited to 'src/render/backend/jobs/renderviewjobutils.cpp')
-rw-r--r--src/render/backend/jobs/renderviewjobutils.cpp42
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> &parameterIds)
{
Q_FOREACH (const QNodeId &paramId, 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);
}