summaryrefslogtreecommitdiffstats
path: root/src/render/materialsystem/shaderdata.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2016-02-12 08:51:16 +0100
committerSean Harmer <sean.harmer@kdab.com>2016-02-21 13:47:14 +0000
commit78e79cbe6abaa32f4c9fcf00453a6d9572b00ff2 (patch)
tree62707efcd6612029e2b612efdeef86cbcdffb389 /src/render/materialsystem/shaderdata.cpp
parent2fd869c0f36e821d0bfdb3a4edbb344a0d4190b9 (diff)
RenderView: various small fixes in things frequently called
Change-Id: Ib81db6fd387853069cc7bda1206ff5ef95a377c2 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/materialsystem/shaderdata.cpp')
-rw-r--r--src/render/materialsystem/shaderdata.cpp27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/render/materialsystem/shaderdata.cpp b/src/render/materialsystem/shaderdata.cpp
index 75144bc3a..21232b3bc 100644
--- a/src/render/materialsystem/shaderdata.cpp
+++ b/src/render/materialsystem/shaderdata.cpp
@@ -48,6 +48,7 @@
#include <private/glbuffer_p.h>
#include <private/managers_p.h>
#include <private/nodemanagers_p.h>
+#include <private/renderviewjobutils_p.h>
QT_BEGIN_NAMESPACE
@@ -56,6 +57,12 @@ using namespace Qt3DCore;
namespace Qt3DRender {
namespace Render {
+namespace {
+
+const int qNodeIdTypeId = qMetaTypeId<Qt3DCore::QNodeId>();
+
+}
+
QList<Qt3DCore::QNodeId> ShaderData::m_updatedShaderData;
ShaderData::ShaderData()
@@ -163,11 +170,18 @@ bool ShaderData::updateViewTransform(const QMatrix4x4 &viewMatrix)
QHash<QString, QVariant>::const_iterator it = m_nestedShaderDataProperties.begin();
while (it != end) {
- if (it.value().userType() == QMetaType::QVariantList) {
+ const int userType = it.value().userType();
+
+ if (userType == QMetaType::QVariantList) {
QVariantList updatedNodes;
bool nestedNeedsUpdate = false;
- Q_FOREACH (const QVariant &v, it.value().value<QVariantList>()) {
- ShaderData *nested = lookupResource(v.value<QNodeId>());
+ const QVariantList values = variant_value<QVariantList>(it.value());
+ Q_FOREACH (const QVariant &v, values) {
+ if (v.userType() != qNodeIdTypeId)
+ continue;
+
+ const Qt3DCore::QNodeId nestedId = variant_value<Qt3DCore::QNodeId>(v);
+ ShaderData *nested = lookupResource(nestedId);
if (nested != Q_NULLPTR) {
// We need to add the nested nodes to the updated property list
// as we need to maintain order
@@ -180,8 +194,9 @@ bool ShaderData::updateViewTransform(const QMatrix4x4 &viewMatrix)
// Of course we only add all the nodes if at least one of the nested nodes required and update
if (nestedNeedsUpdate && !updatedNodes.empty())
m_updatedProperties.insert(it.key(), updatedNodes);
- } else {
- ShaderData *nested = lookupResource(it.value().value<QNodeId>());
+ } else if (userType == qNodeIdTypeId) {
+ const Qt3DCore::QNodeId nestedId = variant_value<Qt3DCore::QNodeId>(it.value());
+ ShaderData *nested = lookupResource(nestedId);
if (nested != Q_NULLPTR && nested->updateViewTransform(viewMatrix))
m_updatedProperties.insert(it.key(), it.value());
}
@@ -222,8 +237,6 @@ void ShaderData::markDirty()
ShaderData::m_updatedShaderData.append(peerUuid());
}
-const int qNodeIdTypeId = qMetaTypeId<Qt3DCore::QNodeId>();
-
void ShaderData::readPeerProperties(QShaderData *shaderData)
{
const QMetaObject *metaObject = shaderData->metaObject();