Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -160,6 +160,10 @@ const char* VariantType::GetTypeName() const
|
||||
return "System.Void";
|
||||
case Bool:
|
||||
return "System.Boolean";
|
||||
case Int16:
|
||||
return "System.Int16";
|
||||
case Uint16:
|
||||
return "System.UInt16";
|
||||
case Int:
|
||||
return "System.Int32";
|
||||
case Uint:
|
||||
@@ -225,6 +229,12 @@ const char* VariantType::GetTypeName() const
|
||||
case Bool:
|
||||
result = TEXT("Bool");
|
||||
break;
|
||||
case Int16:
|
||||
result = TEXT("Int16");
|
||||
break;
|
||||
case Uint16:
|
||||
result = TEXT("Uint16");
|
||||
break;
|
||||
case Int:
|
||||
result = TEXT("Int");
|
||||
break;
|
||||
@@ -417,6 +427,18 @@ Variant::Variant(bool v)
|
||||
AsBool = v;
|
||||
}
|
||||
|
||||
Variant::Variant(int16 v)
|
||||
: Type(VariantType::Int16)
|
||||
{
|
||||
AsInt16 = v;
|
||||
}
|
||||
|
||||
Variant::Variant(uint16 v)
|
||||
: Type(VariantType::Uint16)
|
||||
{
|
||||
AsUint16 = v;
|
||||
}
|
||||
|
||||
Variant::Variant(int32 v)
|
||||
: Type(VariantType::Int)
|
||||
{
|
||||
@@ -896,6 +918,10 @@ bool Variant::operator==(const Variant& other) const
|
||||
return true;
|
||||
case VariantType::Bool:
|
||||
return AsBool == other.AsBool;
|
||||
case VariantType::Int16:
|
||||
return AsInt16 == other.AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return AsUint16 == other.AsUint16;
|
||||
case VariantType::Int:
|
||||
return AsInt == other.AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1004,6 +1030,10 @@ bool Variant::operator<(const Variant& other) const
|
||||
return true;
|
||||
case VariantType::Bool:
|
||||
return AsBool < other.AsBool;
|
||||
case VariantType::Int16:
|
||||
return AsInt16 < other.AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return AsUint16 < other.AsUint16;
|
||||
case VariantType::Int:
|
||||
return AsInt < other.AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1040,6 +1070,10 @@ Variant::operator bool() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return AsBool;
|
||||
case VariantType::Int16:
|
||||
return AsInt16 != 0;
|
||||
case VariantType::Uint16:
|
||||
return AsUint16 != 0;
|
||||
case VariantType::Int:
|
||||
return AsInt != 0;
|
||||
case VariantType::Uint:
|
||||
@@ -1075,6 +1109,10 @@ Variant::operator Char() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return AsBool ? 1 : 0;
|
||||
case VariantType::Int16:
|
||||
return (Char)AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return (Char)AsUint16;
|
||||
case VariantType::Int:
|
||||
return (Char)AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1101,6 +1139,10 @@ Variant::operator int8() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return AsBool ? 1 : 0;
|
||||
case VariantType::Int16:
|
||||
return (int8)AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return (int8)AsUint16;
|
||||
case VariantType::Int:
|
||||
return (int8)AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1127,6 +1169,10 @@ Variant::operator int16() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return AsBool ? 1 : 0;
|
||||
case VariantType::Int16:
|
||||
return AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return (int16)AsUint16;
|
||||
case VariantType::Int:
|
||||
return (int16)AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1153,6 +1199,10 @@ Variant::operator int32() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return AsBool ? 1 : 0;
|
||||
case VariantType::Int16:
|
||||
return (int32)AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return (int32)AsUint16;
|
||||
case VariantType::Int:
|
||||
return AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1179,6 +1229,10 @@ Variant::operator int64() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return AsBool ? 1 : 0;
|
||||
case VariantType::Int16:
|
||||
return (int64)AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return (int64)AsUint16;
|
||||
case VariantType::Int:
|
||||
return (int64)AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1205,6 +1259,10 @@ Variant::operator uint8() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return AsBool ? 1 : 0;
|
||||
case VariantType::Int16:
|
||||
return (uint8)AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return (uint8)AsUint16;
|
||||
case VariantType::Int:
|
||||
return (uint8)AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1231,6 +1289,10 @@ Variant::operator uint16() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return AsBool ? 1 : 0;
|
||||
case VariantType::Int16:
|
||||
return (uint16)AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return AsUint16;
|
||||
case VariantType::Int:
|
||||
return (uint16)AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1257,6 +1319,10 @@ Variant::operator uint32() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return AsBool ? 1 : 0;
|
||||
case VariantType::Int16:
|
||||
return (uint32)AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return (uint32)AsUint16;
|
||||
case VariantType::Int:
|
||||
return (uint32)AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1283,6 +1349,10 @@ Variant::operator uint64() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return AsBool ? 1 : 0;
|
||||
case VariantType::Int16:
|
||||
return (uint64)AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return (uint64)AsUint16;
|
||||
case VariantType::Int:
|
||||
return (uint64)AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1309,6 +1379,10 @@ Variant::operator float() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return AsBool ? 1.0f : 0.0f;
|
||||
case VariantType::Int16:
|
||||
return (float)AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return (float)AsUint16;
|
||||
case VariantType::Int:
|
||||
return (float)AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1333,6 +1407,10 @@ Variant::operator double() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return AsBool ? 1.0 : 0.0;
|
||||
case VariantType::Int16:
|
||||
return (double)AsInt16;
|
||||
case VariantType::Uint16:
|
||||
return (double)AsUint16;
|
||||
case VariantType::Int:
|
||||
return (double)AsInt;
|
||||
case VariantType::Uint:
|
||||
@@ -1423,6 +1501,10 @@ Variant::operator Vector2() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Vector2(AsBool ? 1.0f : 0.0f);
|
||||
case VariantType::Int16:
|
||||
return Vector2((float)AsInt16);
|
||||
case VariantType::Uint16:
|
||||
return Vector2((float)AsUint16);
|
||||
case VariantType::Int:
|
||||
return Vector2((float)AsInt);
|
||||
case VariantType::Uint:
|
||||
@@ -1459,6 +1541,10 @@ Variant::operator Vector3() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Vector3(AsBool ? 1.0f : 0.0f);
|
||||
case VariantType::Int16:
|
||||
return Vector3((float)AsInt16);
|
||||
case VariantType::Uint16:
|
||||
return Vector3((float)AsUint16);
|
||||
case VariantType::Int:
|
||||
return Vector3((float)AsInt);
|
||||
case VariantType::Uint:
|
||||
@@ -1495,6 +1581,10 @@ Variant::operator Vector4() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Vector4(AsBool ? 1.0f : 0.0f);
|
||||
case VariantType::Int16:
|
||||
return Vector4((float)AsInt16);
|
||||
case VariantType::Uint16:
|
||||
return Vector4((float)AsUint16);
|
||||
case VariantType::Int:
|
||||
return Vector4((float)AsInt);
|
||||
case VariantType::Uint:
|
||||
@@ -1531,6 +1621,10 @@ Variant::operator Int2() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Int2((int32)(AsBool ? 1.0f : 0.0f));
|
||||
case VariantType::Int16:
|
||||
return Int2((int32)AsInt16);
|
||||
case VariantType::Uint16:
|
||||
return Int2((int32)AsUint16);
|
||||
case VariantType::Int:
|
||||
return Int2((int32)AsInt);
|
||||
case VariantType::Uint:
|
||||
@@ -1573,6 +1667,10 @@ Variant::operator Int3() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Int3((int32)(AsBool ? 1 : 0));
|
||||
case VariantType::Int16:
|
||||
return Int3((int32)AsInt16);
|
||||
case VariantType::Uint16:
|
||||
return Int3((int32)AsUint16);
|
||||
case VariantType::Int:
|
||||
return Int3((int32)AsInt);
|
||||
case VariantType::Uint:
|
||||
@@ -1615,6 +1713,10 @@ Variant::operator Int4() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Int4((int32)(AsBool ? 1 : 0));
|
||||
case VariantType::Int16:
|
||||
return Int4(AsInt16);
|
||||
case VariantType::Uint16:
|
||||
return Int4((int32)AsUint16);
|
||||
case VariantType::Int:
|
||||
return Int4(AsInt);
|
||||
case VariantType::Uint:
|
||||
@@ -1657,6 +1759,10 @@ Variant::operator Color() const
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Color(AsBool ? 1.0f : 0.0f);
|
||||
case VariantType::Int16:
|
||||
return Color((float)AsInt16);
|
||||
case VariantType::Uint16:
|
||||
return Color((float)AsUint16);
|
||||
case VariantType::Int:
|
||||
return Color((float)AsInt);
|
||||
case VariantType::Uint:
|
||||
@@ -2139,6 +2245,10 @@ String Variant::ToString() const
|
||||
return TEXT("null");
|
||||
case VariantType::Bool:
|
||||
return AsBool ? TEXT("true") : TEXT("false");
|
||||
case VariantType::Int16:
|
||||
return StringUtils::ToString(AsInt16);
|
||||
case VariantType::Uint16:
|
||||
return StringUtils::ToString(AsUint16);
|
||||
case VariantType::Int:
|
||||
return StringUtils::ToString(AsInt);
|
||||
case VariantType::Uint:
|
||||
@@ -2207,6 +2317,8 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
|
||||
case VariantType::Bool:
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Int16:
|
||||
case VariantType::Uint16:
|
||||
case VariantType::Int:
|
||||
case VariantType::Uint:
|
||||
case VariantType::Int64:
|
||||
@@ -2221,10 +2333,50 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
case VariantType::Int16:
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
case VariantType::Int:
|
||||
case VariantType::Int64:
|
||||
case VariantType::Uint16:
|
||||
case VariantType::Uint:
|
||||
case VariantType::Uint64:
|
||||
case VariantType::Float:
|
||||
case VariantType::Double:
|
||||
case VariantType::Vector2:
|
||||
case VariantType::Vector3:
|
||||
case VariantType::Vector4:
|
||||
case VariantType::Color:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
case VariantType::Int:
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
case VariantType::Int16:
|
||||
case VariantType::Int64:
|
||||
case VariantType::Uint16:
|
||||
case VariantType::Uint:
|
||||
case VariantType::Uint64:
|
||||
case VariantType::Float:
|
||||
case VariantType::Double:
|
||||
case VariantType::Vector2:
|
||||
case VariantType::Vector3:
|
||||
case VariantType::Vector4:
|
||||
case VariantType::Color:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
case VariantType::Uint16:
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
case VariantType::Int16:
|
||||
case VariantType::Int:
|
||||
case VariantType::Int64:
|
||||
case VariantType::Uint:
|
||||
case VariantType::Uint64:
|
||||
@@ -2242,7 +2394,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
case VariantType::Uint16:
|
||||
case VariantType::Uint64:
|
||||
case VariantType::Int16:
|
||||
case VariantType::Int:
|
||||
case VariantType::Int64:
|
||||
case VariantType::Float:
|
||||
@@ -2259,7 +2413,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
case VariantType::Int16:
|
||||
case VariantType::Int:
|
||||
case VariantType::Uint16:
|
||||
case VariantType::Uint:
|
||||
case VariantType::Uint64:
|
||||
case VariantType::Float:
|
||||
@@ -2276,7 +2432,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
case VariantType::Uint16:
|
||||
case VariantType::Uint:
|
||||
case VariantType::Int16:
|
||||
case VariantType::Int:
|
||||
case VariantType::Int64:
|
||||
case VariantType::Float:
|
||||
@@ -2293,7 +2451,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
case VariantType::Int16:
|
||||
case VariantType::Int:
|
||||
case VariantType::Uint16:
|
||||
case VariantType::Uint:
|
||||
case VariantType::Int64:
|
||||
case VariantType::Uint64:
|
||||
@@ -2310,8 +2470,10 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
case VariantType::Int16:
|
||||
case VariantType::Int:
|
||||
case VariantType::Uint:
|
||||
case VariantType::Uint16:
|
||||
case VariantType::Int64:
|
||||
case VariantType::Uint64:
|
||||
case VariantType::Float:
|
||||
@@ -2327,7 +2489,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
case VariantType::Uint16:
|
||||
case VariantType::Uint:
|
||||
case VariantType::Int16:
|
||||
case VariantType::Int:
|
||||
case VariantType::Int64:
|
||||
case VariantType::Float:
|
||||
@@ -2343,7 +2507,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
case VariantType::Uint16:
|
||||
case VariantType::Uint:
|
||||
case VariantType::Int16:
|
||||
case VariantType::Int:
|
||||
case VariantType::Int64:
|
||||
case VariantType::Float:
|
||||
@@ -2359,7 +2525,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
case VariantType::Uint16:
|
||||
case VariantType::Uint:
|
||||
case VariantType::Int16:
|
||||
case VariantType::Int:
|
||||
case VariantType::Int64:
|
||||
case VariantType::Float:
|
||||
@@ -2375,7 +2543,9 @@ bool Variant::CanCast(const Variant& v, const VariantType& to)
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
case VariantType::Uint16:
|
||||
case VariantType::Uint:
|
||||
case VariantType::Int16:
|
||||
case VariantType::Int:
|
||||
case VariantType::Int64:
|
||||
case VariantType::Float:
|
||||
@@ -2401,6 +2571,10 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
|
||||
case VariantType::Bool:
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Int16: // No portable literal suffix for short ( Available in MSVC but Undocumented : i16 )
|
||||
return Variant((int16)(v.AsBool ? 1 : 0));
|
||||
case VariantType::Uint16: // No portable literal suffix for short ( Available in MSVC but Undocumented : ui16 )
|
||||
return Variant((uint16)(v.AsBool ? 1 : 0));
|
||||
case VariantType::Int:
|
||||
return Variant(v.AsBool ? 1 : 0);
|
||||
case VariantType::Uint:
|
||||
@@ -2424,17 +2598,51 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
|
||||
default: ;
|
||||
}
|
||||
break;
|
||||
case VariantType::Int16:
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Variant(v.AsInt != 0);
|
||||
case VariantType::Int:
|
||||
return Variant((int32)v.AsInt16);
|
||||
case VariantType::Int64:
|
||||
return Variant((int64)v.AsInt16);
|
||||
case VariantType::Uint16:
|
||||
return Variant((uint16)v.AsInt16);
|
||||
case VariantType::Uint:
|
||||
return Variant((uint32)v.AsInt16);
|
||||
case VariantType::Uint64:
|
||||
return Variant((uint64)v.AsInt16);
|
||||
case VariantType::Float:
|
||||
return Variant((float)v.AsInt16);
|
||||
case VariantType::Double:
|
||||
return Variant((double)v.AsInt16);
|
||||
case VariantType::Vector2:
|
||||
return Variant(Vector2((float)v.AsInt16));
|
||||
case VariantType::Vector3:
|
||||
return Variant(Vector3((float)v.AsInt16));
|
||||
case VariantType::Vector4:
|
||||
return Variant(Vector4((float)v.AsInt16));
|
||||
case VariantType::Color:
|
||||
return Variant(Color((float)v.AsInt16));
|
||||
default: ;
|
||||
}
|
||||
break;
|
||||
case VariantType::Int:
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Variant(v.AsInt != 0);
|
||||
case VariantType::Int16:
|
||||
return Variant((int16)v.AsInt);
|
||||
case VariantType::Int64:
|
||||
return Variant((int64)v.AsUint);
|
||||
return Variant((int64)v.AsInt);
|
||||
case VariantType::Uint16:
|
||||
return Variant((uint16)v.AsInt);
|
||||
case VariantType::Uint:
|
||||
return Variant((uint32)v.AsInt);
|
||||
case VariantType::Uint64:
|
||||
return Variant((uint64)v.AsUint);
|
||||
return Variant((uint64)v.AsInt);
|
||||
case VariantType::Float:
|
||||
return Variant((float)v.AsInt);
|
||||
case VariantType::Double:
|
||||
@@ -2450,15 +2658,49 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
|
||||
default: ;
|
||||
}
|
||||
break;
|
||||
case VariantType::Uint16:
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Variant(v.AsUint16 != 0);
|
||||
case VariantType::Int16:
|
||||
return Variant((int16)v.AsUint16);
|
||||
case VariantType::Int:
|
||||
return Variant((int32)v.AsUint16);
|
||||
case VariantType::Int64:
|
||||
return Variant((int64)v.AsUint16);
|
||||
case VariantType::Uint16:
|
||||
return Variant((uint16)v.AsUint16);
|
||||
case VariantType::Uint64:
|
||||
return Variant((uint64)v.AsUint16);
|
||||
case VariantType::Float:
|
||||
return Variant((float)v.AsUint16);
|
||||
case VariantType::Double:
|
||||
return Variant((double)v.AsUint16);
|
||||
case VariantType::Vector2:
|
||||
return Variant(Vector2((float)v.AsUint16));
|
||||
case VariantType::Vector3:
|
||||
return Variant(Vector3((float)v.AsUint16));
|
||||
case VariantType::Vector4:
|
||||
return Variant(Vector4((float)v.AsUint16));
|
||||
case VariantType::Color:
|
||||
return Variant(Color((float)v.AsUint16));
|
||||
default: ;
|
||||
}
|
||||
break;
|
||||
case VariantType::Uint:
|
||||
switch (to.Type)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Variant(v.AsUint != 0);
|
||||
case VariantType::Int16:
|
||||
return Variant((int16)v.AsUint);
|
||||
case VariantType::Int:
|
||||
return Variant((int32)v.AsUint);
|
||||
case VariantType::Int64:
|
||||
return Variant((int64)v.AsUint);
|
||||
case VariantType::Uint16:
|
||||
return Variant((uint16)v.AsUint);
|
||||
case VariantType::Uint64:
|
||||
return Variant((uint64)v.AsUint);
|
||||
case VariantType::Float:
|
||||
@@ -2481,8 +2723,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Variant(v.AsInt64 != 0);
|
||||
case VariantType::Int64:
|
||||
return Variant((int64)v.AsUint);
|
||||
case VariantType::Int16:
|
||||
return Variant((int16)v.AsInt64);
|
||||
case VariantType::Int:
|
||||
return Variant((int32)v.AsInt64);
|
||||
case VariantType::Uint16:
|
||||
return Variant((uint16)v.AsInt64);
|
||||
case VariantType::Uint:
|
||||
return Variant((uint32)v.AsInt64);
|
||||
case VariantType::Uint64:
|
||||
@@ -2507,10 +2753,14 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Variant(v.AsUint64 != 0);
|
||||
case VariantType::Int16:
|
||||
return Variant((int16)v.AsUint64);
|
||||
case VariantType::Int:
|
||||
return Variant((int32)v.AsUint64);
|
||||
case VariantType::Int64:
|
||||
return Variant((int64)v.AsUint64);
|
||||
case VariantType::Uint16:
|
||||
return Variant((uint16)v.AsUint16);
|
||||
case VariantType::Uint:
|
||||
return Variant((uint32)v.AsUint);
|
||||
case VariantType::Float:
|
||||
@@ -2533,8 +2783,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Variant(Math::Abs(v.AsFloat) > ZeroTolerance);
|
||||
case VariantType::Int16:
|
||||
return Variant((int16)v.AsFloat);
|
||||
case VariantType::Int:
|
||||
return Variant((int32)v.AsFloat);
|
||||
case VariantType::Uint16:
|
||||
return Variant((uint16)v.AsFloat);
|
||||
case VariantType::Uint:
|
||||
return Variant((uint32)v.AsFloat);
|
||||
case VariantType::Int64:
|
||||
@@ -2559,8 +2813,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Variant(Math::Abs(v.AsDouble) > ZeroTolerance);
|
||||
case VariantType::Int16:
|
||||
return Variant((int16)v.AsDouble);
|
||||
case VariantType::Int:
|
||||
return Variant((int32)v.AsDouble);
|
||||
case VariantType::Uint16:
|
||||
return Variant((uint16)v.AsDouble);
|
||||
case VariantType::Uint:
|
||||
return Variant((uint32)v.AsDouble);
|
||||
case VariantType::Int64:
|
||||
@@ -2585,8 +2843,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Variant(Math::Abs(((Vector2*)v.AsData)->X) > ZeroTolerance);
|
||||
case VariantType::Int16:
|
||||
return Variant((int16)((Vector2*)v.AsData)->X);
|
||||
case VariantType::Int:
|
||||
return Variant((int32)((Vector2*)v.AsData)->X);
|
||||
case VariantType::Uint16:
|
||||
return Variant((uint16)((Vector2*)v.AsData)->X);
|
||||
case VariantType::Uint:
|
||||
return Variant((uint32)((Vector2*)v.AsData)->X);
|
||||
case VariantType::Int64:
|
||||
@@ -2611,8 +2873,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Variant(Math::Abs(((Vector3*)v.AsData)->X) > ZeroTolerance);
|
||||
case VariantType::Int16:
|
||||
return Variant((int16)((Vector3*)v.AsData)->X);
|
||||
case VariantType::Int:
|
||||
return Variant((int32)((Vector3*)v.AsData)->X);
|
||||
case VariantType::Uint16:
|
||||
return Variant((uint16)((Vector3*)v.AsData)->X);
|
||||
case VariantType::Uint:
|
||||
return Variant((uint32)((Vector3*)v.AsData)->X);
|
||||
case VariantType::Int64:
|
||||
@@ -2637,8 +2903,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Variant(Math::Abs(((Vector4*)v.AsData)->X) > ZeroTolerance);
|
||||
case VariantType::Int16:
|
||||
return Variant((int16)((Vector4*)v.AsData)->X);
|
||||
case VariantType::Int:
|
||||
return Variant((int32)((Vector4*)v.AsData)->X);
|
||||
case VariantType::Uint16:
|
||||
return Variant((uint16)((Vector4*)v.AsData)->X);
|
||||
case VariantType::Uint:
|
||||
return Variant((uint32)((Vector4*)v.AsData)->X);
|
||||
case VariantType::Int64:
|
||||
@@ -2663,8 +2933,12 @@ Variant Variant::Cast(const Variant& v, const VariantType& to)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return Variant(Math::Abs(((Color*)v.AsData)->R) > ZeroTolerance);
|
||||
case VariantType::Int16:
|
||||
return Variant((int16)((Color*)v.AsData)->R);
|
||||
case VariantType::Int:
|
||||
return Variant((int32)((Color*)v.AsData)->R);
|
||||
case VariantType::Uint16:
|
||||
return Variant((uint16)((Color*)v.AsData)->R);
|
||||
case VariantType::Uint:
|
||||
return Variant((uint32)((Color*)v.AsData)->R);
|
||||
case VariantType::Int64:
|
||||
@@ -2696,6 +2970,8 @@ bool Variant::NearEqual(const Variant& a, const Variant& b, float epsilon)
|
||||
return false;
|
||||
switch (a.Type.Type)
|
||||
{
|
||||
case VariantType::Int16:
|
||||
return Math::Abs(a.AsInt16 - b.AsInt16) <= (int32)epsilon;
|
||||
case VariantType::Int:
|
||||
return Math::Abs(a.AsInt - b.AsInt) <= (int32)epsilon;
|
||||
case VariantType::Int64:
|
||||
@@ -2737,8 +3013,12 @@ Variant Variant::Lerp(const Variant& a, const Variant& b, float alpha)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return alpha < 0.5f ? a : b;
|
||||
case VariantType::Int16:
|
||||
return Math::Lerp(a.AsInt16, b.AsInt16, alpha);
|
||||
case VariantType::Int:
|
||||
return Math::Lerp(a.AsInt, b.AsInt, alpha);
|
||||
case VariantType::Uint16:
|
||||
return Math::Lerp(a.AsUint16, b.AsUint16, alpha);
|
||||
case VariantType::Uint:
|
||||
return Math::Lerp(a.AsUint, b.AsUint, alpha);
|
||||
case VariantType::Int64:
|
||||
@@ -2844,8 +3124,12 @@ uint32 GetHash(const Variant& key)
|
||||
{
|
||||
case VariantType::Bool:
|
||||
return GetHash(key.AsBool);
|
||||
case VariantType::Int16:
|
||||
return GetHash(key.AsInt16);
|
||||
case VariantType::Int:
|
||||
return GetHash(key.AsInt);
|
||||
case VariantType::Uint16:
|
||||
return GetHash(key.AsUint16);
|
||||
case VariantType::Uint:
|
||||
return GetHash(key.AsUint);
|
||||
case VariantType::Int64:
|
||||
|
||||
@@ -58,6 +58,9 @@ API_STRUCT(InBuild) struct FLAXENGINE_API VariantType
|
||||
Int3,
|
||||
Int4,
|
||||
|
||||
Int16,
|
||||
Uint16,
|
||||
|
||||
MAX
|
||||
};
|
||||
|
||||
@@ -135,6 +138,8 @@ API_STRUCT(InBuild) struct FLAXENGINE_API Variant
|
||||
union
|
||||
{
|
||||
bool AsBool;
|
||||
int16 AsInt16;
|
||||
uint16 AsUint16;
|
||||
int32 AsInt;
|
||||
uint32 AsUint;
|
||||
int64 AsInt64;
|
||||
@@ -184,6 +189,8 @@ public:
|
||||
Variant(Variant&& other) noexcept;
|
||||
|
||||
Variant(bool v);
|
||||
Variant(int16 v);
|
||||
Variant(uint16 v);
|
||||
Variant(int32 v);
|
||||
Variant(uint32 v);
|
||||
Variant(int64 v);
|
||||
|
||||
@@ -102,6 +102,23 @@ bool CommandLine::Parse(const Char* cmdLine)
|
||||
*(end - len) = 0; \
|
||||
end -= len; \
|
||||
}
|
||||
|
||||
#define PARSE_ARG_OPT_SWITCH(text, field) \
|
||||
pos = (Char*)StringUtils::FindIgnoreCase(buffer.Get(), TEXT(text)); \
|
||||
if (pos) \
|
||||
{ \
|
||||
len = ARRAY_COUNT(text) - 1; \
|
||||
if (ParseArg(pos + len, argStart, argEnd)) \
|
||||
Options.field = String::Empty; \
|
||||
else \
|
||||
{ \
|
||||
Options.field = String(argStart, static_cast<int32>(argEnd - argStart)); \
|
||||
len = static_cast<int32>((argEnd - pos) + 1); \
|
||||
Platform::MemoryCopy(pos, pos + len, (end - pos - len) * 2); \
|
||||
*(end - len) = 0; \
|
||||
end -= len; \
|
||||
} \
|
||||
}
|
||||
|
||||
PARSE_BOOL_SWITCH("-windowed ", Windowed);
|
||||
PARSE_BOOL_SWITCH("-fullscreen ", Fullscreen);
|
||||
@@ -137,6 +154,7 @@ bool CommandLine::Parse(const Char* cmdLine)
|
||||
PARSE_ARG_SWITCH("-build ", Build);
|
||||
PARSE_BOOL_SWITCH("-skipcompile ", SkipCompile);
|
||||
PARSE_BOOL_SWITCH("-shaderdebug ", ShaderDebug);
|
||||
PARSE_ARG_OPT_SWITCH("-play ", Play);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -164,6 +164,11 @@ public:
|
||||
/// </summary>
|
||||
Nullable<bool> ShaderDebug;
|
||||
|
||||
/// <summary>
|
||||
/// -play !guid! ( Scene to play, can be empty to use default )
|
||||
/// </summary>
|
||||
Nullable<String> Play;
|
||||
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -363,7 +363,8 @@ void Mesh::GetDrawCallGeometry(DrawCall& drawCall) const
|
||||
|
||||
void Mesh::Render(GPUContext* context) const
|
||||
{
|
||||
ASSERT(IsInitialized());
|
||||
if (!IsInitialized())
|
||||
return;
|
||||
|
||||
context->BindVB(ToSpan((GPUBuffer**)_vertexBuffers, 3));
|
||||
context->BindIB(_indexBuffer);
|
||||
@@ -372,7 +373,7 @@ void Mesh::Render(GPUContext* context) const
|
||||
|
||||
void Mesh::Draw(const RenderContext& renderContext, MaterialBase* material, const Matrix& world, StaticFlags flags, bool receiveDecals, DrawPass drawModes, float perInstanceRandom) const
|
||||
{
|
||||
if (!material || !material->IsSurface())
|
||||
if (!material || !material->IsSurface() || !IsInitialized())
|
||||
return;
|
||||
|
||||
// Submit draw call
|
||||
|
||||
@@ -3,6 +3,12 @@
|
||||
#include "ParticleEmitterGraph.CPU.h"
|
||||
#include "Engine/Core/Random.h"
|
||||
|
||||
// ReSharper disable CppCStyleCast
|
||||
// ReSharper disable CppClangTidyClangDiagnosticCastAlign
|
||||
// ReSharper disable CppDefaultCaseNotHandledInSwitchStatement
|
||||
// ReSharper disable CppClangTidyCppcoreguidelinesMacroUsage
|
||||
// ReSharper disable CppClangTidyClangDiagnosticOldStyleCast
|
||||
|
||||
#define RAND Random::Rand()
|
||||
#define RAND2 Vector2(RAND, RAND)
|
||||
#define RAND3 Vector3(RAND, RAND, RAND)
|
||||
@@ -62,7 +68,7 @@ namespace
|
||||
float scale = 1.0f;
|
||||
for (int32 i = 0; i < octaves; i++)
|
||||
{
|
||||
const float curWeight = Math::Pow(1.0f - ((float)i / octaves), Math::Lerp(2.0f, 0.2f, roughness));
|
||||
const float curWeight = Math::Pow(1.0f - ((float)i / (float)octaves), Math::Lerp(2.0f, 0.2f, roughness));
|
||||
|
||||
noise += Noise3D(position * scale) * curWeight;
|
||||
weight += curWeight;
|
||||
@@ -156,7 +162,7 @@ int32 ParticleEmitterGraphCPUExecutor::ProcessSpawnModule(int32 index)
|
||||
// Calculate actual spawn amount
|
||||
spawnCount = Math::Max(spawnCount, 0.0f);
|
||||
const int32 result = Math::FloorToInt(spawnCount);
|
||||
spawnCount -= result;
|
||||
spawnCount -= (float)result;
|
||||
data.SpawnCounter = spawnCount;
|
||||
|
||||
return result;
|
||||
@@ -475,7 +481,7 @@ void ParticleEmitterGraphCPUExecutor::ProcessModule(ParticleEmitterGraphCPUNode*
|
||||
|
||||
auto& velocity = _data->Buffer->Layout->Attributes[node->Attributes[0]];
|
||||
auto& mass = _data->Buffer->Layout->Attributes[node->Attributes[1]];
|
||||
byte* spriteSizePtr = useSpriteSize ? start + _data->Buffer->Layout->Attributes[node->Attributes[2]].Offset : 0;
|
||||
byte* spriteSizePtr = useSpriteSize ? start + _data->Buffer->Layout->Attributes[node->Attributes[2]].Offset : nullptr;
|
||||
|
||||
byte* velocityPtr = start + velocity.Offset;
|
||||
byte* massPtr = start + mass.Offset;
|
||||
|
||||
@@ -156,7 +156,7 @@ public:
|
||||
// Left wheel of the rear axle.
|
||||
RearLeft,
|
||||
// Right wheel of the rear axle.
|
||||
ReadRight,
|
||||
RearRight,
|
||||
// Non-drivable wheel.
|
||||
NoDrive,
|
||||
};
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include "Engine/Platform/Platform.h"
|
||||
#include "Engine/Platform/Window.h"
|
||||
#include "Engine/Platform/FileSystem.h"
|
||||
#include "Engine/Platform/CreateWindowSettings.h"
|
||||
#include "Engine/Platform/WindowsManager.h"
|
||||
#include "Engine/Platform/MemoryStats.h"
|
||||
@@ -1118,6 +1119,19 @@ void* WindowsPlatform::LoadLibrary(const Char* filename)
|
||||
{
|
||||
ASSERT(filename);
|
||||
|
||||
// Add folder to search path to load dependency libraries
|
||||
StringView folder = StringUtils::GetDirectoryName(filename);
|
||||
if (folder.HasChars() && FileSystem::IsRelative(folder))
|
||||
folder = StringView::Empty;
|
||||
if (folder.HasChars())
|
||||
{
|
||||
Char& end = ((Char*)folder.Get())[folder.Length()];
|
||||
const Char c = end;
|
||||
end = 0;
|
||||
SetDllDirectoryW(*folder);
|
||||
end = c;
|
||||
}
|
||||
|
||||
// Avoiding windows dialog boxes if missing
|
||||
const DWORD errorMode = SEM_NOOPENFILEERRORBOX;
|
||||
DWORD prevErrorMode = 0;
|
||||
@@ -1134,12 +1148,15 @@ void* WindowsPlatform::LoadLibrary(const Char* filename)
|
||||
{
|
||||
SetThreadErrorMode(prevErrorMode, nullptr);
|
||||
}
|
||||
if (folder.HasChars())
|
||||
{
|
||||
SetDllDirectoryW(nullptr);
|
||||
}
|
||||
|
||||
#if CRASH_LOG_ENABLE
|
||||
// Refresh modules info during next stack trace collecting to have valid debug symbols information
|
||||
SymLocker.Lock();
|
||||
const auto folder = StringUtils::GetDirectoryName(filename);
|
||||
if (!SymbolsPath.Contains(folder))
|
||||
if (folder.HasChars() && !SymbolsPath.Contains(folder))
|
||||
{
|
||||
SymbolsPath.Add(folder);
|
||||
OnSymbolsPathModified();
|
||||
|
||||
@@ -287,6 +287,8 @@ bool FontManager::AddNewEntry(Font* font, Char c, FontCharacterEntry& entry)
|
||||
|
||||
void FontManager::Invalidate(FontCharacterEntry& entry)
|
||||
{
|
||||
if (entry.TextureIndex == MAX_uint8)
|
||||
return;
|
||||
auto atlas = Atlases[entry.TextureIndex];
|
||||
const uint32 padding = atlas->GetPaddingAmount();
|
||||
const uint32 slotX = static_cast<uint32>(entry.UV.X - padding);
|
||||
|
||||
@@ -154,13 +154,13 @@ VariantType MUtils::UnboxVariantType(MonoType* monoType)
|
||||
if (klass == mono_get_boolean_class() || monoType->type == MONO_TYPE_BOOLEAN)
|
||||
return VariantType(VariantType::Bool);
|
||||
if (klass == mono_get_byte_class() || monoType->type == MONO_TYPE_U1)
|
||||
return VariantType(VariantType::Int);
|
||||
return VariantType(VariantType::Int16);
|
||||
if (klass == mono_get_sbyte_class() || monoType->type == MONO_TYPE_I1)
|
||||
return VariantType(VariantType::Int);
|
||||
return VariantType(VariantType::Int16);
|
||||
if (klass == mono_get_int16_class() || monoType->type == MONO_TYPE_I2)
|
||||
return VariantType(VariantType::Int);
|
||||
return VariantType(VariantType::Int16);
|
||||
if (klass == mono_get_uint16_class() || monoType->type == MONO_TYPE_U2)
|
||||
return VariantType(VariantType::Uint);
|
||||
return VariantType(VariantType::Uint16);
|
||||
if (klass == mono_get_int32_class() || monoType->type == MONO_TYPE_I4)
|
||||
return VariantType(VariantType::Int);
|
||||
if (klass == mono_get_uint32_class() || monoType->type == MONO_TYPE_U4)
|
||||
@@ -266,13 +266,13 @@ Variant MUtils::UnboxVariant(MonoObject* value)
|
||||
if (klass == mono_get_boolean_class())
|
||||
return *static_cast<bool*>(mono_object_unbox(value));
|
||||
if (klass == mono_get_byte_class())
|
||||
return (int32)*static_cast<byte*>(mono_object_unbox(value));
|
||||
return (int16)*static_cast<byte*>(mono_object_unbox(value));
|
||||
if (klass == mono_get_sbyte_class())
|
||||
return (int32)*static_cast<int8*>(mono_object_unbox(value));
|
||||
return (int16)*static_cast<int8*>(mono_object_unbox(value));
|
||||
if (klass == mono_get_int16_class())
|
||||
return (int32)*static_cast<int16*>(mono_object_unbox(value));
|
||||
return *static_cast<int16*>(mono_object_unbox(value));
|
||||
if (klass == mono_get_uint16_class())
|
||||
return (uint32)*static_cast<uint16*>(mono_object_unbox(value));
|
||||
return *static_cast<uint16*>(mono_object_unbox(value));
|
||||
if (klass == mono_get_int32_class())
|
||||
return *static_cast<int32*>(mono_object_unbox(value));
|
||||
if (klass == mono_get_uint32_class())
|
||||
@@ -365,6 +365,10 @@ MonoObject* MUtils::BoxVariant(const Variant& value)
|
||||
return nullptr;
|
||||
case VariantType::Bool:
|
||||
return mono_value_box(mono_domain_get(), mono_get_boolean_class(), (void*)&value.AsBool);
|
||||
case VariantType::Int16:
|
||||
return mono_value_box(mono_domain_get(), mono_get_int16_class(), (void*)&value.AsInt16);
|
||||
case VariantType::Uint16:
|
||||
return mono_value_box(mono_domain_get(), mono_get_uint16_class(), (void*)&value.AsUint16);
|
||||
case VariantType::Int:
|
||||
return mono_value_box(mono_domain_get(), mono_get_int32_class(), (void*)&value.AsInt);
|
||||
case VariantType::Uint:
|
||||
@@ -534,6 +538,10 @@ MonoClass* MUtils::GetClass(const VariantType& value)
|
||||
return mono_get_void_class();
|
||||
case VariantType::Bool:
|
||||
return mono_get_boolean_class();
|
||||
case VariantType::Int16:
|
||||
return mono_get_int16_class();
|
||||
case VariantType::Uint16:
|
||||
return mono_get_uint16_class();
|
||||
case VariantType::Int:
|
||||
return mono_get_int32_class();
|
||||
case VariantType::Uint:
|
||||
@@ -600,6 +608,10 @@ MonoClass* MUtils::GetClass(const Variant& value)
|
||||
return mono_get_void_class();
|
||||
case VariantType::Bool:
|
||||
return mono_get_boolean_class();
|
||||
case VariantType::Int16:
|
||||
return mono_get_int16_class();
|
||||
case VariantType::Uint16:
|
||||
return mono_get_uint16_class();
|
||||
case VariantType::Int:
|
||||
return mono_get_int32_class();
|
||||
case VariantType::Uint:
|
||||
@@ -700,12 +712,18 @@ void* MUtils::VariantToManagedArgPtr(Variant& value, const MType& type, bool& fa
|
||||
case MONO_TYPE_CHAR:
|
||||
case MONO_TYPE_I1:
|
||||
case MONO_TYPE_I2:
|
||||
if (value.Type.Type != VariantType::Int16)
|
||||
value = (int16)value;
|
||||
return &value.AsInt16;
|
||||
case MONO_TYPE_I4:
|
||||
if (value.Type.Type != VariantType::Int)
|
||||
value = (int32)value;
|
||||
return &value.AsInt;
|
||||
case MONO_TYPE_U1:
|
||||
case MONO_TYPE_U2:
|
||||
if (value.Type.Type != VariantType::Uint16)
|
||||
value = (uint16)value;
|
||||
return &value.AsUint16;
|
||||
case MONO_TYPE_U4:
|
||||
if (value.Type.Type != VariantType::Uint)
|
||||
value = (uint32)value;
|
||||
|
||||
@@ -123,6 +123,13 @@ namespace FlaxEngine.Json
|
||||
|
||||
writer.WriteStartObject();
|
||||
{
|
||||
#if FLAX_EDITOR
|
||||
if ((serializer.TypeNameHandling & TypeNameHandling.Objects) == TypeNameHandling.Objects)
|
||||
{
|
||||
writer.WritePropertyName("$type");
|
||||
writer.WriteValue("FlaxEngine.Margin, FlaxEngine.CSharp");
|
||||
}
|
||||
#endif
|
||||
writer.WritePropertyName("Left");
|
||||
writer.WriteValue(valueMargin.Left);
|
||||
writer.WritePropertyName("Right");
|
||||
|
||||
@@ -274,6 +274,12 @@ void ReadStream::ReadVariant(Variant* data)
|
||||
case VariantType::Bool:
|
||||
data->AsBool = ReadBool();
|
||||
break;
|
||||
case VariantType::Int16:
|
||||
ReadInt16(&data->AsInt16);
|
||||
break;
|
||||
case VariantType::Uint16:
|
||||
ReadUint16(&data->AsUint16);
|
||||
break;
|
||||
case VariantType::Int:
|
||||
ReadInt32(&data->AsInt);
|
||||
break;
|
||||
@@ -573,6 +579,12 @@ void WriteStream::WriteVariant(const Variant& data)
|
||||
case VariantType::Bool:
|
||||
WriteBool(data.AsBool);
|
||||
break;
|
||||
case VariantType::Int16:
|
||||
WriteInt16(data.AsInt16);
|
||||
break;
|
||||
case VariantType::Uint16:
|
||||
WriteUint16(data.AsUint16);
|
||||
break;
|
||||
case VariantType::Int:
|
||||
WriteInt32(data.AsInt);
|
||||
break;
|
||||
|
||||
@@ -14,6 +14,12 @@ namespace FlaxEngine.GUI
|
||||
[HideInEditor]
|
||||
public GPUTexture Texture;
|
||||
|
||||
/// <summary>
|
||||
/// The texture sampling filter mode.
|
||||
/// </summary>
|
||||
[ExpandGroups, Tooltip("The texture sampling filter mode.")]
|
||||
public BrushFilter Filter = BrushFilter.Linear;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="GPUTextureBrush"/> class.
|
||||
/// </summary>
|
||||
@@ -36,7 +42,10 @@ namespace FlaxEngine.GUI
|
||||
/// <inheritdoc />
|
||||
public void Draw(Rectangle rect, Color color)
|
||||
{
|
||||
Render2D.DrawTexture(Texture, rect, color);
|
||||
if (Filter == BrushFilter.Point)
|
||||
Render2D.DrawTexturePoint(Texture, rect, color);
|
||||
else
|
||||
Render2D.DrawTexture(Texture, rect, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,24 @@
|
||||
|
||||
namespace FlaxEngine.GUI
|
||||
{
|
||||
/// <summary>
|
||||
/// Texture brush sampling modes.
|
||||
/// </summary>
|
||||
public enum BrushFilter
|
||||
{
|
||||
/// <summary>
|
||||
/// The point sampling without blending.
|
||||
/// </summary>
|
||||
[Tooltip("The point sampling without blending.")]
|
||||
Point = 0,
|
||||
|
||||
/// <summary>
|
||||
/// The linear color sampling.
|
||||
/// </summary>
|
||||
[Tooltip("The linear color sampling.")]
|
||||
Linear = 1,
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Interface that unifies input source textures, sprites, render targets, and any other brushes to be used in a more generic way.
|
||||
/// </summary>
|
||||
|
||||
@@ -11,9 +11,15 @@ namespace FlaxEngine.GUI
|
||||
/// <summary>
|
||||
/// The sprite.
|
||||
/// </summary>
|
||||
[ExpandGroups]
|
||||
[ExpandGroups, EditorOrder(0), Tooltip("The sprite.")]
|
||||
public SpriteHandle Sprite;
|
||||
|
||||
/// <summary>
|
||||
/// The texture sampling filter mode.
|
||||
/// </summary>
|
||||
[ExpandGroups, EditorOrder(1), Tooltip("The texture sampling filter mode.")]
|
||||
public BrushFilter Filter = BrushFilter.Linear;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SpriteBrush"/> class.
|
||||
/// </summary>
|
||||
@@ -36,7 +42,10 @@ namespace FlaxEngine.GUI
|
||||
/// <inheritdoc />
|
||||
public void Draw(Rectangle rect, Color color)
|
||||
{
|
||||
Render2D.DrawSprite(Sprite, rect, color);
|
||||
if (Filter == BrushFilter.Point)
|
||||
Render2D.DrawSpritePoint(Sprite, rect, color);
|
||||
else
|
||||
Render2D.DrawSprite(Sprite, rect, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
|
||||
|
||||
using System;
|
||||
|
||||
namespace FlaxEngine.GUI
|
||||
{
|
||||
/// <summary>
|
||||
@@ -11,9 +13,15 @@ namespace FlaxEngine.GUI
|
||||
/// <summary>
|
||||
/// The texture.
|
||||
/// </summary>
|
||||
[ExpandGroups, Tooltip("The texture asset.")]
|
||||
[ExpandGroups, EditorOrder(0), Tooltip("The texture asset.")]
|
||||
public Texture Texture;
|
||||
|
||||
/// <summary>
|
||||
/// The texture sampling filter mode.
|
||||
/// </summary>
|
||||
[ExpandGroups, EditorOrder(1), Tooltip("The texture sampling filter mode.")]
|
||||
public BrushFilter Filter = BrushFilter.Linear;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="TextureBrush"/> class.
|
||||
/// </summary>
|
||||
@@ -36,7 +44,10 @@ namespace FlaxEngine.GUI
|
||||
/// <inheritdoc />
|
||||
public void Draw(Rectangle rect, Color color)
|
||||
{
|
||||
Render2D.DrawTexture(Texture, rect, color);
|
||||
if (Filter == BrushFilter.Point)
|
||||
Render2D.DrawTexturePoint(Texture?.Texture, rect, color);
|
||||
else
|
||||
Render2D.DrawTexture(Texture, rect, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user