diff options
Diffstat (limited to 'src/Authoring/QT3DSDM')
-rw-r--r-- | src/Authoring/QT3DSDM/Systems/Qt3DSDMAnimation.h | 6 | ||||
-rw-r--r-- | src/Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.h | 23 | ||||
-rw-r--r-- | src/Authoring/QT3DSDM/Systems/Qt3DSDMDataTypes.h | 49 | ||||
-rw-r--r-- | src/Authoring/QT3DSDM/Systems/Qt3DSDMMetaData.cpp | 81 | ||||
-rw-r--r-- | src/Authoring/QT3DSDM/Systems/Qt3DSDMValue.cpp | 5 | ||||
-rw-r--r-- | src/Authoring/QT3DSDM/Systems/Qt3DSDMValue.h | 16 | ||||
-rw-r--r-- | src/Authoring/QT3DSDM/Systems/Qt3DSDMWStrOpsImpl.h | 44 |
7 files changed, 153 insertions, 71 deletions
diff --git a/src/Authoring/QT3DSDM/Systems/Qt3DSDMAnimation.h b/src/Authoring/QT3DSDM/Systems/Qt3DSDMAnimation.h index c2a7c3b8..361e522b 100644 --- a/src/Authoring/QT3DSDM/Systems/Qt3DSDMAnimation.h +++ b/src/Authoring/QT3DSDM/Systems/Qt3DSDMAnimation.h @@ -519,6 +519,10 @@ struct SAnimatableArityVisitor { return std::tuple<bool, size_t>(true, 3); } + std::tuple<bool, size_t> operator()(const SFloat4 &) const + { + return std::tuple<bool, size_t>(true, 4); + } template <typename TDataType> std::tuple<bool, size_t> operator()(const TDataType &) const { @@ -548,6 +552,8 @@ inline std::tuple<bool, size_t> GetDatatypeAnimatableAndArity(DataModelDataType: return std::make_tuple(true, 2); case DataModelDataType::Float3: return std::make_tuple(true, 3); + case DataModelDataType::Float4: + return std::make_tuple(true, 4); } } diff --git a/src/Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.h b/src/Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.h index ab92a649..16fb0d14 100644 --- a/src/Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.h +++ b/src/Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.h @@ -99,13 +99,13 @@ class IPropertySystem; HANDLE_COMPOSER_PROPERTY(eyeball, m_Eyeball, bool, true) \ HANDLE_COMPOSER_PROPERTY(shy, m_Shy, bool, false) \ HANDLE_COMPOSER_PROPERTY(locked, m_Locked, bool, false) \ - HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(timebarcolor, m_TimebarColor, SFloat3) \ + HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(timebarcolor, m_TimebarColor, SFloat4) \ HANDLE_COMPOSER_PROPERTY(timebartext, m_TimebarText, TDataStrPtr, L"") \ HANDLE_COMPOSER_PROPERTY(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_SCENE_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(bgcolorenable, m_BgColorEnable, bool, true) \ - HANDLE_COMPOSER_PROPERTY(backgroundcolor, m_BackgroundColor, SFloat3, SFloat3(0, 0, 0)) \ + HANDLE_COMPOSER_PROPERTY(backgroundcolor, m_BackgroundColor, SFloat4, SFloat4(0, 0, 0, 1)) \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_COMPONENT_PROPERTIES \ @@ -162,7 +162,7 @@ class IPropertySystem; #define ITERATE_COMPOSER_MATERIAL_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(shaderlighting, m_ShaderLighting, TDataStrPtr, L"Vertex") \ HANDLE_COMPOSER_PROPERTY(blendmode, m_BlendMode, TDataStrPtr, L"Normal") \ - HANDLE_COMPOSER_PROPERTY(diffuse, m_DiffuseColor, SFloat3, SFloat3(1, 1, 1)) \ + HANDLE_COMPOSER_PROPERTY(diffuse, m_DiffuseColor, SFloat4, SFloat4(1, 1, 1, 1)) \ HANDLE_COMPOSER_PROPERTY(diffusemap, m_DiffuseMap1, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(diffusemap2, m_DiffuseMap2, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(diffusemap3, m_DiffuseMap3, SLong4, 0) \ @@ -172,7 +172,7 @@ class IPropertySystem; HANDLE_COMPOSER_PROPERTY(roughnessmap, m_RoughnessMap, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(opacity, m_Opacity, float, 100.f) \ HANDLE_COMPOSER_PROPERTY(opacitymap, m_OpacityMap, SLong4, 0) \ - HANDLE_COMPOSER_PROPERTY(emissivecolor, m_EmissiveColor, SFloat3, 0.f) \ + HANDLE_COMPOSER_PROPERTY(emissivecolor, m_EmissiveColor, SFloat4, SFloat4(1, 1, 1, 1)) \ HANDLE_COMPOSER_PROPERTY(emissivepower, m_EmissivePower, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(emissivemap, m_EmissiveMap, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(emissivemap2, m_EmissiveMap2, SLong4, 0) \ @@ -186,7 +186,7 @@ class IPropertySystem; HANDLE_COMPOSER_PROPERTY(diffuselightwrap, m_DiffuseLightWrap, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(specularmap, m_SpecularMap, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(specularmodel, m_SpecularModel, TDataStrPtr, L"Default") \ - HANDLE_COMPOSER_PROPERTY(speculartint, m_SpecularTint, SFloat3, SFloat3(1, 1, 1)) \ + HANDLE_COMPOSER_PROPERTY(speculartint, m_SpecularTint, SFloat4, SFloat4(1, 1, 1, 1)) \ HANDLE_COMPOSER_PROPERTY(ior, m_IOR, float, 0) \ HANDLE_COMPOSER_PROPERTY(fresnelPower, m_FresnelPower, float, 0) \ HANDLE_COMPOSER_PROPERTY(vertexcolors, m_VertexColors, bool, false) \ @@ -202,8 +202,8 @@ class IPropertySystem; HANDLE_COMPOSER_PROPERTY(disabledepthtest, m_DisableDepthTest, bool, false) \ HANDLE_COMPOSER_PROPERTY(disabledepthprepass, m_DisableDepthPrepass, bool, false) \ HANDLE_COMPOSER_PROPERTY(background, m_Background, TDataStrPtr, L"Transparent") \ - HANDLE_COMPOSER_PROPERTY_DUPLICATE(backgroundcolor, m_BackgroundColor, SFloat3, \ - SFloat3(0, 0, 0)) \ + HANDLE_COMPOSER_PROPERTY_DUPLICATE(backgroundcolor, m_BackgroundColor, SFloat4, \ + SFloat4(0, 0, 0, 1)) \ HANDLE_COMPOSER_PROPERTY(blendtype, m_BlendType, TDataStrPtr, L"Normal") \ HANDLE_COMPOSER_PROPERTY(horzfields, m_HorizontalFieldValues, TDataStrPtr, L"Left/Width") \ HANDLE_COMPOSER_PROPERTY(left, m_Left, float, 0) \ @@ -247,9 +247,9 @@ class IPropertySystem; #define ITERATE_COMPOSER_LIGHT_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(lighttype, m_LightType, TDataStrPtr, L"Directional") \ HANDLE_COMPOSER_PROPERTY(scope, m_Scope, SObjectRefType, L"") \ - HANDLE_COMPOSER_PROPERTY(lightdiffuse, m_LightColor, SFloat3, SFloat3(1, 1, 1)) \ - HANDLE_COMPOSER_PROPERTY(lightspecular, m_SpecularColor, SFloat3, SFloat3(1, 1, 1)) \ - HANDLE_COMPOSER_PROPERTY(lightambient, m_AmbientColor, SFloat3, SFloat3(0, 0, 0)) \ + HANDLE_COMPOSER_PROPERTY(lightdiffuse, m_LightColor, SFloat4, SFloat4(1, 1, 1, 1)) \ + HANDLE_COMPOSER_PROPERTY(lightspecular, m_SpecularColor, SFloat4, SFloat4(1, 1, 1, 1)) \ + HANDLE_COMPOSER_PROPERTY(lightambient, m_AmbientColor, SFloat4, SFloat4(0, 0, 0, 1)) \ HANDLE_COMPOSER_PROPERTY(brightness, m_Brightness, float, 100.0f) \ HANDLE_COMPOSER_PROPERTY(linearfade, m_LinearFade, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(expfade, m_ExpFade, float, 0.0f) \ @@ -278,7 +278,7 @@ class IPropertySystem; #define ITERATE_COMPOSER_TEXT_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(textstring, m_TextString, TDataStrPtr, L"Text") \ - HANDLE_COMPOSER_PROPERTY(textcolor, m_TextColor, SFloat3, SFloat3(1, 1, 1)) \ + HANDLE_COMPOSER_PROPERTY(textcolor, m_TextColor, SFloat4, SFloat4(1, 1, 1, 1)) \ HANDLE_COMPOSER_PROPERTY(font, m_Font, TDataStrPtr, L"arial") \ HANDLE_COMPOSER_PROPERTY(size, m_Size, float, 24.f) \ HANDLE_COMPOSER_PROPERTY(horzalign, m_HorzAlign, TDataStrPtr, L"Center") \ @@ -399,6 +399,7 @@ struct DataTypeToTypeMap QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Float, float) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Float2, SFloat2) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Float3, SFloat3) +QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Float4, SFloat4) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Long, qt3ds::QT3DSI32) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::String, TDataStrPtr) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Bool, bool) diff --git a/src/Authoring/QT3DSDM/Systems/Qt3DSDMDataTypes.h b/src/Authoring/QT3DSDM/Systems/Qt3DSDMDataTypes.h index d8c2673e..7a7157f6 100644 --- a/src/Authoring/QT3DSDM/Systems/Qt3DSDMDataTypes.h +++ b/src/Authoring/QT3DSDM/Systems/Qt3DSDMDataTypes.h @@ -291,6 +291,49 @@ struct SFloat3 } }; +struct SFloat4 +{ + float m_Floats[4]; + + SFloat4(float f1 = 0, float f2 = 0, float f3 = 0, float f4 = 1) + { + m_Floats[0] = f1; + m_Floats[1] = f2; + m_Floats[2] = f3; + m_Floats[3] = f4; + } + SFloat4(const SFloat4 &inOther) { operator=(inOther); } + SFloat4 &operator=(const SFloat4 &inOther) + { + m_Floats[0] = inOther.m_Floats[0]; + m_Floats[1] = inOther.m_Floats[1]; + m_Floats[2] = inOther.m_Floats[2]; + m_Floats[3] = inOther.m_Floats[3]; + return *this; + } + + bool operator==(const SFloat4 &other) const + { + return m_Floats[0] == other.m_Floats[0] && m_Floats[1] == other.m_Floats[1] + && m_Floats[2] == other.m_Floats[2] && m_Floats[3] == other.m_Floats[3]; + } + + float &operator[](size_t inIndex) + { + if (inIndex < 4) + return m_Floats[inIndex]; + + throw std::out_of_range(""); + } + const float &operator[](size_t inIndex) const + { + if (inIndex < 4) + return m_Floats[inIndex]; + + throw std::out_of_range(""); + } +}; + struct SLong4 { qt3ds::QT3DSU32 m_Longs[4]; @@ -471,6 +514,11 @@ namespace foundation { void destruct(qt3dsdm::SFloat3 &) {} }; template <> + struct DestructTraits<qt3dsdm::SFloat4> + { + void destruct(qt3dsdm::SFloat4 &) {} + }; + template <> struct DestructTraits<qt3dsdm::SLong4> { void destruct(qt3dsdm::SLong4 &) {} @@ -774,6 +822,7 @@ struct DataModelDataType { Float, Float2, Float3, + Float4, Long, String, Bool, diff --git a/src/Authoring/QT3DSDM/Systems/Qt3DSDMMetaData.cpp b/src/Authoring/QT3DSDM/Systems/Qt3DSDMMetaData.cpp index 02339efc..bc4e905d 100644 --- a/src/Authoring/QT3DSDM/Systems/Qt3DSDMMetaData.cpp +++ b/src/Authoring/QT3DSDM/Systems/Qt3DSDMMetaData.cpp @@ -123,8 +123,8 @@ struct WStrOps<AdditionalMetaDataType::Value> { switch (item) { #define HANDLE_ADDITIONAL_META_DATA_TYPE(name) \ - case AdditionalMetaDataType::name: \ - wcscpy_s(buffer.begin(), buffer.size(), QT3DS_WCHAR_T_##name); \ + case AdditionalMetaDataType::name: \ + wcscpy_s(buffer.begin(), buffer.size(), QT3DS_WCHAR_T_##name); \ return 1; ITERATE_ADDITIONAL_META_DATA_TYPES #undef HANDLE_ADDITIONAL_META_DATA_TYPE @@ -134,9 +134,9 @@ struct WStrOps<AdditionalMetaDataType::Value> bool StrTo(const wchar_t *buffer, AdditionalMetaDataType::Value &item) { #define HANDLE_ADDITIONAL_META_DATA_TYPE(name) \ - if (AreEqual(buffer, QT3DS_WCHAR_T_##name)) { \ - item = AdditionalMetaDataType::name; \ - return true; \ + if (AreEqual(buffer, QT3DS_WCHAR_T_##name)) { \ + item = AdditionalMetaDataType::name; \ + return true; \ } ITERATE_ADDITIONAL_META_DATA_TYPES #undef HANDLE_ADDITIONAL_META_DATA_TYPE @@ -159,8 +159,8 @@ QT3DSU32 WStrOps<HandlerArgumentType::Value>::ToStr(HandlerArgumentType::Value i { switch (item) { #define HANDLE_HANDLER_ARG_TYPE(name) \ - case HandlerArgumentType::name: \ - wcscpy_s(buffer.begin(), buffer.size(), QT3DS_WCHAR_T_##name); \ + case HandlerArgumentType::name: \ + wcscpy_s(buffer.begin(), buffer.size(), QT3DS_WCHAR_T_##name); \ return 1; ITERATE_HANDLER_ARG_TYPES #undef HANDLE_HANDLER_ARG_TYPE @@ -171,9 +171,9 @@ QT3DSU32 WStrOps<HandlerArgumentType::Value>::ToStr(HandlerArgumentType::Value i bool WStrOps<HandlerArgumentType::Value>::StrTo(const wchar_t *buffer, HandlerArgumentType::Value &item) { #define HANDLE_HANDLER_ARG_TYPE(name) \ - if (AreEqual(buffer, QT3DS_WCHAR_T_##name)) { \ + if (AreEqual(buffer, QT3DS_WCHAR_T_##name)) { \ item = HandlerArgumentType::name; \ - return true; \ + return true; \ } ITERATE_HANDLER_ARG_TYPES #undef HANDLE_HANDLER_ARG_TYPE @@ -189,35 +189,35 @@ bool WStrOps<HandlerArgumentType::Value>::StrTo(const wchar_t *buffer, HandlerAr #define QT3DS_WCHAR_T_StringListOrInt L"StringListOrInt" #define QT3DS_WCHAR_T_Scale L"Scale" -#define ITERATE_QT3DSDM_COMPLETE_TYPES \ - HANDLE_QT3DSDM_COMPLETE_NONE_TYPE \ - HANDLE_QT3DSDM_COMPLETE_TYPE(StringList, StringList, DataModelDataType::String) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(FloatRange, Range, DataModelDataType::Float) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(LongRange, Range, DataModelDataType::Long) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Float, None, DataModelDataType::Float) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Long, None, DataModelDataType::Long) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Float2, None, DataModelDataType::Float2) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Vector, None, DataModelDataType::Float3) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Scale, None, DataModelDataType::Float3) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Rotation, Rotation, DataModelDataType::Float3) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Color, Color, DataModelDataType::Float3) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Boolean, None, DataModelDataType::Bool) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Slide, None, DataModelDataType::String) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Font, Font, DataModelDataType::String) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(FontSize, FontSize, DataModelDataType::Float) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(String, String, DataModelDataType::String) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(MultiLineString, MultiLine, DataModelDataType::String) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(ObjectRef, ObjectRef, DataModelDataType::ObjectRef) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Image, Image, DataModelDataType::Long4) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Mesh, Mesh, DataModelDataType::String) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Import, Import, DataModelDataType::String) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Texture, Texture, DataModelDataType::String) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Image2D, Texture, DataModelDataType::String) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Buffer, Texture, DataModelDataType::String) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Guid, None, DataModelDataType::Long4) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(StringListOrInt, StringList, DataModelDataType::StringOrInt) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(Renderable, Renderable, DataModelDataType::String) \ - HANDLE_QT3DSDM_COMPLETE_TYPE(PathBuffer, PathBuffer, DataModelDataType::String) \ +#define ITERATE_QT3DSDM_COMPLETE_TYPES \ + HANDLE_QT3DSDM_COMPLETE_NONE_TYPE \ + HANDLE_QT3DSDM_COMPLETE_TYPE(StringList, StringList, DataModelDataType::String) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(FloatRange, Range, DataModelDataType::Float) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(LongRange, Range, DataModelDataType::Long) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Float, None, DataModelDataType::Float) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Long, None, DataModelDataType::Long) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Float2, None, DataModelDataType::Float2) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Vector, None, DataModelDataType::Float3) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Scale, None, DataModelDataType::Float3) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Rotation, Rotation, DataModelDataType::Float3) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Color, Color, DataModelDataType::Float4) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Boolean, None, DataModelDataType::Bool) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Slide, None, DataModelDataType::String) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Font, Font, DataModelDataType::String) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(FontSize, FontSize, DataModelDataType::Float) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(String, String, DataModelDataType::String) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(MultiLineString, MultiLine, DataModelDataType::String) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(ObjectRef, ObjectRef, DataModelDataType::ObjectRef) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Image, Image, DataModelDataType::Long4) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Mesh, Mesh, DataModelDataType::String) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Import, Import, DataModelDataType::String) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Texture, Texture, DataModelDataType::String) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Image2D, Texture, DataModelDataType::String) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Buffer, Texture, DataModelDataType::String) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Guid, None, DataModelDataType::Long4) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(StringListOrInt, StringList, DataModelDataType::StringOrInt) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(Renderable, Renderable, DataModelDataType::String) \ + HANDLE_QT3DSDM_COMPLETE_TYPE(PathBuffer, PathBuffer, DataModelDataType::String) \ HANDLE_QT3DSDM_COMPLETE_TYPE(ShadowMapResolution, ShadowMapResolution, DataModelDataType::Long) DataModelDataType::Value CompleteMetaDataType::ToDataType(CompleteMetaDataType::Enum inCompleteType) @@ -3145,6 +3145,11 @@ public: = qt3ds::render::NVRenderShaderDataTypes::QT3DSVec3; AppendShaderUniform("vec3", theNewDefinition.m_Name.c_str(), uniforms); break; + case DataModelDataType::Float4: + theNewDefinition.m_DataType + = qt3ds::render::NVRenderShaderDataTypes::QT3DSVec4; + AppendShaderUniform("vec4", theNewDefinition.m_Name.c_str(), uniforms); + break; case DataModelDataType::String: if (theInfo.m_CompleteType == CompleteMetaDataType::Texture) { theNewDefinition.m_DataType = diff --git a/src/Authoring/QT3DSDM/Systems/Qt3DSDMValue.cpp b/src/Authoring/QT3DSDM/Systems/Qt3DSDMValue.cpp index b6077b04..94c5a594 100644 --- a/src/Authoring/QT3DSDM/Systems/Qt3DSDMValue.cpp +++ b/src/Authoring/QT3DSDM/Systems/Qt3DSDMValue.cpp @@ -46,7 +46,7 @@ SValue::SValue(const QVariant &inData) case QVariant::Color: { const QColor c = inData.value<QColor>(); - *this = qt3dsdm::SFloat3(c.redF(), c.greenF(), c.blueF()); + *this = qt3dsdm::SFloat4(c.redF(), c.greenF(), c.blueF(), c.alphaF()); break; } case QVariant::String: @@ -110,6 +110,9 @@ QVariant SValue::toQVariant() const case DataModelDataType::Float3: { return QVariant::fromValue(get<QVector3D>(*this)); } + case DataModelDataType::Float4: { + return QVariant::fromValue(get<QVector<float> >(*this)); + } case DataModelDataType::Long: { return QVariant::fromValue(get<qt3ds::QT3DSI32>(*this)); } diff --git a/src/Authoring/QT3DSDM/Systems/Qt3DSDMValue.h b/src/Authoring/QT3DSDM/Systems/Qt3DSDMValue.h index 1e6870ee..9e006320 100644 --- a/src/Authoring/QT3DSDM/Systems/Qt3DSDMValue.h +++ b/src/Authoring/QT3DSDM/Systems/Qt3DSDMValue.h @@ -66,6 +66,7 @@ struct SEnumToDataTypeMap HANDLE_QT3DSDM_DATA_TYPE(float, DataModelDataType::Float); \ HANDLE_QT3DSDM_DATA_TYPE(SFloat2, DataModelDataType::Float2); \ HANDLE_QT3DSDM_DATA_TYPE(SFloat3, DataModelDataType::Float3); \ + HANDLE_QT3DSDM_DATA_TYPE(SFloat4, DataModelDataType::Float4); \ HANDLE_QT3DSDM_DATA_TYPE(qt3ds::QT3DSI32, DataModelDataType::Long); \ HANDLE_QT3DSDM_DATA_TYPE(TDataStrPtr, DataModelDataType::String); \ HANDLE_QT3DSDM_DATA_TYPE(bool, DataModelDataType::Bool); \ @@ -237,6 +238,9 @@ struct SDefaulter<SValue> case DataModelDataType::Float3: outValue = SValue(SFloat3()); break; + case DataModelDataType::Float4: + outValue = SValue(SFloat4()); + break; case DataModelDataType::Long: outValue = SValue(0); break; @@ -289,11 +293,12 @@ inline SObjectRefType ConvertToObjectRef(const SValue &inValue) template <> inline QColor get<QColor>(const SValue &inType) { - auto f = get<qt3dsdm::SFloat3>(inType); + auto f = get<qt3dsdm::SFloat4>(inType); qreal r = qBound<qreal>(0.0, f.m_Floats[0], 1.0); qreal g = qBound<qreal>(0.0, f.m_Floats[1], 1.0); qreal b = qBound<qreal>(0.0, f.m_Floats[2], 1.0); - return QColor::fromRgbF(r, g, b); + qreal a = qBound<qreal>(0.0, f.m_Floats[3], 1.0); + return QColor::fromRgbF(r, g, b, a); } template <> @@ -316,6 +321,13 @@ inline QVector3D get<QVector3D>(const qt3dsdm::SValue &inType) return QVector3D(f.m_Floats[0], f.m_Floats[1], f.m_Floats[2]); } +template <> +inline QVector<float> get<QVector<float> >(const qt3dsdm::SValue &inType) +{ + auto f = get<qt3dsdm::SFloat4>(inType); + return {f.m_Floats[0], f.m_Floats[1], f.m_Floats[2], f.m_Floats[3]}; +} + // KDAB_TODO Shortcut to not define our own 4 member long structure template <> inline QVector<qt3ds::QT3DSU32> get<QVector<qt3ds::QT3DSU32> >(const qt3dsdm::SValue &inType) diff --git a/src/Authoring/QT3DSDM/Systems/Qt3DSDMWStrOpsImpl.h b/src/Authoring/QT3DSDM/Systems/Qt3DSDMWStrOpsImpl.h index 895e3ff5..9268e6dc 100644 --- a/src/Authoring/QT3DSDM/Systems/Qt3DSDMWStrOpsImpl.h +++ b/src/Authoring/QT3DSDM/Systems/Qt3DSDMWStrOpsImpl.h @@ -209,6 +209,7 @@ struct WStrOps<QT3DSF64> #define QT3DS_WCHAR_T_Float L"Float" #define QT3DS_WCHAR_T_Float2 L"Float2" #define QT3DS_WCHAR_T_Float3 L"Float3" +#define QT3DS_WCHAR_T_Float4 L"Float4" #define QT3DS_WCHAR_T_Long L"Long" #define QT3DS_WCHAR_T_String L"String" #define QT3DS_WCHAR_T_Bool L"Bool" @@ -218,18 +219,19 @@ struct WStrOps<QT3DSF64> #define QT3DS_WCHAR_T_StringOrInt L"StringOrInt" #define QT3DS_WCHAR_T_FloatList L"FloatList" -#define QT3DS_IMPORT_ITERATE_DMTYPE \ - QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::None, None, QT3DSF32) \ - QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Float, Float, QT3DSF32) \ - QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Float2, Float2, SFloat2) \ - QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Float3, Float3, SFloat3) \ - QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Long, Long, QT3DSI32) \ - QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::String, String, TDataStrPtr) \ - QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Bool, Bool, bool) \ - QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Long4, Long4, SLong4) \ - QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::StringRef, StringRef, SStringRef) \ - QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::ObjectRef, ObjectRef, SObjectRefType) \ - QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::StringOrInt, StringOrInt, SStringOrInt) \ +#define QT3DS_IMPORT_ITERATE_DMTYPE \ + QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::None, None, QT3DSF32) \ + QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Float, Float, QT3DSF32) \ + QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Float2, Float2, SFloat2) \ + QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Float3, Float3, SFloat3) \ + QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Float4, Float4, SFloat4) \ + QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Long, Long, QT3DSI32) \ + QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::String, String, TDataStrPtr) \ + QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Bool, Bool, bool) \ + QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Long4, Long4, SLong4) \ + QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::StringRef, StringRef, SStringRef) \ + QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::ObjectRef, ObjectRef, SObjectRefType) \ + QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::StringOrInt, StringOrInt, SStringOrInt) \ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::FloatList, FloatList, TFloatList) template <> @@ -239,9 +241,9 @@ struct WStrOps<DataModelDataType::Value> { const wchar_t *data = NULL; switch (item) { -#define QT3DS_IMPORT_HANDLE_DMTYPE(x, y, z) \ +#define QT3DS_IMPORT_HANDLE_DMTYPE(x, y, z) \ case x: \ - data = QT3DS_WCHAR_T_##y; \ + data = QT3DS_WCHAR_T_##y; \ break; QT3DS_IMPORT_ITERATE_DMTYPE #undef QT3DS_IMPORT_HANDLE_DMTYPE @@ -256,9 +258,8 @@ struct WStrOps<DataModelDataType::Value> } bool StrTo(const wchar_t *buffer, DataModelDataType::Value &item) { - -#define QT3DS_IMPORT_HANDLE_DMTYPE(x, y, z) \ - if (AreEqual(buffer, QT3DS_WCHAR_T_##y)) { \ +#define QT3DS_IMPORT_HANDLE_DMTYPE(x, y, z) \ + if (AreEqual(buffer, QT3DS_WCHAR_T_##y)) { \ item = x; \ return true; \ } @@ -280,6 +281,7 @@ struct WStrOpsDMWriter void operator()(float val) { buf.Write(val); } void operator()(const SFloat2 &val) { buf.Write(NVConstDataRef<QT3DSF32>(&val[0], 2)); } void operator()(const SFloat3 &val) { buf.Write(NVConstDataRef<QT3DSF32>(&val[0], 3)); } + void operator()(const SFloat4 &val) { buf.Write(NVConstDataRef<QT3DSF32>(&val[0], 4)); } void operator()(QT3DSI32 val) { buf.Write(val); } void operator()(bool val) { buf.Write(val); } void operator()(const TDataStrPtr &val) @@ -314,7 +316,7 @@ struct WStrOps<SValue> SValue BufTo(DataModelDataType::Value type, TBufferType &inReader) { switch (type) { -#define QT3DS_IMPORT_HANDLE_DMTYPE(x, y, z) \ +#define QT3DS_IMPORT_HANDLE_DMTYPE(x, y, z) \ case x: { \ z retval; \ Read(inReader, retval); \ @@ -344,6 +346,11 @@ struct WStrOps<SValue> reader.ReadRef(NVDataRef<QT3DSF32>(&val[0], 3)); } template <typename TBufferType> + void Read(TBufferType &reader, SFloat4 &val) + { + reader.ReadRef(NVDataRef<QT3DSF32>(&val[0], 4)); + } + template <typename TBufferType> void Read(TBufferType &reader, QT3DSI32 &val) { reader.Read(val); @@ -566,7 +573,6 @@ struct WCharTReader if (m_StartPtr) m_StartPtr = FindNextNonWhitespace(m_StartPtr + 1); } - QT3DS_ASSERT(idx == data.size()); } void ReadBuffer(NVConstDataRef<char8_t> &outBuffer) |