summaryrefslogtreecommitdiffstats
path: root/src/render/jobs/renderviewjobutils.cpp
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2017-02-23 13:53:23 +0100
committerSean Harmer <sean.harmer@kdab.com>2017-02-24 16:58:51 +0000
commit12111fd494d927bb75a8a41e3771ff6983119274 (patch)
tree6590daea24184e851502beb0e94dbe76e2cca640 /src/render/jobs/renderviewjobutils.cpp
parent92a2759a8cf7a77958a788216f1bee762789ca59 (diff)
QShaderData: fix texture support in properties
There was only code dealing with sub-shader data but nothing allowing to check if a property was a texture, this is now properly handled. Change-Id: I48984727eff975e9f3e2c21c5185b336efc963fd Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/jobs/renderviewjobutils.cpp')
-rw-r--r--src/render/jobs/renderviewjobutils.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/render/jobs/renderviewjobutils.cpp b/src/render/jobs/renderviewjobutils.cpp
index f75ea3f0c..500fcc56a 100644
--- a/src/render/jobs/renderviewjobutils.cpp
+++ b/src/render/jobs/renderviewjobutils.cpp
@@ -416,6 +416,7 @@ const int qNodeIdTypeId = qMetaTypeId<QNodeId>();
UniformBlockValueBuilder::UniformBlockValueBuilder()
: updatedPropertiesOnly(false)
, shaderDataManager(nullptr)
+ , textureManager(nullptr)
{
}
@@ -432,11 +433,16 @@ void UniformBlockValueBuilder::buildActiveUniformNameValueMapHelper(ShaderData *
if (list.at(0).userType() == qNodeIdTypeId) { // Array of struct qmlPropertyName[i].structMember
for (int i = 0; i < list.size(); ++i) {
if (list.at(i).userType() == qNodeIdTypeId) {
- ShaderData *subShaderData = shaderDataManager->lookupResource(list.at(i).value<QNodeId>());
- if (subShaderData)
+ const auto nodeId = value.value<QNodeId>();
+ ShaderData *subShaderData = shaderDataManager->lookupResource(nodeId);
+ if (subShaderData) {
buildActiveUniformNameValueMapStructHelper(subShaderData,
blockName + QLatin1Char('.') + qmlPropertyName + blockArray.arg(i),
QLatin1String(""));
+ } else if (textureManager->contains(nodeId)) {
+ const auto varId = StringToInt::lookupId(blockName + QLatin1Char('.') + qmlPropertyName + blockArray.arg(i));
+ activeUniformNamesToValue.insert(varId, value);
+ }
}
}
} else { // Array of scalar/vec qmlPropertyName[0]
@@ -447,11 +453,16 @@ void UniformBlockValueBuilder::buildActiveUniformNameValueMapHelper(ShaderData *
}
}
} else if (value.userType() == qNodeIdTypeId) { // Struct qmlPropertyName.structMember
- ShaderData *rSubShaderData = shaderDataManager->lookupResource(value.value<QNodeId>());
- if (rSubShaderData)
+ const auto nodeId = value.value<QNodeId>();
+ ShaderData *rSubShaderData = shaderDataManager->lookupResource(nodeId);
+ if (rSubShaderData) {
buildActiveUniformNameValueMapStructHelper(rSubShaderData,
blockName,
qmlPropertyName);
+ } else if (textureManager->contains(nodeId)) {
+ const auto varId = StringToInt::lookupId(blockName + QLatin1Char('.') + qmlPropertyName);
+ activeUniformNamesToValue.insert(varId, value);
+ }
} else { // Scalar / Vec
QString varName = blockName + QLatin1Char('.') + qmlPropertyName;
if (uniforms.contains(varName)) {