summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2019-06-27 09:43:33 +0300
committerAntti Määttä <antti.maatta@qt.io>2019-06-28 09:32:01 +0300
commit1fee43d7b31f71f1f0c9d4498fbc52a11f7338f5 (patch)
treec67dfcf921c8edf8bb5d6aaf673e442dbb9f0650
parentabd87f99983f103d38085bb732ef291516bf5055 (diff)
Fix custom shader properties not animating2.4
- Add color components for vec4 as additional properties and fix the AddEffectExtendedProperty function string building. - Optimize the functionality by removing multimple string conversions. Task-number: QT3DS-3715 Change-Id: I201e10da38a8ea4898a8c5c7b0ad77c41ece91c8 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Jere Tuliniemi <jere.tuliniemi@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r--src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp96
1 files changed, 62 insertions, 34 deletions
diff --git a/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp b/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
index a4b3bc7..c0b72a6 100644
--- a/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
+++ b/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
@@ -1236,21 +1236,22 @@ struct SDynamicObjectTranslatorContext : public STranslatorContext
{
}
~SDynamicObjectTranslatorContext() {}
- void AddEffectExtendedProperty(const qt3ds::render::dynamic::SPropertyDefinition &thePropDef,
- const char *inExtension, Q3DStudio::EAttributeType inType,
- Qt3DSString &ioStringBuilder, QT3DSU32 inOffset, QT3DSU32 dataOffset)
- {
- ioStringBuilder.fromUtf8(thePropDef.m_Name.c_str());
- ioStringBuilder.append(inExtension);
- Q3DStudio::INT32 theHash = Q3DStudio::CHash::HashAttribute(
- ioStringBuilder.toUtf8().constData());
+ void AddEffectExtendedProperty(const QByteArray &baseName,
+ const QByteArray &extension, Q3DStudio::EAttributeType inType,
+ QByteArray &ioStringBuilder, QT3DSU32 inOffset,
+ QT3DSU32 dataOffset)
+ {
+ ioStringBuilder = baseName;
+ ioStringBuilder.append(extension);
+ Q3DStudio::INT32 theHash = Q3DStudio::CHash::HashAttribute(ioStringBuilder.constData());
m_PropertyHashes.insert(
eastl::make_pair(theHash, SEffectPropertyEntry(inType, inOffset, dataOffset)));
}
void BuildPropertyHashes(NVConstDataRef<qt3ds::render::dynamic::SPropertyDefinition> inProperties)
{
if (m_PropertyHashes.size() == 0) {
- qt3ds::foundation::Qt3DSString theNameBuilder;
+ QByteArray nameBuilder;
+ QByteArray baseName;
for (QT3DSU32 idx = 0, end = inProperties.size(); idx < end; ++idx) {
const qt3ds::render::dynamic::SPropertyDefinition &thePropDef = inProperties[idx];
switch (thePropDef.m_DataType) {
@@ -1276,35 +1277,62 @@ struct SDynamicObjectTranslatorContext : public STranslatorContext
}
break;
case qt3ds::render::NVRenderShaderDataTypes::QT3DSVec2:
- AddEffectExtendedProperty(thePropDef, ".x", Q3DStudio::ATTRIBUTETYPE_FLOAT,
- theNameBuilder, idx, 0);
- AddEffectExtendedProperty(thePropDef, ".y", Q3DStudio::ATTRIBUTETYPE_FLOAT,
- theNameBuilder, idx, sizeof(QT3DSF32));
+ baseName = QString::fromUtf8(thePropDef.m_Name.c_str()).toUtf8();
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".x"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT, nameBuilder, idx, 0);
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".y"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT, nameBuilder, idx,
+ sizeof(QT3DSF32));
break;
case qt3ds::render::NVRenderShaderDataTypes::QT3DSVec3:
- AddEffectExtendedProperty(thePropDef, ".x", Q3DStudio::ATTRIBUTETYPE_FLOAT,
- theNameBuilder, idx, 0);
- AddEffectExtendedProperty(thePropDef, ".y", Q3DStudio::ATTRIBUTETYPE_FLOAT,
- theNameBuilder, idx, sizeof(QT3DSF32));
- AddEffectExtendedProperty(thePropDef, ".z", Q3DStudio::ATTRIBUTETYPE_FLOAT,
- theNameBuilder, idx, 2 * sizeof(QT3DSF32));
-
- AddEffectExtendedProperty(thePropDef, ".r", Q3DStudio::ATTRIBUTETYPE_FLOAT,
- theNameBuilder, idx, 0);
- AddEffectExtendedProperty(thePropDef, ".g", Q3DStudio::ATTRIBUTETYPE_FLOAT,
- theNameBuilder, idx, sizeof(QT3DSF32));
- AddEffectExtendedProperty(thePropDef, ".b", Q3DStudio::ATTRIBUTETYPE_FLOAT,
- theNameBuilder, idx, 2 * sizeof(QT3DSF32));
+ baseName = QString::fromUtf8(thePropDef.m_Name.c_str()).toUtf8();
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".x"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, 0);
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".y"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, sizeof(QT3DSF32));
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".z"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, 2 * sizeof(QT3DSF32));
+
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".r"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, 0);
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".g"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, sizeof(QT3DSF32));
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".b"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, 2 * sizeof(QT3DSF32));
break;
case qt3ds::render::NVRenderShaderDataTypes::QT3DSVec4:
- AddEffectExtendedProperty(thePropDef, ".x", Q3DStudio::ATTRIBUTETYPE_FLOAT,
- theNameBuilder, idx, 0);
- AddEffectExtendedProperty(thePropDef, ".y", Q3DStudio::ATTRIBUTETYPE_FLOAT,
- theNameBuilder, idx, sizeof(QT3DSF32));
- AddEffectExtendedProperty(thePropDef, ".z", Q3DStudio::ATTRIBUTETYPE_FLOAT,
- theNameBuilder, idx, 2 * sizeof(QT3DSF32));
- AddEffectExtendedProperty(thePropDef, ".w", Q3DStudio::ATTRIBUTETYPE_FLOAT,
- theNameBuilder, idx, 3 * sizeof(QT3DSF32));
+ baseName = QString::fromUtf8(thePropDef.m_Name.c_str()).toUtf8();
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".x"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, 0);
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".y"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, sizeof(QT3DSF32));
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".z"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, 2 * sizeof(QT3DSF32));
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".w"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, 3 * sizeof(QT3DSF32));
+
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".r"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, 0);
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".g"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, sizeof(QT3DSF32));
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".b"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, 2 * sizeof(QT3DSF32));
+ AddEffectExtendedProperty(baseName, QByteArrayLiteral(".a"),
+ Q3DStudio::ATTRIBUTETYPE_FLOAT,
+ nameBuilder, idx, 3 * sizeof(QT3DSF32));
break;
case qt3ds::render::NVRenderShaderDataTypes::NVRenderTexture2DPtr:
case qt3ds::render::NVRenderShaderDataTypes::NVRenderImage2DPtr: