summaryrefslogtreecommitdiffstats
path: root/src/render/backend/jobs
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
parent2e778e83cb12c830dbbf4887d107e1788a0ce605 (diff)
parentca2ae5592d4a2eb01f0254c712159657c79c9449 (diff)
Merge branch '5.5' into dev
Diffstat (limited to 'src/render/backend/jobs')
-rw-r--r--src/render/backend/jobs/renderviewjob.cpp5
-rw-r--r--src/render/backend/jobs/renderviewjobutils.cpp42
-rw-r--r--src/render/backend/jobs/renderviewjobutils_p.h29
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> &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);
}
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> &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);
-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());