C#: Fix Vector4 in godot_variant and missing marshaling
Vector4 and Vector4i were implemented incorrectly in godot_variant. They were also missing their respective Variant conversion callbacks (used for generic collections). Took the chance to remove unnecessary native calls for creating Variant from Vector4, as now it can be done from C# (which is faster).
This commit is contained in:
parent
736632ee7e
commit
0e63185651
8 changed files with 72 additions and 44 deletions
|
@ -130,14 +130,14 @@ namespace Godot.NativeInterop
|
|||
[FieldOffset(0)] public AABB* _aabb;
|
||||
[FieldOffset(0)] public Basis* _basis;
|
||||
[FieldOffset(0)] public Transform3D* _transform3D;
|
||||
[FieldOffset(0)] public Vector4* _vector4;
|
||||
[FieldOffset(0)] public Vector4i* _vector4i;
|
||||
[FieldOffset(0)] public Projection* _projection;
|
||||
[FieldOffset(0)] private godot_variant_data_mem _mem;
|
||||
|
||||
// The following fields are not in the C++ union, but this is how they're stored in _mem.
|
||||
[FieldOffset(0)] public godot_string_name _m_string_name;
|
||||
[FieldOffset(0)] public godot_string _m_string;
|
||||
[FieldOffset(0)] public Vector4 _m_vector4;
|
||||
[FieldOffset(0)] public Vector4i _m_vector4i;
|
||||
[FieldOffset(0)] public Vector3 _m_vector3;
|
||||
[FieldOffset(0)] public Vector3i _m_vector3i;
|
||||
[FieldOffset(0)] public Vector2 _m_vector2;
|
||||
|
@ -232,18 +232,6 @@ namespace Godot.NativeInterop
|
|||
get => _data._transform3D;
|
||||
}
|
||||
|
||||
public readonly unsafe Vector4* Vector4
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
get => _data._vector4;
|
||||
}
|
||||
|
||||
public readonly unsafe Vector4i* Vector4i
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
get => _data._vector4i;
|
||||
}
|
||||
|
||||
public readonly unsafe Projection* Projection
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
|
@ -266,6 +254,22 @@ namespace Godot.NativeInterop
|
|||
set => _data._m_string = value;
|
||||
}
|
||||
|
||||
public Vector4 Vector4
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
readonly get => _data._m_vector4;
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
set => _data._m_vector4 = value;
|
||||
}
|
||||
|
||||
public Vector4i Vector4i
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
readonly get => _data._m_vector4i;
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
set => _data._m_vector4i = value;
|
||||
}
|
||||
|
||||
public Vector3 Vector3
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
|
@ -406,6 +410,8 @@ namespace Godot.NativeInterop
|
|||
case Variant.Type.Rect2i:
|
||||
case Variant.Type.Vector3:
|
||||
case Variant.Type.Vector3i:
|
||||
case Variant.Type.Vector4:
|
||||
case Variant.Type.Vector4i:
|
||||
case Variant.Type.Plane:
|
||||
case Variant.Type.Quaternion:
|
||||
case Variant.Type.Color:
|
||||
|
|
|
@ -613,9 +613,9 @@ namespace Godot.NativeInterop
|
|||
case Variant.Type.Transform2d:
|
||||
return *p_var.Transform2D;
|
||||
case Variant.Type.Vector4:
|
||||
return *p_var.Vector4;
|
||||
return p_var.Vector4;
|
||||
case Variant.Type.Vector4i:
|
||||
return *p_var.Vector4i;
|
||||
return p_var.Vector4i;
|
||||
case Variant.Type.Plane:
|
||||
return p_var.Plane;
|
||||
case Variant.Type.Quaternion:
|
||||
|
|
|
@ -176,10 +176,6 @@ namespace Godot.NativeInterop
|
|||
|
||||
public static partial void godotsharp_variant_new_transform2d(out godot_variant r_dest, in Transform2D p_t2d);
|
||||
|
||||
public static partial void godotsharp_variant_new_vector4(out godot_variant r_dest, in Vector4 p_vec4);
|
||||
|
||||
public static partial void godotsharp_variant_new_vector4i(out godot_variant r_dest, in Vector4i p_vec4i);
|
||||
|
||||
public static partial void godotsharp_variant_new_basis(out godot_variant r_dest, in Basis p_basis);
|
||||
|
||||
public static partial void godotsharp_variant_new_transform3d(out godot_variant r_dest, in Transform3D p_trans);
|
||||
|
|
|
@ -28,6 +28,10 @@ namespace Godot.NativeInterop
|
|||
return new godot_variant() { Vector3 = src.Vector3, Type = Variant.Type.Vector3 };
|
||||
case Variant.Type.Vector3i:
|
||||
return new godot_variant() { Vector3i = src.Vector3i, Type = Variant.Type.Vector3i };
|
||||
case Variant.Type.Vector4:
|
||||
return new godot_variant() { Vector4 = src.Vector4, Type = Variant.Type.Vector4 };
|
||||
case Variant.Type.Vector4i:
|
||||
return new godot_variant() { Vector4i = src.Vector4i, Type = Variant.Type.Vector4i };
|
||||
case Variant.Type.Plane:
|
||||
return new godot_variant() { Plane = src.Plane, Type = Variant.Type.Plane };
|
||||
case Variant.Type.Quaternion:
|
||||
|
|
|
@ -74,6 +74,12 @@ internal static unsafe class VariantConversionCallbacks
|
|||
static godot_variant FromTransform3D(in Transform3D @transform3d) =>
|
||||
VariantUtils.CreateFromTransform3D(@transform3d);
|
||||
|
||||
static godot_variant FromVector4(in Vector4 @vector4) =>
|
||||
VariantUtils.CreateFromVector4(@vector4);
|
||||
|
||||
static godot_variant FromVector4I(in Vector4i vector4I) =>
|
||||
VariantUtils.CreateFromVector4i(vector4I);
|
||||
|
||||
static godot_variant FromAabb(in AABB @aabb) =>
|
||||
VariantUtils.CreateFromAABB(@aabb);
|
||||
|
||||
|
@ -283,6 +289,18 @@ internal static unsafe class VariantConversionCallbacks
|
|||
&FromTransform3D;
|
||||
}
|
||||
|
||||
if (typeOfT == typeof(Vector4))
|
||||
{
|
||||
return (delegate*<in T, godot_variant>)(delegate*<in Vector4, godot_variant>)
|
||||
&FromVector4;
|
||||
}
|
||||
|
||||
if (typeOfT == typeof(Vector4i))
|
||||
{
|
||||
return (delegate*<in T, godot_variant>)(delegate*<in Vector4i, godot_variant>)
|
||||
&FromVector4I;
|
||||
}
|
||||
|
||||
if (typeOfT == typeof(AABB))
|
||||
{
|
||||
return (delegate*<in T, godot_variant>)(delegate*<in AABB, godot_variant>)
|
||||
|
@ -556,6 +574,12 @@ internal static unsafe class VariantConversionCallbacks
|
|||
static Transform3D ToTransform3D(in godot_variant variant) =>
|
||||
VariantUtils.ConvertToTransform3D(variant);
|
||||
|
||||
static Vector4 ToVector4(in godot_variant variant) =>
|
||||
VariantUtils.ConvertToVector4(variant);
|
||||
|
||||
static Vector4i ToVector4I(in godot_variant variant) =>
|
||||
VariantUtils.ConvertToVector4i(variant);
|
||||
|
||||
static AABB ToAabb(in godot_variant variant) =>
|
||||
VariantUtils.ConvertToAABB(variant);
|
||||
|
||||
|
@ -768,6 +792,18 @@ internal static unsafe class VariantConversionCallbacks
|
|||
&ToTransform3D;
|
||||
}
|
||||
|
||||
if (typeOfT == typeof(Vector4))
|
||||
{
|
||||
return (delegate*<in godot_variant, T>)(delegate*<in godot_variant, Vector4>)
|
||||
&ToVector4;
|
||||
}
|
||||
|
||||
if (typeOfT == typeof(Vector4i))
|
||||
{
|
||||
return (delegate*<in godot_variant, T>)(delegate*<in godot_variant, Vector4i>)
|
||||
&ToVector4I;
|
||||
}
|
||||
|
||||
if (typeOfT == typeof(AABB))
|
||||
{
|
||||
return (delegate*<in godot_variant, T>)(delegate*<in godot_variant, AABB>)
|
||||
|
|
|
@ -37,6 +37,12 @@ namespace Godot.NativeInterop
|
|||
public static godot_variant CreateFromVector3i(Vector3i from)
|
||||
=> new() { Type = Variant.Type.Vector3i, Vector3i = from };
|
||||
|
||||
public static godot_variant CreateFromVector4(Vector4 from)
|
||||
=> new() { Type = Variant.Type.Vector4, Vector4 = from };
|
||||
|
||||
public static godot_variant CreateFromVector4i(Vector4i from)
|
||||
=> new() { Type = Variant.Type.Vector4i, Vector4i = from };
|
||||
|
||||
public static godot_variant CreateFromRect2(Rect2 from)
|
||||
=> new() { Type = Variant.Type.Rect2, Rect2 = from };
|
||||
|
||||
|
@ -58,18 +64,6 @@ namespace Godot.NativeInterop
|
|||
return ret;
|
||||
}
|
||||
|
||||
public static godot_variant CreateFromVector4(Vector4 from)
|
||||
{
|
||||
NativeFuncs.godotsharp_variant_new_vector4(out godot_variant ret, from);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static godot_variant CreateFromVector4i(Vector4i from)
|
||||
{
|
||||
NativeFuncs.godotsharp_variant_new_vector4i(out godot_variant ret, from);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static godot_variant CreateFromBasis(Basis from)
|
||||
{
|
||||
NativeFuncs.godotsharp_variant_new_basis(out godot_variant ret, from);
|
||||
|
@ -386,12 +380,12 @@ namespace Godot.NativeInterop
|
|||
|
||||
public static unsafe Vector4 ConvertToVector4(in godot_variant p_var)
|
||||
=> p_var.Type == Variant.Type.Vector4 ?
|
||||
*p_var.Vector4 :
|
||||
p_var.Vector4 :
|
||||
NativeFuncs.godotsharp_variant_as_vector4(p_var);
|
||||
|
||||
public static unsafe Vector4i ConvertToVector4i(in godot_variant p_var)
|
||||
=> p_var.Type == Variant.Type.Vector4i ?
|
||||
*p_var.Vector4i :
|
||||
p_var.Vector4i :
|
||||
NativeFuncs.godotsharp_variant_as_vector4i(p_var);
|
||||
|
||||
public static unsafe Basis ConvertToBasis(in godot_variant p_var)
|
||||
|
|
|
@ -65,6 +65,8 @@ public partial struct Variant : IDisposable
|
|||
case Type.Rect2i:
|
||||
case Type.Vector3:
|
||||
case Type.Vector3i:
|
||||
case Type.Vector4:
|
||||
case Type.Vector4i:
|
||||
case Type.Plane:
|
||||
case Type.Quaternion:
|
||||
case Type.Color:
|
||||
|
|
|
@ -548,14 +548,6 @@ void godotsharp_variant_new_transform2d(godot_variant *r_dest, const Transform2D
|
|||
memnew_placement(r_dest, Variant(*p_t2d));
|
||||
}
|
||||
|
||||
void godotsharp_variant_new_vector4(godot_variant *r_dest, const Vector4 *p_vec4) {
|
||||
memnew_placement(r_dest, Variant(*p_vec4));
|
||||
}
|
||||
|
||||
void godotsharp_variant_new_vector4i(godot_variant *r_dest, const Vector4i *p_vec4i) {
|
||||
memnew_placement(r_dest, Variant(*p_vec4i));
|
||||
}
|
||||
|
||||
void godotsharp_variant_new_basis(godot_variant *r_dest, const Basis *p_basis) {
|
||||
memnew_placement(r_dest, Variant(*p_basis));
|
||||
}
|
||||
|
@ -1377,8 +1369,6 @@ static const void *unmanaged_callbacks[]{
|
|||
(void *)godotsharp_variant_new_node_path,
|
||||
(void *)godotsharp_variant_new_object,
|
||||
(void *)godotsharp_variant_new_transform2d,
|
||||
(void *)godotsharp_variant_new_vector4,
|
||||
(void *)godotsharp_variant_new_vector4i,
|
||||
(void *)godotsharp_variant_new_basis,
|
||||
(void *)godotsharp_variant_new_transform3d,
|
||||
(void *)godotsharp_variant_new_projection,
|
||||
|
|
Loading…
Reference in a new issue