diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2017-02-23 13:53:23 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-02-24 16:58:51 +0000 |
commit | 12111fd494d927bb75a8a41e3771ff6983119274 (patch) | |
tree | 6590daea24184e851502beb0e94dbe76e2cca640 /src/render/jobs/renderviewjobutils.cpp | |
parent | 92a2759a8cf7a77958a788216f1bee762789ca59 (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.cpp | 19 |
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)) { |