diff options
author | Antti Määttä <antti.maatta@qt.io> | 2019-06-27 09:43:33 +0300 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2019-06-28 09:32:01 +0300 |
commit | 1fee43d7b31f71f1f0c9d4498fbc52a11f7338f5 (patch) | |
tree | c67dfcf921c8edf8bb5d6aaf673e442dbb9f0650 | |
parent | abd87f99983f103d38085bb732ef291516bf5055 (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.cpp | 96 |
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: |