Fix missing Int2/Int3/Int4 in Variant support implementation parts

#4114
This commit is contained in:
2026-05-27 17:23:22 +02:00
parent 7c1df5c980
commit ab6b5927f8
10 changed files with 293 additions and 92 deletions
@@ -873,65 +873,41 @@ void AnimGraphExecutor::ProcessGroupParameters(Box* box, Node* node, Value& valu
switch (param->Type.Type)
{
case VariantType::Float2:
switch (box->ID)
{
case 1:
case 2:
if (box->ID >= 1 && box->ID <= 2)
value = value.AsFloat2().Raw[box->ID - 1];
break;
}
break;
case VariantType::Float3:
switch (box->ID)
{
case 1:
case 2:
case 3:
if (box->ID >= 1 && box->ID <= 3)
value = value.AsFloat3().Raw[box->ID - 1];
break;
}
break;
case VariantType::Float4:
case VariantType::Color:
switch (box->ID)
{
case 1:
case 2:
case 3:
case 4:
if (box->ID >= 1 && box->ID <= 4)
value = value.AsFloat4().Raw[box->ID - 1];
break;
}
break;
case VariantType::Double2:
switch (box->ID)
{
case 1:
case 2:
if (box->ID >= 1 && box->ID <= 2)
value = value.AsDouble2().Raw[box->ID - 1];
break;
}
break;
case VariantType::Double3:
switch (box->ID)
{
case 1:
case 2:
case 3:
if (box->ID >= 1 && box->ID <= 3)
value = value.AsDouble3().Raw[box->ID - 1];
break;
}
break;
case VariantType::Double4:
switch (box->ID)
{
case 1:
case 2:
case 3:
case 4:
if (box->ID >= 1 && box->ID <= 4)
value = value.AsDouble4().Raw[box->ID - 1];
break;
}
break;
case VariantType::Int2:
if (box->ID >= 1 && box->ID <= 2)
value = value.AsInt2().Raw[box->ID - 1];
break;
case VariantType::Int3:
if (box->ID >= 1 && box->ID <= 3)
value = value.AsInt3().Raw[box->ID - 1];
break;
case VariantType::Int4:
if (box->ID >= 1 && box->ID <= 4)
value = value.AsInt4().Raw[box->ID - 1];
break;
case VariantType::Matrix:
{
+2
View File
@@ -9,6 +9,8 @@
// Float
static_assert(sizeof(Float2) == 8, "Invalid Float2 type size.");
static_assert(sizeof(Int2) == 8, "Invalid Int2 type size.");
static_assert(sizeof(Double2) == 16, "Invalid Double2 type size.");
template<>
const Float2 Float2::Zero(0.0f);
+2
View File
@@ -13,6 +13,8 @@
// Float
static_assert(sizeof(Float3) == 12, "Invalid Float3 type size.");
static_assert(sizeof(Int3) == 12, "Invalid Int3 type size.");
static_assert(sizeof(Double3) == 24, "Invalid Double3 type size.");
template<>
const Float3 Float3::Zero(0.0f);
+2
View File
@@ -11,6 +11,8 @@
// Float
static_assert(sizeof(Float4) == 16, "Invalid Float4 type size.");
static_assert(sizeof(Int4) == 16, "Invalid Int4 type size.");
static_assert(sizeof(Double4) == 32, "Invalid Double4 type size.");
template<>
const Float4 Float4::Zero(0.0f);
+122 -8
View File
@@ -4,6 +4,7 @@
#include "Engine/Core/Collections/HashFunctions.h"
#include "Engine/Core/Collections/Dictionary.h"
#include "Engine/Content/Asset.h"
#include "Engine/Content/Deprecated.h"
#include "Engine/Core/Log.h"
#include "Engine/Core/Math/Mathd.h"
#include "Engine/Core/Math/BoundingBox.h"
@@ -3193,6 +3194,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
case VariantType::Double2:
case VariantType::Double3:
case VariantType::Double4:
case VariantType::Int2:
case VariantType::Int3:
case VariantType::Int4:
case VariantType::Enum:
return true;
default:
@@ -3216,6 +3220,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
case VariantType::Double2:
case VariantType::Double3:
case VariantType::Double4:
case VariantType::Int2:
case VariantType::Int3:
case VariantType::Int4:
case VariantType::Enum:
return true;
default:
@@ -3239,6 +3246,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
case VariantType::Double2:
case VariantType::Double3:
case VariantType::Double4:
case VariantType::Int2:
case VariantType::Int3:
case VariantType::Int4:
case VariantType::Enum:
return true;
default:
@@ -3262,6 +3272,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
case VariantType::Double2:
case VariantType::Double3:
case VariantType::Double4:
case VariantType::Int2:
case VariantType::Int3:
case VariantType::Int4:
case VariantType::Enum:
return true;
default:
@@ -3285,6 +3298,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
case VariantType::Double2:
case VariantType::Double3:
case VariantType::Double4:
case VariantType::Int2:
case VariantType::Int3:
case VariantType::Int4:
case VariantType::Enum:
return true;
default:
@@ -3308,6 +3324,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
case VariantType::Double2:
case VariantType::Double3:
case VariantType::Double4:
case VariantType::Int2:
case VariantType::Int3:
case VariantType::Int4:
case VariantType::Enum:
return true;
default:
@@ -3331,6 +3350,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
case VariantType::Double2:
case VariantType::Double3:
case VariantType::Double4:
case VariantType::Int2:
case VariantType::Int3:
case VariantType::Int4:
case VariantType::Enum:
return true;
default:
@@ -3354,6 +3376,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
case VariantType::Double2:
case VariantType::Double3:
case VariantType::Double4:
case VariantType::Int2:
case VariantType::Int3:
case VariantType::Int4:
case VariantType::Enum:
return true;
default:
@@ -3377,6 +3402,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
case VariantType::Double2:
case VariantType::Double3:
case VariantType::Double4:
case VariantType::Int2:
case VariantType::Int3:
case VariantType::Int4:
case VariantType::Enum:
return true;
default:
@@ -3520,6 +3548,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
return Variant(Double3(v.AsBool ? 1.0 : 0.0));
case VariantType::Double4:
return Variant(Double4(v.AsBool ? 1.0 : 0.0));
case VariantType::Int2:
return Variant(Int2(v.AsBool ? 1 : 0));
case VariantType::Int3:
return Variant(Int3(v.AsBool ? 1 : 0));
case VariantType::Int4:
return Variant(Int4(v.AsBool ? 1 : 0));
case VariantType::Enum:
return Enum(to, v.AsBool ? 1 : 0);
default: ;
@@ -3558,6 +3592,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
return Variant(Double3((double)v.AsInt16));
case VariantType::Double4:
return Variant(Double4((double)v.AsInt16));
case VariantType::Int2:
return Variant(Int2(v.AsInt16));
case VariantType::Int3:
return Variant(Int3(v.AsInt16));
case VariantType::Int4:
return Variant(Int4(v.AsInt16));
case VariantType::Enum:
return Enum(to, (int64)v.AsInt16);
default: ;
@@ -3588,6 +3628,18 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
return Variant(Float3((float)v.AsInt));
case VariantType::Float4:
return Variant(Float4((float)v.AsInt));
case VariantType::Double2:
return Variant(Double2((double)v.AsInt));
case VariantType::Double3:
return Variant(Double3((double)v.AsInt));
case VariantType::Double4:
return Variant(Double4((double)v.AsInt));
case VariantType::Int2:
return Variant(Int2(v.AsInt));
case VariantType::Int3:
return Variant(Int3(v.AsInt));
case VariantType::Int4:
return Variant(Int4(v.AsInt));
case VariantType::Color:
return Variant(Color((float)v.AsInt));
case VariantType::Enum:
@@ -3628,6 +3680,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
return Variant(Double3((double)v.AsUint16));
case VariantType::Double4:
return Variant(Double4((double)v.AsUint16));
case VariantType::Int2:
return Variant(Int2(v.AsUint16));
case VariantType::Int3:
return Variant(Int3(v.AsUint16));
case VariantType::Int4:
return Variant(Int4(v.AsUint16));
case VariantType::Enum:
return Enum(to, (int64)v.AsUint16);
default: ;
@@ -3666,6 +3724,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
return Variant(Double3((double)v.AsUint));
case VariantType::Double4:
return Variant(Double4((double)v.AsUint));
case VariantType::Int2:
return Variant(Int2((int32)v.AsUint));
case VariantType::Int3:
return Variant(Int3((int32)v.AsUint));
case VariantType::Int4:
return Variant(Int4((int32)v.AsUint));
case VariantType::Enum:
return Enum(to, (int64)v.AsUint);
default: ;
@@ -3704,6 +3768,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
return Variant(Double3((double)v.AsInt64));
case VariantType::Double4:
return Variant(Double4((double)v.AsInt64));
case VariantType::Int2:
return Variant(Int2((int32)v.AsInt64));
case VariantType::Int3:
return Variant(Int3((int32)v.AsInt64));
case VariantType::Int4:
return Variant(Int4((int32)v.AsInt64));
case VariantType::Enum:
return Enum(to, (int64)v.AsInt64);
default: ;
@@ -3723,25 +3793,31 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
case VariantType::Uint16:
return Variant((uint16)v.AsUint16);
case VariantType::Uint:
return Variant((uint32)v.AsUint);
return Variant((uint32)v.AsUint64);
case VariantType::Float:
return Variant((float)v.AsUint64);
case VariantType::Double:
return Variant((double)v.AsUint64);
case VariantType::Float2:
return Variant(Float2((float)v.AsInt));
return Variant(Float2((float)v.AsUint64));
case VariantType::Float3:
return Variant(Float3((float)v.AsInt));
return Variant(Float3((float)v.AsUint64));
case VariantType::Float4:
return Variant(Float4((float)v.AsInt));
return Variant(Float4((float)v.AsUint64));
case VariantType::Color:
return Variant(Color((float)v.AsInt));
return Variant(Color((float)v.AsUint64));
case VariantType::Double2:
return Variant(Double2((double)v.AsInt));
return Variant(Double2((double)v.AsUint64));
case VariantType::Double3:
return Variant(Double3((double)v.AsInt));
return Variant(Double3((double)v.AsUint64));
case VariantType::Double4:
return Variant(Double4((double)v.AsInt));
return Variant(Double4((double)v.AsUint64));
case VariantType::Int2:
return Variant(Int2((int32)v.AsUint64));
case VariantType::Int3:
return Variant(Int3((int32)v.AsUint64));
case VariantType::Int4:
return Variant(Int4((int32)v.AsUint64));
case VariantType::Enum:
return Enum(to, (int64)v.AsInt);
default: ;
@@ -3780,6 +3856,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
return Variant(Double3(v.AsFloat));
case VariantType::Double4:
return Variant(Double4(v.AsFloat));
case VariantType::Int2:
return Variant(Int2((int32)v.AsFloat));
case VariantType::Int3:
return Variant(Int3((int32)v.AsFloat));
case VariantType::Int4:
return Variant(Int4((int32)v.AsFloat));
case VariantType::Enum:
return Enum(to, (int64)v.AsFloat);
default: ;
@@ -3818,6 +3900,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
return Variant(Double3(v.AsDouble));
case VariantType::Double4:
return Variant(Double4(v.AsDouble));
case VariantType::Int2:
return Variant(Int2((int32)v.AsFloat));
case VariantType::Int3:
return Variant(Int3((int32)v.AsFloat));
case VariantType::Int4:
return Variant(Int4((int32)v.AsFloat));
case VariantType::Enum:
return Enum(to, (int64)v.AsDouble);
default: ;
@@ -4246,6 +4334,7 @@ void Variant::AllocStructure()
AsBlob.Length = 2;
AsBlob.Data = Allocator::Allocate(AsBlob.Length);
*((int16*)AsBlob.Data) = 0;
MARK_CONTENT_DEPRECATED();
}
#if USE_CSHARP
else if (const auto mclass = Scripting::FindClass(typeName))
@@ -4371,6 +4460,13 @@ uint32 GetHash(const Variant& key)
return GetHash((void*)key.AsObject);
case VariantType::Structure:
case VariantType::Blob:
case VariantType::Transform:
case VariantType::Matrix:
#if USE_LARGE_WORLDS
case VariantType::BoundingSphere:
case VariantType::BoundingBox:
case VariantType::Ray:
#endif
return Crc::MemCrc32(key.AsBlob.Data, key.AsBlob.Length);
case VariantType::Asset:
return GetHash((void*)key.AsAsset);
@@ -4380,6 +4476,24 @@ uint32 GetHash(const Variant& key)
return GetHash(*(Guid*)key.AsData);
case VariantType::Typename:
return GetHash((const char*)key.AsBlob.Data);
case VariantType::Float2:
return GetHash(*(const Float2*)key.AsData);
case VariantType::Float3:
return GetHash(*(const Float3*)key.AsData);
case VariantType::Float4:
return GetHash(*(const Float4*)key.AsData);
case VariantType::Int2:
return GetHash(*(const Int2*)key.AsData);
case VariantType::Int3:
return GetHash(*(const Int3*)key.AsData);
case VariantType::Int4:
return GetHash(*(const Int4*)key.AsData);
case VariantType::Double2:
return GetHash(*(const Double2*)key.AsData);
case VariantType::Double3:
return GetHash(*(const Double3*)key.AsData);
case VariantType::Double4:
return GetHash(*(const Double4*)key.AsBlob.Data);
case VariantType::ManagedObject:
#if USE_CSHARP
return key.MANAGED_GC_HANDLE ? (uint32)MCore::Object::GetHashCode(MCore::GCHandle::GetTarget(key.MANAGED_GC_HANDLE)) : 0;
@@ -460,6 +460,18 @@ void MaterialParameter::Bind(BindMeta& meta) const
ASSERT_LOW_LAYER(meta.Constants.Get() && meta.Constants.Length() >= (int32)(_offset + sizeof(Float4)));
*((Float4*)(meta.Constants.Get() + _offset)) = (Float4)e->Value.AsDouble4();
break;
case VariantType::Int2:
ASSERT_LOW_LAYER(meta.Constants.Get() && meta.Constants.Length() >= (int32)(_offset + sizeof(Int2)));
*((Int2*)(meta.Constants.Get() + _offset)) = (Int2)e->Value.AsInt2();
break;
case VariantType::Int3:
ASSERT_LOW_LAYER(meta.Constants.Get() && meta.Constants.Length() >= (int32)(_offset + sizeof(Int3)));
*((Int3*)(meta.Constants.Get() + _offset)) = (Int3)e->Value.AsInt3();
break;
case VariantType::Int4:
ASSERT_LOW_LAYER(meta.Constants.Get() && meta.Constants.Length() >= (int32)(_offset + sizeof(Int4)));
*((Int4*)(meta.Constants.Get() + _offset)) = (Int4)e->Value.AsInt4();
break;
default: ;
}
}
@@ -27,65 +27,41 @@ void ParticleEmitterGraphCPUExecutor::ProcessGroupParameters(Box* box, Node* nod
switch (param->Type.Type)
{
case VariantType::Float2:
switch (box->ID)
{
case 1:
case 2:
if (box->ID >= 1 && box->ID <= 2)
value = value.AsFloat2().Raw[box->ID - 1];
break;
}
break;
case VariantType::Float3:
switch (box->ID)
{
case 1:
case 2:
case 3:
if (box->ID >= 1 && box->ID <= 3)
value = value.AsFloat3().Raw[box->ID - 1];
break;
}
break;
case VariantType::Float4:
case VariantType::Color:
switch (box->ID)
{
case 1:
case 2:
case 3:
case 4:
if (box->ID >= 1 && box->ID <= 4)
value = value.AsFloat4().Raw[box->ID - 1];
break;
}
break;
case VariantType::Double2:
switch (box->ID)
{
case 1:
case 2:
if (box->ID >= 1 && box->ID <= 2)
value = value.AsDouble2().Raw[box->ID - 1];
break;
}
break;
case VariantType::Double3:
switch (box->ID)
{
case 1:
case 2:
case 3:
if (box->ID >= 1 && box->ID <= 3)
value = value.AsDouble3().Raw[box->ID - 1];
break;
}
break;
case VariantType::Double4:
switch (box->ID)
{
case 1:
case 2:
case 3:
case 4:
if (box->ID >= 1 && box->ID <= 4)
value = value.AsDouble4().Raw[box->ID - 1];
break;
}
break;
case VariantType::Int2:
if (box->ID >= 1 && box->ID <= 2)
value = value.AsInt2().Raw[box->ID - 1];
break;
case VariantType::Int3:
if (box->ID >= 1 && box->ID <= 3)
value = value.AsInt3().Raw[box->ID - 1];
break;
case VariantType::Int4:
if (box->ID >= 1 && box->ID <= 4)
value = value.AsInt4().Raw[box->ID - 1];
break;
case VariantType::Matrix:
{
@@ -609,6 +609,12 @@ MObject* MUtils::BoxVariant(const Variant& value)
return MCore::Object::Box((void*)&value.AsData, Double3::TypeInitializer.GetClass());
case VariantType::Double4:
return MCore::Object::Box((void*)&value.AsData, Double4::TypeInitializer.GetClass());
case VariantType::Int2:
return MCore::Object::Box((void*)&value.AsData, Int2::TypeInitializer.GetClass());
case VariantType::Int3:
return MCore::Object::Box((void*)&value.AsData, Int3::TypeInitializer.GetClass());
case VariantType::Int4:
return MCore::Object::Box((void*)&value.AsData, Int4::TypeInitializer.GetClass());
case VariantType::Color:
return MCore::Object::Box((void*)&value.AsData, stdTypes.ColorClass);
case VariantType::Guid:
@@ -889,6 +895,12 @@ MClass* MUtils::GetClass(const VariantType& value)
return Double3::TypeInitializer.GetClass();
case VariantType::Double4:
return Double4::TypeInitializer.GetClass();
case VariantType::Int2:
return Int2::TypeInitializer.GetClass();
case VariantType::Int3:
return Int3::TypeInitializer.GetClass();
case VariantType::Int4:
return Int4::TypeInitializer.GetClass();
case VariantType::Color:
return Color::TypeInitializer.GetClass();
case VariantType::Guid:
@@ -979,6 +991,12 @@ MClass* MUtils::GetClass(const Variant& value)
return Double3::TypeInitializer.GetClass();
case VariantType::Double4:
return Double4::TypeInitializer.GetClass();
case VariantType::Int2:
return Int2::TypeInitializer.GetClass();
case VariantType::Int3:
return Int3::TypeInitializer.GetClass();
case VariantType::Int4:
return Int4::TypeInitializer.GetClass();
case VariantType::Color:
return stdTypes.ColorClass;
case VariantType::Guid:
@@ -1148,6 +1166,9 @@ void* MUtils::VariantToManagedArgPtr(Variant& value, MType* type, bool& failed)
CASE_IN_BUILD_TYPE(Double2, AsData);
CASE_IN_BUILD_TYPE(Double3, AsData);
CASE_IN_BUILD_TYPE(Double4, AsBlob.Data);
CASE_IN_BUILD_TYPE(Int2, AsData);
CASE_IN_BUILD_TYPE(Int3, AsData);
CASE_IN_BUILD_TYPE(Int4, AsData);
#undef CASE_IN_BUILD_TYPE
if (klass->IsValueType())
{
+6
View File
@@ -288,12 +288,15 @@ void ReadStream::Read(Variant& data)
break;
}
case VariantType::Float2:
case VariantType::Int2:
ReadBytes(&data.AsData, sizeof(Float2));
break;
case VariantType::Float3:
case VariantType::Int3:
ReadBytes(&data.AsData, sizeof(Float3));
break;
case VariantType::Float4:
case VariantType::Int4:
ReadBytes(&data.AsData, sizeof(Float4));
break;
case VariantType::Double2:
@@ -687,12 +690,15 @@ void WriteStream::Write(const Variant& data)
Write(id);
break;
case VariantType::Float2:
case VariantType::Int2:
WriteBytes(data.AsData, sizeof(Float2));
break;
case VariantType::Float3:
case VariantType::Int3:
WriteBytes(data.AsData, sizeof(Float3));
break;
case VariantType::Float4:
case VariantType::Int4:
WriteBytes(data.AsData, sizeof(Float4));
break;
case VariantType::Double2:
+90
View File
@@ -256,6 +256,33 @@ void GraphUtilities::ApplySomeMathHere(Variant& v, Variant& a, MathOp1 op)
vv.W = (double)op((float)aa.W);
break;
}
case VariantType::Int2:
{
Int2& vv = *(Int2*)v.AsData;
const Int2& aa = *(const Int2*)a.AsData;
vv.X = (int32)op((float)aa.X);
vv.Y = (int32)op((float)aa.Y);
break;
}
case VariantType::Int3:
{
Int3& vv = *(Int3*)v.AsData;
const Int3& aa = *(const Int3*)a.AsData;
vv.X = (int32)op((float)aa.X);
vv.Y = (int32)op((float)aa.Y);
vv.Z = (int32)op((float)aa.Z);
break;
}
case VariantType::Int4:
{
Int4& vv = *(Int4*)v.AsData;
const Int4& aa = *(const Int4*)a.AsData;
vv.X = (int32)op((float)aa.X);
vv.Y = (int32)op((float)aa.Y);
vv.Z = (int32)op((float)aa.Z);
vv.W = (int32)op((float)aa.W);
break;
}
case VariantType::Quaternion:
{
Quaternion& vv = *(Quaternion*)v.AsData;
@@ -381,6 +408,36 @@ void GraphUtilities::ApplySomeMathHere(Variant& v, Variant& a, Variant& b, MathO
vv.W = (double)op((float)aa.W, (float)bb.W);
break;
}
case VariantType::Int2:
{
Int2& vv = *(Int2*)v.AsData;
const Int2& aa = *(const Int2*)a.AsData;
const Int2& bb = *(const Int2*)b.AsData;
vv.X = (int32)op((float)aa.X, (float)bb.X);
vv.Y = (int32)op((float)aa.Y, (float)bb.Y);
break;
}
case VariantType::Int3:
{
Int3& vv = *(Int3*)v.AsData;
const Int3& aa = *(const Int3*)a.AsData;
const Int3& bb = *(const Int3*)b.AsData;
vv.X = (int32)op((float)aa.X, (float)bb.X);
vv.Y = (int32)op((float)aa.Y, (float)bb.Y);
vv.Z = (int32)op((float)aa.Z, (float)bb.Z);
break;
}
case VariantType::Int4:
{
Int4& vv = *(Int4*)v.AsData;
const Int4& aa = *(const Int4*)a.AsData;
const Int4& bb = *(const Int4*)b.AsData;
vv.X = (int32)op((float)aa.X, (float)bb.X);
vv.Y = (int32)op((float)aa.Y, (float)bb.Y);
vv.Z = (int32)op((float)aa.Z, (float)bb.Z);
vv.W = (int32)op((float)aa.W, (float)bb.W);
break;
}
case VariantType::Quaternion:
{
Quaternion& vv = *(Quaternion*)v.AsData;
@@ -499,6 +556,39 @@ void GraphUtilities::ApplySomeMathHere(Variant& v, Variant& a, Variant& b, Varia
vv.W = (double)op((float)aa.W, (float)bb.W, (float)cc.W);
break;
}
case VariantType::Int2:
{
Int2& vv = *(Int2*)v.AsData;
const Int3& aa = *(const Int2*)a.AsData;
const Int3& bb = *(const Int2*)b.AsData;
const Int3& cc = *(const Int2*)c.AsData;
vv.X = (int32)op((float)aa.X, (float)bb.X, (float)cc.X);
vv.Y = (int32)op((float)aa.Y, (float)bb.Y, (float)cc.Y);
break;
}
case VariantType::Int3:
{
Int3& vv = *(Int3*)v.AsData;
const Int3& aa = *(const Int3*)a.AsData;
const Int3& bb = *(const Int3*)b.AsData;
const Int3& cc = *(const Int3*)c.AsData;
vv.X = (int32)op((float)aa.X, (float)bb.X, (float)cc.X);
vv.Y = (int32)op((float)aa.Y, (float)bb.Y, (float)cc.Y);
vv.Z = (int32)op((float)aa.Z, (float)bb.Z, (float)cc.Z);
break;
}
case VariantType::Int4:
{
Int4& vv = *(Int4*)v.AsData;
const Int4& aa = *(const Int4*)a.AsData;
const Int4& bb = *(const Int4*)b.AsData;
const Int4& cc = *(const Int4*)c.AsData;
vv.X = (int32)op((float)aa.X, (float)bb.X, (float)cc.X);
vv.Y = (int32)op((float)aa.Y, (float)bb.Y, (float)cc.Y);
vv.Z = (int32)op((float)aa.Z, (float)bb.Z, (float)cc.Z);
vv.W = (int32)op((float)aa.W, (float)bb.W, (float)cc.W);
break;
}
case VariantType::Quaternion:
{
Quaternion& vv = *(Quaternion*)v.AsData;