summaryrefslogtreecommitdiffstats
path: root/src/Authoring/QT3DSDM
diff options
context:
space:
mode:
Diffstat (limited to 'src/Authoring/QT3DSDM')
-rw-r--r--src/Authoring/QT3DSDM/Systems/Qt3DSDMAnimation.h6
-rw-r--r--src/Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.h23
-rw-r--r--src/Authoring/QT3DSDM/Systems/Qt3DSDMDataTypes.h49
-rw-r--r--src/Authoring/QT3DSDM/Systems/Qt3DSDMMetaData.cpp81
-rw-r--r--src/Authoring/QT3DSDM/Systems/Qt3DSDMValue.cpp5
-rw-r--r--src/Authoring/QT3DSDM/Systems/Qt3DSDMValue.h16
-rw-r--r--src/Authoring/QT3DSDM/Systems/Qt3DSDMWStrOpsImpl.h44
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)