Browse Source

Merge pull request #65164 from neikeq/csharp-fix-vector4-in-variant

C#: Fix Vector4 in godot_variant and missing marshaling
Ignacio Roldán Etcheverry 3 years ago
parent
commit
1c037c89d4

+ 20 - 14
modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/InteropStructs.cs

@@ -130,14 +130,14 @@ namespace Godot.NativeInterop
             [FieldOffset(0)] public AABB* _aabb;
             [FieldOffset(0)] public AABB* _aabb;
             [FieldOffset(0)] public Basis* _basis;
             [FieldOffset(0)] public Basis* _basis;
             [FieldOffset(0)] public Transform3D* _transform3D;
             [FieldOffset(0)] public Transform3D* _transform3D;
-            [FieldOffset(0)] public Vector4* _vector4;
-            [FieldOffset(0)] public Vector4i* _vector4i;
             [FieldOffset(0)] public Projection* _projection;
             [FieldOffset(0)] public Projection* _projection;
             [FieldOffset(0)] private godot_variant_data_mem _mem;
             [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.
             // 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_name _m_string_name;
             [FieldOffset(0)] public godot_string _m_string;
             [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 Vector3 _m_vector3;
             [FieldOffset(0)] public Vector3i _m_vector3i;
             [FieldOffset(0)] public Vector3i _m_vector3i;
             [FieldOffset(0)] public Vector2 _m_vector2;
             [FieldOffset(0)] public Vector2 _m_vector2;
@@ -232,18 +232,6 @@ namespace Godot.NativeInterop
             get => _data._transform3D;
             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
         public readonly unsafe Projection* Projection
         {
         {
             [MethodImpl(MethodImplOptions.AggressiveInlining)]
             [MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -266,6 +254,22 @@ namespace Godot.NativeInterop
             set => _data._m_string = value;
             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
         public Vector3 Vector3
         {
         {
             [MethodImpl(MethodImplOptions.AggressiveInlining)]
             [MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -406,6 +410,8 @@ namespace Godot.NativeInterop
                 case Variant.Type.Rect2i:
                 case Variant.Type.Rect2i:
                 case Variant.Type.Vector3:
                 case Variant.Type.Vector3:
                 case Variant.Type.Vector3i:
                 case Variant.Type.Vector3i:
+                case Variant.Type.Vector4:
+                case Variant.Type.Vector4i:
                 case Variant.Type.Plane:
                 case Variant.Type.Plane:
                 case Variant.Type.Quaternion:
                 case Variant.Type.Quaternion:
                 case Variant.Type.Color:
                 case Variant.Type.Color:

+ 2 - 2
modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/Marshaling.cs

@@ -613,9 +613,9 @@ namespace Godot.NativeInterop
                 case Variant.Type.Transform2d:
                 case Variant.Type.Transform2d:
                     return *p_var.Transform2D;
                     return *p_var.Transform2D;
                 case Variant.Type.Vector4:
                 case Variant.Type.Vector4:
-                    return *p_var.Vector4;
+                    return p_var.Vector4;
                 case Variant.Type.Vector4i:
                 case Variant.Type.Vector4i:
-                    return *p_var.Vector4i;
+                    return p_var.Vector4i;
                 case Variant.Type.Plane:
                 case Variant.Type.Plane:
                     return p_var.Plane;
                     return p_var.Plane;
                 case Variant.Type.Quaternion:
                 case Variant.Type.Quaternion:

+ 0 - 4
modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/NativeFuncs.cs

@@ -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_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_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);
         public static partial void godotsharp_variant_new_transform3d(out godot_variant r_dest, in Transform3D p_trans);

+ 4 - 0
modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/NativeFuncs.extended.cs

@@ -28,6 +28,10 @@ namespace Godot.NativeInterop
                     return new godot_variant() { Vector3 = src.Vector3, Type = Variant.Type.Vector3 };
                     return new godot_variant() { Vector3 = src.Vector3, Type = Variant.Type.Vector3 };
                 case Variant.Type.Vector3i:
                 case Variant.Type.Vector3i:
                     return new godot_variant() { Vector3i = src.Vector3i, Type = 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:
                 case Variant.Type.Plane:
                     return new godot_variant() { Plane = src.Plane, Type = Variant.Type.Plane };
                     return new godot_variant() { Plane = src.Plane, Type = Variant.Type.Plane };
                 case Variant.Type.Quaternion:
                 case Variant.Type.Quaternion:

+ 36 - 0
modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/VariantConversionCallbacks.cs

@@ -74,6 +74,12 @@ internal static unsafe class VariantConversionCallbacks
         static godot_variant FromTransform3D(in Transform3D @transform3d) =>
         static godot_variant FromTransform3D(in Transform3D @transform3d) =>
             VariantUtils.CreateFromTransform3D(@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) =>
         static godot_variant FromAabb(in AABB @aabb) =>
             VariantUtils.CreateFromAABB(@aabb);
             VariantUtils.CreateFromAABB(@aabb);
 
 
@@ -283,6 +289,18 @@ internal static unsafe class VariantConversionCallbacks
                 &FromTransform3D;
                 &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))
         if (typeOfT == typeof(AABB))
         {
         {
             return (delegate*<in T, godot_variant>)(delegate*<in AABB, godot_variant>)
             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) =>
         static Transform3D ToTransform3D(in godot_variant variant) =>
             VariantUtils.ConvertToTransform3D(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) =>
         static AABB ToAabb(in godot_variant variant) =>
             VariantUtils.ConvertToAABB(variant);
             VariantUtils.ConvertToAABB(variant);
 
 
@@ -768,6 +792,18 @@ internal static unsafe class VariantConversionCallbacks
                 &ToTransform3D;
                 &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))
         if (typeOfT == typeof(AABB))
         {
         {
             return (delegate*<in godot_variant, T>)(delegate*<in godot_variant, AABB>)
             return (delegate*<in godot_variant, T>)(delegate*<in godot_variant, AABB>)

+ 8 - 14
modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/VariantUtils.cs

@@ -37,6 +37,12 @@ namespace Godot.NativeInterop
         public static godot_variant CreateFromVector3i(Vector3i from)
         public static godot_variant CreateFromVector3i(Vector3i from)
             => new() { Type = Variant.Type.Vector3i, 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)
         public static godot_variant CreateFromRect2(Rect2 from)
             => new() { Type = Variant.Type.Rect2, Rect2 = from };
             => new() { Type = Variant.Type.Rect2, Rect2 = from };
 
 
@@ -58,18 +64,6 @@ namespace Godot.NativeInterop
             return ret;
             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)
         public static godot_variant CreateFromBasis(Basis from)
         {
         {
             NativeFuncs.godotsharp_variant_new_basis(out godot_variant ret, 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)
         public static unsafe Vector4 ConvertToVector4(in godot_variant p_var)
             => p_var.Type == Variant.Type.Vector4 ?
             => p_var.Type == Variant.Type.Vector4 ?
-                *p_var.Vector4 :
+                p_var.Vector4 :
                 NativeFuncs.godotsharp_variant_as_vector4(p_var);
                 NativeFuncs.godotsharp_variant_as_vector4(p_var);
 
 
         public static unsafe Vector4i ConvertToVector4i(in godot_variant p_var)
         public static unsafe Vector4i ConvertToVector4i(in godot_variant p_var)
             => p_var.Type == Variant.Type.Vector4i ?
             => p_var.Type == Variant.Type.Vector4i ?
-                *p_var.Vector4i :
+                p_var.Vector4i :
                 NativeFuncs.godotsharp_variant_as_vector4i(p_var);
                 NativeFuncs.godotsharp_variant_as_vector4i(p_var);
 
 
         public static unsafe Basis ConvertToBasis(in godot_variant p_var)
         public static unsafe Basis ConvertToBasis(in godot_variant p_var)

+ 2 - 0
modules/mono/glue/GodotSharp/GodotSharp/Variant.cs

@@ -65,6 +65,8 @@ public partial struct Variant : IDisposable
             case Type.Rect2i:
             case Type.Rect2i:
             case Type.Vector3:
             case Type.Vector3:
             case Type.Vector3i:
             case Type.Vector3i:
+            case Type.Vector4:
+            case Type.Vector4i:
             case Type.Plane:
             case Type.Plane:
             case Type.Quaternion:
             case Type.Quaternion:
             case Type.Color:
             case Type.Color:

+ 0 - 10
modules/mono/glue/runtime_interop.cpp

@@ -548,14 +548,6 @@ void godotsharp_variant_new_transform2d(godot_variant *r_dest, const Transform2D
 	memnew_placement(r_dest, Variant(*p_t2d));
 	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) {
 void godotsharp_variant_new_basis(godot_variant *r_dest, const Basis *p_basis) {
 	memnew_placement(r_dest, Variant(*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_node_path,
 	(void *)godotsharp_variant_new_object,
 	(void *)godotsharp_variant_new_object,
 	(void *)godotsharp_variant_new_transform2d,
 	(void *)godotsharp_variant_new_transform2d,
-	(void *)godotsharp_variant_new_vector4,
-	(void *)godotsharp_variant_new_vector4i,
 	(void *)godotsharp_variant_new_basis,
 	(void *)godotsharp_variant_new_basis,
 	(void *)godotsharp_variant_new_transform3d,
 	(void *)godotsharp_variant_new_transform3d,
 	(void *)godotsharp_variant_new_projection,
 	(void *)godotsharp_variant_new_projection,