// ----------------------------------------------------------------------------
// <auto-generated>
// This is autogenerated code by CppSharp.
// Do not edit this file or all your changes will be lost after re-generation.
// </auto-generated>
// ----------------------------------------------------------------------------
using System;
using System.Runtime.InteropServices;
using System.Security;

namespace raylib
{
    [Flags]
    public enum LogType
    {
        LOG_INFO = 1,
        LOG_WARNING = 2,
        LOG_ERROR = 4,
        LOG_DEBUG = 8,
        LOG_OTHER = 16
    }

    public enum ShaderLocationIndex
    {
        LOC_VERTEX_POSITION = 0,
        LOC_VERTEX_TEXCOORD01 = 1,
        LOC_VERTEX_TEXCOORD02 = 2,
        LOC_VERTEX_NORMAL = 3,
        LOC_VERTEX_TANGENT = 4,
        LOC_VERTEX_COLOR = 5,
        LOC_MATRIX_MVP = 6,
        LOC_MATRIX_MODEL = 7,
        LOC_MATRIX_VIEW = 8,
        LOC_MATRIX_PROJECTION = 9,
        LOC_VECTOR_VIEW = 10,
        LOC_COLOR_DIFFUSE = 11,
        LOC_COLOR_SPECULAR = 12,
        LOC_COLOR_AMBIENT = 13,
        LOC_MAP_ALBEDO = 14,
        LOC_MAP_METALNESS = 15,
        LOC_MAP_NORMAL = 16,
        LOC_MAP_ROUGHNESS = 17,
        LOC_MAP_OCCLUSION = 18,
        LOC_MAP_EMISSION = 19,
        LOC_MAP_HEIGHT = 20,
        LOC_MAP_CUBEMAP = 21,
        LOC_MAP_IRRADIANCE = 22,
        LOC_MAP_PREFILTER = 23,
        LOC_MAP_BRDF = 24
    }

    public enum TexmapIndex
    {
        MAP_ALBEDO = 0,
        MAP_METALNESS = 1,
        MAP_NORMAL = 2,
        MAP_ROUGHNESS = 3,
        MAP_OCCLUSION = 4,
        MAP_EMISSION = 5,
        MAP_HEIGHT = 6,
        MAP_CUBEMAP = 7,
        MAP_IRRADIANCE = 8,
        MAP_PREFILTER = 9,
        MAP_BRDF = 10
    }

    public enum PixelFormat
    {
        UNCOMPRESSED_GRAYSCALE = 1,
        UNCOMPRESSED_GRAY_ALPHA = 2,
        UNCOMPRESSED_R5G6B5 = 3,
        UNCOMPRESSED_R8G8B8 = 4,
        UNCOMPRESSED_R5G5B5A1 = 5,
        UNCOMPRESSED_R4G4B4A4 = 6,
        UNCOMPRESSED_R8G8B8A8 = 7,
        UNCOMPRESSED_R32 = 8,
        UNCOMPRESSED_R32G32B32 = 9,
        UNCOMPRESSED_R32G32B32A32 = 10,
        COMPRESSED_DXT1RGB = 11,
        COMPRESSED_DXT1RGBA = 12,
        COMPRESSED_DXT3RGBA = 13,
        COMPRESSED_DXT5RGBA = 14,
        COMPRESSED_ETC1RGB = 15,
        COMPRESSED_ETC2RGB = 16,
        COMPRESSED_ETC2EAC_RGBA = 17,
        COMPRESSED_PVRT_RGB = 18,
        COMPRESSED_PVRT_RGBA = 19,
        COMPRESSED_ASTC_4x4RGBA = 20,
        COMPRESSED_ASTC_8x8RGBA = 21
    }

    public enum TextureFilterMode
    {
        FILTER_POINT = 0,
        FILTER_BILINEAR = 1,
        FILTER_TRILINEAR = 2,
        FILTER_ANISOTROPIC_4X = 3,
        FILTER_ANISOTROPIC_8X = 4,
        FILTER_ANISOTROPIC_16X = 5
    }

    public enum TextureWrapMode
    {
        WRAP_REPEAT = 0,
        WRAP_CLAMP = 1,
        WRAP_MIRROR = 2
    }

    public enum BlendMode
    {
        BLEND_ALPHA = 0,
        BLEND_ADDITIVE = 1,
        BLEND_MULTIPLIED = 2
    }

    [Flags]
    public enum Gestures
    {
        GESTURE_NONE = 0,
        GESTURE_TAP = 1,
        GESTURE_DOUBLETAP = 2,
        GESTURE_HOLD = 4,
        GESTURE_DRAG = 8,
        GESTURE_SWIPE_RIGHT = 16,
        GESTURE_SWIPE_LEFT = 32,
        GESTURE_SWIPE_UP = 64,
        GESTURE_SWIPE_DOWN = 128,
        GESTURE_PINCH_IN = 256,
        GESTURE_PINCH_OUT = 512
    }

    public enum CameraMode
    {
        CAMERA_CUSTOM = 0,
        CAMERA_FREE = 1,
        CAMERA_ORBITAL = 2,
        CAMERA_FIRST_PERSON = 3,
        CAMERA_THIRD_PERSON = 4
    }

    public enum CameraType
    {
        CAMERA_PERSPECTIVE = 0,
        CAMERA_ORTHOGRAPHIC = 1
    }

    public enum VrDeviceType
    {
        HMD_DEFAULT_DEVICE = 0,
        HMD_OCULUS_RIFT_DK2 = 1,
        HMD_OCULUS_RIFT_CV1 = 2,
        HMD_OCULUS_GO = 3,
        HMD_VALVE_HTC_VIVE = 4,
        HMD_SONY_PSVR = 5
    }

    public unsafe partial class Vector2 : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 8)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal float x;

            [FieldOffset(4)]
            internal float y;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Vector2@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Vector2> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Vector2>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Vector2 __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Vector2(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Vector2 __CreateInstance(global::raylib.Vector2.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Vector2(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Vector2.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Vector2.__Internal));
            *(global::raylib.Vector2.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Vector2(global::raylib.Vector2.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Vector2(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Vector2()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Vector2.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Vector2(global::raylib.Vector2 _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Vector2.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Vector2.__Internal*) __Instance) = *((global::raylib.Vector2.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Vector2 __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public float X
        {
            get
            {
                return ((global::raylib.Vector2.__Internal*) __Instance)->x;
            }

            set
            {
                ((global::raylib.Vector2.__Internal*)__Instance)->x = value;
            }
        }

        public float Y
        {
            get
            {
                return ((global::raylib.Vector2.__Internal*) __Instance)->y;
            }

            set
            {
                ((global::raylib.Vector2.__Internal*)__Instance)->y = value;
            }
        }
    }

    public unsafe partial class Vector3 : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 12)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal float x;

            [FieldOffset(4)]
            internal float y;

            [FieldOffset(8)]
            internal float z;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Vector3@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Vector3> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Vector3>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Vector3 __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Vector3(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Vector3 __CreateInstance(global::raylib.Vector3.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Vector3(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Vector3.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Vector3.__Internal));
            *(global::raylib.Vector3.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Vector3(global::raylib.Vector3.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Vector3(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Vector3()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Vector3.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Vector3(global::raylib.Vector3 _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Vector3.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Vector3.__Internal*) __Instance) = *((global::raylib.Vector3.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Vector3 __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public float X
        {
            get
            {
                return ((global::raylib.Vector3.__Internal*) __Instance)->x;
            }

            set
            {
                ((global::raylib.Vector3.__Internal*)__Instance)->x = value;
            }
        }

        public float Y
        {
            get
            {
                return ((global::raylib.Vector3.__Internal*) __Instance)->y;
            }

            set
            {
                ((global::raylib.Vector3.__Internal*)__Instance)->y = value;
            }
        }

        public float Z
        {
            get
            {
                return ((global::raylib.Vector3.__Internal*) __Instance)->z;
            }

            set
            {
                ((global::raylib.Vector3.__Internal*)__Instance)->z = value;
            }
        }
    }

    public unsafe partial class Vector4 : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 16)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal float x;

            [FieldOffset(4)]
            internal float y;

            [FieldOffset(8)]
            internal float z;

            [FieldOffset(12)]
            internal float w;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Vector4@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Vector4> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Vector4>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Vector4 __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Vector4(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Vector4 __CreateInstance(global::raylib.Vector4.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Vector4(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Vector4.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Vector4.__Internal));
            *(global::raylib.Vector4.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Vector4(global::raylib.Vector4.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Vector4(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Vector4()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Vector4.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Vector4(global::raylib.Vector4 _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Vector4.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Vector4.__Internal*) __Instance) = *((global::raylib.Vector4.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Vector4 __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public float X
        {
            get
            {
                return ((global::raylib.Vector4.__Internal*) __Instance)->x;
            }

            set
            {
                ((global::raylib.Vector4.__Internal*)__Instance)->x = value;
            }
        }

        public float Y
        {
            get
            {
                return ((global::raylib.Vector4.__Internal*) __Instance)->y;
            }

            set
            {
                ((global::raylib.Vector4.__Internal*)__Instance)->y = value;
            }
        }

        public float Z
        {
            get
            {
                return ((global::raylib.Vector4.__Internal*) __Instance)->z;
            }

            set
            {
                ((global::raylib.Vector4.__Internal*)__Instance)->z = value;
            }
        }

        public float W
        {
            get
            {
                return ((global::raylib.Vector4.__Internal*) __Instance)->w;
            }

            set
            {
                ((global::raylib.Vector4.__Internal*)__Instance)->w = value;
            }
        }
    }

    public unsafe partial class Matrix : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 64)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal float m0;

            [FieldOffset(4)]
            internal float m4;

            [FieldOffset(8)]
            internal float m8;

            [FieldOffset(12)]
            internal float m12;

            [FieldOffset(16)]
            internal float m1;

            [FieldOffset(20)]
            internal float m5;

            [FieldOffset(24)]
            internal float m9;

            [FieldOffset(28)]
            internal float m13;

            [FieldOffset(32)]
            internal float m2;

            [FieldOffset(36)]
            internal float m6;

            [FieldOffset(40)]
            internal float m10;

            [FieldOffset(44)]
            internal float m14;

            [FieldOffset(48)]
            internal float m3;

            [FieldOffset(52)]
            internal float m7;

            [FieldOffset(56)]
            internal float m11;

            [FieldOffset(60)]
            internal float m15;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Matrix@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Matrix> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Matrix>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Matrix __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Matrix(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Matrix __CreateInstance(global::raylib.Matrix.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Matrix(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Matrix.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Matrix.__Internal));
            *(global::raylib.Matrix.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Matrix(global::raylib.Matrix.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Matrix(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Matrix()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Matrix.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Matrix(global::raylib.Matrix _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Matrix.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Matrix.__Internal*) __Instance) = *((global::raylib.Matrix.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Matrix __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public float M0
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m0;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m0 = value;
            }
        }

        public float M4
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m4;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m4 = value;
            }
        }

        public float M8
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m8;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m8 = value;
            }
        }

        public float M12
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m12;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m12 = value;
            }
        }

        public float M1
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m1;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m1 = value;
            }
        }

        public float M5
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m5;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m5 = value;
            }
        }

        public float M9
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m9;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m9 = value;
            }
        }

        public float M13
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m13;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m13 = value;
            }
        }

        public float M2
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m2;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m2 = value;
            }
        }

        public float M6
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m6;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m6 = value;
            }
        }

        public float M10
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m10;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m10 = value;
            }
        }

        public float M14
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m14;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m14 = value;
            }
        }

        public float M3
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m3;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m3 = value;
            }
        }

        public float M7
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m7;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m7 = value;
            }
        }

        public float M11
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m11;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m11 = value;
            }
        }

        public float M15
        {
            get
            {
                return ((global::raylib.Matrix.__Internal*) __Instance)->m15;
            }

            set
            {
                ((global::raylib.Matrix.__Internal*)__Instance)->m15 = value;
            }
        }
    }

    public unsafe partial class Color : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 4)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal byte r;

            [FieldOffset(1)]
            internal byte g;

            [FieldOffset(2)]
            internal byte b;

            [FieldOffset(3)]
            internal byte a;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Color@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Color> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Color>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Color __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Color(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Color __CreateInstance(global::raylib.Color.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Color(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Color.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Color.__Internal));
            *(global::raylib.Color.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Color(global::raylib.Color.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Color(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Color()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Color.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Color(global::raylib.Color _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Color.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Color.__Internal*) __Instance) = *((global::raylib.Color.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Color __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public byte R
        {
            get
            {
                return ((global::raylib.Color.__Internal*) __Instance)->r;
            }

            set
            {
                ((global::raylib.Color.__Internal*)__Instance)->r = value;
            }
        }

        public byte G
        {
            get
            {
                return ((global::raylib.Color.__Internal*) __Instance)->g;
            }

            set
            {
                ((global::raylib.Color.__Internal*)__Instance)->g = value;
            }
        }

        public byte B
        {
            get
            {
                return ((global::raylib.Color.__Internal*) __Instance)->b;
            }

            set
            {
                ((global::raylib.Color.__Internal*)__Instance)->b = value;
            }
        }

        public byte A
        {
            get
            {
                return ((global::raylib.Color.__Internal*) __Instance)->a;
            }

            set
            {
                ((global::raylib.Color.__Internal*)__Instance)->a = value;
            }
        }
    }

    public unsafe partial class Rectangle : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 16)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal float x;

            [FieldOffset(4)]
            internal float y;

            [FieldOffset(8)]
            internal float width;

            [FieldOffset(12)]
            internal float height;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Rectangle@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Rectangle> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Rectangle>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Rectangle __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Rectangle(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Rectangle __CreateInstance(global::raylib.Rectangle.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Rectangle(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Rectangle.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Rectangle.__Internal));
            *(global::raylib.Rectangle.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Rectangle(global::raylib.Rectangle.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Rectangle(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Rectangle()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Rectangle.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Rectangle(global::raylib.Rectangle _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Rectangle.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Rectangle.__Internal*) __Instance) = *((global::raylib.Rectangle.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Rectangle __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public float X
        {
            get
            {
                return ((global::raylib.Rectangle.__Internal*) __Instance)->x;
            }

            set
            {
                ((global::raylib.Rectangle.__Internal*)__Instance)->x = value;
            }
        }

        public float Y
        {
            get
            {
                return ((global::raylib.Rectangle.__Internal*) __Instance)->y;
            }

            set
            {
                ((global::raylib.Rectangle.__Internal*)__Instance)->y = value;
            }
        }

        public float Width
        {
            get
            {
                return ((global::raylib.Rectangle.__Internal*) __Instance)->width;
            }

            set
            {
                ((global::raylib.Rectangle.__Internal*)__Instance)->width = value;
            }
        }

        public float Height
        {
            get
            {
                return ((global::raylib.Rectangle.__Internal*) __Instance)->height;
            }

            set
            {
                ((global::raylib.Rectangle.__Internal*)__Instance)->height = value;
            }
        }
    }

    public unsafe partial class Image : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 24)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal global::System.IntPtr data;

            [FieldOffset(8)]
            internal int width;

            [FieldOffset(12)]
            internal int height;

            [FieldOffset(16)]
            internal int mipmaps;

            [FieldOffset(20)]
            internal int format;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Image@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Image> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Image>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Image __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Image(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Image __CreateInstance(global::raylib.Image.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Image(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Image.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Image.__Internal));
            *(global::raylib.Image.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Image(global::raylib.Image.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Image(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Image()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Image.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Image(global::raylib.Image _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Image.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Image.__Internal*) __Instance) = *((global::raylib.Image.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Image __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public global::System.IntPtr Data
        {
            get
            {
                return ((global::raylib.Image.__Internal*) __Instance)->data;
            }

            set
            {
                ((global::raylib.Image.__Internal*)__Instance)->data = (global::System.IntPtr) value;
            }
        }

        public int Width
        {
            get
            {
                return ((global::raylib.Image.__Internal*) __Instance)->width;
            }

            set
            {
                ((global::raylib.Image.__Internal*)__Instance)->width = value;
            }
        }

        public int Height
        {
            get
            {
                return ((global::raylib.Image.__Internal*) __Instance)->height;
            }

            set
            {
                ((global::raylib.Image.__Internal*)__Instance)->height = value;
            }
        }

        public int Mipmaps
        {
            get
            {
                return ((global::raylib.Image.__Internal*) __Instance)->mipmaps;
            }

            set
            {
                ((global::raylib.Image.__Internal*)__Instance)->mipmaps = value;
            }
        }

        public int Format
        {
            get
            {
                return ((global::raylib.Image.__Internal*) __Instance)->format;
            }

            set
            {
                ((global::raylib.Image.__Internal*)__Instance)->format = value;
            }
        }
    }

    public unsafe partial class Texture2D : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 20)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal uint id;

            [FieldOffset(4)]
            internal int width;

            [FieldOffset(8)]
            internal int height;

            [FieldOffset(12)]
            internal int mipmaps;

            [FieldOffset(16)]
            internal int format;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Texture2D@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Texture2D> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Texture2D>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Texture2D __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Texture2D(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Texture2D __CreateInstance(global::raylib.Texture2D.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Texture2D(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Texture2D.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Texture2D.__Internal));
            *(global::raylib.Texture2D.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Texture2D(global::raylib.Texture2D.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Texture2D(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Texture2D()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Texture2D.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Texture2D(global::raylib.Texture2D _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Texture2D.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Texture2D.__Internal*) __Instance) = *((global::raylib.Texture2D.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Texture2D __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public uint Id
        {
            get
            {
                return ((global::raylib.Texture2D.__Internal*) __Instance)->id;
            }

            set
            {
                ((global::raylib.Texture2D.__Internal*)__Instance)->id = value;
            }
        }

        public int Width
        {
            get
            {
                return ((global::raylib.Texture2D.__Internal*) __Instance)->width;
            }

            set
            {
                ((global::raylib.Texture2D.__Internal*)__Instance)->width = value;
            }
        }

        public int Height
        {
            get
            {
                return ((global::raylib.Texture2D.__Internal*) __Instance)->height;
            }

            set
            {
                ((global::raylib.Texture2D.__Internal*)__Instance)->height = value;
            }
        }

        public int Mipmaps
        {
            get
            {
                return ((global::raylib.Texture2D.__Internal*) __Instance)->mipmaps;
            }

            set
            {
                ((global::raylib.Texture2D.__Internal*)__Instance)->mipmaps = value;
            }
        }

        public int Format
        {
            get
            {
                return ((global::raylib.Texture2D.__Internal*) __Instance)->format;
            }

            set
            {
                ((global::raylib.Texture2D.__Internal*)__Instance)->format = value;
            }
        }
    }

    public unsafe partial class RenderTexture2D : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 44)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal uint id;

            [FieldOffset(4)]
            internal global::raylib.Texture2D.__Internal texture;

            [FieldOffset(24)]
            internal global::raylib.Texture2D.__Internal depth;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0RenderTexture2D@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.RenderTexture2D> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.RenderTexture2D>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.RenderTexture2D __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.RenderTexture2D(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.RenderTexture2D __CreateInstance(global::raylib.RenderTexture2D.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.RenderTexture2D(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.RenderTexture2D.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.RenderTexture2D.__Internal));
            *(global::raylib.RenderTexture2D.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private RenderTexture2D(global::raylib.RenderTexture2D.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected RenderTexture2D(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public RenderTexture2D()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.RenderTexture2D.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public RenderTexture2D(global::raylib.RenderTexture2D _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.RenderTexture2D.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.RenderTexture2D.__Internal*) __Instance) = *((global::raylib.RenderTexture2D.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.RenderTexture2D __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public uint Id
        {
            get
            {
                return ((global::raylib.RenderTexture2D.__Internal*) __Instance)->id;
            }

            set
            {
                ((global::raylib.RenderTexture2D.__Internal*)__Instance)->id = value;
            }
        }

        public global::raylib.Texture2D Texture
        {
            get
            {
                return global::raylib.Texture2D.__CreateInstance(new global::System.IntPtr(&((global::raylib.RenderTexture2D.__Internal*) __Instance)->texture));
            }

            set
            {
                ((global::raylib.RenderTexture2D.__Internal*)__Instance)->texture = ReferenceEquals(value, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) value.__Instance;
            }
        }

        public global::raylib.Texture2D Depth
        {
            get
            {
                return global::raylib.Texture2D.__CreateInstance(new global::System.IntPtr(&((global::raylib.RenderTexture2D.__Internal*) __Instance)->depth));
            }

            set
            {
                ((global::raylib.RenderTexture2D.__Internal*)__Instance)->depth = ReferenceEquals(value, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) value.__Instance;
            }
        }
    }

    public unsafe partial class CharInfo : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 40)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal int value;

            [FieldOffset(4)]
            internal global::raylib.Rectangle.__Internal rec;

            [FieldOffset(20)]
            internal int offsetX;

            [FieldOffset(24)]
            internal int offsetY;

            [FieldOffset(28)]
            internal int advanceX;

            [FieldOffset(32)]
            internal global::System.IntPtr data;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0CharInfo@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.CharInfo> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.CharInfo>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.CharInfo __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.CharInfo(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.CharInfo __CreateInstance(global::raylib.CharInfo.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.CharInfo(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.CharInfo.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.CharInfo.__Internal));
            *(global::raylib.CharInfo.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private CharInfo(global::raylib.CharInfo.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected CharInfo(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public CharInfo()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.CharInfo.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public CharInfo(global::raylib.CharInfo _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.CharInfo.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.CharInfo.__Internal*) __Instance) = *((global::raylib.CharInfo.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.CharInfo __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public int Value
        {
            get
            {
                return ((global::raylib.CharInfo.__Internal*) __Instance)->value;
            }

            set
            {
                ((global::raylib.CharInfo.__Internal*)__Instance)->value = value;
            }
        }

        public global::raylib.Rectangle Rec
        {
            get
            {
                return global::raylib.Rectangle.__CreateInstance(new global::System.IntPtr(&((global::raylib.CharInfo.__Internal*) __Instance)->rec));
            }

            set
            {
                ((global::raylib.CharInfo.__Internal*)__Instance)->rec = ReferenceEquals(value, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) value.__Instance;
            }
        }

        public int OffsetX
        {
            get
            {
                return ((global::raylib.CharInfo.__Internal*) __Instance)->offsetX;
            }

            set
            {
                ((global::raylib.CharInfo.__Internal*)__Instance)->offsetX = value;
            }
        }

        public int OffsetY
        {
            get
            {
                return ((global::raylib.CharInfo.__Internal*) __Instance)->offsetY;
            }

            set
            {
                ((global::raylib.CharInfo.__Internal*)__Instance)->offsetY = value;
            }
        }

        public int AdvanceX
        {
            get
            {
                return ((global::raylib.CharInfo.__Internal*) __Instance)->advanceX;
            }

            set
            {
                ((global::raylib.CharInfo.__Internal*)__Instance)->advanceX = value;
            }
        }

        public byte* Data
        {
            get
            {
                return (byte*) ((global::raylib.CharInfo.__Internal*) __Instance)->data;
            }

            set
            {
                ((global::raylib.CharInfo.__Internal*)__Instance)->data = (global::System.IntPtr) value;
            }
        }
    }

    public unsafe partial class Font : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 40)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal global::raylib.Texture2D.__Internal texture;

            [FieldOffset(20)]
            internal int baseSize;

            [FieldOffset(24)]
            internal int charsCount;

            [FieldOffset(32)]
            internal global::System.IntPtr chars;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Font@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Font> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Font>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Font __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Font(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Font __CreateInstance(global::raylib.Font.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Font(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Font.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Font.__Internal));
            *(global::raylib.Font.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Font(global::raylib.Font.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Font(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Font()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Font.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Font(global::raylib.Font _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Font.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Font.__Internal*) __Instance) = *((global::raylib.Font.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Font __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public global::raylib.Texture2D Texture
        {
            get
            {
                return global::raylib.Texture2D.__CreateInstance(new global::System.IntPtr(&((global::raylib.Font.__Internal*) __Instance)->texture));
            }

            set
            {
                ((global::raylib.Font.__Internal*)__Instance)->texture = ReferenceEquals(value, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) value.__Instance;
            }
        }

        public int BaseSize
        {
            get
            {
                return ((global::raylib.Font.__Internal*) __Instance)->baseSize;
            }

            set
            {
                ((global::raylib.Font.__Internal*)__Instance)->baseSize = value;
            }
        }

        public int CharsCount
        {
            get
            {
                return ((global::raylib.Font.__Internal*) __Instance)->charsCount;
            }

            set
            {
                ((global::raylib.Font.__Internal*)__Instance)->charsCount = value;
            }
        }

        public global::raylib.CharInfo Chars
        {
            get
            {
                global::raylib.CharInfo __result0;
                if (((global::raylib.Font.__Internal*) __Instance)->chars == IntPtr.Zero) __result0 = null;
                else if (global::raylib.CharInfo.NativeToManagedMap.ContainsKey(((global::raylib.Font.__Internal*) __Instance)->chars))
                    __result0 = (global::raylib.CharInfo) global::raylib.CharInfo.NativeToManagedMap[((global::raylib.Font.__Internal*) __Instance)->chars];
                else __result0 = global::raylib.CharInfo.__CreateInstance(((global::raylib.Font.__Internal*) __Instance)->chars);
                return __result0;
            }

            set
            {
                ((global::raylib.Font.__Internal*)__Instance)->chars = ReferenceEquals(value, null) ? global::System.IntPtr.Zero : value.__Instance;
            }
        }
    }

    public unsafe partial class Camera3D : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 44)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal global::raylib.Vector3.__Internal position;

            [FieldOffset(12)]
            internal global::raylib.Vector3.__Internal target;

            [FieldOffset(24)]
            internal global::raylib.Vector3.__Internal up;

            [FieldOffset(36)]
            internal float fovy;

            [FieldOffset(40)]
            internal int type;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Camera3D@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Camera3D> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Camera3D>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Camera3D __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Camera3D(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Camera3D __CreateInstance(global::raylib.Camera3D.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Camera3D(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Camera3D.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Camera3D.__Internal));
            *(global::raylib.Camera3D.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Camera3D(global::raylib.Camera3D.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Camera3D(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Camera3D()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Camera3D.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Camera3D(global::raylib.Camera3D _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Camera3D.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Camera3D.__Internal*) __Instance) = *((global::raylib.Camera3D.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Camera3D __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public global::raylib.Vector3 Position
        {
            get
            {
                return global::raylib.Vector3.__CreateInstance(new global::System.IntPtr(&((global::raylib.Camera3D.__Internal*) __Instance)->position));
            }

            set
            {
                ((global::raylib.Camera3D.__Internal*)__Instance)->position = ReferenceEquals(value, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) value.__Instance;
            }
        }

        public global::raylib.Vector3 Target
        {
            get
            {
                return global::raylib.Vector3.__CreateInstance(new global::System.IntPtr(&((global::raylib.Camera3D.__Internal*) __Instance)->target));
            }

            set
            {
                ((global::raylib.Camera3D.__Internal*)__Instance)->target = ReferenceEquals(value, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) value.__Instance;
            }
        }

        public global::raylib.Vector3 Up
        {
            get
            {
                return global::raylib.Vector3.__CreateInstance(new global::System.IntPtr(&((global::raylib.Camera3D.__Internal*) __Instance)->up));
            }

            set
            {
                ((global::raylib.Camera3D.__Internal*)__Instance)->up = ReferenceEquals(value, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) value.__Instance;
            }
        }

        public float Fovy
        {
            get
            {
                return ((global::raylib.Camera3D.__Internal*) __Instance)->fovy;
            }

            set
            {
                ((global::raylib.Camera3D.__Internal*)__Instance)->fovy = value;
            }
        }

        public int Type
        {
            get
            {
                return ((global::raylib.Camera3D.__Internal*) __Instance)->type;
            }

            set
            {
                ((global::raylib.Camera3D.__Internal*)__Instance)->type = value;
            }
        }
    }

    public unsafe partial class Camera2D : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 24)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal global::raylib.Vector2.__Internal offset;

            [FieldOffset(8)]
            internal global::raylib.Vector2.__Internal target;

            [FieldOffset(16)]
            internal float rotation;

            [FieldOffset(20)]
            internal float zoom;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Camera2D@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Camera2D> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Camera2D>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Camera2D __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Camera2D(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Camera2D __CreateInstance(global::raylib.Camera2D.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Camera2D(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Camera2D.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Camera2D.__Internal));
            *(global::raylib.Camera2D.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Camera2D(global::raylib.Camera2D.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Camera2D(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Camera2D()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Camera2D.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Camera2D(global::raylib.Camera2D _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Camera2D.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Camera2D.__Internal*) __Instance) = *((global::raylib.Camera2D.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Camera2D __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public global::raylib.Vector2 Offset
        {
            get
            {
                return global::raylib.Vector2.__CreateInstance(new global::System.IntPtr(&((global::raylib.Camera2D.__Internal*) __Instance)->offset));
            }

            set
            {
                ((global::raylib.Camera2D.__Internal*)__Instance)->offset = ReferenceEquals(value, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) value.__Instance;
            }
        }

        public global::raylib.Vector2 Target
        {
            get
            {
                return global::raylib.Vector2.__CreateInstance(new global::System.IntPtr(&((global::raylib.Camera2D.__Internal*) __Instance)->target));
            }

            set
            {
                ((global::raylib.Camera2D.__Internal*)__Instance)->target = ReferenceEquals(value, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) value.__Instance;
            }
        }

        public float Rotation
        {
            get
            {
                return ((global::raylib.Camera2D.__Internal*) __Instance)->rotation;
            }

            set
            {
                ((global::raylib.Camera2D.__Internal*)__Instance)->rotation = value;
            }
        }

        public float Zoom
        {
            get
            {
                return ((global::raylib.Camera2D.__Internal*) __Instance)->zoom;
            }

            set
            {
                ((global::raylib.Camera2D.__Internal*)__Instance)->zoom = value;
            }
        }
    }

    public unsafe partial class BoundingBox : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 24)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal global::raylib.Vector3.__Internal min;

            [FieldOffset(12)]
            internal global::raylib.Vector3.__Internal max;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0BoundingBox@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.BoundingBox> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.BoundingBox>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.BoundingBox __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.BoundingBox(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.BoundingBox __CreateInstance(global::raylib.BoundingBox.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.BoundingBox(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.BoundingBox.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.BoundingBox.__Internal));
            *(global::raylib.BoundingBox.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private BoundingBox(global::raylib.BoundingBox.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected BoundingBox(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public BoundingBox()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.BoundingBox.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public BoundingBox(global::raylib.BoundingBox _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.BoundingBox.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.BoundingBox.__Internal*) __Instance) = *((global::raylib.BoundingBox.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.BoundingBox __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public global::raylib.Vector3 Min
        {
            get
            {
                return global::raylib.Vector3.__CreateInstance(new global::System.IntPtr(&((global::raylib.BoundingBox.__Internal*) __Instance)->min));
            }

            set
            {
                ((global::raylib.BoundingBox.__Internal*)__Instance)->min = ReferenceEquals(value, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) value.__Instance;
            }
        }

        public global::raylib.Vector3 Max
        {
            get
            {
                return global::raylib.Vector3.__CreateInstance(new global::System.IntPtr(&((global::raylib.BoundingBox.__Internal*) __Instance)->max));
            }

            set
            {
                ((global::raylib.BoundingBox.__Internal*)__Instance)->max = ReferenceEquals(value, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) value.__Instance;
            }
        }
    }

    public unsafe partial class Mesh : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 96)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal int vertexCount;

            [FieldOffset(4)]
            internal int triangleCount;

            [FieldOffset(8)]
            internal global::System.IntPtr vertices;

            [FieldOffset(16)]
            internal global::System.IntPtr texcoords;

            [FieldOffset(24)]
            internal global::System.IntPtr texcoords2;

            [FieldOffset(32)]
            internal global::System.IntPtr normals;

            [FieldOffset(40)]
            internal global::System.IntPtr tangents;

            [FieldOffset(48)]
            internal global::System.IntPtr colors;

            [FieldOffset(56)]
            internal global::System.IntPtr indices;

            [FieldOffset(64)]
            internal uint vaoId;

            [FieldOffset(68)]
            internal fixed uint vboId[7];

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Mesh@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Mesh> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Mesh>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Mesh __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Mesh(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Mesh __CreateInstance(global::raylib.Mesh.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Mesh(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Mesh.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Mesh.__Internal));
            *(global::raylib.Mesh.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Mesh(global::raylib.Mesh.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Mesh(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Mesh()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Mesh.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Mesh(global::raylib.Mesh _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Mesh.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Mesh.__Internal*) __Instance) = *((global::raylib.Mesh.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Mesh __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public int VertexCount
        {
            get
            {
                return ((global::raylib.Mesh.__Internal*) __Instance)->vertexCount;
            }

            set
            {
                ((global::raylib.Mesh.__Internal*)__Instance)->vertexCount = value;
            }
        }

        public int TriangleCount
        {
            get
            {
                return ((global::raylib.Mesh.__Internal*) __Instance)->triangleCount;
            }

            set
            {
                ((global::raylib.Mesh.__Internal*)__Instance)->triangleCount = value;
            }
        }

        public float* Vertices
        {
            get
            {
                return (float*) ((global::raylib.Mesh.__Internal*) __Instance)->vertices;
            }

            set
            {
                ((global::raylib.Mesh.__Internal*)__Instance)->vertices = (global::System.IntPtr) value;
            }
        }

        public float* Texcoords
        {
            get
            {
                return (float*) ((global::raylib.Mesh.__Internal*) __Instance)->texcoords;
            }

            set
            {
                ((global::raylib.Mesh.__Internal*)__Instance)->texcoords = (global::System.IntPtr) value;
            }
        }

        public float* Texcoords2
        {
            get
            {
                return (float*) ((global::raylib.Mesh.__Internal*) __Instance)->texcoords2;
            }

            set
            {
                ((global::raylib.Mesh.__Internal*)__Instance)->texcoords2 = (global::System.IntPtr) value;
            }
        }

        public float* Normals
        {
            get
            {
                return (float*) ((global::raylib.Mesh.__Internal*) __Instance)->normals;
            }

            set
            {
                ((global::raylib.Mesh.__Internal*)__Instance)->normals = (global::System.IntPtr) value;
            }
        }

        public float* Tangents
        {
            get
            {
                return (float*) ((global::raylib.Mesh.__Internal*) __Instance)->tangents;
            }

            set
            {
                ((global::raylib.Mesh.__Internal*)__Instance)->tangents = (global::System.IntPtr) value;
            }
        }

        public byte* Colors
        {
            get
            {
                return (byte*) ((global::raylib.Mesh.__Internal*) __Instance)->colors;
            }

            set
            {
                ((global::raylib.Mesh.__Internal*)__Instance)->colors = (global::System.IntPtr) value;
            }
        }

        public ushort* Indices
        {
            get
            {
                return (ushort*) ((global::raylib.Mesh.__Internal*) __Instance)->indices;
            }

            set
            {
                ((global::raylib.Mesh.__Internal*)__Instance)->indices = (global::System.IntPtr) value;
            }
        }

        public uint VaoId
        {
            get
            {
                return ((global::raylib.Mesh.__Internal*) __Instance)->vaoId;
            }

            set
            {
                ((global::raylib.Mesh.__Internal*)__Instance)->vaoId = value;
            }
        }

        public uint[] VboId
        {
            get
            {
                uint[] __value = null;
                if (((global::raylib.Mesh.__Internal*) __Instance)->vboId != null)
                {
                    __value = new uint[7];
                    for (int i = 0; i < 7; i++)
                        __value[i] = ((global::raylib.Mesh.__Internal*) __Instance)->vboId[i];
                }
                return __value;
            }

            set
            {
                if (value != null)
                {
                    for (int i = 0; i < 7; i++)
                        ((global::raylib.Mesh.__Internal*)__Instance)->vboId[i] = value[i];
                }
            }
        }
    }

    public unsafe partial class Shader : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 132)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal uint id;

            [FieldOffset(4)]
            internal fixed int locs[32];

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Shader@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Shader> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Shader>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Shader __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Shader(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Shader __CreateInstance(global::raylib.Shader.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Shader(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Shader.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Shader.__Internal));
            *(global::raylib.Shader.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Shader(global::raylib.Shader.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Shader(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Shader()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Shader.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Shader(global::raylib.Shader _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Shader.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Shader.__Internal*) __Instance) = *((global::raylib.Shader.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Shader __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public uint Id
        {
            get
            {
                return ((global::raylib.Shader.__Internal*) __Instance)->id;
            }

            set
            {
                ((global::raylib.Shader.__Internal*)__Instance)->id = value;
            }
        }

        public int[] Locs
        {
            get
            {
                int[] __value = null;
                if (((global::raylib.Shader.__Internal*) __Instance)->locs != null)
                {
                    __value = new int[32];
                    for (int i = 0; i < 32; i++)
                        __value[i] = ((global::raylib.Shader.__Internal*) __Instance)->locs[i];
                }
                return __value;
            }

            set
            {
                if (value != null)
                {
                    for (int i = 0; i < 32; i++)
                        ((global::raylib.Shader.__Internal*)__Instance)->locs[i] = value[i];
                }
            }
        }
    }

    public unsafe partial class MaterialMap : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 28)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal global::raylib.Texture2D.__Internal texture;

            [FieldOffset(20)]
            internal global::raylib.Color.__Internal color;

            [FieldOffset(24)]
            internal float value;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0MaterialMap@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.MaterialMap> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.MaterialMap>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.MaterialMap __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.MaterialMap(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.MaterialMap __CreateInstance(global::raylib.MaterialMap.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.MaterialMap(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.MaterialMap.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.MaterialMap.__Internal));
            *(global::raylib.MaterialMap.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private MaterialMap(global::raylib.MaterialMap.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected MaterialMap(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public MaterialMap()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.MaterialMap.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public MaterialMap(global::raylib.MaterialMap _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.MaterialMap.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.MaterialMap.__Internal*) __Instance) = *((global::raylib.MaterialMap.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.MaterialMap __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public global::raylib.Texture2D Texture
        {
            get
            {
                return global::raylib.Texture2D.__CreateInstance(new global::System.IntPtr(&((global::raylib.MaterialMap.__Internal*) __Instance)->texture));
            }

            set
            {
                ((global::raylib.MaterialMap.__Internal*)__Instance)->texture = ReferenceEquals(value, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) value.__Instance;
            }
        }

        public global::raylib.Color Color
        {
            get
            {
                return global::raylib.Color.__CreateInstance(new global::System.IntPtr(&((global::raylib.MaterialMap.__Internal*) __Instance)->color));
            }

            set
            {
                ((global::raylib.MaterialMap.__Internal*)__Instance)->color = ReferenceEquals(value, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) value.__Instance;
            }
        }

        public float Value
        {
            get
            {
                return ((global::raylib.MaterialMap.__Internal*) __Instance)->value;
            }

            set
            {
                ((global::raylib.MaterialMap.__Internal*)__Instance)->value = value;
            }
        }
    }

    public unsafe partial class Material : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 480)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal global::raylib.Shader.__Internal shader;

            [FieldOffset(132)]
            internal fixed byte maps[336];

            [FieldOffset(472)]
            internal global::System.IntPtr @params;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Material@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Material> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Material>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Material __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Material(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Material __CreateInstance(global::raylib.Material.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Material(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Material.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Material.__Internal));
            *(global::raylib.Material.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Material(global::raylib.Material.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Material(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Material()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Material.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Material(global::raylib.Material _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Material.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Material.__Internal*) __Instance) = *((global::raylib.Material.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Material __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public global::raylib.Shader Shader
        {
            get
            {
                return global::raylib.Shader.__CreateInstance(new global::System.IntPtr(&((global::raylib.Material.__Internal*) __Instance)->shader));
            }

            set
            {
                ((global::raylib.Material.__Internal*)__Instance)->shader = ReferenceEquals(value, null) ? new global::raylib.Shader.__Internal() : *(global::raylib.Shader.__Internal*) value.__Instance;
            }
        }

        public global::raylib.MaterialMap[] Maps
        {
            get
            {
                global::raylib.MaterialMap[] __value = null;
                if (((global::raylib.Material.__Internal*) __Instance)->maps != null)
                {
                    __value = new global::raylib.MaterialMap[12];
                    for (int i = 0; i < 12; i++)
                        __value[i] = global::raylib.MaterialMap.__CreateInstance(*((global::raylib.MaterialMap.__Internal*)&(((global::raylib.Material.__Internal*) __Instance)->maps[i * sizeof(global::raylib.MaterialMap.__Internal)])));
                }
                return __value;
            }

            set
            {
                if (value != null)
                {
                    if (value.Length != 12)
                        throw new ArgumentOutOfRangeException("value", "The dimensions of the provided array don't match the required size.");
                    for (int i = 0; i < 12; i++)
                        *(global::raylib.MaterialMap.__Internal*) &((global::raylib.Material.__Internal*)__Instance)->maps[i * sizeof(global::raylib.MaterialMap.__Internal)] = *(global::raylib.MaterialMap.__Internal*)value[i].__Instance;
                }
            }
        }

        public float* Params
        {
            get
            {
                return (float*) ((global::raylib.Material.__Internal*) __Instance)->@params;
            }

            set
            {
                ((global::raylib.Material.__Internal*)__Instance)->@params = (global::System.IntPtr) value;
            }
        }
    }

    public unsafe partial class Model : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 640)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal global::raylib.Mesh.__Internal mesh;

            [FieldOffset(96)]
            internal global::raylib.Matrix.__Internal transform;

            [FieldOffset(160)]
            internal global::raylib.Material.__Internal material;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Model@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Model> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Model>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Model __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Model(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Model __CreateInstance(global::raylib.Model.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Model(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Model.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Model.__Internal));
            *(global::raylib.Model.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Model(global::raylib.Model.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Model(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Model()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Model.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Model(global::raylib.Model _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Model.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Model.__Internal*) __Instance) = *((global::raylib.Model.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Model __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public global::raylib.Mesh Mesh
        {
            get
            {
                return global::raylib.Mesh.__CreateInstance(new global::System.IntPtr(&((global::raylib.Model.__Internal*) __Instance)->mesh));
            }

            set
            {
                ((global::raylib.Model.__Internal*)__Instance)->mesh = ReferenceEquals(value, null) ? new global::raylib.Mesh.__Internal() : *(global::raylib.Mesh.__Internal*) value.__Instance;
            }
        }

        public global::raylib.Matrix Transform
        {
            get
            {
                return global::raylib.Matrix.__CreateInstance(new global::System.IntPtr(&((global::raylib.Model.__Internal*) __Instance)->transform));
            }

            set
            {
                ((global::raylib.Model.__Internal*)__Instance)->transform = ReferenceEquals(value, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) value.__Instance;
            }
        }

        public global::raylib.Material Material
        {
            get
            {
                return global::raylib.Material.__CreateInstance(new global::System.IntPtr(&((global::raylib.Model.__Internal*) __Instance)->material));
            }

            set
            {
                ((global::raylib.Model.__Internal*)__Instance)->material = ReferenceEquals(value, null) ? new global::raylib.Material.__Internal() : *(global::raylib.Material.__Internal*) value.__Instance;
            }
        }
    }

    public unsafe partial class Ray : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 24)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal global::raylib.Vector3.__Internal position;

            [FieldOffset(12)]
            internal global::raylib.Vector3.__Internal direction;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Ray@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Ray> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Ray>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Ray __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Ray(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Ray __CreateInstance(global::raylib.Ray.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Ray(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Ray.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Ray.__Internal));
            *(global::raylib.Ray.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Ray(global::raylib.Ray.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Ray(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Ray()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Ray.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Ray(global::raylib.Ray _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Ray.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Ray.__Internal*) __Instance) = *((global::raylib.Ray.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Ray __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public global::raylib.Vector3 Position
        {
            get
            {
                return global::raylib.Vector3.__CreateInstance(new global::System.IntPtr(&((global::raylib.Ray.__Internal*) __Instance)->position));
            }

            set
            {
                ((global::raylib.Ray.__Internal*)__Instance)->position = ReferenceEquals(value, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) value.__Instance;
            }
        }

        public global::raylib.Vector3 Direction
        {
            get
            {
                return global::raylib.Vector3.__CreateInstance(new global::System.IntPtr(&((global::raylib.Ray.__Internal*) __Instance)->direction));
            }

            set
            {
                ((global::raylib.Ray.__Internal*)__Instance)->direction = ReferenceEquals(value, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) value.__Instance;
            }
        }
    }

    public unsafe partial class RayHitInfo : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 32)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal byte hit;

            [FieldOffset(4)]
            internal float distance;

            [FieldOffset(8)]
            internal global::raylib.Vector3.__Internal position;

            [FieldOffset(20)]
            internal global::raylib.Vector3.__Internal normal;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0RayHitInfo@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.RayHitInfo> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.RayHitInfo>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.RayHitInfo __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.RayHitInfo(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.RayHitInfo __CreateInstance(global::raylib.RayHitInfo.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.RayHitInfo(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.RayHitInfo.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.RayHitInfo.__Internal));
            *(global::raylib.RayHitInfo.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private RayHitInfo(global::raylib.RayHitInfo.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected RayHitInfo(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public RayHitInfo()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.RayHitInfo.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public RayHitInfo(global::raylib.RayHitInfo _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.RayHitInfo.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.RayHitInfo.__Internal*) __Instance) = *((global::raylib.RayHitInfo.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.RayHitInfo __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public bool Hit
        {
            get
            {
                return ((global::raylib.RayHitInfo.__Internal*) __Instance)->hit != 0;
            }

            set
            {
                ((global::raylib.RayHitInfo.__Internal*)__Instance)->hit = (byte) (value ? 1 : 0);
            }
        }

        public float Distance
        {
            get
            {
                return ((global::raylib.RayHitInfo.__Internal*) __Instance)->distance;
            }

            set
            {
                ((global::raylib.RayHitInfo.__Internal*)__Instance)->distance = value;
            }
        }

        public global::raylib.Vector3 Position
        {
            get
            {
                return global::raylib.Vector3.__CreateInstance(new global::System.IntPtr(&((global::raylib.RayHitInfo.__Internal*) __Instance)->position));
            }

            set
            {
                ((global::raylib.RayHitInfo.__Internal*)__Instance)->position = ReferenceEquals(value, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) value.__Instance;
            }
        }

        public global::raylib.Vector3 Normal
        {
            get
            {
                return global::raylib.Vector3.__CreateInstance(new global::System.IntPtr(&((global::raylib.RayHitInfo.__Internal*) __Instance)->normal));
            }

            set
            {
                ((global::raylib.RayHitInfo.__Internal*)__Instance)->normal = ReferenceEquals(value, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) value.__Instance;
            }
        }
    }

    public unsafe partial class Wave : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 24)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal uint sampleCount;

            [FieldOffset(4)]
            internal uint sampleRate;

            [FieldOffset(8)]
            internal uint sampleSize;

            [FieldOffset(12)]
            internal uint channels;

            [FieldOffset(16)]
            internal global::System.IntPtr data;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Wave@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Wave> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Wave>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Wave __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Wave(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Wave __CreateInstance(global::raylib.Wave.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Wave(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Wave.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Wave.__Internal));
            *(global::raylib.Wave.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Wave(global::raylib.Wave.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Wave(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Wave()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Wave.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Wave(global::raylib.Wave _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Wave.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Wave.__Internal*) __Instance) = *((global::raylib.Wave.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Wave __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public uint SampleCount
        {
            get
            {
                return ((global::raylib.Wave.__Internal*) __Instance)->sampleCount;
            }

            set
            {
                ((global::raylib.Wave.__Internal*)__Instance)->sampleCount = value;
            }
        }

        public uint SampleRate
        {
            get
            {
                return ((global::raylib.Wave.__Internal*) __Instance)->sampleRate;
            }

            set
            {
                ((global::raylib.Wave.__Internal*)__Instance)->sampleRate = value;
            }
        }

        public uint SampleSize
        {
            get
            {
                return ((global::raylib.Wave.__Internal*) __Instance)->sampleSize;
            }

            set
            {
                ((global::raylib.Wave.__Internal*)__Instance)->sampleSize = value;
            }
        }

        public uint Channels
        {
            get
            {
                return ((global::raylib.Wave.__Internal*) __Instance)->channels;
            }

            set
            {
                ((global::raylib.Wave.__Internal*)__Instance)->channels = value;
            }
        }

        public global::System.IntPtr Data
        {
            get
            {
                return ((global::raylib.Wave.__Internal*) __Instance)->data;
            }

            set
            {
                ((global::raylib.Wave.__Internal*)__Instance)->data = (global::System.IntPtr) value;
            }
        }
    }

    public unsafe partial class Sound : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 24)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal global::System.IntPtr audioBuffer;

            [FieldOffset(8)]
            internal uint source;

            [FieldOffset(12)]
            internal uint buffer;

            [FieldOffset(16)]
            internal int format;

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0Sound@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Sound> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Sound>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Sound __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Sound(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Sound __CreateInstance(global::raylib.Sound.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Sound(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Sound.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Sound.__Internal));
            *(global::raylib.Sound.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Sound(global::raylib.Sound.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Sound(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Sound()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Sound.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Sound(global::raylib.Sound _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Sound.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Sound.__Internal*) __Instance) = *((global::raylib.Sound.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Sound __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public global::System.IntPtr AudioBuffer
        {
            get
            {
                return ((global::raylib.Sound.__Internal*) __Instance)->audioBuffer;
            }

            set
            {
                ((global::raylib.Sound.__Internal*)__Instance)->audioBuffer = (global::System.IntPtr) value;
            }
        }

        public uint Source
        {
            get
            {
                return ((global::raylib.Sound.__Internal*) __Instance)->source;
            }

            set
            {
                ((global::raylib.Sound.__Internal*)__Instance)->source = value;
            }
        }

        public uint Buffer
        {
            get
            {
                return ((global::raylib.Sound.__Internal*) __Instance)->buffer;
            }

            set
            {
                ((global::raylib.Sound.__Internal*)__Instance)->buffer = value;
            }
        }

        public int Format
        {
            get
            {
                return ((global::raylib.Sound.__Internal*) __Instance)->format;
            }

            set
            {
                ((global::raylib.Sound.__Internal*)__Instance)->format = value;
            }
        }
    }

    public unsafe partial class MusicData
    {
        [StructLayout(LayoutKind.Explicit, Size = 0)]
        public partial struct __Internal
        {
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.MusicData> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.MusicData>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.MusicData __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.MusicData(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.MusicData __CreateInstance(global::raylib.MusicData.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.MusicData(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.MusicData.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.MusicData.__Internal));
            *(global::raylib.MusicData.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private MusicData(global::raylib.MusicData.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected MusicData(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }
    }

    public unsafe partial class AudioStream : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 40)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal uint sampleRate;

            [FieldOffset(4)]
            internal uint sampleSize;

            [FieldOffset(8)]
            internal uint channels;

            [FieldOffset(16)]
            internal global::System.IntPtr audioBuffer;

            [FieldOffset(24)]
            internal int format;

            [FieldOffset(28)]
            internal uint source;

            [FieldOffset(32)]
            internal fixed uint buffers[2];

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0AudioStream@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.AudioStream> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.AudioStream>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.AudioStream __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.AudioStream(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.AudioStream __CreateInstance(global::raylib.AudioStream.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.AudioStream(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.AudioStream.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.AudioStream.__Internal));
            *(global::raylib.AudioStream.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private AudioStream(global::raylib.AudioStream.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected AudioStream(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public AudioStream()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.AudioStream.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public AudioStream(global::raylib.AudioStream _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.AudioStream.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.AudioStream.__Internal*) __Instance) = *((global::raylib.AudioStream.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.AudioStream __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public uint SampleRate
        {
            get
            {
                return ((global::raylib.AudioStream.__Internal*) __Instance)->sampleRate;
            }

            set
            {
                ((global::raylib.AudioStream.__Internal*)__Instance)->sampleRate = value;
            }
        }

        public uint SampleSize
        {
            get
            {
                return ((global::raylib.AudioStream.__Internal*) __Instance)->sampleSize;
            }

            set
            {
                ((global::raylib.AudioStream.__Internal*)__Instance)->sampleSize = value;
            }
        }

        public uint Channels
        {
            get
            {
                return ((global::raylib.AudioStream.__Internal*) __Instance)->channels;
            }

            set
            {
                ((global::raylib.AudioStream.__Internal*)__Instance)->channels = value;
            }
        }

        public global::System.IntPtr AudioBuffer
        {
            get
            {
                return ((global::raylib.AudioStream.__Internal*) __Instance)->audioBuffer;
            }

            set
            {
                ((global::raylib.AudioStream.__Internal*)__Instance)->audioBuffer = (global::System.IntPtr) value;
            }
        }

        public int Format
        {
            get
            {
                return ((global::raylib.AudioStream.__Internal*) __Instance)->format;
            }

            set
            {
                ((global::raylib.AudioStream.__Internal*)__Instance)->format = value;
            }
        }

        public uint Source
        {
            get
            {
                return ((global::raylib.AudioStream.__Internal*) __Instance)->source;
            }

            set
            {
                ((global::raylib.AudioStream.__Internal*)__Instance)->source = value;
            }
        }

        public uint[] Buffers
        {
            get
            {
                uint[] __value = null;
                if (((global::raylib.AudioStream.__Internal*) __Instance)->buffers != null)
                {
                    __value = new uint[2];
                    for (int i = 0; i < 2; i++)
                        __value[i] = ((global::raylib.AudioStream.__Internal*) __Instance)->buffers[i];
                }
                return __value;
            }

            set
            {
                if (value != null)
                {
                    for (int i = 0; i < 2; i++)
                        ((global::raylib.AudioStream.__Internal*)__Instance)->buffers[i] = value[i];
                }
            }
        }
    }

    public unsafe partial class VrDeviceInfo : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 64)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal int hResolution;

            [FieldOffset(4)]
            internal int vResolution;

            [FieldOffset(8)]
            internal float hScreenSize;

            [FieldOffset(12)]
            internal float vScreenSize;

            [FieldOffset(16)]
            internal float vScreenCenter;

            [FieldOffset(20)]
            internal float eyeToScreenDistance;

            [FieldOffset(24)]
            internal float lensSeparationDistance;

            [FieldOffset(28)]
            internal float interpupillaryDistance;

            [FieldOffset(32)]
            internal fixed float lensDistortionValues[4];

            [FieldOffset(48)]
            internal fixed float chromaAbCorrection[4];

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0VrDeviceInfo@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.VrDeviceInfo> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.VrDeviceInfo>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.VrDeviceInfo __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.VrDeviceInfo(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.VrDeviceInfo __CreateInstance(global::raylib.VrDeviceInfo.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.VrDeviceInfo(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.VrDeviceInfo.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.VrDeviceInfo.__Internal));
            *(global::raylib.VrDeviceInfo.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private VrDeviceInfo(global::raylib.VrDeviceInfo.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected VrDeviceInfo(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public VrDeviceInfo()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.VrDeviceInfo.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public VrDeviceInfo(global::raylib.VrDeviceInfo _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.VrDeviceInfo.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.VrDeviceInfo.__Internal*) __Instance) = *((global::raylib.VrDeviceInfo.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.VrDeviceInfo __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public int HResolution
        {
            get
            {
                return ((global::raylib.VrDeviceInfo.__Internal*) __Instance)->hResolution;
            }

            set
            {
                ((global::raylib.VrDeviceInfo.__Internal*)__Instance)->hResolution = value;
            }
        }

        public int VResolution
        {
            get
            {
                return ((global::raylib.VrDeviceInfo.__Internal*) __Instance)->vResolution;
            }

            set
            {
                ((global::raylib.VrDeviceInfo.__Internal*)__Instance)->vResolution = value;
            }
        }

        public float HScreenSize
        {
            get
            {
                return ((global::raylib.VrDeviceInfo.__Internal*) __Instance)->hScreenSize;
            }

            set
            {
                ((global::raylib.VrDeviceInfo.__Internal*)__Instance)->hScreenSize = value;
            }
        }

        public float VScreenSize
        {
            get
            {
                return ((global::raylib.VrDeviceInfo.__Internal*) __Instance)->vScreenSize;
            }

            set
            {
                ((global::raylib.VrDeviceInfo.__Internal*)__Instance)->vScreenSize = value;
            }
        }

        public float VScreenCenter
        {
            get
            {
                return ((global::raylib.VrDeviceInfo.__Internal*) __Instance)->vScreenCenter;
            }

            set
            {
                ((global::raylib.VrDeviceInfo.__Internal*)__Instance)->vScreenCenter = value;
            }
        }

        public float EyeToScreenDistance
        {
            get
            {
                return ((global::raylib.VrDeviceInfo.__Internal*) __Instance)->eyeToScreenDistance;
            }

            set
            {
                ((global::raylib.VrDeviceInfo.__Internal*)__Instance)->eyeToScreenDistance = value;
            }
        }

        public float LensSeparationDistance
        {
            get
            {
                return ((global::raylib.VrDeviceInfo.__Internal*) __Instance)->lensSeparationDistance;
            }

            set
            {
                ((global::raylib.VrDeviceInfo.__Internal*)__Instance)->lensSeparationDistance = value;
            }
        }

        public float InterpupillaryDistance
        {
            get
            {
                return ((global::raylib.VrDeviceInfo.__Internal*) __Instance)->interpupillaryDistance;
            }

            set
            {
                ((global::raylib.VrDeviceInfo.__Internal*)__Instance)->interpupillaryDistance = value;
            }
        }

        public float[] LensDistortionValues
        {
            get
            {
                float[] __value = null;
                if (((global::raylib.VrDeviceInfo.__Internal*) __Instance)->lensDistortionValues != null)
                {
                    __value = new float[4];
                    for (int i = 0; i < 4; i++)
                        __value[i] = ((global::raylib.VrDeviceInfo.__Internal*) __Instance)->lensDistortionValues[i];
                }
                return __value;
            }

            set
            {
                if (value != null)
                {
                    for (int i = 0; i < 4; i++)
                        ((global::raylib.VrDeviceInfo.__Internal*)__Instance)->lensDistortionValues[i] = value[i];
                }
            }
        }

        public float[] ChromaAbCorrection
        {
            get
            {
                float[] __value = null;
                if (((global::raylib.VrDeviceInfo.__Internal*) __Instance)->chromaAbCorrection != null)
                {
                    __value = new float[4];
                    for (int i = 0; i < 4; i++)
                        __value[i] = ((global::raylib.VrDeviceInfo.__Internal*) __Instance)->chromaAbCorrection[i];
                }
                return __value;
            }

            set
            {
                if (value != null)
                {
                    for (int i = 0; i < 4; i++)
                        ((global::raylib.VrDeviceInfo.__Internal*)__Instance)->chromaAbCorrection[i] = value[i];
                }
            }
        }
    }

    public unsafe partial class raylib
    {
        public partial struct __Internal
        {
            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="InitWindow")]
            internal static extern void InitWindow(int width, int height, [MarshalAs(UnmanagedType.LPStr)] string title);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CloseWindow")]
            internal static extern void CloseWindow();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsWindowReady")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsWindowReady();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="WindowShouldClose")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool WindowShouldClose();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsWindowMinimized")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsWindowMinimized();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ToggleFullscreen")]
            internal static extern void ToggleFullscreen();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetWindowIcon")]
            internal static extern void SetWindowIcon(global::raylib.Image.__Internal image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetWindowTitle")]
            internal static extern void SetWindowTitle([MarshalAs(UnmanagedType.LPStr)] string title);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetWindowPosition")]
            internal static extern void SetWindowPosition(int x, int y);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetWindowMonitor")]
            internal static extern void SetWindowMonitor(int monitor);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetWindowMinSize")]
            internal static extern void SetWindowMinSize(int width, int height);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetWindowSize")]
            internal static extern void SetWindowSize(int width, int height);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetScreenWidth")]
            internal static extern int GetScreenWidth();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetScreenHeight")]
            internal static extern int GetScreenHeight();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ShowCursor")]
            internal static extern void ShowCursor();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="HideCursor")]
            internal static extern void HideCursor();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsCursorHidden")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsCursorHidden();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="EnableCursor")]
            internal static extern void EnableCursor();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DisableCursor")]
            internal static extern void DisableCursor();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ClearBackground")]
            internal static extern void ClearBackground(global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="BeginDrawing")]
            internal static extern void BeginDrawing();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="EndDrawing")]
            internal static extern void EndDrawing();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="BeginMode2D")]
            internal static extern void BeginMode2D(global::raylib.Camera2D.__Internal camera);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="EndMode2D")]
            internal static extern void EndMode2D();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="BeginMode3D")]
            internal static extern void BeginMode3D(global::raylib.Camera3D.__Internal camera);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="EndMode3D")]
            internal static extern void EndMode3D();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="BeginTextureMode")]
            internal static extern void BeginTextureMode(global::raylib.RenderTexture2D.__Internal target);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="EndTextureMode")]
            internal static extern void EndTextureMode();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetMouseRay")]
            internal static extern void GetMouseRay(global::System.IntPtr @return, global::raylib.Vector2.__Internal mousePosition, global::raylib.Camera3D.__Internal camera);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetWorldToScreen")]
            internal static extern global::raylib.Vector2.__Internal GetWorldToScreen(global::raylib.Vector3.__Internal position, global::raylib.Camera3D.__Internal camera);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetCameraMatrix")]
            internal static extern void GetCameraMatrix(global::System.IntPtr @return, global::raylib.Camera3D.__Internal camera);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetTargetFPS")]
            internal static extern void SetTargetFPS(int fps);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetFPS")]
            internal static extern int GetFPS();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetFrameTime")]
            internal static extern float GetFrameTime();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetTime")]
            internal static extern double GetTime();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ColorToInt")]
            internal static extern int ColorToInt(global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ColorNormalize")]
            internal static extern void ColorNormalize(global::System.IntPtr @return, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ColorToHSV")]
            internal static extern void ColorToHSV(global::System.IntPtr @return, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetColor")]
            internal static extern global::raylib.Color.__Internal GetColor(int hexValue);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="Fade")]
            internal static extern global::raylib.Color.__Internal Fade(global::raylib.Color.__Internal color, float alpha);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ShowLogo")]
            internal static extern void ShowLogo();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetConfigFlags")]
            internal static extern void SetConfigFlags(byte flags);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetTraceLog")]
            internal static extern void SetTraceLog(byte types);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="TraceLog")]
            internal static extern void TraceLog(int logType, [MarshalAs(UnmanagedType.LPStr)] string text);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="TakeScreenshot")]
            internal static extern void TakeScreenshot([MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetRandomValue")]
            internal static extern int GetRandomValue(int min, int max);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsFileExtension")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsFileExtension([MarshalAs(UnmanagedType.LPStr)] string fileName, [MarshalAs(UnmanagedType.LPStr)] string ext);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetExtension")]
            internal static extern global::System.IntPtr GetExtension([MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetFileName")]
            internal static extern global::System.IntPtr GetFileName([MarshalAs(UnmanagedType.LPStr)] string filePath);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetDirectoryPath")]
            internal static extern global::System.IntPtr GetDirectoryPath([MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetWorkingDirectory")]
            internal static extern global::System.IntPtr GetWorkingDirectory();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ChangeDirectory")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool ChangeDirectory([MarshalAs(UnmanagedType.LPStr)] string dir);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsFileDropped")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsFileDropped();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetDroppedFiles")]
            internal static extern sbyte** GetDroppedFiles(int* count);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ClearDroppedFiles")]
            internal static extern void ClearDroppedFiles();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="StorageSaveValue")]
            internal static extern void StorageSaveValue(int position, int value);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="StorageLoadValue")]
            internal static extern int StorageLoadValue(int position);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsKeyPressed")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsKeyPressed(int key);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsKeyDown")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsKeyDown(int key);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsKeyReleased")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsKeyReleased(int key);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsKeyUp")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsKeyUp(int key);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetKeyPressed")]
            internal static extern int GetKeyPressed();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetExitKey")]
            internal static extern void SetExitKey(int key);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsGamepadAvailable")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsGamepadAvailable(int gamepad);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsGamepadName")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsGamepadName(int gamepad, [MarshalAs(UnmanagedType.LPStr)] string name);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetGamepadName")]
            internal static extern global::System.IntPtr GetGamepadName(int gamepad);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsGamepadButtonPressed")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsGamepadButtonPressed(int gamepad, int button);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsGamepadButtonDown")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsGamepadButtonDown(int gamepad, int button);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsGamepadButtonReleased")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsGamepadButtonReleased(int gamepad, int button);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsGamepadButtonUp")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsGamepadButtonUp(int gamepad, int button);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetGamepadButtonPressed")]
            internal static extern int GetGamepadButtonPressed();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetGamepadAxisCount")]
            internal static extern int GetGamepadAxisCount(int gamepad);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetGamepadAxisMovement")]
            internal static extern float GetGamepadAxisMovement(int gamepad, int axis);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsMouseButtonPressed")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsMouseButtonPressed(int button);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsMouseButtonDown")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsMouseButtonDown(int button);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsMouseButtonReleased")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsMouseButtonReleased(int button);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsMouseButtonUp")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsMouseButtonUp(int button);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetMouseX")]
            internal static extern int GetMouseX();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetMouseY")]
            internal static extern int GetMouseY();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetMousePosition")]
            internal static extern global::raylib.Vector2.__Internal GetMousePosition();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetMousePosition")]
            internal static extern void SetMousePosition(global::raylib.Vector2.__Internal position);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetMouseScale")]
            internal static extern void SetMouseScale(float scale);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetMouseWheelMove")]
            internal static extern int GetMouseWheelMove();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetTouchX")]
            internal static extern int GetTouchX();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetTouchY")]
            internal static extern int GetTouchY();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetTouchPosition")]
            internal static extern global::raylib.Vector2.__Internal GetTouchPosition(int index);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetGesturesEnabled")]
            internal static extern void SetGesturesEnabled(uint gestureFlags);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsGestureDetected")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsGestureDetected(int gesture);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetGestureDetected")]
            internal static extern int GetGestureDetected();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetTouchPointsCount")]
            internal static extern int GetTouchPointsCount();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetGestureHoldDuration")]
            internal static extern float GetGestureHoldDuration();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetGestureDragVector")]
            internal static extern global::raylib.Vector2.__Internal GetGestureDragVector();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetGestureDragAngle")]
            internal static extern float GetGestureDragAngle();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetGesturePinchVector")]
            internal static extern global::raylib.Vector2.__Internal GetGesturePinchVector();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetGesturePinchAngle")]
            internal static extern float GetGesturePinchAngle();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetCameraMode")]
            internal static extern void SetCameraMode(global::raylib.Camera3D.__Internal camera, int mode);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UpdateCamera")]
            internal static extern void UpdateCamera(global::System.IntPtr camera);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetCameraPanControl")]
            internal static extern void SetCameraPanControl(int panKey);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetCameraAltControl")]
            internal static extern void SetCameraAltControl(int altKey);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetCameraSmoothZoomControl")]
            internal static extern void SetCameraSmoothZoomControl(int szKey);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetCameraMoveControls")]
            internal static extern void SetCameraMoveControls(int frontKey, int backKey, int rightKey, int leftKey, int upKey, int downKey);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawPixel")]
            internal static extern void DrawPixel(int posX, int posY, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawPixelV")]
            internal static extern void DrawPixelV(global::raylib.Vector2.__Internal position, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawLine")]
            internal static extern void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawLineV")]
            internal static extern void DrawLineV(global::raylib.Vector2.__Internal startPos, global::raylib.Vector2.__Internal endPos, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawLineEx")]
            internal static extern void DrawLineEx(global::raylib.Vector2.__Internal startPos, global::raylib.Vector2.__Internal endPos, float thick, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawLineBezier")]
            internal static extern void DrawLineBezier(global::raylib.Vector2.__Internal startPos, global::raylib.Vector2.__Internal endPos, float thick, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawCircle")]
            internal static extern void DrawCircle(int centerX, int centerY, float radius, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawCircleGradient")]
            internal static extern void DrawCircleGradient(int centerX, int centerY, float radius, global::raylib.Color.__Internal color1, global::raylib.Color.__Internal color2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawCircleV")]
            internal static extern void DrawCircleV(global::raylib.Vector2.__Internal center, float radius, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawCircleLines")]
            internal static extern void DrawCircleLines(int centerX, int centerY, float radius, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawRectangle")]
            internal static extern void DrawRectangle(int posX, int posY, int width, int height, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawRectangleV")]
            internal static extern void DrawRectangleV(global::raylib.Vector2.__Internal position, global::raylib.Vector2.__Internal size, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawRectangleRec")]
            internal static extern void DrawRectangleRec(global::raylib.Rectangle.__Internal rec, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawRectanglePro")]
            internal static extern void DrawRectanglePro(global::raylib.Rectangle.__Internal rec, global::raylib.Vector2.__Internal origin, float rotation, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawRectangleGradientV")]
            internal static extern void DrawRectangleGradientV(int posX, int posY, int width, int height, global::raylib.Color.__Internal color1, global::raylib.Color.__Internal color2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawRectangleGradientH")]
            internal static extern void DrawRectangleGradientH(int posX, int posY, int width, int height, global::raylib.Color.__Internal color1, global::raylib.Color.__Internal color2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawRectangleGradientEx")]
            internal static extern void DrawRectangleGradientEx(global::raylib.Rectangle.__Internal rec, global::raylib.Color.__Internal col1, global::raylib.Color.__Internal col2, global::raylib.Color.__Internal col3, global::raylib.Color.__Internal col4);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawRectangleLines")]
            internal static extern void DrawRectangleLines(int posX, int posY, int width, int height, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawRectangleLinesEx")]
            internal static extern void DrawRectangleLinesEx(global::raylib.Rectangle.__Internal rec, int lineThick, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawTriangle")]
            internal static extern void DrawTriangle(global::raylib.Vector2.__Internal v1, global::raylib.Vector2.__Internal v2, global::raylib.Vector2.__Internal v3, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawTriangleLines")]
            internal static extern void DrawTriangleLines(global::raylib.Vector2.__Internal v1, global::raylib.Vector2.__Internal v2, global::raylib.Vector2.__Internal v3, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawPoly")]
            internal static extern void DrawPoly(global::raylib.Vector2.__Internal center, int sides, float radius, float rotation, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawPolyEx")]
            internal static extern void DrawPolyEx(global::System.IntPtr points, int numPoints, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawPolyExLines")]
            internal static extern void DrawPolyExLines(global::System.IntPtr points, int numPoints, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CheckCollisionRecs")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool CheckCollisionRecs(global::raylib.Rectangle.__Internal rec1, global::raylib.Rectangle.__Internal rec2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CheckCollisionCircles")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool CheckCollisionCircles(global::raylib.Vector2.__Internal center1, float radius1, global::raylib.Vector2.__Internal center2, float radius2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CheckCollisionCircleRec")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool CheckCollisionCircleRec(global::raylib.Vector2.__Internal center, float radius, global::raylib.Rectangle.__Internal rec);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetCollisionRec")]
            internal static extern void GetCollisionRec(global::System.IntPtr @return, global::raylib.Rectangle.__Internal rec1, global::raylib.Rectangle.__Internal rec2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CheckCollisionPointRec")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool CheckCollisionPointRec(global::raylib.Vector2.__Internal point, global::raylib.Rectangle.__Internal rec);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CheckCollisionPointCircle")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool CheckCollisionPointCircle(global::raylib.Vector2.__Internal point, global::raylib.Vector2.__Internal center, float radius);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CheckCollisionPointTriangle")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool CheckCollisionPointTriangle(global::raylib.Vector2.__Internal point, global::raylib.Vector2.__Internal p1, global::raylib.Vector2.__Internal p2, global::raylib.Vector2.__Internal p3);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadImage")]
            internal static extern void LoadImage(global::System.IntPtr @return, [MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadImageEx")]
            internal static extern void LoadImageEx(global::System.IntPtr @return, global::System.IntPtr pixels, int width, int height);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadImagePro")]
            internal static extern void LoadImagePro(global::System.IntPtr @return, global::System.IntPtr data, int width, int height, int format);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadImageRaw")]
            internal static extern void LoadImageRaw(global::System.IntPtr @return, [MarshalAs(UnmanagedType.LPStr)] string fileName, int width, int height, int format, int headerSize);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ExportImage")]
            internal static extern void ExportImage([MarshalAs(UnmanagedType.LPStr)] string fileName, global::raylib.Image.__Internal image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadTexture")]
            internal static extern void LoadTexture(global::System.IntPtr @return, [MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadTextureFromImage")]
            internal static extern void LoadTextureFromImage(global::System.IntPtr @return, global::raylib.Image.__Internal image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadRenderTexture")]
            internal static extern void LoadRenderTexture(global::System.IntPtr @return, int width, int height);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UnloadImage")]
            internal static extern void UnloadImage(global::raylib.Image.__Internal image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UnloadTexture")]
            internal static extern void UnloadTexture(global::raylib.Texture2D.__Internal texture);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UnloadRenderTexture")]
            internal static extern void UnloadRenderTexture(global::raylib.RenderTexture2D.__Internal target);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetImageData")]
            internal static extern global::System.IntPtr GetImageData(global::raylib.Image.__Internal image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetImageDataNormalized")]
            internal static extern global::System.IntPtr GetImageDataNormalized(global::raylib.Image.__Internal image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetPixelDataSize")]
            internal static extern int GetPixelDataSize(int width, int height, int format);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetTextureData")]
            internal static extern void GetTextureData(global::System.IntPtr @return, global::raylib.Texture2D.__Internal texture);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UpdateTexture")]
            internal static extern void UpdateTexture(global::raylib.Texture2D.__Internal texture, global::System.IntPtr pixels);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageCopy")]
            internal static extern void ImageCopy(global::System.IntPtr @return, global::raylib.Image.__Internal image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageToPOT")]
            internal static extern void ImageToPOT(global::System.IntPtr image, global::raylib.Color.__Internal fillColor);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageFormat")]
            internal static extern void ImageFormat(global::System.IntPtr image, int newFormat);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageAlphaMask")]
            internal static extern void ImageAlphaMask(global::System.IntPtr image, global::raylib.Image.__Internal alphaMask);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageAlphaClear")]
            internal static extern void ImageAlphaClear(global::System.IntPtr image, global::raylib.Color.__Internal color, float threshold);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageAlphaCrop")]
            internal static extern void ImageAlphaCrop(global::System.IntPtr image, float threshold);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageAlphaPremultiply")]
            internal static extern void ImageAlphaPremultiply(global::System.IntPtr image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageCrop")]
            internal static extern void ImageCrop(global::System.IntPtr image, global::raylib.Rectangle.__Internal crop);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageResize")]
            internal static extern void ImageResize(global::System.IntPtr image, int newWidth, int newHeight);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageResizeNN")]
            internal static extern void ImageResizeNN(global::System.IntPtr image, int newWidth, int newHeight);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageResizeCanvas")]
            internal static extern void ImageResizeCanvas(global::System.IntPtr image, int newWidth, int newHeight, int offsetX, int offsetY, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageMipmaps")]
            internal static extern void ImageMipmaps(global::System.IntPtr image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageDither")]
            internal static extern void ImageDither(global::System.IntPtr image, int rBpp, int gBpp, int bBpp, int aBpp);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageText")]
            internal static extern void ImageText(global::System.IntPtr @return, [MarshalAs(UnmanagedType.LPStr)] string text, int fontSize, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageTextEx")]
            internal static extern void ImageTextEx(global::System.IntPtr @return, global::raylib.Font.__Internal font, [MarshalAs(UnmanagedType.LPStr)] string text, float fontSize, float spacing, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageDraw")]
            internal static extern void ImageDraw(global::System.IntPtr dst, global::raylib.Image.__Internal src, global::raylib.Rectangle.__Internal srcRec, global::raylib.Rectangle.__Internal dstRec);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageDrawRectangle")]
            internal static extern void ImageDrawRectangle(global::System.IntPtr dst, global::raylib.Vector2.__Internal position, global::raylib.Rectangle.__Internal rec, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageDrawText")]
            internal static extern void ImageDrawText(global::System.IntPtr dst, global::raylib.Vector2.__Internal position, [MarshalAs(UnmanagedType.LPStr)] string text, int fontSize, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageDrawTextEx")]
            internal static extern void ImageDrawTextEx(global::System.IntPtr dst, global::raylib.Vector2.__Internal position, global::raylib.Font.__Internal font, [MarshalAs(UnmanagedType.LPStr)] string text, float fontSize, float spacing, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageFlipVertical")]
            internal static extern void ImageFlipVertical(global::System.IntPtr image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageFlipHorizontal")]
            internal static extern void ImageFlipHorizontal(global::System.IntPtr image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageRotateCW")]
            internal static extern void ImageRotateCW(global::System.IntPtr image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageRotateCCW")]
            internal static extern void ImageRotateCCW(global::System.IntPtr image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageColorTint")]
            internal static extern void ImageColorTint(global::System.IntPtr image, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageColorInvert")]
            internal static extern void ImageColorInvert(global::System.IntPtr image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageColorGrayscale")]
            internal static extern void ImageColorGrayscale(global::System.IntPtr image);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageColorContrast")]
            internal static extern void ImageColorContrast(global::System.IntPtr image, float contrast);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageColorBrightness")]
            internal static extern void ImageColorBrightness(global::System.IntPtr image, int brightness);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ImageColorReplace")]
            internal static extern void ImageColorReplace(global::System.IntPtr image, global::raylib.Color.__Internal color, global::raylib.Color.__Internal replace);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenImageColor")]
            internal static extern void GenImageColor(global::System.IntPtr @return, int width, int height, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenImageGradientV")]
            internal static extern void GenImageGradientV(global::System.IntPtr @return, int width, int height, global::raylib.Color.__Internal top, global::raylib.Color.__Internal bottom);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenImageGradientH")]
            internal static extern void GenImageGradientH(global::System.IntPtr @return, int width, int height, global::raylib.Color.__Internal left, global::raylib.Color.__Internal right);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenImageGradientRadial")]
            internal static extern void GenImageGradientRadial(global::System.IntPtr @return, int width, int height, float density, global::raylib.Color.__Internal inner, global::raylib.Color.__Internal outer);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenImageChecked")]
            internal static extern void GenImageChecked(global::System.IntPtr @return, int width, int height, int checksX, int checksY, global::raylib.Color.__Internal col1, global::raylib.Color.__Internal col2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenImageWhiteNoise")]
            internal static extern void GenImageWhiteNoise(global::System.IntPtr @return, int width, int height, float factor);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenImagePerlinNoise")]
            internal static extern void GenImagePerlinNoise(global::System.IntPtr @return, int width, int height, int offsetX, int offsetY, float scale);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenImageCellular")]
            internal static extern void GenImageCellular(global::System.IntPtr @return, int width, int height, int tileSize);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenTextureMipmaps")]
            internal static extern void GenTextureMipmaps(global::System.IntPtr texture);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetTextureFilter")]
            internal static extern void SetTextureFilter(global::raylib.Texture2D.__Internal texture, int filterMode);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetTextureWrap")]
            internal static extern void SetTextureWrap(global::raylib.Texture2D.__Internal texture, int wrapMode);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawTexture")]
            internal static extern void DrawTexture(global::raylib.Texture2D.__Internal texture, int posX, int posY, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawTextureV")]
            internal static extern void DrawTextureV(global::raylib.Texture2D.__Internal texture, global::raylib.Vector2.__Internal position, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawTextureEx")]
            internal static extern void DrawTextureEx(global::raylib.Texture2D.__Internal texture, global::raylib.Vector2.__Internal position, float rotation, float scale, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawTextureRec")]
            internal static extern void DrawTextureRec(global::raylib.Texture2D.__Internal texture, global::raylib.Rectangle.__Internal sourceRec, global::raylib.Vector2.__Internal position, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawTexturePro")]
            internal static extern void DrawTexturePro(global::raylib.Texture2D.__Internal texture, global::raylib.Rectangle.__Internal sourceRec, global::raylib.Rectangle.__Internal destRec, global::raylib.Vector2.__Internal origin, float rotation, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetFontDefault")]
            internal static extern void GetFontDefault(global::System.IntPtr @return);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadFont")]
            internal static extern void LoadFont(global::System.IntPtr @return, [MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadFontEx")]
            internal static extern void LoadFontEx(global::System.IntPtr @return, [MarshalAs(UnmanagedType.LPStr)] string fileName, int fontSize, int charsCount, int* fontChars);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadFontData")]
            internal static extern global::System.IntPtr LoadFontData([MarshalAs(UnmanagedType.LPStr)] string fileName, int fontSize, int* fontChars, int charsCount, bool sdf);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenImageFontAtlas")]
            internal static extern void GenImageFontAtlas(global::System.IntPtr @return, global::System.IntPtr chars, int fontSize, int charsCount, int padding, int packMethod);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UnloadFont")]
            internal static extern void UnloadFont(global::raylib.Font.__Internal font);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawFPS")]
            internal static extern void DrawFPS(int posX, int posY);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawText")]
            internal static extern void DrawText([MarshalAs(UnmanagedType.LPStr)] string text, int posX, int posY, int fontSize, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawTextEx")]
            internal static extern void DrawTextEx(global::raylib.Font.__Internal font, [MarshalAs(UnmanagedType.LPStr)] string text, global::raylib.Vector2.__Internal position, float fontSize, float spacing, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="MeasureText")]
            internal static extern int MeasureText([MarshalAs(UnmanagedType.LPStr)] string text, int fontSize);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="MeasureTextEx")]
            internal static extern global::raylib.Vector2.__Internal MeasureTextEx(global::raylib.Font.__Internal font, [MarshalAs(UnmanagedType.LPStr)] string text, float fontSize, float spacing);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="FormatText")]
            internal static extern global::System.IntPtr FormatText([MarshalAs(UnmanagedType.LPStr)] string text);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SubText")]
            internal static extern global::System.IntPtr SubText([MarshalAs(UnmanagedType.LPStr)] string text, int position, int length);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetGlyphIndex")]
            internal static extern int GetGlyphIndex(global::raylib.Font.__Internal font, int character);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawLine3D")]
            internal static extern void DrawLine3D(global::raylib.Vector3.__Internal startPos, global::raylib.Vector3.__Internal endPos, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawCircle3D")]
            internal static extern void DrawCircle3D(global::raylib.Vector3.__Internal center, float radius, global::raylib.Vector3.__Internal rotationAxis, float rotationAngle, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawCube")]
            internal static extern void DrawCube(global::raylib.Vector3.__Internal position, float width, float height, float length, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawCubeV")]
            internal static extern void DrawCubeV(global::raylib.Vector3.__Internal position, global::raylib.Vector3.__Internal size, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawCubeWires")]
            internal static extern void DrawCubeWires(global::raylib.Vector3.__Internal position, float width, float height, float length, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawCubeTexture")]
            internal static extern void DrawCubeTexture(global::raylib.Texture2D.__Internal texture, global::raylib.Vector3.__Internal position, float width, float height, float length, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawSphere")]
            internal static extern void DrawSphere(global::raylib.Vector3.__Internal centerPos, float radius, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawSphereEx")]
            internal static extern void DrawSphereEx(global::raylib.Vector3.__Internal centerPos, float radius, int rings, int slices, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawSphereWires")]
            internal static extern void DrawSphereWires(global::raylib.Vector3.__Internal centerPos, float radius, int rings, int slices, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawCylinder")]
            internal static extern void DrawCylinder(global::raylib.Vector3.__Internal position, float radiusTop, float radiusBottom, float height, int slices, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawCylinderWires")]
            internal static extern void DrawCylinderWires(global::raylib.Vector3.__Internal position, float radiusTop, float radiusBottom, float height, int slices, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawPlane")]
            internal static extern void DrawPlane(global::raylib.Vector3.__Internal centerPos, global::raylib.Vector2.__Internal size, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawRay")]
            internal static extern void DrawRay(global::raylib.Ray.__Internal ray, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawGrid")]
            internal static extern void DrawGrid(int slices, float spacing);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawGizmo")]
            internal static extern void DrawGizmo(global::raylib.Vector3.__Internal position);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadModel")]
            internal static extern void LoadModel(global::System.IntPtr @return, [MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadModelFromMesh")]
            internal static extern void LoadModelFromMesh(global::System.IntPtr @return, global::raylib.Mesh.__Internal mesh);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UnloadModel")]
            internal static extern void UnloadModel(global::raylib.Model.__Internal model);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadMesh")]
            internal static extern void LoadMesh(global::System.IntPtr @return, [MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UnloadMesh")]
            internal static extern void UnloadMesh(global::System.IntPtr mesh);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ExportMesh")]
            internal static extern void ExportMesh([MarshalAs(UnmanagedType.LPStr)] string fileName, global::raylib.Mesh.__Internal mesh);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="MeshBoundingBox")]
            internal static extern void MeshBoundingBox(global::System.IntPtr @return, global::raylib.Mesh.__Internal mesh);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="MeshTangents")]
            internal static extern void MeshTangents(global::System.IntPtr mesh);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="MeshBinormals")]
            internal static extern void MeshBinormals(global::System.IntPtr mesh);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenMeshPlane")]
            internal static extern void GenMeshPlane(global::System.IntPtr @return, float width, float length, int resX, int resZ);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenMeshCube")]
            internal static extern void GenMeshCube(global::System.IntPtr @return, float width, float height, float length);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenMeshSphere")]
            internal static extern void GenMeshSphere(global::System.IntPtr @return, float radius, int rings, int slices);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenMeshHemiSphere")]
            internal static extern void GenMeshHemiSphere(global::System.IntPtr @return, float radius, int rings, int slices);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenMeshCylinder")]
            internal static extern void GenMeshCylinder(global::System.IntPtr @return, float radius, float height, int slices);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenMeshTorus")]
            internal static extern void GenMeshTorus(global::System.IntPtr @return, float radius, float size, int radSeg, int sides);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenMeshKnot")]
            internal static extern void GenMeshKnot(global::System.IntPtr @return, float radius, float size, int radSeg, int sides);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenMeshHeightmap")]
            internal static extern void GenMeshHeightmap(global::System.IntPtr @return, global::raylib.Image.__Internal heightmap, global::raylib.Vector3.__Internal size);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenMeshCubicmap")]
            internal static extern void GenMeshCubicmap(global::System.IntPtr @return, global::raylib.Image.__Internal cubicmap, global::raylib.Vector3.__Internal cubeSize);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadMaterial")]
            internal static extern void LoadMaterial(global::System.IntPtr @return, [MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadMaterialDefault")]
            internal static extern void LoadMaterialDefault(global::System.IntPtr @return);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UnloadMaterial")]
            internal static extern void UnloadMaterial(global::raylib.Material.__Internal material);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawModel")]
            internal static extern void DrawModel(global::raylib.Model.__Internal model, global::raylib.Vector3.__Internal position, float scale, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawModelEx")]
            internal static extern void DrawModelEx(global::raylib.Model.__Internal model, global::raylib.Vector3.__Internal position, global::raylib.Vector3.__Internal rotationAxis, float rotationAngle, global::raylib.Vector3.__Internal scale, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawModelWires")]
            internal static extern void DrawModelWires(global::raylib.Model.__Internal model, global::raylib.Vector3.__Internal position, float scale, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawModelWiresEx")]
            internal static extern void DrawModelWiresEx(global::raylib.Model.__Internal model, global::raylib.Vector3.__Internal position, global::raylib.Vector3.__Internal rotationAxis, float rotationAngle, global::raylib.Vector3.__Internal scale, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawBoundingBox")]
            internal static extern void DrawBoundingBox(global::raylib.BoundingBox.__Internal box, global::raylib.Color.__Internal color);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawBillboard")]
            internal static extern void DrawBillboard(global::raylib.Camera3D.__Internal camera, global::raylib.Texture2D.__Internal texture, global::raylib.Vector3.__Internal center, float size, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="DrawBillboardRec")]
            internal static extern void DrawBillboardRec(global::raylib.Camera3D.__Internal camera, global::raylib.Texture2D.__Internal texture, global::raylib.Rectangle.__Internal sourceRec, global::raylib.Vector3.__Internal center, float size, global::raylib.Color.__Internal tint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CheckCollisionSpheres")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool CheckCollisionSpheres(global::raylib.Vector3.__Internal centerA, float radiusA, global::raylib.Vector3.__Internal centerB, float radiusB);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CheckCollisionBoxes")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool CheckCollisionBoxes(global::raylib.BoundingBox.__Internal box1, global::raylib.BoundingBox.__Internal box2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CheckCollisionBoxSphere")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool CheckCollisionBoxSphere(global::raylib.BoundingBox.__Internal box, global::raylib.Vector3.__Internal centerSphere, float radiusSphere);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CheckCollisionRaySphere")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool CheckCollisionRaySphere(global::raylib.Ray.__Internal ray, global::raylib.Vector3.__Internal spherePosition, float sphereRadius);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CheckCollisionRaySphereEx")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool CheckCollisionRaySphereEx(global::raylib.Ray.__Internal ray, global::raylib.Vector3.__Internal spherePosition, float sphereRadius, global::System.IntPtr collisionPoint);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CheckCollisionRayBox")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool CheckCollisionRayBox(global::raylib.Ray.__Internal ray, global::raylib.BoundingBox.__Internal box);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetCollisionRayModel")]
            internal static extern void GetCollisionRayModel(global::System.IntPtr @return, global::raylib.Ray.__Internal ray, global::System.IntPtr model);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetCollisionRayTriangle")]
            internal static extern void GetCollisionRayTriangle(global::System.IntPtr @return, global::raylib.Ray.__Internal ray, global::raylib.Vector3.__Internal p1, global::raylib.Vector3.__Internal p2, global::raylib.Vector3.__Internal p3);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetCollisionRayGround")]
            internal static extern void GetCollisionRayGround(global::System.IntPtr @return, global::raylib.Ray.__Internal ray, float groundHeight);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadText")]
            internal static extern sbyte* LoadText([MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadShader")]
            internal static extern void LoadShader(global::System.IntPtr @return, [MarshalAs(UnmanagedType.LPStr)] string vsFileName, [MarshalAs(UnmanagedType.LPStr)] string fsFileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadShaderCode")]
            internal static extern void LoadShaderCode(global::System.IntPtr @return, sbyte* vsCode, sbyte* fsCode);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UnloadShader")]
            internal static extern void UnloadShader(global::raylib.Shader.__Internal shader);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetShaderDefault")]
            internal static extern void GetShaderDefault(global::System.IntPtr @return);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetTextureDefault")]
            internal static extern void GetTextureDefault(global::System.IntPtr @return);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetShaderLocation")]
            internal static extern int GetShaderLocation(global::raylib.Shader.__Internal shader, [MarshalAs(UnmanagedType.LPStr)] string uniformName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetShaderValue")]
            internal static extern void SetShaderValue(global::raylib.Shader.__Internal shader, int uniformLoc, float* value, int size);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetShaderValuei")]
            internal static extern void SetShaderValuei(global::raylib.Shader.__Internal shader, int uniformLoc, int* value, int size);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetShaderValueMatrix")]
            internal static extern void SetShaderValueMatrix(global::raylib.Shader.__Internal shader, int uniformLoc, global::raylib.Matrix.__Internal mat);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetMatrixProjection")]
            internal static extern void SetMatrixProjection(global::raylib.Matrix.__Internal proj);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetMatrixModelview")]
            internal static extern void SetMatrixModelview(global::raylib.Matrix.__Internal view);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetMatrixModelview")]
            internal static extern void GetMatrixModelview(global::System.IntPtr @return);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenTextureCubemap")]
            internal static extern void GenTextureCubemap(global::System.IntPtr @return, global::raylib.Shader.__Internal shader, global::raylib.Texture2D.__Internal skyHDR, int size);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenTextureIrradiance")]
            internal static extern void GenTextureIrradiance(global::System.IntPtr @return, global::raylib.Shader.__Internal shader, global::raylib.Texture2D.__Internal cubemap, int size);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenTexturePrefilter")]
            internal static extern void GenTexturePrefilter(global::System.IntPtr @return, global::raylib.Shader.__Internal shader, global::raylib.Texture2D.__Internal cubemap, int size);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GenTextureBRDF")]
            internal static extern void GenTextureBRDF(global::System.IntPtr @return, global::raylib.Shader.__Internal shader, global::raylib.Texture2D.__Internal cubemap, int size);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="BeginShaderMode")]
            internal static extern void BeginShaderMode(global::raylib.Shader.__Internal shader);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="EndShaderMode")]
            internal static extern void EndShaderMode();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="BeginBlendMode")]
            internal static extern void BeginBlendMode(int mode);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="EndBlendMode")]
            internal static extern void EndBlendMode();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetVrDeviceInfo")]
            internal static extern void GetVrDeviceInfo(global::System.IntPtr @return, int vrDeviceType);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="InitVrSimulator")]
            internal static extern void InitVrSimulator(global::raylib.VrDeviceInfo.__Internal info);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CloseVrSimulator")]
            internal static extern void CloseVrSimulator();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsVrSimulatorReady")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsVrSimulatorReady();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetVrDistortionShader")]
            internal static extern void SetVrDistortionShader(global::raylib.Shader.__Internal shader);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UpdateVrTracking")]
            internal static extern void UpdateVrTracking(global::System.IntPtr camera);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ToggleVrMode")]
            internal static extern void ToggleVrMode();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="BeginVrDrawing")]
            internal static extern void BeginVrDrawing();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="EndVrDrawing")]
            internal static extern void EndVrDrawing();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="InitAudioDevice")]
            internal static extern void InitAudioDevice();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CloseAudioDevice")]
            internal static extern void CloseAudioDevice();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsAudioDeviceReady")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsAudioDeviceReady();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetMasterVolume")]
            internal static extern void SetMasterVolume(float volume);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadWave")]
            internal static extern void LoadWave(global::System.IntPtr @return, [MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadWaveEx")]
            internal static extern void LoadWaveEx(global::System.IntPtr @return, global::System.IntPtr data, int sampleCount, int sampleRate, int sampleSize, int channels);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadSound")]
            internal static extern void LoadSound(global::System.IntPtr @return, [MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadSoundFromWave")]
            internal static extern void LoadSoundFromWave(global::System.IntPtr @return, global::raylib.Wave.__Internal wave);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UpdateSound")]
            internal static extern void UpdateSound(global::raylib.Sound.__Internal sound, global::System.IntPtr data, int samplesCount);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UnloadWave")]
            internal static extern void UnloadWave(global::raylib.Wave.__Internal wave);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UnloadSound")]
            internal static extern void UnloadSound(global::raylib.Sound.__Internal sound);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="PlaySound")]
            internal static extern void PlaySound(global::raylib.Sound.__Internal sound);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="PauseSound")]
            internal static extern void PauseSound(global::raylib.Sound.__Internal sound);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ResumeSound")]
            internal static extern void ResumeSound(global::raylib.Sound.__Internal sound);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="StopSound")]
            internal static extern void StopSound(global::raylib.Sound.__Internal sound);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsSoundPlaying")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsSoundPlaying(global::raylib.Sound.__Internal sound);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetSoundVolume")]
            internal static extern void SetSoundVolume(global::raylib.Sound.__Internal sound, float volume);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetSoundPitch")]
            internal static extern void SetSoundPitch(global::raylib.Sound.__Internal sound, float pitch);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="WaveFormat")]
            internal static extern void WaveFormat(global::System.IntPtr wave, int sampleRate, int sampleSize, int channels);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="WaveCopy")]
            internal static extern void WaveCopy(global::System.IntPtr @return, global::raylib.Wave.__Internal wave);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="WaveCrop")]
            internal static extern void WaveCrop(global::System.IntPtr wave, int initSample, int finalSample);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetWaveData")]
            internal static extern float* GetWaveData(global::raylib.Wave.__Internal wave);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="LoadMusicStream")]
            internal static extern global::System.IntPtr LoadMusicStream([MarshalAs(UnmanagedType.LPStr)] string fileName);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UnloadMusicStream")]
            internal static extern void UnloadMusicStream(global::System.IntPtr music);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="PlayMusicStream")]
            internal static extern void PlayMusicStream(global::System.IntPtr music);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UpdateMusicStream")]
            internal static extern void UpdateMusicStream(global::System.IntPtr music);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="StopMusicStream")]
            internal static extern void StopMusicStream(global::System.IntPtr music);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="PauseMusicStream")]
            internal static extern void PauseMusicStream(global::System.IntPtr music);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ResumeMusicStream")]
            internal static extern void ResumeMusicStream(global::System.IntPtr music);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsMusicPlaying")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsMusicPlaying(global::System.IntPtr music);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetMusicVolume")]
            internal static extern void SetMusicVolume(global::System.IntPtr music, float volume);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetMusicPitch")]
            internal static extern void SetMusicPitch(global::System.IntPtr music, float pitch);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetMusicLoopCount")]
            internal static extern void SetMusicLoopCount(global::System.IntPtr music, int count);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetMusicTimeLength")]
            internal static extern float GetMusicTimeLength(global::System.IntPtr music);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="GetMusicTimePlayed")]
            internal static extern float GetMusicTimePlayed(global::System.IntPtr music);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="InitAudioStream")]
            internal static extern void InitAudioStream(global::System.IntPtr @return, uint sampleRate, uint sampleSize, uint channels);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="UpdateAudioStream")]
            internal static extern void UpdateAudioStream(global::raylib.AudioStream.__Internal stream, global::System.IntPtr data, int samplesCount);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="CloseAudioStream")]
            internal static extern void CloseAudioStream(global::raylib.AudioStream.__Internal stream);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsAudioBufferProcessed")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsAudioBufferProcessed(global::raylib.AudioStream.__Internal stream);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="PlayAudioStream")]
            internal static extern void PlayAudioStream(global::raylib.AudioStream.__Internal stream);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="PauseAudioStream")]
            internal static extern void PauseAudioStream(global::raylib.AudioStream.__Internal stream);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="ResumeAudioStream")]
            internal static extern void ResumeAudioStream(global::raylib.AudioStream.__Internal stream);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="IsAudioStreamPlaying")]
            [return: MarshalAs(UnmanagedType.I1)]
            internal static extern bool IsAudioStreamPlaying(global::raylib.AudioStream.__Internal stream);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="StopAudioStream")]
            internal static extern void StopAudioStream(global::raylib.AudioStream.__Internal stream);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetAudioStreamVolume")]
            internal static extern void SetAudioStreamVolume(global::raylib.AudioStream.__Internal stream, float volume);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="SetAudioStreamPitch")]
            internal static extern void SetAudioStreamPitch(global::raylib.AudioStream.__Internal stream, float pitch);
        }

        public static void InitWindow(int width, int height, string title)
        {
            __Internal.InitWindow(width, height, title);
        }

        public static void CloseWindow()
        {
            __Internal.CloseWindow();
        }

        public static bool IsWindowReady()
        {
            var __ret = __Internal.IsWindowReady();
            return __ret;
        }

        public static bool WindowShouldClose()
        {
            var __ret = __Internal.WindowShouldClose();
            return __ret;
        }

        public static bool IsWindowMinimized()
        {
            var __ret = __Internal.IsWindowMinimized();
            return __ret;
        }

        public static void ToggleFullscreen()
        {
            __Internal.ToggleFullscreen();
        }

        public static void SetWindowIcon(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? new global::raylib.Image.__Internal() : *(global::raylib.Image.__Internal*) image.__Instance;
            __Internal.SetWindowIcon(__arg0);
        }

        public static void SetWindowTitle(string title)
        {
            __Internal.SetWindowTitle(title);
        }

        public static void SetWindowPosition(int x, int y)
        {
            __Internal.SetWindowPosition(x, y);
        }

        public static void SetWindowMonitor(int monitor)
        {
            __Internal.SetWindowMonitor(monitor);
        }

        public static void SetWindowMinSize(int width, int height)
        {
            __Internal.SetWindowMinSize(width, height);
        }

        public static void SetWindowSize(int width, int height)
        {
            __Internal.SetWindowSize(width, height);
        }

        public static int GetScreenWidth()
        {
            var __ret = __Internal.GetScreenWidth();
            return __ret;
        }

        public static int GetScreenHeight()
        {
            var __ret = __Internal.GetScreenHeight();
            return __ret;
        }

        public static void ShowCursor()
        {
            __Internal.ShowCursor();
        }

        public static void HideCursor()
        {
            __Internal.HideCursor();
        }

        public static bool IsCursorHidden()
        {
            var __ret = __Internal.IsCursorHidden();
            return __ret;
        }

        public static void EnableCursor()
        {
            __Internal.EnableCursor();
        }

        public static void DisableCursor()
        {
            __Internal.DisableCursor();
        }

        public static void ClearBackground(global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.ClearBackground(__arg0);
        }

        public static void BeginDrawing()
        {
            __Internal.BeginDrawing();
        }

        public static void EndDrawing()
        {
            __Internal.EndDrawing();
        }

        public static void BeginMode2D(global::raylib.Camera2D camera)
        {
            var __arg0 = ReferenceEquals(camera, null) ? new global::raylib.Camera2D.__Internal() : *(global::raylib.Camera2D.__Internal*) camera.__Instance;
            __Internal.BeginMode2D(__arg0);
        }

        public static void EndMode2D()
        {
            __Internal.EndMode2D();
        }

        public static void BeginMode3D(global::raylib.Camera3D camera)
        {
            var __arg0 = ReferenceEquals(camera, null) ? new global::raylib.Camera3D.__Internal() : *(global::raylib.Camera3D.__Internal*) camera.__Instance;
            __Internal.BeginMode3D(__arg0);
        }

        public static void EndMode3D()
        {
            __Internal.EndMode3D();
        }

        public static void BeginTextureMode(global::raylib.RenderTexture2D target)
        {
            var __arg0 = ReferenceEquals(target, null) ? new global::raylib.RenderTexture2D.__Internal() : *(global::raylib.RenderTexture2D.__Internal*) target.__Instance;
            __Internal.BeginTextureMode(__arg0);
        }

        public static void EndTextureMode()
        {
            __Internal.EndTextureMode();
        }

        public static global::raylib.Ray GetMouseRay(global::raylib.Vector2 mousePosition, global::raylib.Camera3D camera)
        {
            var __arg0 = ReferenceEquals(mousePosition, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) mousePosition.__Instance;
            var __arg1 = ReferenceEquals(camera, null) ? new global::raylib.Camera3D.__Internal() : *(global::raylib.Camera3D.__Internal*) camera.__Instance;
            var __ret = new global::raylib.Ray.__Internal();
            __Internal.GetMouseRay(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Ray.__CreateInstance(__ret);
        }

        public static global::raylib.Vector2 GetWorldToScreen(global::raylib.Vector3 position, global::raylib.Camera3D camera)
        {
            var __arg0 = ReferenceEquals(position, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) position.__Instance;
            var __arg1 = ReferenceEquals(camera, null) ? new global::raylib.Camera3D.__Internal() : *(global::raylib.Camera3D.__Internal*) camera.__Instance;
            var __ret = __Internal.GetWorldToScreen(__arg0, __arg1);
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix GetCameraMatrix(global::raylib.Camera3D camera)
        {
            var __arg0 = ReferenceEquals(camera, null) ? new global::raylib.Camera3D.__Internal() : *(global::raylib.Camera3D.__Internal*) camera.__Instance;
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.GetCameraMatrix(new IntPtr(&__ret), __arg0);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static void SetTargetFPS(int fps)
        {
            __Internal.SetTargetFPS(fps);
        }

        public static int GetFPS()
        {
            var __ret = __Internal.GetFPS();
            return __ret;
        }

        public static float GetFrameTime()
        {
            var __ret = __Internal.GetFrameTime();
            return __ret;
        }

        public static double GetTime()
        {
            var __ret = __Internal.GetTime();
            return __ret;
        }

        public static int ColorToInt(global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            var __ret = __Internal.ColorToInt(__arg0);
            return __ret;
        }

        public static global::raylib.Vector4 ColorNormalize(global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.ColorNormalize(new IntPtr(&__ret), __arg0);
            return global::raylib.Vector4.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 ColorToHSV(global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.ColorToHSV(new IntPtr(&__ret), __arg0);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Color GetColor(int hexValue)
        {
            var __ret = __Internal.GetColor(hexValue);
            return global::raylib.Color.__CreateInstance(__ret);
        }

        public static global::raylib.Color Fade(global::raylib.Color color, float alpha)
        {
            var __arg0 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            var __ret = __Internal.Fade(__arg0, alpha);
            return global::raylib.Color.__CreateInstance(__ret);
        }

        public static void ShowLogo()
        {
            __Internal.ShowLogo();
        }

        public static void SetConfigFlags(byte flags)
        {
            __Internal.SetConfigFlags(flags);
        }

        public static void SetTraceLog(byte types)
        {
            __Internal.SetTraceLog(types);
        }

        public static void TraceLog(int logType, string text)
        {
            __Internal.TraceLog(logType, text);
        }

        public static void TakeScreenshot(string fileName)
        {
            __Internal.TakeScreenshot(fileName);
        }

        public static int GetRandomValue(int min, int max)
        {
            var __ret = __Internal.GetRandomValue(min, max);
            return __ret;
        }

        public static bool IsFileExtension(string fileName, string ext)
        {
            var __ret = __Internal.IsFileExtension(fileName, ext);
            return __ret;
        }

        public static string GetExtension(string fileName)
        {
            var __ret = __Internal.GetExtension(fileName);
            return Marshal.PtrToStringAnsi(__ret);
        }

        public static string GetFileName(string filePath)
        {
            var __ret = __Internal.GetFileName(filePath);
            return Marshal.PtrToStringAnsi(__ret);
        }

        public static string GetDirectoryPath(string fileName)
        {
            var __ret = __Internal.GetDirectoryPath(fileName);
            return Marshal.PtrToStringAnsi(__ret);
        }

        public static string GetWorkingDirectory()
        {
            var __ret = __Internal.GetWorkingDirectory();
            return Marshal.PtrToStringAnsi(__ret);
        }

        public static bool ChangeDirectory(string dir)
        {
            var __ret = __Internal.ChangeDirectory(dir);
            return __ret;
        }

        public static bool IsFileDropped()
        {
            var __ret = __Internal.IsFileDropped();
            return __ret;
        }

        public static sbyte** GetDroppedFiles(ref int count)
        {
            fixed (int* __refParamPtr0 = &count)
            {
                var __arg0 = __refParamPtr0;
                var __ret = __Internal.GetDroppedFiles(__arg0);
                return __ret;
            }
        }

        public static void ClearDroppedFiles()
        {
            __Internal.ClearDroppedFiles();
        }

        public static void StorageSaveValue(int position, int value)
        {
            __Internal.StorageSaveValue(position, value);
        }

        public static int StorageLoadValue(int position)
        {
            var __ret = __Internal.StorageLoadValue(position);
            return __ret;
        }

        public static bool IsKeyPressed(int key)
        {
            var __ret = __Internal.IsKeyPressed(key);
            return __ret;
        }

        public static bool IsKeyDown(int key)
        {
            var __ret = __Internal.IsKeyDown(key);
            return __ret;
        }

        public static bool IsKeyReleased(int key)
        {
            var __ret = __Internal.IsKeyReleased(key);
            return __ret;
        }

        public static bool IsKeyUp(int key)
        {
            var __ret = __Internal.IsKeyUp(key);
            return __ret;
        }

        public static int GetKeyPressed()
        {
            var __ret = __Internal.GetKeyPressed();
            return __ret;
        }

        public static void SetExitKey(int key)
        {
            __Internal.SetExitKey(key);
        }

        public static bool IsGamepadAvailable(int gamepad)
        {
            var __ret = __Internal.IsGamepadAvailable(gamepad);
            return __ret;
        }

        public static bool IsGamepadName(int gamepad, string name)
        {
            var __ret = __Internal.IsGamepadName(gamepad, name);
            return __ret;
        }

        public static string GetGamepadName(int gamepad)
        {
            var __ret = __Internal.GetGamepadName(gamepad);
            return Marshal.PtrToStringAnsi(__ret);
        }

        public static bool IsGamepadButtonPressed(int gamepad, int button)
        {
            var __ret = __Internal.IsGamepadButtonPressed(gamepad, button);
            return __ret;
        }

        public static bool IsGamepadButtonDown(int gamepad, int button)
        {
            var __ret = __Internal.IsGamepadButtonDown(gamepad, button);
            return __ret;
        }

        public static bool IsGamepadButtonReleased(int gamepad, int button)
        {
            var __ret = __Internal.IsGamepadButtonReleased(gamepad, button);
            return __ret;
        }

        public static bool IsGamepadButtonUp(int gamepad, int button)
        {
            var __ret = __Internal.IsGamepadButtonUp(gamepad, button);
            return __ret;
        }

        public static int GetGamepadButtonPressed()
        {
            var __ret = __Internal.GetGamepadButtonPressed();
            return __ret;
        }

        public static int GetGamepadAxisCount(int gamepad)
        {
            var __ret = __Internal.GetGamepadAxisCount(gamepad);
            return __ret;
        }

        public static float GetGamepadAxisMovement(int gamepad, int axis)
        {
            var __ret = __Internal.GetGamepadAxisMovement(gamepad, axis);
            return __ret;
        }

        public static bool IsMouseButtonPressed(int button)
        {
            var __ret = __Internal.IsMouseButtonPressed(button);
            return __ret;
        }

        public static bool IsMouseButtonDown(int button)
        {
            var __ret = __Internal.IsMouseButtonDown(button);
            return __ret;
        }

        public static bool IsMouseButtonReleased(int button)
        {
            var __ret = __Internal.IsMouseButtonReleased(button);
            return __ret;
        }

        public static bool IsMouseButtonUp(int button)
        {
            var __ret = __Internal.IsMouseButtonUp(button);
            return __ret;
        }

        public static int GetMouseX()
        {
            var __ret = __Internal.GetMouseX();
            return __ret;
        }

        public static int GetMouseY()
        {
            var __ret = __Internal.GetMouseY();
            return __ret;
        }

        public static global::raylib.Vector2 GetMousePosition()
        {
            var __ret = __Internal.GetMousePosition();
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static void SetMousePosition(global::raylib.Vector2 position)
        {
            var __arg0 = ReferenceEquals(position, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) position.__Instance;
            __Internal.SetMousePosition(__arg0);
        }

        public static void SetMouseScale(float scale)
        {
            __Internal.SetMouseScale(scale);
        }

        public static int GetMouseWheelMove()
        {
            var __ret = __Internal.GetMouseWheelMove();
            return __ret;
        }

        public static int GetTouchX()
        {
            var __ret = __Internal.GetTouchX();
            return __ret;
        }

        public static int GetTouchY()
        {
            var __ret = __Internal.GetTouchY();
            return __ret;
        }

        public static global::raylib.Vector2 GetTouchPosition(int index)
        {
            var __ret = __Internal.GetTouchPosition(index);
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static void SetGesturesEnabled(uint gestureFlags)
        {
            __Internal.SetGesturesEnabled(gestureFlags);
        }

        public static bool IsGestureDetected(int gesture)
        {
            var __ret = __Internal.IsGestureDetected(gesture);
            return __ret;
        }

        public static int GetGestureDetected()
        {
            var __ret = __Internal.GetGestureDetected();
            return __ret;
        }

        public static int GetTouchPointsCount()
        {
            var __ret = __Internal.GetTouchPointsCount();
            return __ret;
        }

        public static float GetGestureHoldDuration()
        {
            var __ret = __Internal.GetGestureHoldDuration();
            return __ret;
        }

        public static global::raylib.Vector2 GetGestureDragVector()
        {
            var __ret = __Internal.GetGestureDragVector();
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static float GetGestureDragAngle()
        {
            var __ret = __Internal.GetGestureDragAngle();
            return __ret;
        }

        public static global::raylib.Vector2 GetGesturePinchVector()
        {
            var __ret = __Internal.GetGesturePinchVector();
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static float GetGesturePinchAngle()
        {
            var __ret = __Internal.GetGesturePinchAngle();
            return __ret;
        }

        public static void SetCameraMode(global::raylib.Camera3D camera, int mode)
        {
            var __arg0 = ReferenceEquals(camera, null) ? new global::raylib.Camera3D.__Internal() : *(global::raylib.Camera3D.__Internal*) camera.__Instance;
            __Internal.SetCameraMode(__arg0, mode);
        }

        public static void UpdateCamera(global::raylib.Camera3D camera)
        {
            var __arg0 = ReferenceEquals(camera, null) ? global::System.IntPtr.Zero : camera.__Instance;
            __Internal.UpdateCamera(__arg0);
        }

        public static void SetCameraPanControl(int panKey)
        {
            __Internal.SetCameraPanControl(panKey);
        }

        public static void SetCameraAltControl(int altKey)
        {
            __Internal.SetCameraAltControl(altKey);
        }

        public static void SetCameraSmoothZoomControl(int szKey)
        {
            __Internal.SetCameraSmoothZoomControl(szKey);
        }

        public static void SetCameraMoveControls(int frontKey, int backKey, int rightKey, int leftKey, int upKey, int downKey)
        {
            __Internal.SetCameraMoveControls(frontKey, backKey, rightKey, leftKey, upKey, downKey);
        }

        public static void DrawPixel(int posX, int posY, global::raylib.Color color)
        {
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawPixel(posX, posY, __arg2);
        }

        public static void DrawPixelV(global::raylib.Vector2 position, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(position, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) position.__Instance;
            var __arg1 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawPixelV(__arg0, __arg1);
        }

        public static void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, global::raylib.Color color)
        {
            var __arg4 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawLine(startPosX, startPosY, endPosX, endPosY, __arg4);
        }

        public static void DrawLineV(global::raylib.Vector2 startPos, global::raylib.Vector2 endPos, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(startPos, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) startPos.__Instance;
            var __arg1 = ReferenceEquals(endPos, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) endPos.__Instance;
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawLineV(__arg0, __arg1, __arg2);
        }

        public static void DrawLineEx(global::raylib.Vector2 startPos, global::raylib.Vector2 endPos, float thick, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(startPos, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) startPos.__Instance;
            var __arg1 = ReferenceEquals(endPos, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) endPos.__Instance;
            var __arg3 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawLineEx(__arg0, __arg1, thick, __arg3);
        }

        public static void DrawLineBezier(global::raylib.Vector2 startPos, global::raylib.Vector2 endPos, float thick, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(startPos, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) startPos.__Instance;
            var __arg1 = ReferenceEquals(endPos, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) endPos.__Instance;
            var __arg3 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawLineBezier(__arg0, __arg1, thick, __arg3);
        }

        public static void DrawCircle(int centerX, int centerY, float radius, global::raylib.Color color)
        {
            var __arg3 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawCircle(centerX, centerY, radius, __arg3);
        }

        public static void DrawCircleGradient(int centerX, int centerY, float radius, global::raylib.Color color1, global::raylib.Color color2)
        {
            var __arg3 = ReferenceEquals(color1, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color1.__Instance;
            var __arg4 = ReferenceEquals(color2, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color2.__Instance;
            __Internal.DrawCircleGradient(centerX, centerY, radius, __arg3, __arg4);
        }

        public static void DrawCircleV(global::raylib.Vector2 center, float radius, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(center, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) center.__Instance;
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawCircleV(__arg0, radius, __arg2);
        }

        public static void DrawCircleLines(int centerX, int centerY, float radius, global::raylib.Color color)
        {
            var __arg3 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawCircleLines(centerX, centerY, radius, __arg3);
        }

        public static void DrawRectangle(int posX, int posY, int width, int height, global::raylib.Color color)
        {
            var __arg4 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawRectangle(posX, posY, width, height, __arg4);
        }

        public static void DrawRectangleV(global::raylib.Vector2 position, global::raylib.Vector2 size, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(position, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) position.__Instance;
            var __arg1 = ReferenceEquals(size, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) size.__Instance;
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawRectangleV(__arg0, __arg1, __arg2);
        }

        public static void DrawRectangleRec(global::raylib.Rectangle rec, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(rec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) rec.__Instance;
            var __arg1 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawRectangleRec(__arg0, __arg1);
        }

        public static void DrawRectanglePro(global::raylib.Rectangle rec, global::raylib.Vector2 origin, float rotation, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(rec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) rec.__Instance;
            var __arg1 = ReferenceEquals(origin, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) origin.__Instance;
            var __arg3 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawRectanglePro(__arg0, __arg1, rotation, __arg3);
        }

        public static void DrawRectangleGradientV(int posX, int posY, int width, int height, global::raylib.Color color1, global::raylib.Color color2)
        {
            var __arg4 = ReferenceEquals(color1, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color1.__Instance;
            var __arg5 = ReferenceEquals(color2, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color2.__Instance;
            __Internal.DrawRectangleGradientV(posX, posY, width, height, __arg4, __arg5);
        }

        public static void DrawRectangleGradientH(int posX, int posY, int width, int height, global::raylib.Color color1, global::raylib.Color color2)
        {
            var __arg4 = ReferenceEquals(color1, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color1.__Instance;
            var __arg5 = ReferenceEquals(color2, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color2.__Instance;
            __Internal.DrawRectangleGradientH(posX, posY, width, height, __arg4, __arg5);
        }

        public static void DrawRectangleGradientEx(global::raylib.Rectangle rec, global::raylib.Color col1, global::raylib.Color col2, global::raylib.Color col3, global::raylib.Color col4)
        {
            var __arg0 = ReferenceEquals(rec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) rec.__Instance;
            var __arg1 = ReferenceEquals(col1, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) col1.__Instance;
            var __arg2 = ReferenceEquals(col2, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) col2.__Instance;
            var __arg3 = ReferenceEquals(col3, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) col3.__Instance;
            var __arg4 = ReferenceEquals(col4, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) col4.__Instance;
            __Internal.DrawRectangleGradientEx(__arg0, __arg1, __arg2, __arg3, __arg4);
        }

        public static void DrawRectangleLines(int posX, int posY, int width, int height, global::raylib.Color color)
        {
            var __arg4 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawRectangleLines(posX, posY, width, height, __arg4);
        }

        public static void DrawRectangleLinesEx(global::raylib.Rectangle rec, int lineThick, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(rec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) rec.__Instance;
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawRectangleLinesEx(__arg0, lineThick, __arg2);
        }

        public static void DrawTriangle(global::raylib.Vector2 v1, global::raylib.Vector2 v2, global::raylib.Vector2 v3, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v2.__Instance;
            var __arg2 = ReferenceEquals(v3, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v3.__Instance;
            var __arg3 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawTriangle(__arg0, __arg1, __arg2, __arg3);
        }

        public static void DrawTriangleLines(global::raylib.Vector2 v1, global::raylib.Vector2 v2, global::raylib.Vector2 v3, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v2.__Instance;
            var __arg2 = ReferenceEquals(v3, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v3.__Instance;
            var __arg3 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawTriangleLines(__arg0, __arg1, __arg2, __arg3);
        }

        public static void DrawPoly(global::raylib.Vector2 center, int sides, float radius, float rotation, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(center, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) center.__Instance;
            var __arg4 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawPoly(__arg0, sides, radius, rotation, __arg4);
        }

        public static void DrawPolyEx(global::raylib.Vector2 points, int numPoints, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(points, null) ? global::System.IntPtr.Zero : points.__Instance;
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawPolyEx(__arg0, numPoints, __arg2);
        }

        public static void DrawPolyExLines(global::raylib.Vector2 points, int numPoints, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(points, null) ? global::System.IntPtr.Zero : points.__Instance;
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawPolyExLines(__arg0, numPoints, __arg2);
        }

        public static bool CheckCollisionRecs(global::raylib.Rectangle rec1, global::raylib.Rectangle rec2)
        {
            var __arg0 = ReferenceEquals(rec1, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) rec1.__Instance;
            var __arg1 = ReferenceEquals(rec2, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) rec2.__Instance;
            var __ret = __Internal.CheckCollisionRecs(__arg0, __arg1);
            return __ret;
        }

        public static bool CheckCollisionCircles(global::raylib.Vector2 center1, float radius1, global::raylib.Vector2 center2, float radius2)
        {
            var __arg0 = ReferenceEquals(center1, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) center1.__Instance;
            var __arg2 = ReferenceEquals(center2, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) center2.__Instance;
            var __ret = __Internal.CheckCollisionCircles(__arg0, radius1, __arg2, radius2);
            return __ret;
        }

        public static bool CheckCollisionCircleRec(global::raylib.Vector2 center, float radius, global::raylib.Rectangle rec)
        {
            var __arg0 = ReferenceEquals(center, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) center.__Instance;
            var __arg2 = ReferenceEquals(rec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) rec.__Instance;
            var __ret = __Internal.CheckCollisionCircleRec(__arg0, radius, __arg2);
            return __ret;
        }

        public static global::raylib.Rectangle GetCollisionRec(global::raylib.Rectangle rec1, global::raylib.Rectangle rec2)
        {
            var __arg0 = ReferenceEquals(rec1, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) rec1.__Instance;
            var __arg1 = ReferenceEquals(rec2, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) rec2.__Instance;
            var __ret = new global::raylib.Rectangle.__Internal();
            __Internal.GetCollisionRec(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Rectangle.__CreateInstance(__ret);
        }

        public static bool CheckCollisionPointRec(global::raylib.Vector2 point, global::raylib.Rectangle rec)
        {
            var __arg0 = ReferenceEquals(point, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) point.__Instance;
            var __arg1 = ReferenceEquals(rec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) rec.__Instance;
            var __ret = __Internal.CheckCollisionPointRec(__arg0, __arg1);
            return __ret;
        }

        public static bool CheckCollisionPointCircle(global::raylib.Vector2 point, global::raylib.Vector2 center, float radius)
        {
            var __arg0 = ReferenceEquals(point, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) point.__Instance;
            var __arg1 = ReferenceEquals(center, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) center.__Instance;
            var __ret = __Internal.CheckCollisionPointCircle(__arg0, __arg1, radius);
            return __ret;
        }

        public static bool CheckCollisionPointTriangle(global::raylib.Vector2 point, global::raylib.Vector2 p1, global::raylib.Vector2 p2, global::raylib.Vector2 p3)
        {
            var __arg0 = ReferenceEquals(point, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) point.__Instance;
            var __arg1 = ReferenceEquals(p1, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) p1.__Instance;
            var __arg2 = ReferenceEquals(p2, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) p2.__Instance;
            var __arg3 = ReferenceEquals(p3, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) p3.__Instance;
            var __ret = __Internal.CheckCollisionPointTriangle(__arg0, __arg1, __arg2, __arg3);
            return __ret;
        }

        public static global::raylib.Image LoadImage(string fileName)
        {
            var __ret = new global::raylib.Image.__Internal();
            __Internal.LoadImage(new IntPtr(&__ret), fileName);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static global::raylib.Image LoadImageEx(global::raylib.Color pixels, int width, int height)
        {
            var __arg0 = ReferenceEquals(pixels, null) ? global::System.IntPtr.Zero : pixels.__Instance;
            var __ret = new global::raylib.Image.__Internal();
            __Internal.LoadImageEx(new IntPtr(&__ret), __arg0, width, height);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static global::raylib.Image LoadImagePro(global::System.IntPtr data, int width, int height, int format)
        {
            var __ret = new global::raylib.Image.__Internal();
            __Internal.LoadImagePro(new IntPtr(&__ret), data, width, height, format);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static global::raylib.Image LoadImageRaw(string fileName, int width, int height, int format, int headerSize)
        {
            var __ret = new global::raylib.Image.__Internal();
            __Internal.LoadImageRaw(new IntPtr(&__ret), fileName, width, height, format, headerSize);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static void ExportImage(string fileName, global::raylib.Image image)
        {
            var __arg1 = ReferenceEquals(image, null) ? new global::raylib.Image.__Internal() : *(global::raylib.Image.__Internal*) image.__Instance;
            __Internal.ExportImage(fileName, __arg1);
        }

        public static global::raylib.Texture2D LoadTexture(string fileName)
        {
            var __ret = new global::raylib.Texture2D.__Internal();
            __Internal.LoadTexture(new IntPtr(&__ret), fileName);
            return global::raylib.Texture2D.__CreateInstance(__ret);
        }

        public static global::raylib.Texture2D LoadTextureFromImage(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? new global::raylib.Image.__Internal() : *(global::raylib.Image.__Internal*) image.__Instance;
            var __ret = new global::raylib.Texture2D.__Internal();
            __Internal.LoadTextureFromImage(new IntPtr(&__ret), __arg0);
            return global::raylib.Texture2D.__CreateInstance(__ret);
        }

        public static global::raylib.RenderTexture2D LoadRenderTexture(int width, int height)
        {
            var __ret = new global::raylib.RenderTexture2D.__Internal();
            __Internal.LoadRenderTexture(new IntPtr(&__ret), width, height);
            return global::raylib.RenderTexture2D.__CreateInstance(__ret);
        }

        public static void UnloadImage(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? new global::raylib.Image.__Internal() : *(global::raylib.Image.__Internal*) image.__Instance;
            __Internal.UnloadImage(__arg0);
        }

        public static void UnloadTexture(global::raylib.Texture2D texture)
        {
            var __arg0 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            __Internal.UnloadTexture(__arg0);
        }

        public static void UnloadRenderTexture(global::raylib.RenderTexture2D target)
        {
            var __arg0 = ReferenceEquals(target, null) ? new global::raylib.RenderTexture2D.__Internal() : *(global::raylib.RenderTexture2D.__Internal*) target.__Instance;
            __Internal.UnloadRenderTexture(__arg0);
        }

        public static global::raylib.Color GetImageData(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? new global::raylib.Image.__Internal() : *(global::raylib.Image.__Internal*) image.__Instance;
            var __ret = __Internal.GetImageData(__arg0);
            global::raylib.Color __result0;
            if (__ret == IntPtr.Zero) __result0 = null;
            else if (global::raylib.Color.NativeToManagedMap.ContainsKey(__ret))
                __result0 = (global::raylib.Color) global::raylib.Color.NativeToManagedMap[__ret];
            else __result0 = global::raylib.Color.__CreateInstance(__ret);
            return __result0;
        }

        public static global::raylib.Vector4 GetImageDataNormalized(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? new global::raylib.Image.__Internal() : *(global::raylib.Image.__Internal*) image.__Instance;
            var __ret = __Internal.GetImageDataNormalized(__arg0);
            global::raylib.Vector4 __result0;
            if (__ret == IntPtr.Zero) __result0 = null;
            else if (global::raylib.Vector4.NativeToManagedMap.ContainsKey(__ret))
                __result0 = (global::raylib.Vector4) global::raylib.Vector4.NativeToManagedMap[__ret];
            else __result0 = global::raylib.Vector4.__CreateInstance(__ret);
            return __result0;
        }

        public static int GetPixelDataSize(int width, int height, int format)
        {
            var __ret = __Internal.GetPixelDataSize(width, height, format);
            return __ret;
        }

        public static global::raylib.Image GetTextureData(global::raylib.Texture2D texture)
        {
            var __arg0 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            var __ret = new global::raylib.Image.__Internal();
            __Internal.GetTextureData(new IntPtr(&__ret), __arg0);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static void UpdateTexture(global::raylib.Texture2D texture, global::System.IntPtr pixels)
        {
            var __arg0 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            __Internal.UpdateTexture(__arg0, pixels);
        }

        public static global::raylib.Image ImageCopy(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? new global::raylib.Image.__Internal() : *(global::raylib.Image.__Internal*) image.__Instance;
            var __ret = new global::raylib.Image.__Internal();
            __Internal.ImageCopy(new IntPtr(&__ret), __arg0);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static void ImageToPOT(global::raylib.Image image, global::raylib.Color fillColor)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            var __arg1 = ReferenceEquals(fillColor, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) fillColor.__Instance;
            __Internal.ImageToPOT(__arg0, __arg1);
        }

        public static void ImageFormat(global::raylib.Image image, int newFormat)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageFormat(__arg0, newFormat);
        }

        public static void ImageAlphaMask(global::raylib.Image image, global::raylib.Image alphaMask)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            var __arg1 = ReferenceEquals(alphaMask, null) ? new global::raylib.Image.__Internal() : *(global::raylib.Image.__Internal*) alphaMask.__Instance;
            __Internal.ImageAlphaMask(__arg0, __arg1);
        }

        public static void ImageAlphaClear(global::raylib.Image image, global::raylib.Color color, float threshold)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            var __arg1 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.ImageAlphaClear(__arg0, __arg1, threshold);
        }

        public static void ImageAlphaCrop(global::raylib.Image image, float threshold)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageAlphaCrop(__arg0, threshold);
        }

        public static void ImageAlphaPremultiply(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageAlphaPremultiply(__arg0);
        }

        public static void ImageCrop(global::raylib.Image image, global::raylib.Rectangle crop)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            var __arg1 = ReferenceEquals(crop, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) crop.__Instance;
            __Internal.ImageCrop(__arg0, __arg1);
        }

        public static void ImageResize(global::raylib.Image image, int newWidth, int newHeight)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageResize(__arg0, newWidth, newHeight);
        }

        public static void ImageResizeNN(global::raylib.Image image, int newWidth, int newHeight)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageResizeNN(__arg0, newWidth, newHeight);
        }

        public static void ImageResizeCanvas(global::raylib.Image image, int newWidth, int newHeight, int offsetX, int offsetY, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            var __arg5 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.ImageResizeCanvas(__arg0, newWidth, newHeight, offsetX, offsetY, __arg5);
        }

        public static void ImageMipmaps(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageMipmaps(__arg0);
        }

        public static void ImageDither(global::raylib.Image image, int rBpp, int gBpp, int bBpp, int aBpp)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageDither(__arg0, rBpp, gBpp, bBpp, aBpp);
        }

        public static global::raylib.Image ImageText(string text, int fontSize, global::raylib.Color color)
        {
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            var __ret = new global::raylib.Image.__Internal();
            __Internal.ImageText(new IntPtr(&__ret), text, fontSize, __arg2);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static global::raylib.Image ImageTextEx(global::raylib.Font font, string text, float fontSize, float spacing, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(font, null) ? new global::raylib.Font.__Internal() : *(global::raylib.Font.__Internal*) font.__Instance;
            var __arg4 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            var __ret = new global::raylib.Image.__Internal();
            __Internal.ImageTextEx(new IntPtr(&__ret), __arg0, text, fontSize, spacing, __arg4);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static void ImageDraw(global::raylib.Image dst, global::raylib.Image src, global::raylib.Rectangle srcRec, global::raylib.Rectangle dstRec)
        {
            var __arg0 = ReferenceEquals(dst, null) ? global::System.IntPtr.Zero : dst.__Instance;
            var __arg1 = ReferenceEquals(src, null) ? new global::raylib.Image.__Internal() : *(global::raylib.Image.__Internal*) src.__Instance;
            var __arg2 = ReferenceEquals(srcRec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) srcRec.__Instance;
            var __arg3 = ReferenceEquals(dstRec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) dstRec.__Instance;
            __Internal.ImageDraw(__arg0, __arg1, __arg2, __arg3);
        }

        public static void ImageDrawRectangle(global::raylib.Image dst, global::raylib.Vector2 position, global::raylib.Rectangle rec, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(dst, null) ? global::System.IntPtr.Zero : dst.__Instance;
            var __arg1 = ReferenceEquals(position, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) position.__Instance;
            var __arg2 = ReferenceEquals(rec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) rec.__Instance;
            var __arg3 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.ImageDrawRectangle(__arg0, __arg1, __arg2, __arg3);
        }

        public static void ImageDrawText(global::raylib.Image dst, global::raylib.Vector2 position, string text, int fontSize, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(dst, null) ? global::System.IntPtr.Zero : dst.__Instance;
            var __arg1 = ReferenceEquals(position, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) position.__Instance;
            var __arg4 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.ImageDrawText(__arg0, __arg1, text, fontSize, __arg4);
        }

        public static void ImageDrawTextEx(global::raylib.Image dst, global::raylib.Vector2 position, global::raylib.Font font, string text, float fontSize, float spacing, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(dst, null) ? global::System.IntPtr.Zero : dst.__Instance;
            var __arg1 = ReferenceEquals(position, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) position.__Instance;
            var __arg2 = ReferenceEquals(font, null) ? new global::raylib.Font.__Internal() : *(global::raylib.Font.__Internal*) font.__Instance;
            var __arg6 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.ImageDrawTextEx(__arg0, __arg1, __arg2, text, fontSize, spacing, __arg6);
        }

        public static void ImageFlipVertical(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageFlipVertical(__arg0);
        }

        public static void ImageFlipHorizontal(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageFlipHorizontal(__arg0);
        }

        public static void ImageRotateCW(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageRotateCW(__arg0);
        }

        public static void ImageRotateCCW(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageRotateCCW(__arg0);
        }

        public static void ImageColorTint(global::raylib.Image image, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            var __arg1 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.ImageColorTint(__arg0, __arg1);
        }

        public static void ImageColorInvert(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageColorInvert(__arg0);
        }

        public static void ImageColorGrayscale(global::raylib.Image image)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageColorGrayscale(__arg0);
        }

        public static void ImageColorContrast(global::raylib.Image image, float contrast)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageColorContrast(__arg0, contrast);
        }

        public static void ImageColorBrightness(global::raylib.Image image, int brightness)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            __Internal.ImageColorBrightness(__arg0, brightness);
        }

        public static void ImageColorReplace(global::raylib.Image image, global::raylib.Color color, global::raylib.Color replace)
        {
            var __arg0 = ReferenceEquals(image, null) ? global::System.IntPtr.Zero : image.__Instance;
            var __arg1 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            var __arg2 = ReferenceEquals(replace, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) replace.__Instance;
            __Internal.ImageColorReplace(__arg0, __arg1, __arg2);
        }

        public static global::raylib.Image GenImageColor(int width, int height, global::raylib.Color color)
        {
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            var __ret = new global::raylib.Image.__Internal();
            __Internal.GenImageColor(new IntPtr(&__ret), width, height, __arg2);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static global::raylib.Image GenImageGradientV(int width, int height, global::raylib.Color top, global::raylib.Color bottom)
        {
            var __arg2 = ReferenceEquals(top, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) top.__Instance;
            var __arg3 = ReferenceEquals(bottom, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) bottom.__Instance;
            var __ret = new global::raylib.Image.__Internal();
            __Internal.GenImageGradientV(new IntPtr(&__ret), width, height, __arg2, __arg3);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static global::raylib.Image GenImageGradientH(int width, int height, global::raylib.Color left, global::raylib.Color right)
        {
            var __arg2 = ReferenceEquals(left, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) left.__Instance;
            var __arg3 = ReferenceEquals(right, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) right.__Instance;
            var __ret = new global::raylib.Image.__Internal();
            __Internal.GenImageGradientH(new IntPtr(&__ret), width, height, __arg2, __arg3);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static global::raylib.Image GenImageGradientRadial(int width, int height, float density, global::raylib.Color inner, global::raylib.Color outer)
        {
            var __arg3 = ReferenceEquals(inner, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) inner.__Instance;
            var __arg4 = ReferenceEquals(outer, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) outer.__Instance;
            var __ret = new global::raylib.Image.__Internal();
            __Internal.GenImageGradientRadial(new IntPtr(&__ret), width, height, density, __arg3, __arg4);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static global::raylib.Image GenImageChecked(int width, int height, int checksX, int checksY, global::raylib.Color col1, global::raylib.Color col2)
        {
            var __arg4 = ReferenceEquals(col1, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) col1.__Instance;
            var __arg5 = ReferenceEquals(col2, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) col2.__Instance;
            var __ret = new global::raylib.Image.__Internal();
            __Internal.GenImageChecked(new IntPtr(&__ret), width, height, checksX, checksY, __arg4, __arg5);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static global::raylib.Image GenImageWhiteNoise(int width, int height, float factor)
        {
            var __ret = new global::raylib.Image.__Internal();
            __Internal.GenImageWhiteNoise(new IntPtr(&__ret), width, height, factor);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static global::raylib.Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale)
        {
            var __ret = new global::raylib.Image.__Internal();
            __Internal.GenImagePerlinNoise(new IntPtr(&__ret), width, height, offsetX, offsetY, scale);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static global::raylib.Image GenImageCellular(int width, int height, int tileSize)
        {
            var __ret = new global::raylib.Image.__Internal();
            __Internal.GenImageCellular(new IntPtr(&__ret), width, height, tileSize);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static void GenTextureMipmaps(global::raylib.Texture2D texture)
        {
            var __arg0 = ReferenceEquals(texture, null) ? global::System.IntPtr.Zero : texture.__Instance;
            __Internal.GenTextureMipmaps(__arg0);
        }

        public static void SetTextureFilter(global::raylib.Texture2D texture, int filterMode)
        {
            var __arg0 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            __Internal.SetTextureFilter(__arg0, filterMode);
        }

        public static void SetTextureWrap(global::raylib.Texture2D texture, int wrapMode)
        {
            var __arg0 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            __Internal.SetTextureWrap(__arg0, wrapMode);
        }

        public static void DrawTexture(global::raylib.Texture2D texture, int posX, int posY, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            var __arg3 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            __Internal.DrawTexture(__arg0, posX, posY, __arg3);
        }

        public static void DrawTextureV(global::raylib.Texture2D texture, global::raylib.Vector2 position, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            var __arg1 = ReferenceEquals(position, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) position.__Instance;
            var __arg2 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            __Internal.DrawTextureV(__arg0, __arg1, __arg2);
        }

        public static void DrawTextureEx(global::raylib.Texture2D texture, global::raylib.Vector2 position, float rotation, float scale, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            var __arg1 = ReferenceEquals(position, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) position.__Instance;
            var __arg4 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            __Internal.DrawTextureEx(__arg0, __arg1, rotation, scale, __arg4);
        }

        public static void DrawTextureRec(global::raylib.Texture2D texture, global::raylib.Rectangle sourceRec, global::raylib.Vector2 position, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            var __arg1 = ReferenceEquals(sourceRec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) sourceRec.__Instance;
            var __arg2 = ReferenceEquals(position, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) position.__Instance;
            var __arg3 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            __Internal.DrawTextureRec(__arg0, __arg1, __arg2, __arg3);
        }

        public static void DrawTexturePro(global::raylib.Texture2D texture, global::raylib.Rectangle sourceRec, global::raylib.Rectangle destRec, global::raylib.Vector2 origin, float rotation, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            var __arg1 = ReferenceEquals(sourceRec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) sourceRec.__Instance;
            var __arg2 = ReferenceEquals(destRec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) destRec.__Instance;
            var __arg3 = ReferenceEquals(origin, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) origin.__Instance;
            var __arg5 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            __Internal.DrawTexturePro(__arg0, __arg1, __arg2, __arg3, rotation, __arg5);
        }

        public static global::raylib.Font GetFontDefault()
        {
            var __ret = new global::raylib.Font.__Internal();
            __Internal.GetFontDefault(new IntPtr(&__ret));
            return global::raylib.Font.__CreateInstance(__ret);
        }

        public static global::raylib.Font LoadFont(string fileName)
        {
            var __ret = new global::raylib.Font.__Internal();
            __Internal.LoadFont(new IntPtr(&__ret), fileName);
            return global::raylib.Font.__CreateInstance(__ret);
        }

        public static global::raylib.Font LoadFontEx(string fileName, int fontSize, int charsCount, ref int fontChars)
        {
            fixed (int* __refParamPtr3 = &fontChars)
            {
                var __arg3 = __refParamPtr3;
                var __ret = new global::raylib.Font.__Internal();
                __Internal.LoadFontEx(new IntPtr(&__ret), fileName, fontSize, charsCount, __arg3);
                return global::raylib.Font.__CreateInstance(__ret);
            }
        }

        public static global::raylib.CharInfo LoadFontData(string fileName, int fontSize, ref int fontChars, int charsCount, bool sdf)
        {
            fixed (int* __refParamPtr2 = &fontChars)
            {
                var __arg2 = __refParamPtr2;
                var __ret = __Internal.LoadFontData(fileName, fontSize, __arg2, charsCount, sdf);
                global::raylib.CharInfo __result0;
                if (__ret == IntPtr.Zero) __result0 = null;
                else if (global::raylib.CharInfo.NativeToManagedMap.ContainsKey(__ret))
                    __result0 = (global::raylib.CharInfo) global::raylib.CharInfo.NativeToManagedMap[__ret];
                else __result0 = global::raylib.CharInfo.__CreateInstance(__ret);
                return __result0;
            }
        }

        public static global::raylib.Image GenImageFontAtlas(global::raylib.CharInfo chars, int fontSize, int charsCount, int padding, int packMethod)
        {
            var __arg0 = ReferenceEquals(chars, null) ? global::System.IntPtr.Zero : chars.__Instance;
            var __ret = new global::raylib.Image.__Internal();
            __Internal.GenImageFontAtlas(new IntPtr(&__ret), __arg0, fontSize, charsCount, padding, packMethod);
            return global::raylib.Image.__CreateInstance(__ret);
        }

        public static void UnloadFont(global::raylib.Font font)
        {
            var __arg0 = ReferenceEquals(font, null) ? new global::raylib.Font.__Internal() : *(global::raylib.Font.__Internal*) font.__Instance;
            __Internal.UnloadFont(__arg0);
        }

        public static void DrawFPS(int posX, int posY)
        {
            __Internal.DrawFPS(posX, posY);
        }

        public static void DrawText(string text, int posX, int posY, int fontSize, global::raylib.Color color)
        {
            var __arg4 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawText(text, posX, posY, fontSize, __arg4);
        }

        public static void DrawTextEx(global::raylib.Font font, string text, global::raylib.Vector2 position, float fontSize, float spacing, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(font, null) ? new global::raylib.Font.__Internal() : *(global::raylib.Font.__Internal*) font.__Instance;
            var __arg2 = ReferenceEquals(position, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) position.__Instance;
            var __arg5 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            __Internal.DrawTextEx(__arg0, text, __arg2, fontSize, spacing, __arg5);
        }

        public static int MeasureText(string text, int fontSize)
        {
            var __ret = __Internal.MeasureText(text, fontSize);
            return __ret;
        }

        public static global::raylib.Vector2 MeasureTextEx(global::raylib.Font font, string text, float fontSize, float spacing)
        {
            var __arg0 = ReferenceEquals(font, null) ? new global::raylib.Font.__Internal() : *(global::raylib.Font.__Internal*) font.__Instance;
            var __ret = __Internal.MeasureTextEx(__arg0, text, fontSize, spacing);
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static string FormatText(string text)
        {
            var __ret = __Internal.FormatText(text);
            return Marshal.PtrToStringAnsi(__ret);
        }

        public static string SubText(string text, int position, int length)
        {
            var __ret = __Internal.SubText(text, position, length);
            return Marshal.PtrToStringAnsi(__ret);
        }

        public static int GetGlyphIndex(global::raylib.Font font, int character)
        {
            var __arg0 = ReferenceEquals(font, null) ? new global::raylib.Font.__Internal() : *(global::raylib.Font.__Internal*) font.__Instance;
            var __ret = __Internal.GetGlyphIndex(__arg0, character);
            return __ret;
        }

        public static void DrawLine3D(global::raylib.Vector3 startPos, global::raylib.Vector3 endPos, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(startPos, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) startPos.__Instance;
            var __arg1 = ReferenceEquals(endPos, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) endPos.__Instance;
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawLine3D(__arg0, __arg1, __arg2);
        }

        public static void DrawCircle3D(global::raylib.Vector3 center, float radius, global::raylib.Vector3 rotationAxis, float rotationAngle, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(center, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) center.__Instance;
            var __arg2 = ReferenceEquals(rotationAxis, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) rotationAxis.__Instance;
            var __arg4 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawCircle3D(__arg0, radius, __arg2, rotationAngle, __arg4);
        }

        public static void DrawCube(global::raylib.Vector3 position, float width, float height, float length, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(position, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) position.__Instance;
            var __arg4 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawCube(__arg0, width, height, length, __arg4);
        }

        public static void DrawCubeV(global::raylib.Vector3 position, global::raylib.Vector3 size, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(position, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) position.__Instance;
            var __arg1 = ReferenceEquals(size, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) size.__Instance;
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawCubeV(__arg0, __arg1, __arg2);
        }

        public static void DrawCubeWires(global::raylib.Vector3 position, float width, float height, float length, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(position, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) position.__Instance;
            var __arg4 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawCubeWires(__arg0, width, height, length, __arg4);
        }

        public static void DrawCubeTexture(global::raylib.Texture2D texture, global::raylib.Vector3 position, float width, float height, float length, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            var __arg1 = ReferenceEquals(position, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) position.__Instance;
            var __arg5 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawCubeTexture(__arg0, __arg1, width, height, length, __arg5);
        }

        public static void DrawSphere(global::raylib.Vector3 centerPos, float radius, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(centerPos, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) centerPos.__Instance;
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawSphere(__arg0, radius, __arg2);
        }

        public static void DrawSphereEx(global::raylib.Vector3 centerPos, float radius, int rings, int slices, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(centerPos, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) centerPos.__Instance;
            var __arg4 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawSphereEx(__arg0, radius, rings, slices, __arg4);
        }

        public static void DrawSphereWires(global::raylib.Vector3 centerPos, float radius, int rings, int slices, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(centerPos, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) centerPos.__Instance;
            var __arg4 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawSphereWires(__arg0, radius, rings, slices, __arg4);
        }

        public static void DrawCylinder(global::raylib.Vector3 position, float radiusTop, float radiusBottom, float height, int slices, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(position, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) position.__Instance;
            var __arg5 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawCylinder(__arg0, radiusTop, radiusBottom, height, slices, __arg5);
        }

        public static void DrawCylinderWires(global::raylib.Vector3 position, float radiusTop, float radiusBottom, float height, int slices, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(position, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) position.__Instance;
            var __arg5 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawCylinderWires(__arg0, radiusTop, radiusBottom, height, slices, __arg5);
        }

        public static void DrawPlane(global::raylib.Vector3 centerPos, global::raylib.Vector2 size, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(centerPos, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) centerPos.__Instance;
            var __arg1 = ReferenceEquals(size, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) size.__Instance;
            var __arg2 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawPlane(__arg0, __arg1, __arg2);
        }

        public static void DrawRay(global::raylib.Ray ray, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(ray, null) ? new global::raylib.Ray.__Internal() : *(global::raylib.Ray.__Internal*) ray.__Instance;
            var __arg1 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawRay(__arg0, __arg1);
        }

        public static void DrawGrid(int slices, float spacing)
        {
            __Internal.DrawGrid(slices, spacing);
        }

        public static void DrawGizmo(global::raylib.Vector3 position)
        {
            var __arg0 = ReferenceEquals(position, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) position.__Instance;
            __Internal.DrawGizmo(__arg0);
        }

        public static global::raylib.Model LoadModel(string fileName)
        {
            var __ret = new global::raylib.Model.__Internal();
            __Internal.LoadModel(new IntPtr(&__ret), fileName);
            return global::raylib.Model.__CreateInstance(__ret);
        }

        public static global::raylib.Model LoadModelFromMesh(global::raylib.Mesh mesh)
        {
            var __arg0 = ReferenceEquals(mesh, null) ? new global::raylib.Mesh.__Internal() : *(global::raylib.Mesh.__Internal*) mesh.__Instance;
            var __ret = new global::raylib.Model.__Internal();
            __Internal.LoadModelFromMesh(new IntPtr(&__ret), __arg0);
            return global::raylib.Model.__CreateInstance(__ret);
        }

        public static void UnloadModel(global::raylib.Model model)
        {
            var __arg0 = ReferenceEquals(model, null) ? new global::raylib.Model.__Internal() : *(global::raylib.Model.__Internal*) model.__Instance;
            __Internal.UnloadModel(__arg0);
        }

        public static global::raylib.Mesh LoadMesh(string fileName)
        {
            var __ret = new global::raylib.Mesh.__Internal();
            __Internal.LoadMesh(new IntPtr(&__ret), fileName);
            return global::raylib.Mesh.__CreateInstance(__ret);
        }

        public static void UnloadMesh(global::raylib.Mesh mesh)
        {
            var __arg0 = ReferenceEquals(mesh, null) ? global::System.IntPtr.Zero : mesh.__Instance;
            __Internal.UnloadMesh(__arg0);
        }

        public static void ExportMesh(string fileName, global::raylib.Mesh mesh)
        {
            var __arg1 = ReferenceEquals(mesh, null) ? new global::raylib.Mesh.__Internal() : *(global::raylib.Mesh.__Internal*) mesh.__Instance;
            __Internal.ExportMesh(fileName, __arg1);
        }

        public static global::raylib.BoundingBox MeshBoundingBox(global::raylib.Mesh mesh)
        {
            var __arg0 = ReferenceEquals(mesh, null) ? new global::raylib.Mesh.__Internal() : *(global::raylib.Mesh.__Internal*) mesh.__Instance;
            var __ret = new global::raylib.BoundingBox.__Internal();
            __Internal.MeshBoundingBox(new IntPtr(&__ret), __arg0);
            return global::raylib.BoundingBox.__CreateInstance(__ret);
        }

        public static void MeshTangents(global::raylib.Mesh mesh)
        {
            var __arg0 = ReferenceEquals(mesh, null) ? global::System.IntPtr.Zero : mesh.__Instance;
            __Internal.MeshTangents(__arg0);
        }

        public static void MeshBinormals(global::raylib.Mesh mesh)
        {
            var __arg0 = ReferenceEquals(mesh, null) ? global::System.IntPtr.Zero : mesh.__Instance;
            __Internal.MeshBinormals(__arg0);
        }

        public static global::raylib.Mesh GenMeshPlane(float width, float length, int resX, int resZ)
        {
            var __ret = new global::raylib.Mesh.__Internal();
            __Internal.GenMeshPlane(new IntPtr(&__ret), width, length, resX, resZ);
            return global::raylib.Mesh.__CreateInstance(__ret);
        }

        public static global::raylib.Mesh GenMeshCube(float width, float height, float length)
        {
            var __ret = new global::raylib.Mesh.__Internal();
            __Internal.GenMeshCube(new IntPtr(&__ret), width, height, length);
            return global::raylib.Mesh.__CreateInstance(__ret);
        }

        public static global::raylib.Mesh GenMeshSphere(float radius, int rings, int slices)
        {
            var __ret = new global::raylib.Mesh.__Internal();
            __Internal.GenMeshSphere(new IntPtr(&__ret), radius, rings, slices);
            return global::raylib.Mesh.__CreateInstance(__ret);
        }

        public static global::raylib.Mesh GenMeshHemiSphere(float radius, int rings, int slices)
        {
            var __ret = new global::raylib.Mesh.__Internal();
            __Internal.GenMeshHemiSphere(new IntPtr(&__ret), radius, rings, slices);
            return global::raylib.Mesh.__CreateInstance(__ret);
        }

        public static global::raylib.Mesh GenMeshCylinder(float radius, float height, int slices)
        {
            var __ret = new global::raylib.Mesh.__Internal();
            __Internal.GenMeshCylinder(new IntPtr(&__ret), radius, height, slices);
            return global::raylib.Mesh.__CreateInstance(__ret);
        }

        public static global::raylib.Mesh GenMeshTorus(float radius, float size, int radSeg, int sides)
        {
            var __ret = new global::raylib.Mesh.__Internal();
            __Internal.GenMeshTorus(new IntPtr(&__ret), radius, size, radSeg, sides);
            return global::raylib.Mesh.__CreateInstance(__ret);
        }

        public static global::raylib.Mesh GenMeshKnot(float radius, float size, int radSeg, int sides)
        {
            var __ret = new global::raylib.Mesh.__Internal();
            __Internal.GenMeshKnot(new IntPtr(&__ret), radius, size, radSeg, sides);
            return global::raylib.Mesh.__CreateInstance(__ret);
        }

        public static global::raylib.Mesh GenMeshHeightmap(global::raylib.Image heightmap, global::raylib.Vector3 size)
        {
            var __arg0 = ReferenceEquals(heightmap, null) ? new global::raylib.Image.__Internal() : *(global::raylib.Image.__Internal*) heightmap.__Instance;
            var __arg1 = ReferenceEquals(size, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) size.__Instance;
            var __ret = new global::raylib.Mesh.__Internal();
            __Internal.GenMeshHeightmap(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Mesh.__CreateInstance(__ret);
        }

        public static global::raylib.Mesh GenMeshCubicmap(global::raylib.Image cubicmap, global::raylib.Vector3 cubeSize)
        {
            var __arg0 = ReferenceEquals(cubicmap, null) ? new global::raylib.Image.__Internal() : *(global::raylib.Image.__Internal*) cubicmap.__Instance;
            var __arg1 = ReferenceEquals(cubeSize, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) cubeSize.__Instance;
            var __ret = new global::raylib.Mesh.__Internal();
            __Internal.GenMeshCubicmap(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Mesh.__CreateInstance(__ret);
        }

        public static global::raylib.Material LoadMaterial(string fileName)
        {
            var __ret = new global::raylib.Material.__Internal();
            __Internal.LoadMaterial(new IntPtr(&__ret), fileName);
            return global::raylib.Material.__CreateInstance(__ret);
        }

        public static global::raylib.Material LoadMaterialDefault()
        {
            var __ret = new global::raylib.Material.__Internal();
            __Internal.LoadMaterialDefault(new IntPtr(&__ret));
            return global::raylib.Material.__CreateInstance(__ret);
        }

        public static void UnloadMaterial(global::raylib.Material material)
        {
            var __arg0 = ReferenceEquals(material, null) ? new global::raylib.Material.__Internal() : *(global::raylib.Material.__Internal*) material.__Instance;
            __Internal.UnloadMaterial(__arg0);
        }

        public static void DrawModel(global::raylib.Model model, global::raylib.Vector3 position, float scale, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(model, null) ? new global::raylib.Model.__Internal() : *(global::raylib.Model.__Internal*) model.__Instance;
            var __arg1 = ReferenceEquals(position, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) position.__Instance;
            var __arg3 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            __Internal.DrawModel(__arg0, __arg1, scale, __arg3);
        }

        public static void DrawModelEx(global::raylib.Model model, global::raylib.Vector3 position, global::raylib.Vector3 rotationAxis, float rotationAngle, global::raylib.Vector3 scale, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(model, null) ? new global::raylib.Model.__Internal() : *(global::raylib.Model.__Internal*) model.__Instance;
            var __arg1 = ReferenceEquals(position, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) position.__Instance;
            var __arg2 = ReferenceEquals(rotationAxis, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) rotationAxis.__Instance;
            var __arg4 = ReferenceEquals(scale, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) scale.__Instance;
            var __arg5 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            __Internal.DrawModelEx(__arg0, __arg1, __arg2, rotationAngle, __arg4, __arg5);
        }

        public static void DrawModelWires(global::raylib.Model model, global::raylib.Vector3 position, float scale, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(model, null) ? new global::raylib.Model.__Internal() : *(global::raylib.Model.__Internal*) model.__Instance;
            var __arg1 = ReferenceEquals(position, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) position.__Instance;
            var __arg3 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            __Internal.DrawModelWires(__arg0, __arg1, scale, __arg3);
        }

        public static void DrawModelWiresEx(global::raylib.Model model, global::raylib.Vector3 position, global::raylib.Vector3 rotationAxis, float rotationAngle, global::raylib.Vector3 scale, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(model, null) ? new global::raylib.Model.__Internal() : *(global::raylib.Model.__Internal*) model.__Instance;
            var __arg1 = ReferenceEquals(position, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) position.__Instance;
            var __arg2 = ReferenceEquals(rotationAxis, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) rotationAxis.__Instance;
            var __arg4 = ReferenceEquals(scale, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) scale.__Instance;
            var __arg5 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            __Internal.DrawModelWiresEx(__arg0, __arg1, __arg2, rotationAngle, __arg4, __arg5);
        }

        public static void DrawBoundingBox(global::raylib.BoundingBox box, global::raylib.Color color)
        {
            var __arg0 = ReferenceEquals(box, null) ? new global::raylib.BoundingBox.__Internal() : *(global::raylib.BoundingBox.__Internal*) box.__Instance;
            var __arg1 = ReferenceEquals(color, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) color.__Instance;
            __Internal.DrawBoundingBox(__arg0, __arg1);
        }

        public static void DrawBillboard(global::raylib.Camera3D camera, global::raylib.Texture2D texture, global::raylib.Vector3 center, float size, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(camera, null) ? new global::raylib.Camera3D.__Internal() : *(global::raylib.Camera3D.__Internal*) camera.__Instance;
            var __arg1 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            var __arg2 = ReferenceEquals(center, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) center.__Instance;
            var __arg4 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            __Internal.DrawBillboard(__arg0, __arg1, __arg2, size, __arg4);
        }

        public static void DrawBillboardRec(global::raylib.Camera3D camera, global::raylib.Texture2D texture, global::raylib.Rectangle sourceRec, global::raylib.Vector3 center, float size, global::raylib.Color tint)
        {
            var __arg0 = ReferenceEquals(camera, null) ? new global::raylib.Camera3D.__Internal() : *(global::raylib.Camera3D.__Internal*) camera.__Instance;
            var __arg1 = ReferenceEquals(texture, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) texture.__Instance;
            var __arg2 = ReferenceEquals(sourceRec, null) ? new global::raylib.Rectangle.__Internal() : *(global::raylib.Rectangle.__Internal*) sourceRec.__Instance;
            var __arg3 = ReferenceEquals(center, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) center.__Instance;
            var __arg5 = ReferenceEquals(tint, null) ? new global::raylib.Color.__Internal() : *(global::raylib.Color.__Internal*) tint.__Instance;
            __Internal.DrawBillboardRec(__arg0, __arg1, __arg2, __arg3, size, __arg5);
        }

        public static bool CheckCollisionSpheres(global::raylib.Vector3 centerA, float radiusA, global::raylib.Vector3 centerB, float radiusB)
        {
            var __arg0 = ReferenceEquals(centerA, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) centerA.__Instance;
            var __arg2 = ReferenceEquals(centerB, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) centerB.__Instance;
            var __ret = __Internal.CheckCollisionSpheres(__arg0, radiusA, __arg2, radiusB);
            return __ret;
        }

        public static bool CheckCollisionBoxes(global::raylib.BoundingBox box1, global::raylib.BoundingBox box2)
        {
            var __arg0 = ReferenceEquals(box1, null) ? new global::raylib.BoundingBox.__Internal() : *(global::raylib.BoundingBox.__Internal*) box1.__Instance;
            var __arg1 = ReferenceEquals(box2, null) ? new global::raylib.BoundingBox.__Internal() : *(global::raylib.BoundingBox.__Internal*) box2.__Instance;
            var __ret = __Internal.CheckCollisionBoxes(__arg0, __arg1);
            return __ret;
        }

        public static bool CheckCollisionBoxSphere(global::raylib.BoundingBox box, global::raylib.Vector3 centerSphere, float radiusSphere)
        {
            var __arg0 = ReferenceEquals(box, null) ? new global::raylib.BoundingBox.__Internal() : *(global::raylib.BoundingBox.__Internal*) box.__Instance;
            var __arg1 = ReferenceEquals(centerSphere, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) centerSphere.__Instance;
            var __ret = __Internal.CheckCollisionBoxSphere(__arg0, __arg1, radiusSphere);
            return __ret;
        }

        public static bool CheckCollisionRaySphere(global::raylib.Ray ray, global::raylib.Vector3 spherePosition, float sphereRadius)
        {
            var __arg0 = ReferenceEquals(ray, null) ? new global::raylib.Ray.__Internal() : *(global::raylib.Ray.__Internal*) ray.__Instance;
            var __arg1 = ReferenceEquals(spherePosition, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) spherePosition.__Instance;
            var __ret = __Internal.CheckCollisionRaySphere(__arg0, __arg1, sphereRadius);
            return __ret;
        }

        public static bool CheckCollisionRaySphereEx(global::raylib.Ray ray, global::raylib.Vector3 spherePosition, float sphereRadius, global::raylib.Vector3 collisionPoint)
        {
            var __arg0 = ReferenceEquals(ray, null) ? new global::raylib.Ray.__Internal() : *(global::raylib.Ray.__Internal*) ray.__Instance;
            var __arg1 = ReferenceEquals(spherePosition, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) spherePosition.__Instance;
            var __arg3 = ReferenceEquals(collisionPoint, null) ? global::System.IntPtr.Zero : collisionPoint.__Instance;
            var __ret = __Internal.CheckCollisionRaySphereEx(__arg0, __arg1, sphereRadius, __arg3);
            return __ret;
        }

        public static bool CheckCollisionRayBox(global::raylib.Ray ray, global::raylib.BoundingBox box)
        {
            var __arg0 = ReferenceEquals(ray, null) ? new global::raylib.Ray.__Internal() : *(global::raylib.Ray.__Internal*) ray.__Instance;
            var __arg1 = ReferenceEquals(box, null) ? new global::raylib.BoundingBox.__Internal() : *(global::raylib.BoundingBox.__Internal*) box.__Instance;
            var __ret = __Internal.CheckCollisionRayBox(__arg0, __arg1);
            return __ret;
        }

        public static global::raylib.RayHitInfo GetCollisionRayModel(global::raylib.Ray ray, global::raylib.Model model)
        {
            var __arg0 = ReferenceEquals(ray, null) ? new global::raylib.Ray.__Internal() : *(global::raylib.Ray.__Internal*) ray.__Instance;
            var __arg1 = ReferenceEquals(model, null) ? global::System.IntPtr.Zero : model.__Instance;
            var __ret = new global::raylib.RayHitInfo.__Internal();
            __Internal.GetCollisionRayModel(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.RayHitInfo.__CreateInstance(__ret);
        }

        public static global::raylib.RayHitInfo GetCollisionRayTriangle(global::raylib.Ray ray, global::raylib.Vector3 p1, global::raylib.Vector3 p2, global::raylib.Vector3 p3)
        {
            var __arg0 = ReferenceEquals(ray, null) ? new global::raylib.Ray.__Internal() : *(global::raylib.Ray.__Internal*) ray.__Instance;
            var __arg1 = ReferenceEquals(p1, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) p1.__Instance;
            var __arg2 = ReferenceEquals(p2, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) p2.__Instance;
            var __arg3 = ReferenceEquals(p3, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) p3.__Instance;
            var __ret = new global::raylib.RayHitInfo.__Internal();
            __Internal.GetCollisionRayTriangle(new IntPtr(&__ret), __arg0, __arg1, __arg2, __arg3);
            return global::raylib.RayHitInfo.__CreateInstance(__ret);
        }

        public static global::raylib.RayHitInfo GetCollisionRayGround(global::raylib.Ray ray, float groundHeight)
        {
            var __arg0 = ReferenceEquals(ray, null) ? new global::raylib.Ray.__Internal() : *(global::raylib.Ray.__Internal*) ray.__Instance;
            var __ret = new global::raylib.RayHitInfo.__Internal();
            __Internal.GetCollisionRayGround(new IntPtr(&__ret), __arg0, groundHeight);
            return global::raylib.RayHitInfo.__CreateInstance(__ret);
        }

        public static sbyte* LoadText(string fileName)
        {
            var __ret = __Internal.LoadText(fileName);
            return __ret;
        }

        public static global::raylib.Shader LoadShader(string vsFileName, string fsFileName)
        {
            var __ret = new global::raylib.Shader.__Internal();
            __Internal.LoadShader(new IntPtr(&__ret), vsFileName, fsFileName);
            return global::raylib.Shader.__CreateInstance(__ret);
        }

        public static global::raylib.Shader LoadShaderCode(sbyte* vsCode, sbyte* fsCode)
        {
            var __ret = new global::raylib.Shader.__Internal();
            __Internal.LoadShaderCode(new IntPtr(&__ret), vsCode, fsCode);
            return global::raylib.Shader.__CreateInstance(__ret);
        }

        public static void UnloadShader(global::raylib.Shader shader)
        {
            var __arg0 = ReferenceEquals(shader, null) ? new global::raylib.Shader.__Internal() : *(global::raylib.Shader.__Internal*) shader.__Instance;
            __Internal.UnloadShader(__arg0);
        }

        public static global::raylib.Shader GetShaderDefault()
        {
            var __ret = new global::raylib.Shader.__Internal();
            __Internal.GetShaderDefault(new IntPtr(&__ret));
            return global::raylib.Shader.__CreateInstance(__ret);
        }

        public static global::raylib.Texture2D GetTextureDefault()
        {
            var __ret = new global::raylib.Texture2D.__Internal();
            __Internal.GetTextureDefault(new IntPtr(&__ret));
            return global::raylib.Texture2D.__CreateInstance(__ret);
        }

        public static int GetShaderLocation(global::raylib.Shader shader, string uniformName)
        {
            var __arg0 = ReferenceEquals(shader, null) ? new global::raylib.Shader.__Internal() : *(global::raylib.Shader.__Internal*) shader.__Instance;
            var __ret = __Internal.GetShaderLocation(__arg0, uniformName);
            return __ret;
        }

        public static void SetShaderValue(global::raylib.Shader shader, int uniformLoc, ref float value, int size)
        {
            var __arg0 = ReferenceEquals(shader, null) ? new global::raylib.Shader.__Internal() : *(global::raylib.Shader.__Internal*) shader.__Instance;
            fixed (float* __refParamPtr2 = &value)
            {
                var __arg2 = __refParamPtr2;
                __Internal.SetShaderValue(__arg0, uniformLoc, __arg2, size);
            }
        }

        public static void SetShaderValuei(global::raylib.Shader shader, int uniformLoc, ref int value, int size)
        {
            var __arg0 = ReferenceEquals(shader, null) ? new global::raylib.Shader.__Internal() : *(global::raylib.Shader.__Internal*) shader.__Instance;
            fixed (int* __refParamPtr2 = &value)
            {
                var __arg2 = __refParamPtr2;
                __Internal.SetShaderValuei(__arg0, uniformLoc, __arg2, size);
            }
        }

        public static void SetShaderValueMatrix(global::raylib.Shader shader, int uniformLoc, global::raylib.Matrix mat)
        {
            var __arg0 = ReferenceEquals(shader, null) ? new global::raylib.Shader.__Internal() : *(global::raylib.Shader.__Internal*) shader.__Instance;
            var __arg2 = ReferenceEquals(mat, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) mat.__Instance;
            __Internal.SetShaderValueMatrix(__arg0, uniformLoc, __arg2);
        }

        public static void SetMatrixProjection(global::raylib.Matrix proj)
        {
            var __arg0 = ReferenceEquals(proj, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) proj.__Instance;
            __Internal.SetMatrixProjection(__arg0);
        }

        public static void SetMatrixModelview(global::raylib.Matrix view)
        {
            var __arg0 = ReferenceEquals(view, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) view.__Instance;
            __Internal.SetMatrixModelview(__arg0);
        }

        public static global::raylib.Matrix GetMatrixModelview()
        {
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.GetMatrixModelview(new IntPtr(&__ret));
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Texture2D GenTextureCubemap(global::raylib.Shader shader, global::raylib.Texture2D skyHDR, int size)
        {
            var __arg0 = ReferenceEquals(shader, null) ? new global::raylib.Shader.__Internal() : *(global::raylib.Shader.__Internal*) shader.__Instance;
            var __arg1 = ReferenceEquals(skyHDR, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) skyHDR.__Instance;
            var __ret = new global::raylib.Texture2D.__Internal();
            __Internal.GenTextureCubemap(new IntPtr(&__ret), __arg0, __arg1, size);
            return global::raylib.Texture2D.__CreateInstance(__ret);
        }

        public static global::raylib.Texture2D GenTextureIrradiance(global::raylib.Shader shader, global::raylib.Texture2D cubemap, int size)
        {
            var __arg0 = ReferenceEquals(shader, null) ? new global::raylib.Shader.__Internal() : *(global::raylib.Shader.__Internal*) shader.__Instance;
            var __arg1 = ReferenceEquals(cubemap, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) cubemap.__Instance;
            var __ret = new global::raylib.Texture2D.__Internal();
            __Internal.GenTextureIrradiance(new IntPtr(&__ret), __arg0, __arg1, size);
            return global::raylib.Texture2D.__CreateInstance(__ret);
        }

        public static global::raylib.Texture2D GenTexturePrefilter(global::raylib.Shader shader, global::raylib.Texture2D cubemap, int size)
        {
            var __arg0 = ReferenceEquals(shader, null) ? new global::raylib.Shader.__Internal() : *(global::raylib.Shader.__Internal*) shader.__Instance;
            var __arg1 = ReferenceEquals(cubemap, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) cubemap.__Instance;
            var __ret = new global::raylib.Texture2D.__Internal();
            __Internal.GenTexturePrefilter(new IntPtr(&__ret), __arg0, __arg1, size);
            return global::raylib.Texture2D.__CreateInstance(__ret);
        }

        public static global::raylib.Texture2D GenTextureBRDF(global::raylib.Shader shader, global::raylib.Texture2D cubemap, int size)
        {
            var __arg0 = ReferenceEquals(shader, null) ? new global::raylib.Shader.__Internal() : *(global::raylib.Shader.__Internal*) shader.__Instance;
            var __arg1 = ReferenceEquals(cubemap, null) ? new global::raylib.Texture2D.__Internal() : *(global::raylib.Texture2D.__Internal*) cubemap.__Instance;
            var __ret = new global::raylib.Texture2D.__Internal();
            __Internal.GenTextureBRDF(new IntPtr(&__ret), __arg0, __arg1, size);
            return global::raylib.Texture2D.__CreateInstance(__ret);
        }

        public static void BeginShaderMode(global::raylib.Shader shader)
        {
            var __arg0 = ReferenceEquals(shader, null) ? new global::raylib.Shader.__Internal() : *(global::raylib.Shader.__Internal*) shader.__Instance;
            __Internal.BeginShaderMode(__arg0);
        }

        public static void EndShaderMode()
        {
            __Internal.EndShaderMode();
        }

        public static void BeginBlendMode(int mode)
        {
            __Internal.BeginBlendMode(mode);
        }

        public static void EndBlendMode()
        {
            __Internal.EndBlendMode();
        }

        public static global::raylib.VrDeviceInfo GetVrDeviceInfo(int vrDeviceType)
        {
            var __ret = new global::raylib.VrDeviceInfo.__Internal();
            __Internal.GetVrDeviceInfo(new IntPtr(&__ret), vrDeviceType);
            return global::raylib.VrDeviceInfo.__CreateInstance(__ret);
        }

        public static void InitVrSimulator(global::raylib.VrDeviceInfo info)
        {
            var __arg0 = ReferenceEquals(info, null) ? new global::raylib.VrDeviceInfo.__Internal() : *(global::raylib.VrDeviceInfo.__Internal*) info.__Instance;
            __Internal.InitVrSimulator(__arg0);
        }

        public static void CloseVrSimulator()
        {
            __Internal.CloseVrSimulator();
        }

        public static bool IsVrSimulatorReady()
        {
            var __ret = __Internal.IsVrSimulatorReady();
            return __ret;
        }

        public static void SetVrDistortionShader(global::raylib.Shader shader)
        {
            var __arg0 = ReferenceEquals(shader, null) ? new global::raylib.Shader.__Internal() : *(global::raylib.Shader.__Internal*) shader.__Instance;
            __Internal.SetVrDistortionShader(__arg0);
        }

        public static void UpdateVrTracking(global::raylib.Camera3D camera)
        {
            var __arg0 = ReferenceEquals(camera, null) ? global::System.IntPtr.Zero : camera.__Instance;
            __Internal.UpdateVrTracking(__arg0);
        }

        public static void ToggleVrMode()
        {
            __Internal.ToggleVrMode();
        }

        public static void BeginVrDrawing()
        {
            __Internal.BeginVrDrawing();
        }

        public static void EndVrDrawing()
        {
            __Internal.EndVrDrawing();
        }

        public static void InitAudioDevice()
        {
            __Internal.InitAudioDevice();
        }

        public static void CloseAudioDevice()
        {
            __Internal.CloseAudioDevice();
        }

        public static bool IsAudioDeviceReady()
        {
            var __ret = __Internal.IsAudioDeviceReady();
            return __ret;
        }

        public static void SetMasterVolume(float volume)
        {
            __Internal.SetMasterVolume(volume);
        }

        public static global::raylib.Wave LoadWave(string fileName)
        {
            var __ret = new global::raylib.Wave.__Internal();
            __Internal.LoadWave(new IntPtr(&__ret), fileName);
            return global::raylib.Wave.__CreateInstance(__ret);
        }

        public static global::raylib.Wave LoadWaveEx(global::System.IntPtr data, int sampleCount, int sampleRate, int sampleSize, int channels)
        {
            var __ret = new global::raylib.Wave.__Internal();
            __Internal.LoadWaveEx(new IntPtr(&__ret), data, sampleCount, sampleRate, sampleSize, channels);
            return global::raylib.Wave.__CreateInstance(__ret);
        }

        public static global::raylib.Sound LoadSound(string fileName)
        {
            var __ret = new global::raylib.Sound.__Internal();
            __Internal.LoadSound(new IntPtr(&__ret), fileName);
            return global::raylib.Sound.__CreateInstance(__ret);
        }

        public static global::raylib.Sound LoadSoundFromWave(global::raylib.Wave wave)
        {
            var __arg0 = ReferenceEquals(wave, null) ? new global::raylib.Wave.__Internal() : *(global::raylib.Wave.__Internal*) wave.__Instance;
            var __ret = new global::raylib.Sound.__Internal();
            __Internal.LoadSoundFromWave(new IntPtr(&__ret), __arg0);
            return global::raylib.Sound.__CreateInstance(__ret);
        }

        public static void UpdateSound(global::raylib.Sound sound, global::System.IntPtr data, int samplesCount)
        {
            var __arg0 = ReferenceEquals(sound, null) ? new global::raylib.Sound.__Internal() : *(global::raylib.Sound.__Internal*) sound.__Instance;
            __Internal.UpdateSound(__arg0, data, samplesCount);
        }

        public static void UnloadWave(global::raylib.Wave wave)
        {
            var __arg0 = ReferenceEquals(wave, null) ? new global::raylib.Wave.__Internal() : *(global::raylib.Wave.__Internal*) wave.__Instance;
            __Internal.UnloadWave(__arg0);
        }

        public static void UnloadSound(global::raylib.Sound sound)
        {
            var __arg0 = ReferenceEquals(sound, null) ? new global::raylib.Sound.__Internal() : *(global::raylib.Sound.__Internal*) sound.__Instance;
            __Internal.UnloadSound(__arg0);
        }

        public static void PlaySound(global::raylib.Sound sound)
        {
            var __arg0 = ReferenceEquals(sound, null) ? new global::raylib.Sound.__Internal() : *(global::raylib.Sound.__Internal*) sound.__Instance;
            __Internal.PlaySound(__arg0);
        }

        public static void PauseSound(global::raylib.Sound sound)
        {
            var __arg0 = ReferenceEquals(sound, null) ? new global::raylib.Sound.__Internal() : *(global::raylib.Sound.__Internal*) sound.__Instance;
            __Internal.PauseSound(__arg0);
        }

        public static void ResumeSound(global::raylib.Sound sound)
        {
            var __arg0 = ReferenceEquals(sound, null) ? new global::raylib.Sound.__Internal() : *(global::raylib.Sound.__Internal*) sound.__Instance;
            __Internal.ResumeSound(__arg0);
        }

        public static void StopSound(global::raylib.Sound sound)
        {
            var __arg0 = ReferenceEquals(sound, null) ? new global::raylib.Sound.__Internal() : *(global::raylib.Sound.__Internal*) sound.__Instance;
            __Internal.StopSound(__arg0);
        }

        public static bool IsSoundPlaying(global::raylib.Sound sound)
        {
            var __arg0 = ReferenceEquals(sound, null) ? new global::raylib.Sound.__Internal() : *(global::raylib.Sound.__Internal*) sound.__Instance;
            var __ret = __Internal.IsSoundPlaying(__arg0);
            return __ret;
        }

        public static void SetSoundVolume(global::raylib.Sound sound, float volume)
        {
            var __arg0 = ReferenceEquals(sound, null) ? new global::raylib.Sound.__Internal() : *(global::raylib.Sound.__Internal*) sound.__Instance;
            __Internal.SetSoundVolume(__arg0, volume);
        }

        public static void SetSoundPitch(global::raylib.Sound sound, float pitch)
        {
            var __arg0 = ReferenceEquals(sound, null) ? new global::raylib.Sound.__Internal() : *(global::raylib.Sound.__Internal*) sound.__Instance;
            __Internal.SetSoundPitch(__arg0, pitch);
        }

        public static void WaveFormat(global::raylib.Wave wave, int sampleRate, int sampleSize, int channels)
        {
            var __arg0 = ReferenceEquals(wave, null) ? global::System.IntPtr.Zero : wave.__Instance;
            __Internal.WaveFormat(__arg0, sampleRate, sampleSize, channels);
        }

        public static global::raylib.Wave WaveCopy(global::raylib.Wave wave)
        {
            var __arg0 = ReferenceEquals(wave, null) ? new global::raylib.Wave.__Internal() : *(global::raylib.Wave.__Internal*) wave.__Instance;
            var __ret = new global::raylib.Wave.__Internal();
            __Internal.WaveCopy(new IntPtr(&__ret), __arg0);
            return global::raylib.Wave.__CreateInstance(__ret);
        }

        public static void WaveCrop(global::raylib.Wave wave, int initSample, int finalSample)
        {
            var __arg0 = ReferenceEquals(wave, null) ? global::System.IntPtr.Zero : wave.__Instance;
            __Internal.WaveCrop(__arg0, initSample, finalSample);
        }

        public static float* GetWaveData(global::raylib.Wave wave)
        {
            var __arg0 = ReferenceEquals(wave, null) ? new global::raylib.Wave.__Internal() : *(global::raylib.Wave.__Internal*) wave.__Instance;
            var __ret = __Internal.GetWaveData(__arg0);
            return __ret;
        }

        public static global::raylib.MusicData LoadMusicStream(string fileName)
        {
            var __ret = __Internal.LoadMusicStream(fileName);
            global::raylib.MusicData __result0;
            if (__ret == IntPtr.Zero) __result0 = null;
            else if (global::raylib.MusicData.NativeToManagedMap.ContainsKey(__ret))
                __result0 = (global::raylib.MusicData) global::raylib.MusicData.NativeToManagedMap[__ret];
            else __result0 = global::raylib.MusicData.__CreateInstance(__ret);
            return __result0;
        }

        public static void UnloadMusicStream(global::raylib.MusicData music)
        {
            var __arg0 = ReferenceEquals(music, null) ? global::System.IntPtr.Zero : music.__Instance;
            __Internal.UnloadMusicStream(__arg0);
        }

        public static void PlayMusicStream(global::raylib.MusicData music)
        {
            var __arg0 = ReferenceEquals(music, null) ? global::System.IntPtr.Zero : music.__Instance;
            __Internal.PlayMusicStream(__arg0);
        }

        public static void UpdateMusicStream(global::raylib.MusicData music)
        {
            var __arg0 = ReferenceEquals(music, null) ? global::System.IntPtr.Zero : music.__Instance;
            __Internal.UpdateMusicStream(__arg0);
        }

        public static void StopMusicStream(global::raylib.MusicData music)
        {
            var __arg0 = ReferenceEquals(music, null) ? global::System.IntPtr.Zero : music.__Instance;
            __Internal.StopMusicStream(__arg0);
        }

        public static void PauseMusicStream(global::raylib.MusicData music)
        {
            var __arg0 = ReferenceEquals(music, null) ? global::System.IntPtr.Zero : music.__Instance;
            __Internal.PauseMusicStream(__arg0);
        }

        public static void ResumeMusicStream(global::raylib.MusicData music)
        {
            var __arg0 = ReferenceEquals(music, null) ? global::System.IntPtr.Zero : music.__Instance;
            __Internal.ResumeMusicStream(__arg0);
        }

        public static bool IsMusicPlaying(global::raylib.MusicData music)
        {
            var __arg0 = ReferenceEquals(music, null) ? global::System.IntPtr.Zero : music.__Instance;
            var __ret = __Internal.IsMusicPlaying(__arg0);
            return __ret;
        }

        public static void SetMusicVolume(global::raylib.MusicData music, float volume)
        {
            var __arg0 = ReferenceEquals(music, null) ? global::System.IntPtr.Zero : music.__Instance;
            __Internal.SetMusicVolume(__arg0, volume);
        }

        public static void SetMusicPitch(global::raylib.MusicData music, float pitch)
        {
            var __arg0 = ReferenceEquals(music, null) ? global::System.IntPtr.Zero : music.__Instance;
            __Internal.SetMusicPitch(__arg0, pitch);
        }

        public static void SetMusicLoopCount(global::raylib.MusicData music, int count)
        {
            var __arg0 = ReferenceEquals(music, null) ? global::System.IntPtr.Zero : music.__Instance;
            __Internal.SetMusicLoopCount(__arg0, count);
        }

        public static float GetMusicTimeLength(global::raylib.MusicData music)
        {
            var __arg0 = ReferenceEquals(music, null) ? global::System.IntPtr.Zero : music.__Instance;
            var __ret = __Internal.GetMusicTimeLength(__arg0);
            return __ret;
        }

        public static float GetMusicTimePlayed(global::raylib.MusicData music)
        {
            var __arg0 = ReferenceEquals(music, null) ? global::System.IntPtr.Zero : music.__Instance;
            var __ret = __Internal.GetMusicTimePlayed(__arg0);
            return __ret;
        }

        public static global::raylib.AudioStream InitAudioStream(uint sampleRate, uint sampleSize, uint channels)
        {
            var __ret = new global::raylib.AudioStream.__Internal();
            __Internal.InitAudioStream(new IntPtr(&__ret), sampleRate, sampleSize, channels);
            return global::raylib.AudioStream.__CreateInstance(__ret);
        }

        public static void UpdateAudioStream(global::raylib.AudioStream stream, global::System.IntPtr data, int samplesCount)
        {
            var __arg0 = ReferenceEquals(stream, null) ? new global::raylib.AudioStream.__Internal() : *(global::raylib.AudioStream.__Internal*) stream.__Instance;
            __Internal.UpdateAudioStream(__arg0, data, samplesCount);
        }

        public static void CloseAudioStream(global::raylib.AudioStream stream)
        {
            var __arg0 = ReferenceEquals(stream, null) ? new global::raylib.AudioStream.__Internal() : *(global::raylib.AudioStream.__Internal*) stream.__Instance;
            __Internal.CloseAudioStream(__arg0);
        }

        public static bool IsAudioBufferProcessed(global::raylib.AudioStream stream)
        {
            var __arg0 = ReferenceEquals(stream, null) ? new global::raylib.AudioStream.__Internal() : *(global::raylib.AudioStream.__Internal*) stream.__Instance;
            var __ret = __Internal.IsAudioBufferProcessed(__arg0);
            return __ret;
        }

        public static void PlayAudioStream(global::raylib.AudioStream stream)
        {
            var __arg0 = ReferenceEquals(stream, null) ? new global::raylib.AudioStream.__Internal() : *(global::raylib.AudioStream.__Internal*) stream.__Instance;
            __Internal.PlayAudioStream(__arg0);
        }

        public static void PauseAudioStream(global::raylib.AudioStream stream)
        {
            var __arg0 = ReferenceEquals(stream, null) ? new global::raylib.AudioStream.__Internal() : *(global::raylib.AudioStream.__Internal*) stream.__Instance;
            __Internal.PauseAudioStream(__arg0);
        }

        public static void ResumeAudioStream(global::raylib.AudioStream stream)
        {
            var __arg0 = ReferenceEquals(stream, null) ? new global::raylib.AudioStream.__Internal() : *(global::raylib.AudioStream.__Internal*) stream.__Instance;
            __Internal.ResumeAudioStream(__arg0);
        }

        public static bool IsAudioStreamPlaying(global::raylib.AudioStream stream)
        {
            var __arg0 = ReferenceEquals(stream, null) ? new global::raylib.AudioStream.__Internal() : *(global::raylib.AudioStream.__Internal*) stream.__Instance;
            var __ret = __Internal.IsAudioStreamPlaying(__arg0);
            return __ret;
        }

        public static void StopAudioStream(global::raylib.AudioStream stream)
        {
            var __arg0 = ReferenceEquals(stream, null) ? new global::raylib.AudioStream.__Internal() : *(global::raylib.AudioStream.__Internal*) stream.__Instance;
            __Internal.StopAudioStream(__arg0);
        }

        public static void SetAudioStreamVolume(global::raylib.AudioStream stream, float volume)
        {
            var __arg0 = ReferenceEquals(stream, null) ? new global::raylib.AudioStream.__Internal() : *(global::raylib.AudioStream.__Internal*) stream.__Instance;
            __Internal.SetAudioStreamVolume(__arg0, volume);
        }

        public static void SetAudioStreamPitch(global::raylib.AudioStream stream, float pitch)
        {
            var __arg0 = ReferenceEquals(stream, null) ? new global::raylib.AudioStream.__Internal() : *(global::raylib.AudioStream.__Internal*) stream.__Instance;
            __Internal.SetAudioStreamPitch(__arg0, pitch);
        }
    }

    public unsafe partial class Float3 : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 12)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal fixed float v[3];

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0float3@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Float3> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Float3>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Float3 __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Float3(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Float3 __CreateInstance(global::raylib.Float3.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Float3(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Float3.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Float3.__Internal));
            *(global::raylib.Float3.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Float3(global::raylib.Float3.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Float3(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Float3()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Float3.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Float3(global::raylib.Float3 _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Float3.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Float3.__Internal*) __Instance) = *((global::raylib.Float3.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Float3 __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public float[] V
        {
            get
            {
                float[] __value = null;
                if (((global::raylib.Float3.__Internal*) __Instance)->v != null)
                {
                    __value = new float[3];
                    for (int i = 0; i < 3; i++)
                        __value[i] = ((global::raylib.Float3.__Internal*) __Instance)->v[i];
                }
                return __value;
            }

            set
            {
                if (value != null)
                {
                    for (int i = 0; i < 3; i++)
                        ((global::raylib.Float3.__Internal*)__Instance)->v[i] = value[i];
                }
            }
        }
    }

    public unsafe partial class Float16 : IDisposable
    {
        [StructLayout(LayoutKind.Explicit, Size = 64)]
        public partial struct __Internal
        {
            [FieldOffset(0)]
            internal fixed float v[16];

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="??0float16@@QEAA@AEBU0@@Z")]
            internal static extern global::System.IntPtr cctor(global::System.IntPtr instance, global::System.IntPtr _0);
        }

        public global::System.IntPtr __Instance { get; protected set; }

        protected int __PointerAdjustment;
        internal static readonly global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Float16> NativeToManagedMap = new global::System.Collections.Concurrent.ConcurrentDictionary<IntPtr, global::raylib.Float16>();
        protected void*[] __OriginalVTables;

        protected bool __ownsNativeInstance;

        internal static global::raylib.Float16 __CreateInstance(global::System.IntPtr native, bool skipVTables = false)
        {
            return new global::raylib.Float16(native.ToPointer(), skipVTables);
        }

        internal static global::raylib.Float16 __CreateInstance(global::raylib.Float16.__Internal native, bool skipVTables = false)
        {
            return new global::raylib.Float16(native, skipVTables);
        }

        private static void* __CopyValue(global::raylib.Float16.__Internal native)
        {
            var ret = Marshal.AllocHGlobal(sizeof(global::raylib.Float16.__Internal));
            *(global::raylib.Float16.__Internal*) ret = native;
            return ret.ToPointer();
        }

        private Float16(global::raylib.Float16.__Internal native, bool skipVTables = false)
            : this(__CopyValue(native), skipVTables)
        {
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        protected Float16(void* native, bool skipVTables = false)
        {
            if (native == null)
                return;
            __Instance = new global::System.IntPtr(native);
        }

        public Float16()
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Float16.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
        }

        public Float16(global::raylib.Float16 _0)
        {
            __Instance = Marshal.AllocHGlobal(sizeof(global::raylib.Float16.__Internal));
            __ownsNativeInstance = true;
            NativeToManagedMap[__Instance] = this;
            *((global::raylib.Float16.__Internal*) __Instance) = *((global::raylib.Float16.__Internal*) _0.__Instance);
        }

        public void Dispose()
        {
            Dispose(disposing: true);
        }

        public virtual void Dispose(bool disposing)
        {
            if (__Instance == IntPtr.Zero)
                return;
            global::raylib.Float16 __dummy;
            NativeToManagedMap.TryRemove(__Instance, out __dummy);
            if (__ownsNativeInstance)
                Marshal.FreeHGlobal(__Instance);
            __Instance = IntPtr.Zero;
        }

        public float[] V
        {
            get
            {
                float[] __value = null;
                if (((global::raylib.Float16.__Internal*) __Instance)->v != null)
                {
                    __value = new float[16];
                    for (int i = 0; i < 16; i++)
                        __value[i] = ((global::raylib.Float16.__Internal*) __Instance)->v[i];
                }
                return __value;
            }

            set
            {
                if (value != null)
                {
                    for (int i = 0; i < 16; i++)
                        ((global::raylib.Float16.__Internal*)__Instance)->v[i] = value[i];
                }
            }
        }
    }

    public unsafe partial class raymath
    {
        public partial struct __Internal
        {
            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Clamp@@YAMMMM@Z")]
            internal static extern float Clamp(float value, float min, float max);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector2Zero@@YA?AUVector2@@XZ")]
            internal static extern global::raylib.Vector2.__Internal Vector2Zero();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector2One@@YA?AUVector2@@XZ")]
            internal static extern global::raylib.Vector2.__Internal Vector2One();

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector2Add@@YA?AUVector2@@U1@0@Z")]
            internal static extern global::raylib.Vector2.__Internal Vector2Add(global::raylib.Vector2.__Internal v1, global::raylib.Vector2.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector2Subtract@@YA?AUVector2@@U1@0@Z")]
            internal static extern global::raylib.Vector2.__Internal Vector2Subtract(global::raylib.Vector2.__Internal v1, global::raylib.Vector2.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector2Length@@YAMUVector2@@@Z")]
            internal static extern float Vector2Length(global::raylib.Vector2.__Internal v);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector2DotProduct@@YAMUVector2@@0@Z")]
            internal static extern float Vector2DotProduct(global::raylib.Vector2.__Internal v1, global::raylib.Vector2.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector2Distance@@YAMUVector2@@0@Z")]
            internal static extern float Vector2Distance(global::raylib.Vector2.__Internal v1, global::raylib.Vector2.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector2Angle@@YAMUVector2@@0@Z")]
            internal static extern float Vector2Angle(global::raylib.Vector2.__Internal v1, global::raylib.Vector2.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector2Scale@@YA?AUVector2@@U1@M@Z")]
            internal static extern global::raylib.Vector2.__Internal Vector2Scale(global::raylib.Vector2.__Internal v, float scale);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector2Negate@@YA?AUVector2@@U1@@Z")]
            internal static extern global::raylib.Vector2.__Internal Vector2Negate(global::raylib.Vector2.__Internal v);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector2Divide@@YA?AUVector2@@U1@M@Z")]
            internal static extern global::raylib.Vector2.__Internal Vector2Divide(global::raylib.Vector2.__Internal v, float div);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector2Normalize@@YA?AUVector2@@U1@@Z")]
            internal static extern global::raylib.Vector2.__Internal Vector2Normalize(global::raylib.Vector2.__Internal v);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Zero@@YA?AUVector3@@XZ")]
            internal static extern void Vector3Zero(global::System.IntPtr @return);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3One@@YA?AUVector3@@XZ")]
            internal static extern void Vector3One(global::System.IntPtr @return);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Add@@YA?AUVector3@@U1@0@Z")]
            internal static extern void Vector3Add(global::System.IntPtr @return, global::raylib.Vector3.__Internal v1, global::raylib.Vector3.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Subtract@@YA?AUVector3@@U1@0@Z")]
            internal static extern void Vector3Subtract(global::System.IntPtr @return, global::raylib.Vector3.__Internal v1, global::raylib.Vector3.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Multiply@@YA?AUVector3@@U1@M@Z")]
            internal static extern void Vector3Multiply(global::System.IntPtr @return, global::raylib.Vector3.__Internal v, float scalar);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3MultiplyV@@YA?AUVector3@@U1@0@Z")]
            internal static extern void Vector3MultiplyV(global::System.IntPtr @return, global::raylib.Vector3.__Internal v1, global::raylib.Vector3.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3CrossProduct@@YA?AUVector3@@U1@0@Z")]
            internal static extern void Vector3CrossProduct(global::System.IntPtr @return, global::raylib.Vector3.__Internal v1, global::raylib.Vector3.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Perpendicular@@YA?AUVector3@@U1@@Z")]
            internal static extern void Vector3Perpendicular(global::System.IntPtr @return, global::raylib.Vector3.__Internal v);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Length@@YAMUVector3@@@Z")]
            internal static extern float Vector3Length(global::raylib.Vector3.__Internal v);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3DotProduct@@YAMUVector3@@0@Z")]
            internal static extern float Vector3DotProduct(global::raylib.Vector3.__Internal v1, global::raylib.Vector3.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Distance@@YAMUVector3@@0@Z")]
            internal static extern float Vector3Distance(global::raylib.Vector3.__Internal v1, global::raylib.Vector3.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Scale@@YA?AUVector3@@U1@M@Z")]
            internal static extern void Vector3Scale(global::System.IntPtr @return, global::raylib.Vector3.__Internal v, float scale);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Negate@@YA?AUVector3@@U1@@Z")]
            internal static extern void Vector3Negate(global::System.IntPtr @return, global::raylib.Vector3.__Internal v);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Normalize@@YA?AUVector3@@U1@@Z")]
            internal static extern void Vector3Normalize(global::System.IntPtr @return, global::raylib.Vector3.__Internal v);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3OrthoNormalize@@YAXPEAUVector3@@0@Z")]
            internal static extern void Vector3OrthoNormalize(global::System.IntPtr v1, global::System.IntPtr v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Transform@@YA?AUVector3@@U1@UMatrix@@@Z")]
            internal static extern void Vector3Transform(global::System.IntPtr @return, global::raylib.Vector3.__Internal v, global::raylib.Matrix.__Internal mat);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3RotateByQuaternion@@YA?AUVector3@@U1@UVector4@@@Z")]
            internal static extern void Vector3RotateByQuaternion(global::System.IntPtr @return, global::raylib.Vector3.__Internal v, global::raylib.Vector4.__Internal q);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Lerp@@YA?AUVector3@@U1@0M@Z")]
            internal static extern void Vector3Lerp(global::System.IntPtr @return, global::raylib.Vector3.__Internal v1, global::raylib.Vector3.__Internal v2, float amount);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Reflect@@YA?AUVector3@@U1@0@Z")]
            internal static extern void Vector3Reflect(global::System.IntPtr @return, global::raylib.Vector3.__Internal v, global::raylib.Vector3.__Internal normal);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Min@@YA?AUVector3@@U1@0@Z")]
            internal static extern void Vector3Min(global::System.IntPtr @return, global::raylib.Vector3.__Internal v1, global::raylib.Vector3.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Max@@YA?AUVector3@@U1@0@Z")]
            internal static extern void Vector3Max(global::System.IntPtr @return, global::raylib.Vector3.__Internal v1, global::raylib.Vector3.__Internal v2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3Barycenter@@YA?AUVector3@@U1@000@Z")]
            internal static extern void Vector3Barycenter(global::System.IntPtr @return, global::raylib.Vector3.__Internal p, global::raylib.Vector3.__Internal a, global::raylib.Vector3.__Internal b, global::raylib.Vector3.__Internal c);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?Vector3ToFloatV@@YA?AUfloat3@@UVector3@@@Z")]
            internal static extern void Vector3ToFloatV(global::System.IntPtr @return, global::raylib.Vector3.__Internal v);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixDeterminant@@YAMUMatrix@@@Z")]
            internal static extern float MatrixDeterminant(global::raylib.Matrix.__Internal mat);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixTrace@@YAMUMatrix@@@Z")]
            internal static extern float MatrixTrace(global::raylib.Matrix.__Internal mat);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixTranspose@@YA?AUMatrix@@U1@@Z")]
            internal static extern void MatrixTranspose(global::System.IntPtr @return, global::raylib.Matrix.__Internal mat);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixInvert@@YA?AUMatrix@@U1@@Z")]
            internal static extern void MatrixInvert(global::System.IntPtr @return, global::raylib.Matrix.__Internal mat);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixNormalize@@YA?AUMatrix@@U1@@Z")]
            internal static extern void MatrixNormalize(global::System.IntPtr @return, global::raylib.Matrix.__Internal mat);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixIdentity@@YA?AUMatrix@@XZ")]
            internal static extern void MatrixIdentity(global::System.IntPtr @return);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixAdd@@YA?AUMatrix@@U1@0@Z")]
            internal static extern void MatrixAdd(global::System.IntPtr @return, global::raylib.Matrix.__Internal left, global::raylib.Matrix.__Internal right);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixSubstract@@YA?AUMatrix@@U1@0@Z")]
            internal static extern void MatrixSubstract(global::System.IntPtr @return, global::raylib.Matrix.__Internal left, global::raylib.Matrix.__Internal right);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixTranslate@@YA?AUMatrix@@MMM@Z")]
            internal static extern void MatrixTranslate(global::System.IntPtr @return, float x, float y, float z);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixRotate@@YA?AUMatrix@@UVector3@@M@Z")]
            internal static extern void MatrixRotate(global::System.IntPtr @return, global::raylib.Vector3.__Internal axis, float angle);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixRotateX@@YA?AUMatrix@@M@Z")]
            internal static extern void MatrixRotateX(global::System.IntPtr @return, float angle);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixRotateY@@YA?AUMatrix@@M@Z")]
            internal static extern void MatrixRotateY(global::System.IntPtr @return, float angle);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixRotateZ@@YA?AUMatrix@@M@Z")]
            internal static extern void MatrixRotateZ(global::System.IntPtr @return, float angle);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixScale@@YA?AUMatrix@@MMM@Z")]
            internal static extern void MatrixScale(global::System.IntPtr @return, float x, float y, float z);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixMultiply@@YA?AUMatrix@@U1@0@Z")]
            internal static extern void MatrixMultiply(global::System.IntPtr @return, global::raylib.Matrix.__Internal left, global::raylib.Matrix.__Internal right);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixFrustum@@YA?AUMatrix@@NNNNNN@Z")]
            internal static extern void MatrixFrustum(global::System.IntPtr @return, double left, double right, double bottom, double top, double near, double far);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixPerspective@@YA?AUMatrix@@NNNN@Z")]
            internal static extern void MatrixPerspective(global::System.IntPtr @return, double fovy, double aspect, double near, double far);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixOrtho@@YA?AUMatrix@@NNNNNN@Z")]
            internal static extern void MatrixOrtho(global::System.IntPtr @return, double left, double right, double bottom, double top, double near, double far);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixLookAt@@YA?AUMatrix@@UVector3@@00@Z")]
            internal static extern void MatrixLookAt(global::System.IntPtr @return, global::raylib.Vector3.__Internal eye, global::raylib.Vector3.__Internal target, global::raylib.Vector3.__Internal up);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?MatrixToFloatV@@YA?AUfloat16@@UMatrix@@@Z")]
            internal static extern void MatrixToFloatV(global::System.IntPtr @return, global::raylib.Matrix.__Internal mat);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionIdentity@@YA?AUVector4@@XZ")]
            internal static extern void QuaternionIdentity(global::System.IntPtr @return);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionLength@@YAMUVector4@@@Z")]
            internal static extern float QuaternionLength(global::raylib.Vector4.__Internal q);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionNormalize@@YA?AUVector4@@U1@@Z")]
            internal static extern void QuaternionNormalize(global::System.IntPtr @return, global::raylib.Vector4.__Internal q);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionInvert@@YA?AUVector4@@U1@@Z")]
            internal static extern void QuaternionInvert(global::System.IntPtr @return, global::raylib.Vector4.__Internal q);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionMultiply@@YA?AUVector4@@U1@0@Z")]
            internal static extern void QuaternionMultiply(global::System.IntPtr @return, global::raylib.Vector4.__Internal q1, global::raylib.Vector4.__Internal q2);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionLerp@@YA?AUVector4@@U1@0M@Z")]
            internal static extern void QuaternionLerp(global::System.IntPtr @return, global::raylib.Vector4.__Internal q1, global::raylib.Vector4.__Internal q2, float amount);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionNlerp@@YA?AUVector4@@U1@0M@Z")]
            internal static extern void QuaternionNlerp(global::System.IntPtr @return, global::raylib.Vector4.__Internal q1, global::raylib.Vector4.__Internal q2, float amount);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionSlerp@@YA?AUVector4@@U1@0M@Z")]
            internal static extern void QuaternionSlerp(global::System.IntPtr @return, global::raylib.Vector4.__Internal q1, global::raylib.Vector4.__Internal q2, float amount);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionFromVector3ToVector3@@YA?AUVector4@@UVector3@@0@Z")]
            internal static extern void QuaternionFromVector3ToVector3(global::System.IntPtr @return, global::raylib.Vector3.__Internal from, global::raylib.Vector3.__Internal to);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionFromMatrix@@YA?AUVector4@@UMatrix@@@Z")]
            internal static extern void QuaternionFromMatrix(global::System.IntPtr @return, global::raylib.Matrix.__Internal mat);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionToMatrix@@YA?AUMatrix@@UVector4@@@Z")]
            internal static extern void QuaternionToMatrix(global::System.IntPtr @return, global::raylib.Vector4.__Internal q);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionFromAxisAngle@@YA?AUVector4@@UVector3@@M@Z")]
            internal static extern void QuaternionFromAxisAngle(global::System.IntPtr @return, global::raylib.Vector3.__Internal axis, float angle);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionToAxisAngle@@YAXUVector4@@PEAUVector3@@PEAM@Z")]
            internal static extern void QuaternionToAxisAngle(global::raylib.Vector4.__Internal q, global::System.IntPtr outAxis, float* outAngle);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionFromEuler@@YA?AUVector4@@MMM@Z")]
            internal static extern void QuaternionFromEuler(global::System.IntPtr @return, float roll, float pitch, float yaw);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionToEuler@@YA?AUVector3@@UVector4@@@Z")]
            internal static extern void QuaternionToEuler(global::System.IntPtr @return, global::raylib.Vector4.__Internal q);

            [SuppressUnmanagedCodeSecurity]
            [DllImport("raylib", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
                EntryPoint="?QuaternionTransform@@YA?AUVector4@@U1@UMatrix@@@Z")]
            internal static extern void QuaternionTransform(global::System.IntPtr @return, global::raylib.Vector4.__Internal q, global::raylib.Matrix.__Internal mat);
        }

        public static float Clamp(float value, float min, float max)
        {
            var __ret = __Internal.Clamp(value, min, max);
            return __ret;
        }

        public static global::raylib.Vector2 Vector2Zero()
        {
            var __ret = __Internal.Vector2Zero();
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static global::raylib.Vector2 Vector2One()
        {
            var __ret = __Internal.Vector2One();
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static global::raylib.Vector2 Vector2Add(global::raylib.Vector2 v1, global::raylib.Vector2 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v2.__Instance;
            var __ret = __Internal.Vector2Add(__arg0, __arg1);
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static global::raylib.Vector2 Vector2Subtract(global::raylib.Vector2 v1, global::raylib.Vector2 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v2.__Instance;
            var __ret = __Internal.Vector2Subtract(__arg0, __arg1);
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static float Vector2Length(global::raylib.Vector2 v)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v.__Instance;
            var __ret = __Internal.Vector2Length(__arg0);
            return __ret;
        }

        public static float Vector2DotProduct(global::raylib.Vector2 v1, global::raylib.Vector2 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v2.__Instance;
            var __ret = __Internal.Vector2DotProduct(__arg0, __arg1);
            return __ret;
        }

        public static float Vector2Distance(global::raylib.Vector2 v1, global::raylib.Vector2 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v2.__Instance;
            var __ret = __Internal.Vector2Distance(__arg0, __arg1);
            return __ret;
        }

        public static float Vector2Angle(global::raylib.Vector2 v1, global::raylib.Vector2 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v2.__Instance;
            var __ret = __Internal.Vector2Angle(__arg0, __arg1);
            return __ret;
        }

        public static global::raylib.Vector2 Vector2Scale(global::raylib.Vector2 v, float scale)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v.__Instance;
            var __ret = __Internal.Vector2Scale(__arg0, scale);
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static global::raylib.Vector2 Vector2Negate(global::raylib.Vector2 v)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v.__Instance;
            var __ret = __Internal.Vector2Negate(__arg0);
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static global::raylib.Vector2 Vector2Divide(global::raylib.Vector2 v, float div)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v.__Instance;
            var __ret = __Internal.Vector2Divide(__arg0, div);
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static global::raylib.Vector2 Vector2Normalize(global::raylib.Vector2 v)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector2.__Internal() : *(global::raylib.Vector2.__Internal*) v.__Instance;
            var __ret = __Internal.Vector2Normalize(__arg0);
            return global::raylib.Vector2.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3Zero()
        {
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Zero(new IntPtr(&__ret));
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3One()
        {
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3One(new IntPtr(&__ret));
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3Add(global::raylib.Vector3 v1, global::raylib.Vector3 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v2.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Add(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3Subtract(global::raylib.Vector3 v1, global::raylib.Vector3 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v2.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Subtract(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3Multiply(global::raylib.Vector3 v, float scalar)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Multiply(new IntPtr(&__ret), __arg0, scalar);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3MultiplyV(global::raylib.Vector3 v1, global::raylib.Vector3 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v2.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3MultiplyV(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3CrossProduct(global::raylib.Vector3 v1, global::raylib.Vector3 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v2.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3CrossProduct(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3Perpendicular(global::raylib.Vector3 v)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Perpendicular(new IntPtr(&__ret), __arg0);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static float Vector3Length(global::raylib.Vector3 v)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v.__Instance;
            var __ret = __Internal.Vector3Length(__arg0);
            return __ret;
        }

        public static float Vector3DotProduct(global::raylib.Vector3 v1, global::raylib.Vector3 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v2.__Instance;
            var __ret = __Internal.Vector3DotProduct(__arg0, __arg1);
            return __ret;
        }

        public static float Vector3Distance(global::raylib.Vector3 v1, global::raylib.Vector3 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v2.__Instance;
            var __ret = __Internal.Vector3Distance(__arg0, __arg1);
            return __ret;
        }

        public static global::raylib.Vector3 Vector3Scale(global::raylib.Vector3 v, float scale)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Scale(new IntPtr(&__ret), __arg0, scale);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3Negate(global::raylib.Vector3 v)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Negate(new IntPtr(&__ret), __arg0);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3Normalize(global::raylib.Vector3 v)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Normalize(new IntPtr(&__ret), __arg0);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static void Vector3OrthoNormalize(global::raylib.Vector3 v1, global::raylib.Vector3 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? global::System.IntPtr.Zero : v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? global::System.IntPtr.Zero : v2.__Instance;
            __Internal.Vector3OrthoNormalize(__arg0, __arg1);
        }

        public static global::raylib.Vector3 Vector3Transform(global::raylib.Vector3 v, global::raylib.Matrix mat)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v.__Instance;
            var __arg1 = ReferenceEquals(mat, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) mat.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Transform(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3RotateByQuaternion(global::raylib.Vector3 v, global::raylib.Vector4 q)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v.__Instance;
            var __arg1 = ReferenceEquals(q, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3RotateByQuaternion(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3Lerp(global::raylib.Vector3 v1, global::raylib.Vector3 v2, float amount)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v2.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Lerp(new IntPtr(&__ret), __arg0, __arg1, amount);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3Reflect(global::raylib.Vector3 v, global::raylib.Vector3 normal)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v.__Instance;
            var __arg1 = ReferenceEquals(normal, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) normal.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Reflect(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3Min(global::raylib.Vector3 v1, global::raylib.Vector3 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v2.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Min(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3Max(global::raylib.Vector3 v1, global::raylib.Vector3 v2)
        {
            var __arg0 = ReferenceEquals(v1, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v1.__Instance;
            var __arg1 = ReferenceEquals(v2, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v2.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Max(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 Vector3Barycenter(global::raylib.Vector3 p, global::raylib.Vector3 a, global::raylib.Vector3 b, global::raylib.Vector3 c)
        {
            var __arg0 = ReferenceEquals(p, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) p.__Instance;
            var __arg1 = ReferenceEquals(a, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) a.__Instance;
            var __arg2 = ReferenceEquals(b, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) b.__Instance;
            var __arg3 = ReferenceEquals(c, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) c.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.Vector3Barycenter(new IntPtr(&__ret), __arg0, __arg1, __arg2, __arg3);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Float3 Vector3ToFloatV(global::raylib.Vector3 v)
        {
            var __arg0 = ReferenceEquals(v, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) v.__Instance;
            var __ret = new global::raylib.Float3.__Internal();
            __Internal.Vector3ToFloatV(new IntPtr(&__ret), __arg0);
            return global::raylib.Float3.__CreateInstance(__ret);
        }

        public static float MatrixDeterminant(global::raylib.Matrix mat)
        {
            var __arg0 = ReferenceEquals(mat, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) mat.__Instance;
            var __ret = __Internal.MatrixDeterminant(__arg0);
            return __ret;
        }

        public static float MatrixTrace(global::raylib.Matrix mat)
        {
            var __arg0 = ReferenceEquals(mat, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) mat.__Instance;
            var __ret = __Internal.MatrixTrace(__arg0);
            return __ret;
        }

        public static global::raylib.Matrix MatrixTranspose(global::raylib.Matrix mat)
        {
            var __arg0 = ReferenceEquals(mat, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) mat.__Instance;
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixTranspose(new IntPtr(&__ret), __arg0);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixInvert(global::raylib.Matrix mat)
        {
            var __arg0 = ReferenceEquals(mat, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) mat.__Instance;
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixInvert(new IntPtr(&__ret), __arg0);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixNormalize(global::raylib.Matrix mat)
        {
            var __arg0 = ReferenceEquals(mat, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) mat.__Instance;
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixNormalize(new IntPtr(&__ret), __arg0);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixIdentity()
        {
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixIdentity(new IntPtr(&__ret));
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixAdd(global::raylib.Matrix left, global::raylib.Matrix right)
        {
            var __arg0 = ReferenceEquals(left, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) left.__Instance;
            var __arg1 = ReferenceEquals(right, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) right.__Instance;
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixAdd(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixSubstract(global::raylib.Matrix left, global::raylib.Matrix right)
        {
            var __arg0 = ReferenceEquals(left, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) left.__Instance;
            var __arg1 = ReferenceEquals(right, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) right.__Instance;
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixSubstract(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixTranslate(float x, float y, float z)
        {
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixTranslate(new IntPtr(&__ret), x, y, z);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixRotate(global::raylib.Vector3 axis, float angle)
        {
            var __arg0 = ReferenceEquals(axis, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) axis.__Instance;
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixRotate(new IntPtr(&__ret), __arg0, angle);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixRotateX(float angle)
        {
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixRotateX(new IntPtr(&__ret), angle);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixRotateY(float angle)
        {
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixRotateY(new IntPtr(&__ret), angle);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixRotateZ(float angle)
        {
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixRotateZ(new IntPtr(&__ret), angle);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixScale(float x, float y, float z)
        {
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixScale(new IntPtr(&__ret), x, y, z);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixMultiply(global::raylib.Matrix left, global::raylib.Matrix right)
        {
            var __arg0 = ReferenceEquals(left, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) left.__Instance;
            var __arg1 = ReferenceEquals(right, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) right.__Instance;
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixMultiply(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixFrustum(double left, double right, double bottom, double top, double near, double far)
        {
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixFrustum(new IntPtr(&__ret), left, right, bottom, top, near, far);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixPerspective(double fovy, double aspect, double near, double far)
        {
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixPerspective(new IntPtr(&__ret), fovy, aspect, near, far);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixOrtho(double left, double right, double bottom, double top, double near, double far)
        {
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixOrtho(new IntPtr(&__ret), left, right, bottom, top, near, far);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix MatrixLookAt(global::raylib.Vector3 eye, global::raylib.Vector3 target, global::raylib.Vector3 up)
        {
            var __arg0 = ReferenceEquals(eye, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) eye.__Instance;
            var __arg1 = ReferenceEquals(target, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) target.__Instance;
            var __arg2 = ReferenceEquals(up, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) up.__Instance;
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.MatrixLookAt(new IntPtr(&__ret), __arg0, __arg1, __arg2);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Float16 MatrixToFloatV(global::raylib.Matrix mat)
        {
            var __arg0 = ReferenceEquals(mat, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) mat.__Instance;
            var __ret = new global::raylib.Float16.__Internal();
            __Internal.MatrixToFloatV(new IntPtr(&__ret), __arg0);
            return global::raylib.Float16.__CreateInstance(__ret);
        }

        public static global::raylib.Vector4 QuaternionIdentity()
        {
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.QuaternionIdentity(new IntPtr(&__ret));
            return global::raylib.Vector4.__CreateInstance(__ret);
        }

        public static float QuaternionLength(global::raylib.Vector4 q)
        {
            var __arg0 = ReferenceEquals(q, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q.__Instance;
            var __ret = __Internal.QuaternionLength(__arg0);
            return __ret;
        }

        public static global::raylib.Vector4 QuaternionNormalize(global::raylib.Vector4 q)
        {
            var __arg0 = ReferenceEquals(q, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q.__Instance;
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.QuaternionNormalize(new IntPtr(&__ret), __arg0);
            return global::raylib.Vector4.__CreateInstance(__ret);
        }

        public static global::raylib.Vector4 QuaternionInvert(global::raylib.Vector4 q)
        {
            var __arg0 = ReferenceEquals(q, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q.__Instance;
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.QuaternionInvert(new IntPtr(&__ret), __arg0);
            return global::raylib.Vector4.__CreateInstance(__ret);
        }

        public static global::raylib.Vector4 QuaternionMultiply(global::raylib.Vector4 q1, global::raylib.Vector4 q2)
        {
            var __arg0 = ReferenceEquals(q1, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q1.__Instance;
            var __arg1 = ReferenceEquals(q2, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q2.__Instance;
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.QuaternionMultiply(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Vector4.__CreateInstance(__ret);
        }

        public static global::raylib.Vector4 QuaternionLerp(global::raylib.Vector4 q1, global::raylib.Vector4 q2, float amount)
        {
            var __arg0 = ReferenceEquals(q1, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q1.__Instance;
            var __arg1 = ReferenceEquals(q2, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q2.__Instance;
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.QuaternionLerp(new IntPtr(&__ret), __arg0, __arg1, amount);
            return global::raylib.Vector4.__CreateInstance(__ret);
        }

        public static global::raylib.Vector4 QuaternionNlerp(global::raylib.Vector4 q1, global::raylib.Vector4 q2, float amount)
        {
            var __arg0 = ReferenceEquals(q1, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q1.__Instance;
            var __arg1 = ReferenceEquals(q2, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q2.__Instance;
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.QuaternionNlerp(new IntPtr(&__ret), __arg0, __arg1, amount);
            return global::raylib.Vector4.__CreateInstance(__ret);
        }

        public static global::raylib.Vector4 QuaternionSlerp(global::raylib.Vector4 q1, global::raylib.Vector4 q2, float amount)
        {
            var __arg0 = ReferenceEquals(q1, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q1.__Instance;
            var __arg1 = ReferenceEquals(q2, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q2.__Instance;
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.QuaternionSlerp(new IntPtr(&__ret), __arg0, __arg1, amount);
            return global::raylib.Vector4.__CreateInstance(__ret);
        }

        public static global::raylib.Vector4 QuaternionFromVector3ToVector3(global::raylib.Vector3 from, global::raylib.Vector3 to)
        {
            var __arg0 = ReferenceEquals(from, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) from.__Instance;
            var __arg1 = ReferenceEquals(to, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) to.__Instance;
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.QuaternionFromVector3ToVector3(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Vector4.__CreateInstance(__ret);
        }

        public static global::raylib.Vector4 QuaternionFromMatrix(global::raylib.Matrix mat)
        {
            var __arg0 = ReferenceEquals(mat, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) mat.__Instance;
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.QuaternionFromMatrix(new IntPtr(&__ret), __arg0);
            return global::raylib.Vector4.__CreateInstance(__ret);
        }

        public static global::raylib.Matrix QuaternionToMatrix(global::raylib.Vector4 q)
        {
            var __arg0 = ReferenceEquals(q, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q.__Instance;
            var __ret = new global::raylib.Matrix.__Internal();
            __Internal.QuaternionToMatrix(new IntPtr(&__ret), __arg0);
            return global::raylib.Matrix.__CreateInstance(__ret);
        }

        public static global::raylib.Vector4 QuaternionFromAxisAngle(global::raylib.Vector3 axis, float angle)
        {
            var __arg0 = ReferenceEquals(axis, null) ? new global::raylib.Vector3.__Internal() : *(global::raylib.Vector3.__Internal*) axis.__Instance;
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.QuaternionFromAxisAngle(new IntPtr(&__ret), __arg0, angle);
            return global::raylib.Vector4.__CreateInstance(__ret);
        }

        public static void QuaternionToAxisAngle(global::raylib.Vector4 q, global::raylib.Vector3 outAxis, ref float outAngle)
        {
            var __arg0 = ReferenceEquals(q, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q.__Instance;
            var __arg1 = ReferenceEquals(outAxis, null) ? global::System.IntPtr.Zero : outAxis.__Instance;
            fixed (float* __refParamPtr2 = &outAngle)
            {
                var __arg2 = __refParamPtr2;
                __Internal.QuaternionToAxisAngle(__arg0, __arg1, __arg2);
            }
        }

        public static global::raylib.Vector4 QuaternionFromEuler(float roll, float pitch, float yaw)
        {
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.QuaternionFromEuler(new IntPtr(&__ret), roll, pitch, yaw);
            return global::raylib.Vector4.__CreateInstance(__ret);
        }

        public static global::raylib.Vector3 QuaternionToEuler(global::raylib.Vector4 q)
        {
            var __arg0 = ReferenceEquals(q, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q.__Instance;
            var __ret = new global::raylib.Vector3.__Internal();
            __Internal.QuaternionToEuler(new IntPtr(&__ret), __arg0);
            return global::raylib.Vector3.__CreateInstance(__ret);
        }

        public static global::raylib.Vector4 QuaternionTransform(global::raylib.Vector4 q, global::raylib.Matrix mat)
        {
            var __arg0 = ReferenceEquals(q, null) ? new global::raylib.Vector4.__Internal() : *(global::raylib.Vector4.__Internal*) q.__Instance;
            var __arg1 = ReferenceEquals(mat, null) ? new global::raylib.Matrix.__Internal() : *(global::raylib.Matrix.__Internal*) mat.__Instance;
            var __ret = new global::raylib.Vector4.__Internal();
            __Internal.QuaternionTransform(new IntPtr(&__ret), __arg0, __arg1);
            return global::raylib.Vector4.__CreateInstance(__ret);
        }
    }
}