浏览代码

Added object serialization for Float4, UVec4 and IndexedTriangleNoMaterial (#1752)

Jorrit Rouwe 1 天之前
父节点
当前提交
7e93e770ea

+ 10 - 0
Jolt/Math/Float4.h

@@ -23,6 +23,16 @@ public:
 		return *(&x + inCoordinate);
 	}
 
+	bool		operator == (const Float4 &inRHS) const
+	{
+		return x == inRHS.x && y == inRHS.y && z == inRHS.z && w == inRHS.w;
+	}
+
+	bool		operator != (const Float4 &inRHS) const
+	{
+		return x != inRHS.x || y != inRHS.y || z != inRHS.z || w != inRHS.w;
+	}
+
 	float		x;
 	float		y;
 	float		z;

+ 4 - 0
Jolt/ObjectStream/ObjectStream.h

@@ -58,10 +58,12 @@ public:
 	virtual bool				ReadPrimitiveData(bool &outPrimitive) = 0;
 	virtual bool				ReadPrimitiveData(String &outPrimitive) = 0;
 	virtual bool				ReadPrimitiveData(Float3 &outPrimitive) = 0;
+	virtual bool				ReadPrimitiveData(Float4 &outPrimitive) = 0;
 	virtual bool				ReadPrimitiveData(Double3 &outPrimitive) = 0;
 	virtual bool				ReadPrimitiveData(Vec3 &outPrimitive) = 0;
 	virtual bool				ReadPrimitiveData(DVec3 &outPrimitive) = 0;
 	virtual bool				ReadPrimitiveData(Vec4 &outPrimitive) = 0;
+	virtual bool				ReadPrimitiveData(UVec4 &outPrimitive) = 0;
 	virtual bool				ReadPrimitiveData(Quat &outPrimitive) = 0;
 	virtual bool				ReadPrimitiveData(Mat44 &outPrimitive) = 0;
 	virtual bool				ReadPrimitiveData(DMat44 &outPrimitive) = 0;
@@ -92,10 +94,12 @@ public:
 	virtual void				WritePrimitiveData(const bool &inPrimitive) = 0;
 	virtual void				WritePrimitiveData(const String &inPrimitive) = 0;
 	virtual void				WritePrimitiveData(const Float3 &inPrimitive) = 0;
+	virtual void				WritePrimitiveData(const Float4 &inPrimitive) = 0;
 	virtual void				WritePrimitiveData(const Double3 &inPrimitive) = 0;
 	virtual void				WritePrimitiveData(const Vec3 &inPrimitive) = 0;
 	virtual void				WritePrimitiveData(const DVec3 &inPrimitive) = 0;
 	virtual void				WritePrimitiveData(const Vec4 &inPrimitive) = 0;
+	virtual void				WritePrimitiveData(const UVec4 &inPrimitive) = 0;
 	virtual void				WritePrimitiveData(const Quat &inPrimitive) = 0;
 	virtual void				WritePrimitiveData(const Mat44 &inPrimitive) = 0;
 	virtual void				WritePrimitiveData(const DMat44 &inPrimitive) = 0;

+ 18 - 0
Jolt/ObjectStream/ObjectStreamBinaryIn.cpp

@@ -165,6 +165,15 @@ bool ObjectStreamBinaryIn::ReadPrimitiveData(Float3 &outPrimitive)
 	return true;
 }
 
+bool ObjectStreamBinaryIn::ReadPrimitiveData(Float4 &outPrimitive)
+{
+	Float4 primitive;
+	mStream.read((char *)&primitive, sizeof(Float4));
+	if (mStream.fail()) return false;
+	outPrimitive = primitive;
+	return true;
+}
+
 bool ObjectStreamBinaryIn::ReadPrimitiveData(Double3 &outPrimitive)
 {
 	Double3 primitive;
@@ -201,6 +210,15 @@ bool ObjectStreamBinaryIn::ReadPrimitiveData(Vec4 &outPrimitive)
 	return true;
 }
 
+bool ObjectStreamBinaryIn::ReadPrimitiveData(UVec4 &outPrimitive)
+{
+	UVec4 primitive;
+	mStream.read((char *)&primitive, sizeof(primitive));
+	if (mStream.fail()) return false;
+	outPrimitive = primitive;
+	return true;
+}
+
 bool ObjectStreamBinaryIn::ReadPrimitiveData(Quat &outPrimitive)
 {
 	Quat primitive;

+ 2 - 0
Jolt/ObjectStream/ObjectStreamBinaryIn.h

@@ -35,10 +35,12 @@ public:
 	virtual bool				ReadPrimitiveData(bool &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(String &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(Float3 &outPrimitive) override;
+	virtual bool				ReadPrimitiveData(Float4 &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(Double3 &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(Vec3 &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(DVec3 &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(Vec4 &outPrimitive) override;
+	virtual bool				ReadPrimitiveData(UVec4 &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(Quat &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(Mat44 &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(DMat44 &outPrimitive) override;

+ 10 - 0
Jolt/ObjectStream/ObjectStreamBinaryOut.cpp

@@ -111,6 +111,11 @@ void ObjectStreamBinaryOut::WritePrimitiveData(const Float3 &inPrimitive)
 	mStream.write((const char *)&inPrimitive, sizeof(Float3));
 }
 
+void ObjectStreamBinaryOut::WritePrimitiveData(const Float4 &inPrimitive)
+{
+	mStream.write((const char *)&inPrimitive, sizeof(Float4));
+}
+
 void ObjectStreamBinaryOut::WritePrimitiveData(const Double3 &inPrimitive)
 {
 	mStream.write((const char *)&inPrimitive, sizeof(Double3));
@@ -131,6 +136,11 @@ void ObjectStreamBinaryOut::WritePrimitiveData(const Vec4 &inPrimitive)
 	mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));
 }
 
+void ObjectStreamBinaryOut::WritePrimitiveData(const UVec4 &inPrimitive)
+{
+	mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));
+}
+
 void ObjectStreamBinaryOut::WritePrimitiveData(const Quat &inPrimitive)
 {
 	mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));

+ 2 - 0
Jolt/ObjectStream/ObjectStreamBinaryOut.h

@@ -35,10 +35,12 @@ public:
 	virtual void				WritePrimitiveData(const bool &inPrimitive) override;
 	virtual void				WritePrimitiveData(const String &inPrimitive) override;
 	virtual void				WritePrimitiveData(const Float3 &inPrimitive) override;
+	virtual void				WritePrimitiveData(const Float4 &inPrimitive) override;
 	virtual void				WritePrimitiveData(const Double3 &inPrimitive) override;
 	virtual void				WritePrimitiveData(const Vec3 &inPrimitive) override;
 	virtual void				WritePrimitiveData(const DVec3 &inPrimitive) override;
 	virtual void				WritePrimitiveData(const Vec4 &inPrimitive) override;
+	virtual void				WritePrimitiveData(const UVec4 &inPrimitive) override;
 	virtual void				WritePrimitiveData(const Quat &inPrimitive) override;
 	virtual void				WritePrimitiveData(const Mat44 &inPrimitive) override;
 	virtual void				WritePrimitiveData(const DMat44 &inPrimitive) override;

+ 14 - 0
Jolt/ObjectStream/ObjectStreamIn.cpp

@@ -551,6 +551,13 @@ bool ObjectStreamIn::SkipAttributeData(int inArrayDepth, EOSDataType inDataType,
 						break;
 					}
 
+				case EOSDataType::T_Float4:
+					{
+						Float4 temporary;
+						continue_reading = ReadPrimitiveData(temporary);
+						break;
+					}
+
 				case EOSDataType::T_Double3:
 					{
 						Double3 temporary;
@@ -579,6 +586,13 @@ bool ObjectStreamIn::SkipAttributeData(int inArrayDepth, EOSDataType inDataType,
 						break;
 					}
 
+				case EOSDataType::T_UVec4:
+					{
+						UVec4 temporary;
+						continue_reading = ReadPrimitiveData(temporary);
+						break;
+					}
+
 				case EOSDataType::T_Quat:
 					{
 						Quat temporary;

+ 22 - 0
Jolt/ObjectStream/ObjectStreamTextIn.cpp

@@ -51,6 +51,8 @@ bool ObjectStreamTextIn::ReadDataType(EOSDataType &outType)
 			outType = EOSDataType::T_String;
 		else if (token == "float3")
 			outType = EOSDataType::T_Float3;
+		else if (token == "float4")
+			outType = EOSDataType::T_Float4;
 		else if (token == "double3")
 			outType = EOSDataType::T_Double3;
 		else if (token == "vec3")
@@ -59,6 +61,8 @@ bool ObjectStreamTextIn::ReadDataType(EOSDataType &outType)
 			outType = EOSDataType::T_DVec3;
 		else if (token == "vec4")
 			outType = EOSDataType::T_Vec4;
+		else if (token == "uvec4")
+			outType = EOSDataType::T_UVec4;
 		else if (token == "quat")
 			outType = EOSDataType::T_Quat;
 		else if (token == "mat44")
@@ -290,6 +294,15 @@ bool ObjectStreamTextIn::ReadPrimitiveData(Float3 &outPrimitive)
 	return true;
 }
 
+bool ObjectStreamTextIn::ReadPrimitiveData(Float4 &outPrimitive)
+{
+	float x, y, z, w;
+	if (!ReadPrimitiveData(x) || !ReadPrimitiveData(y) || !ReadPrimitiveData(z) || !ReadPrimitiveData(w))
+		return false;
+	outPrimitive = Float4(x, y, z, w);
+	return true;
+}
+
 bool ObjectStreamTextIn::ReadPrimitiveData(Double3 &outPrimitive)
 {
 	double x, y, z;
@@ -326,6 +339,15 @@ bool ObjectStreamTextIn::ReadPrimitiveData(Vec4 &outPrimitive)
 	return true;
 }
 
+bool ObjectStreamTextIn::ReadPrimitiveData(UVec4 &outPrimitive)
+{
+	uint32 x, y, z, w;
+	if (!ReadPrimitiveData(x) || !ReadPrimitiveData(y) || !ReadPrimitiveData(z) || !ReadPrimitiveData(w))
+		return false;
+	outPrimitive = UVec4(x, y, z, w);
+	return true;
+}
+
 bool ObjectStreamTextIn::ReadPrimitiveData(Quat &outPrimitive)
 {
 	float x, y, z, w;

+ 2 - 0
Jolt/ObjectStream/ObjectStreamTextIn.h

@@ -35,10 +35,12 @@ public:
 	virtual bool				ReadPrimitiveData(bool &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(String &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(Float3 &outPrimitive) override;
+	virtual bool				ReadPrimitiveData(Float4 &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(Double3 &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(Vec3 &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(DVec3 &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(Vec4 &outPrimitive) override;
+	virtual bool				ReadPrimitiveData(UVec4 &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(Quat &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(Mat44 &outPrimitive) override;
 	virtual bool				ReadPrimitiveData(DMat44 &outPrimitive) override;

+ 24 - 0
Jolt/ObjectStream/ObjectStreamTextOut.cpp

@@ -36,10 +36,12 @@ void ObjectStreamTextOut::WriteDataType(EOSDataType inType)
 	case EOSDataType::T_bool:		WriteWord("bool");			break;
 	case EOSDataType::T_String:		WriteWord("string");		break;
 	case EOSDataType::T_Float3:		WriteWord("float3");		break;
+	case EOSDataType::T_Float4:		WriteWord("float4");		break;
 	case EOSDataType::T_Double3:	WriteWord("double3");		break;
 	case EOSDataType::T_Vec3:		WriteWord("vec3");			break;
 	case EOSDataType::T_DVec3:		WriteWord("dvec3");			break;
 	case EOSDataType::T_Vec4:		WriteWord("vec4");			break;
+	case EOSDataType::T_UVec4:		WriteWord("uvec4");			break;
 	case EOSDataType::T_Quat:		WriteWord("quat");			break;
 	case EOSDataType::T_Mat44:		WriteWord("mat44");			break;
 	case EOSDataType::T_DMat44:		WriteWord("dmat44");		break;
@@ -118,6 +120,17 @@ void ObjectStreamTextOut::WritePrimitiveData(const Float3 &inPrimitive)
 	WritePrimitiveData(inPrimitive.z);
 }
 
+void ObjectStreamTextOut::WritePrimitiveData(const Float4 &inPrimitive)
+{
+	WritePrimitiveData(inPrimitive.x);
+	WriteChar(' ');
+	WritePrimitiveData(inPrimitive.y);
+	WriteChar(' ');
+	WritePrimitiveData(inPrimitive.z);
+	WriteChar(' ');
+	WritePrimitiveData(inPrimitive.w);
+}
+
 void ObjectStreamTextOut::WritePrimitiveData(const Double3 &inPrimitive)
 {
 	WritePrimitiveData(inPrimitive.x);
@@ -156,6 +169,17 @@ void ObjectStreamTextOut::WritePrimitiveData(const Vec4 &inPrimitive)
 	WritePrimitiveData(inPrimitive.GetW());
 }
 
+void ObjectStreamTextOut::WritePrimitiveData(const UVec4 &inPrimitive)
+{
+	WritePrimitiveData(inPrimitive.GetX());
+	WriteChar(' ');
+	WritePrimitiveData(inPrimitive.GetY());
+	WriteChar(' ');
+	WritePrimitiveData(inPrimitive.GetZ());
+	WriteChar(' ');
+	WritePrimitiveData(inPrimitive.GetW());
+}
+
 void ObjectStreamTextOut::WritePrimitiveData(const Quat &inPrimitive)
 {
 	WritePrimitiveData(inPrimitive.GetX());

+ 2 - 0
Jolt/ObjectStream/ObjectStreamTextOut.h

@@ -35,10 +35,12 @@ public:
 	virtual void				WritePrimitiveData(const bool &inPrimitive) override;
 	virtual void				WritePrimitiveData(const String &inPrimitive) override;
 	virtual void				WritePrimitiveData(const Float3 &inPrimitive) override;
+	virtual void				WritePrimitiveData(const Float4 &inPrimitive) override;
 	virtual void				WritePrimitiveData(const Double3 &inPrimitive) override;
 	virtual void				WritePrimitiveData(const Vec3 &inPrimitive) override;
 	virtual void				WritePrimitiveData(const DVec3 &inPrimitive) override;
 	virtual void				WritePrimitiveData(const Vec4 &inPrimitive) override;
+	virtual void				WritePrimitiveData(const UVec4 &inPrimitive) override;
 	virtual void				WritePrimitiveData(const Quat &inPrimitive) override;
 	virtual void				WritePrimitiveData(const Mat44 &inPrimitive) override;
 	virtual void				WritePrimitiveData(const DMat44 &inPrimitive) override;

+ 2 - 0
Jolt/ObjectStream/ObjectStreamTypes.h

@@ -20,5 +20,7 @@ JPH_DECLARE_PRIMITIVE(double)
 JPH_DECLARE_PRIMITIVE(DVec3)
 JPH_DECLARE_PRIMITIVE(DMat44)
 JPH_DECLARE_PRIMITIVE(Double3)
+JPH_DECLARE_PRIMITIVE(Float4)
+JPH_DECLARE_PRIMITIVE(UVec4)
 
 #undef JPH_DECLARE_PRIMITIVE

+ 9 - 1
Jolt/ObjectStream/TypeDeclarations.cpp

@@ -18,10 +18,12 @@ JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(double)		{ }
 JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(bool)			{ }
 JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(String)		{ }
 JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(Float3)		{ }
+JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(Float4)		{ }
 JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(Double3)		{ }
 JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(Vec3)			{ }
 JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(DVec3)			{ }
 JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(Vec4)			{ }
+JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(UVec4)			{ }
 JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(Quat)			{ }
 JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(Mat44)			{ }
 JPH_IMPLEMENT_RTTI_OUTSIDE_CLASS(DMat44)		{ }
@@ -47,9 +49,15 @@ JPH_IMPLEMENT_SERIALIZABLE_OUTSIDE_CLASS(Triangle)
 	JPH_ADD_ATTRIBUTE(Triangle, mUserData)
 }
 
+JPH_IMPLEMENT_SERIALIZABLE_OUTSIDE_CLASS(IndexedTriangleNoMaterial)
+{
+	JPH_ADD_ATTRIBUTE(IndexedTriangleNoMaterial, mIdx)
+}
+
 JPH_IMPLEMENT_SERIALIZABLE_OUTSIDE_CLASS(IndexedTriangle)
 {
-	JPH_ADD_ATTRIBUTE(IndexedTriangle, mIdx)
+	JPH_ADD_BASE_CLASS(IndexedTriangle, IndexedTriangleNoMaterial)
+
 	JPH_ADD_ATTRIBUTE(IndexedTriangle, mMaterialIndex)
 	JPH_ADD_ATTRIBUTE(IndexedTriangle, mUserData)
 }

+ 3 - 0
Jolt/ObjectStream/TypeDeclarations.h

@@ -22,16 +22,19 @@ JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, double);
 JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, bool);
 JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, String);
 JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, Float3);
+JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, Float4);
 JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, Double3);
 JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, Vec3);
 JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, DVec3);
 JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, Vec4);
+JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, UVec4);
 JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, Quat);
 JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, Mat44);
 JPH_DECLARE_RTTI_OUTSIDE_CLASS(JPH_EXPORT, DMat44);
 JPH_DECLARE_SERIALIZABLE_OUTSIDE_CLASS(JPH_EXPORT, Color);
 JPH_DECLARE_SERIALIZABLE_OUTSIDE_CLASS(JPH_EXPORT, AABox);
 JPH_DECLARE_SERIALIZABLE_OUTSIDE_CLASS(JPH_EXPORT, Triangle);
+JPH_DECLARE_SERIALIZABLE_OUTSIDE_CLASS(JPH_EXPORT, IndexedTriangleNoMaterial);
 JPH_DECLARE_SERIALIZABLE_OUTSIDE_CLASS(JPH_EXPORT, IndexedTriangle);
 JPH_DECLARE_SERIALIZABLE_OUTSIDE_CLASS(JPH_EXPORT, Plane);
 

+ 8 - 0
UnitTests/ObjectStream/ObjectStreamTest.cpp

@@ -32,11 +32,13 @@ public:
 	double						mDouble = 0;
 	bool						mBool = false;
 	Float3						mFloat3 = { };
+	Float4						mFloat4 = { };
 	Double3						mDouble3 = { };
 	Quat						mQuat = Quat::sIdentity();
 	Vec3						mVec3 = Vec3::sZero();
 	DVec3						mDVec3 = DVec3::sZero();
 	Vec4						mVec4 = Vec4::sZero();
+	UVec4						mUVec4 = UVec4::sZero();
 	Mat44						mMat44 = Mat44::sIdentity();
 	DMat44						mDMat44 = DMat44::sIdentity();
 	JPH::String					mString;
@@ -79,11 +81,13 @@ JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL(TestSerializableBase)
 	JPH_ADD_ATTRIBUTE(TestSerializableBase, mDouble)
 	JPH_ADD_ATTRIBUTE(TestSerializableBase, mBool)
 	JPH_ADD_ATTRIBUTE(TestSerializableBase, mFloat3)
+	JPH_ADD_ATTRIBUTE(TestSerializableBase, mFloat4)
 	JPH_ADD_ATTRIBUTE(TestSerializableBase, mDouble3)
 	JPH_ADD_ATTRIBUTE(TestSerializableBase, mQuat)
 	JPH_ADD_ATTRIBUTE(TestSerializableBase, mVec3)
 	JPH_ADD_ATTRIBUTE(TestSerializableBase, mDVec3)
 	JPH_ADD_ATTRIBUTE(TestSerializableBase, mVec4)
+	JPH_ADD_ATTRIBUTE(TestSerializableBase, mUVec4)
 	JPH_ADD_ATTRIBUTE(TestSerializableBase, mMat44)
 	JPH_ADD_ATTRIBUTE(TestSerializableBase, mDMat44)
 	JPH_ADD_ATTRIBUTE(TestSerializableBase, mString)
@@ -124,10 +128,12 @@ TEST_SUITE("ObjectStreamTest")
 		test->mDouble = DBL_EPSILON;
 		test->mBool = true;
 		test->mFloat3 = Float3(9, 10, 11);
+		test->mFloat4 = Float4(11, 9, 10, 12);
 		test->mDouble3 = Double3(10, 11, 12);
 		test->mVec3 = Vec3(6, 7, 8);
 		test->mDVec3 = DVec3(7, 8, 9);
 		test->mVec4 = Vec4(9, 10, 11, 12);
+		test->mUVec4 = UVec4(12, 11, 9, 10);
 		test->mQuat = Quat::sRotation(Vec3::sAxisX(), 0.1234f);
 		test->mMat44 = Mat44::sRotationTranslation(Quat::sRotation(Vec3::sAxisY(), 0.4567f), Vec3(13, 14, 15));
 		test->mDMat44 = DMat44::sRotationTranslation(Quat::sRotation(Vec3::sAxisY(), 0.789f), DVec3(20, 21, 22));
@@ -166,11 +172,13 @@ TEST_SUITE("ObjectStreamTest")
 		CHECK(inInput->mDouble == inOutput->mDouble);
 		CHECK(inInput->mBool == inOutput->mBool);
 		CHECK(inInput->mFloat3 == inOutput->mFloat3);
+		CHECK(inInput->mFloat4 == inOutput->mFloat4);
 		CHECK(inInput->mDouble3 == inOutput->mDouble3);
 		CHECK(inInput->mQuat == inOutput->mQuat);
 		CHECK(inInput->mVec3 == inOutput->mVec3);
 		CHECK(inInput->mDVec3 == inOutput->mDVec3);
 		CHECK(inInput->mVec4 == inOutput->mVec4);
+		CHECK(inInput->mUVec4 == inOutput->mUVec4);
 		CHECK(inInput->mMat44 == inOutput->mMat44);
 		CHECK(inInput->mDMat44 == inOutput->mDMat44);
 		CHECK(inInput->mString == inOutput->mString);