From e0d590b85529ebe189a1e1274448a9fd6ace9ad3 Mon Sep 17 00:00:00 2001
From: ChrisDill <chris.rj.dill@gmail.com>
Date: Mon, 23 Jul 2018 20:27:07 +0100
Subject: [PATCH] Testing the idea of generating the bindings

- Added cppsharp to see if it will work with raylib.
---
 Raylib-cs/Generator.cs                       |   46 +
 Raylib-cs/Program.cs                         |   51 +-
 Raylib-cs/Raylib-cs.csproj                   |   68 +-
 Raylib-cs/Raylib-cs.sln                      |    6 +
 Raylib-cs/Std.cs                             |   12 +
 Raylib-cs/packages.config                    |    5 +
 Raylib-cs/{raylib-cs.cs => raylib-manual.cs} |  339 +-
 Raylib-cs/raylib.cs                          | 9401 ++++++++++++++++++
 8 files changed, 9826 insertions(+), 102 deletions(-)
 create mode 100644 Raylib-cs/Generator.cs
 create mode 100644 Raylib-cs/Std.cs
 create mode 100644 Raylib-cs/packages.config
 rename Raylib-cs/{raylib-cs.cs => raylib-manual.cs} (86%)
 create mode 100644 Raylib-cs/raylib.cs

diff --git a/Raylib-cs/Generator.cs b/Raylib-cs/Generator.cs
new file mode 100644
index 0000000..64e57b7
--- /dev/null
+++ b/Raylib-cs/Generator.cs
@@ -0,0 +1,46 @@
+using CppSharp;
+using CppSharp.AST;
+using CppSharp.Generators;
+
+namespace Raylibcs
+{
+    /// <summary>
+    /// Generates the bindings for raylib
+    /// ConsoleDriver.Run(new SampleLibrary());
+    /// </summary>
+    public class SampleLibrary : ILibrary
+    {
+        public void Preprocess(Driver driver, ASTContext ctx)
+        {
+            
+            // ctx.SetNameOfEnumWithMatchingItem("KEY_", "Keys");
+
+            // throw new NotImplementedException();
+        }
+
+        public void Postprocess(Driver driver, ASTContext ctx)
+        {
+            //throw new NotImplementedException();
+        }
+
+        void ILibrary.Setup(Driver driver)
+        {
+            var options = driver.Options;
+            options.GeneratorKind = GeneratorKind.CSharp;
+            options.Verbose = true;
+
+            var module = options.AddModule("raylib");
+            module.IncludeDirs.Add("C:\\raylib\\raylib\\src");
+            module.Headers.Add("raylib.h");
+            module.Headers.Add("raymath.h");
+            module.LibraryDirs.Add("C:\\raylib\\raylib\\release\\libs\\win32\\msvc");
+            module.Libraries.Add("raylib.lib");
+            module.Defines.Add("KEY_SPACE");
+        }
+        
+        void ILibrary.SetupPasses(Driver driver)
+        {
+            // throw new NotImplementedException();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Raylib-cs/Program.cs b/Raylib-cs/Program.cs
index c9a0456..d3c1241 100644
--- a/Raylib-cs/Program.cs
+++ b/Raylib-cs/Program.cs
@@ -1,5 +1,8 @@
-using System;
-using static Raylibcs.Raylibcs;
+using CppSharp;
+using raylib;
+using static raylib.raymath;
+using static raylib.raylib;
+using System;
 
 namespace Raylibcs
 {
@@ -7,36 +10,44 @@ namespace Raylibcs
     {
         static void Main(string[] args)
         {
-            InitWindow(800, 450, "Raylibcs 0.1");
+            // ConsoleDriver.Run(new SampleLibrary());
+            Test();
+            // Console.Read();
+        }
+
+        public static void Test()
+        {
+            InitWindow(800, 450, "Raylib-cs [2.0]");
+            InitAudioDevice();          
             SetTargetFPS(60);
             SetExitKey(256);
+   
+            var sound = LoadSound("Data/alive.wav");
+            // PlaySound(sound);
 
-            var sound = LoadSound("alive.wav");
-            PlaySound(ref sound);
+            var t = LoadTexture("Data/test.png");
 
-            var t = LoadTexture("crimbocore.png");
-            //var f = LoadSpriteFont("Vera.ttf");
+            int a = 0;
+            var f = LoadFontEx("Data/Vera.ttf", 96, 0, ref a);
 
-            var w = new Color(255, 255, 255, 255);
-            var c = new Color(124, 124, 124, 255);
-            var g = new Color(230, 230, 230, 255);
+            var c = new Color();
+            c.R = 255;
+            c.G = 255;
+            c.B = 255;
+            c.A = 255;
 
             while (!WindowShouldClose())
             {
-                if (IsKeyPressed(257))
-                {
-                    TakeScreenshot("test.png");
-                }               
-
                 BeginDrawing();
                 ClearBackground(c);
-
-                DrawTexture(t, 0, 0, w);
-                DrawFPS(0, 0);
-                //DrawTextEx(f, "Congrats! You created your first window!", new Vector2(190, 200), 20, 0, w);
-              
+                DrawTexture(t, 0, 0, c);
+                // DrawTextEx(f, "testing", new Vector2 { X = 100, Y = 100 }, 20, 10, c);
+                // DrawFPS(0, 0);
                 EndDrawing();
             }
+
+            UnloadTexture(t);
+            CloseAudioDevice();
             CloseWindow();
         }
     }
diff --git a/Raylib-cs/Raylib-cs.csproj b/Raylib-cs/Raylib-cs.csproj
index f09da2d..ca2d551 100644
--- a/Raylib-cs/Raylib-cs.csproj
+++ b/Raylib-cs/Raylib-cs.csproj
@@ -11,6 +11,8 @@
     <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <PlatformTarget>AnyCPU</PlatformTarget>
@@ -31,7 +33,49 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>true</Prefer32Bit>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
   <ItemGroup>
+    <Reference Include="CppSharp, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>packages\CppSharp.0.8.20\lib\CppSharp.dll</HintPath>
+    </Reference>
+    <Reference Include="CppSharp.AST, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>packages\CppSharp.0.8.20\lib\CppSharp.AST.dll</HintPath>
+    </Reference>
+    <Reference Include="CppSharp.Generator, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>packages\CppSharp.0.8.20\lib\CppSharp.Generator.dll</HintPath>
+    </Reference>
+    <Reference Include="CppSharp.Parser, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>packages\CppSharp.0.8.20\lib\CppSharp.Parser.dll</HintPath>
+    </Reference>
+    <Reference Include="CppSharp.Parser.CLI, Version=0.0.0.0, Culture=neutral, processorArchitecture=AMD64">
+      <HintPath>packages\CppSharp.0.8.20\lib\CppSharp.Parser.CLI.dll</HintPath>
+    </Reference>
+    <Reference Include="CppSharp.Parser.CSharp, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>packages\CppSharp.0.8.20\lib\CppSharp.Parser.CSharp.dll</HintPath>
+    </Reference>
+    <Reference Include="CppSharp.Runtime, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>packages\CppSharp.0.8.20\lib\CppSharp.Runtime.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Xml.Linq" />
@@ -42,22 +86,24 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="examples\textures\textures_rectangle.cs" />
-    <Compile Include="examples\text\text_ttf_loading.cs" />
+    <Compile Include="Generator.cs" />
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="raylib-cs.cs" />
+    <Compile Include="raylib-manual.cs" />
+    <Compile Include="raylib.cs" />
+    <Compile Include="Std.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="App.config" />
+    <None Include="packages.config" />
   </ItemGroup>
-  <ItemGroup>
-    <Folder Include="examples\audio\" />
-    <Folder Include="examples\core\" />
-    <Folder Include="examples\models\" />
-    <Folder Include="examples\physac\" />
-    <Folder Include="examples\shaders\" />
-    <Folder Include="examples\shapes\" />
-  </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="packages\Baseclass.Contrib.Nuget.Output.2.4.3\build\Baseclass.Contrib.Nuget.Output.targets" Condition="Exists('packages\Baseclass.Contrib.Nuget.Output.2.4.3\build\Baseclass.Contrib.Nuget.Output.targets')" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('packages\Baseclass.Contrib.Nuget.Output.2.4.3\build\Baseclass.Contrib.Nuget.Output.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Baseclass.Contrib.Nuget.Output.2.4.3\build\Baseclass.Contrib.Nuget.Output.targets'))" />
+  </Target>
 </Project>
\ No newline at end of file
diff --git a/Raylib-cs/Raylib-cs.sln b/Raylib-cs/Raylib-cs.sln
index 751ec23..5ae2eed 100644
--- a/Raylib-cs/Raylib-cs.sln
+++ b/Raylib-cs/Raylib-cs.sln
@@ -8,13 +8,19 @@ EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
+		Debug|x64 = Debug|x64
 		Release|Any CPU = Release|Any CPU
+		Release|x64 = Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{3B25D9D6-17A6-4A32-B9D1-C637002BD554}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{3B25D9D6-17A6-4A32-B9D1-C637002BD554}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3B25D9D6-17A6-4A32-B9D1-C637002BD554}.Debug|x64.ActiveCfg = Debug|x64
+		{3B25D9D6-17A6-4A32-B9D1-C637002BD554}.Debug|x64.Build.0 = Debug|x64
 		{3B25D9D6-17A6-4A32-B9D1-C637002BD554}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{3B25D9D6-17A6-4A32-B9D1-C637002BD554}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3B25D9D6-17A6-4A32-B9D1-C637002BD554}.Release|x64.ActiveCfg = Release|Any CPU
+		{3B25D9D6-17A6-4A32-B9D1-C637002BD554}.Release|x64.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/Raylib-cs/Std.cs b/Raylib-cs/Std.cs
new file mode 100644
index 0000000..0b272fc
--- /dev/null
+++ b/Raylib-cs/Std.cs
@@ -0,0 +1,12 @@
+// ----------------------------------------------------------------------------
+// <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;
+using System.Runtime.CompilerServices;
+[assembly:InternalsVisibleTo("raylibtest")]
+
diff --git a/Raylib-cs/packages.config b/Raylib-cs/packages.config
new file mode 100644
index 0000000..8472b34
--- /dev/null
+++ b/Raylib-cs/packages.config
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Baseclass.Contrib.Nuget.Output" version="2.4.3" targetFramework="net461" />
+  <package id="CppSharp" version="0.8.20" targetFramework="net461" developmentDependency="true" />
+</packages>
\ No newline at end of file
diff --git a/Raylib-cs/raylib-cs.cs b/Raylib-cs/raylib-manual.cs
similarity index 86%
rename from Raylib-cs/raylib-cs.cs
rename to Raylib-cs/raylib-manual.cs
index 6d49b48..6f37b69 100644
--- a/Raylib-cs/raylib-cs.cs
+++ b/Raylib-cs/raylib-manual.cs
@@ -10,6 +10,8 @@ using System;
 using System.Runtime.InteropServices;
 #endregion
 
+// manually added bindings test
+
 namespace Raylibcs
 {
     using Camera = Raylibcs.Camera2D;
@@ -25,7 +27,7 @@ namespace Raylibcs
 
         private const int MAX_SHADER_LOCATIONS = 32;
         private const int MAX_MATERIAL_MAPS = 12;
-
+            
         #endregion
 
         #region Raylib.h
@@ -46,9 +48,9 @@ namespace Raylibcs
         // Vector3 type
         public struct Vector3
         {
-            float x;
-            float y;
-            float z;
+            public float x;
+            public float y;
+            public float z;
 
             public Vector3(float x, float y, float z)
             {
@@ -61,10 +63,10 @@ namespace Raylibcs
         // Vector4 type
         public struct Vector4
         {
-            float x;
-            float y;
-            float z;
-            float w;
+            public float x;
+            public float y;
+            public float z;
+            public float w;
 
             public Vector4(float x, float y, float z, float w)
             {
@@ -147,9 +149,9 @@ namespace Raylibcs
         // RenderTexture2D type, for texture rendering
         public struct RenderTexture2D
         {
-            uint id;        // OpenGL Framebuffer Object (FBO) id
-            Texture2D texture;      // Color buffer attachment texture
-            Texture2D depth;        // Depth buffer attachment texture
+            public uint id;        // OpenGL Framebuffer Object (FBO) id
+            public Texture2D texture;      // Color buffer attachment texture
+            public Texture2D depth;        // Depth buffer attachment texture
         }
 
         // RenderTexture type, same as RenderTexture2D
@@ -167,6 +169,7 @@ namespace Raylibcs
         }
 
         // Font type, includes texture and charSet array data
+        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
         public struct Font
         {
             public Texture2D texture;      // Font texture
@@ -175,7 +178,7 @@ namespace Raylibcs
             public CharInfo[] chars;        // Characters info data
         }
 
-        // #define SpriteFont Font     // SpriteFont type fallback, defaults to Font
+        // public static Color SpriteFont Font     // SpriteFont type fallback, defaults to Font
 
         // Camera type, defines a camera position/orientation in 3d space
         public struct Camera3D
@@ -187,7 +190,7 @@ namespace Raylibcs
             public int type;               // Camera type, defines projection type: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC
         }
 
-        // #define Camera Camera3D     // Camera type fallback, defaults to Camera3D
+        // public static Color Camera Camera3D     // Camera type fallback, defaults to Camera3D
 
         // Camera2D type, defines a 2d camera
         public struct Camera2D
@@ -212,16 +215,16 @@ namespace Raylibcs
             public int vertexCount;        // Number of vertices stored in arrays
             public int triangleCount;      // Number of triangles stored (indexed or not)
 
-            public float[] vertices;        // Vertex position (XYZ - 3 components per vertex) (shader-location = 0)
-            public float[] texcoords;       // Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
-            public float[] texcoords2;      // Vertex second texture coordinates (useful for lightmaps) (shader-location = 5)
-            public float[] normals;         // Vertex normals (XYZ - 3 components per vertex) (shader-location = 2)
-            public float[] tangents;        // Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4)
-            public byte[] colors;  // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
-            public ushort[] indices;// Vertex indices (in case vertex data comes indexed)
+            public float[] vertices;       // Vertex position (XYZ - 3 components per vertex) (shader-location = 0)
+            public float[] texcoords;      // Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
+            public float[] texcoords2;     // Vertex second texture coordinates (useful for lightmaps) (shader-location = 5)
+            public float[] normals;        // Vertex normals (XYZ - 3 components per vertex) (shader-location = 2)
+            public float[] tangents;       // Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4)
+            public byte[] colors;          // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
+            public ushort[] indices;       // Vertex indices (in case vertex data comes indexed)
 
-            public uint vaoId;     // OpenGL Vertex Array Object id
-            //public uint vboId[7];  // OpenGL Vertex Buffer Objects id (7 types of vertex data)
+            public uint vaoId;             // OpenGL Vertex Array Object id
+            //public uint vboId[7];        // OpenGL Vertex Buffer Objects id (7 types of vertex data)
         }
 
         // Shader type (generic)
@@ -234,15 +237,15 @@ namespace Raylibcs
         // Material texture map
         public struct MaterialMap
         {
-            Texture2D texture;      // Material map texture
-            Color color;            // Material map color
-            float value;            // Material map value
+            public Texture2D texture;      // Material map texture
+            public Color color;            // Material map color
+            public float value;            // Material map value
         }
 
         // Material type (generic)
         public struct Material
         {
-            Shader shader;          // Material shader
+            public Shader shader;          // Material shader
             //MaterialMap maps[MAX_MATERIAL_MAPS]; // Material maps
             //float[] params;          // Material generic parameters (if required)
         }
@@ -271,30 +274,31 @@ namespace Raylibcs
         // Raycast hit information
         public struct RayHitInfo
         {
-            bool hit;               // Did the ray hit something?
-            float distance;         // Distance to nearest hit
-            Vector3 position;       // Position of nearest hit
-            Vector3 normal;         // Surface normal of hit
+            public bool hit;               // Did the ray hit something?
+            public float distance;         // Distance to nearest hit
+            public Vector3 position;       // Position of nearest hit
+            public Vector3 normal;         // Surface normal of hit
         }
 
         // Wave type, defines audio wave data
         public struct Wave
         {
-            uint sampleCount;   // Number of samples
-            uint sampleRate;    // Frequency (samples per second)
-            uint sampleSize;    // Bit depth (bits per sample): 8, 16, 32 (24 not supported)
-            uint channels;      // Number of channels (1-mono, 2-stereo)
-            IntPtr data;                 // Buffer data pointer
+            public uint sampleCount;   // Number of samples
+            public uint sampleRate;    // Frequency (samples per second)
+            public uint sampleSize;    // Bit depth (bits per sample): 8, 16, 32 (24 not supported)
+            public uint channels;      // Number of channels (1-mono, 2-stereo)
+            public IntPtr data;                 // Buffer data pointer
         }
 
         // Sound source type
+	    [StructLayout(LayoutKind.Sequential)]
         public struct Sound
         {
-            IntPtr audioBuffer;      // Pointer to internal data used by the audio system
+            public IntPtr audioBuffer;      // Pointer to internal data used by the audio system
 
-            uint source;    // Audio source id
-            uint buffer;    // Audio buffer id
-            int format;             // Audio format specifier
+            public uint source;    // Audio source id
+            public uint buffer;    // Audio buffer id
+            public int format;             // Audio format specifier
         }
 
         // Music type (file streaming from memory)
@@ -931,7 +935,7 @@ namespace Raylibcs
         public static extern SpriteFont LoadSpriteFont(string fileName);                                                    // Load a SpriteFont image into GPU memory
 
         [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-        public static extern SpriteFont LoadSpriteFontEx(string fileName, int fontSize, int numChars, IntPtr fontChars);     // Load a SpriteFont from TTF font with parameters
+        public static extern SpriteFont LoadSpriteFontEx(string fileName, int fontSize, int numChars, int fontChars);     // Load a SpriteFont from TTF font with parameters
 
         [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
         public static extern void UnloadSpriteFont(SpriteFont spriteFont);                                                       // Unload SpriteFont from GPU memory
@@ -1128,7 +1132,7 @@ namespace Raylibcs
         public static extern RayHitInfo GetCollisionRayGround(Ray ray, float groundHeight);                                      // Get collision info between ray and ground plane (Y-normal plane)
 
 
-        //module: shaders (rlgl)
+        // module: shaders (rlgl)
 
         // Shader loading/unloading functions
         [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
@@ -1248,7 +1252,7 @@ namespace Raylibcs
 	    // Wave/Sound management functions
 	    
         [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
-        public static extern void PlaySound(ref Sound sound);                                                    // Play a sound
+        public static extern void PlaySound(Sound sound);                                                    // Play a sound
 
         [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
         public static extern void PauseSound(Sound sound);                                                   // Pause a sound
@@ -1346,38 +1350,231 @@ namespace Raylibcs
 
         [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
         public static extern void StopAudioStream(AudioStream stream);                                       // Stop audio stream
-	    
-		//colors
 
-	    // Custom raylib color palette for amazing visuals
-	    /*#define LIGHTGRAY  (Color){ 200, 200, 200, 255 }        // Light Gray
-	    #define GRAY       (Color){ 130, 130, 130, 255 }        // Gray
-	    #define DARKGRAY   (Color){ 80, 80, 80, 255 }           // Dark Gray
-	    #define YELLOW     (Color){ 253, 249, 0, 255 }          // Yellow
-	    #define GOLD       (Color){ 255, 203, 0, 255 }          // Gold
-	    #define ORANGE     (Color){ 255, 161, 0, 255 }          // Orange
-	    #define PINK       (Color){ 255, 109, 194, 255 }        // Pink
-	    #define RED        (Color){ 230, 41, 55, 255 }          // Red
-	    #define MAROON     (Color){ 190, 33, 55, 255 }          // Maroon
-	    #define GREEN      (Color){ 0, 228, 48, 255 }           // Green
-	    #define LIME       (Color){ 0, 158, 47, 255 }           // Lime
-	    #define DARKGREEN  (Color){ 0, 117, 44, 255 }           // Dark Green
-	    #define SKYBLUE    (Color){ 102, 191, 255, 255 }        // Sky Blue
-	    #define BLUE       (Color){ 0, 121, 241, 255 }          // Blue
-	    #define DARKBLUE   (Color){ 0, 82, 172, 255 }           // Dark Blue
-	    #define PURPLE     (Color){ 200, 122, 255, 255 }        // Purple
-	    #define VIOLET     (Color){ 135, 60, 190, 255 }         // Violet
-	    #define DARKPURPLE (Color){ 112, 31, 126, 255 }         // Dark Purple
-	    #define BEIGE      (Color){ 211, 176, 131, 255 }        // Beige
-	    #define BROWN      (Color){ 127, 106, 79, 255 }         // Brown
-	    #define DARKBROWN  (Color){ 76, 63, 47, 255 }           // Dark Brown
+        #endregion
 
-	    #define WHITE      (Color){ 255, 255, 255, 255 }        // White
-	    #define BLACK      (Color){ 0, 0, 0, 255 }              // Black
-	    #define BLANK      (Color){ 0, 0, 0, 0 }                // Transparent
-	    #define MAGENTA    (Color){ 255, 0, 255, 255 }          // Magenta
-	    #define RAYWHITE   (Color){ 245, 245, 245, 255 }        // Ray White
+        #region Raylib# Constants
+
+        // raylib Config Flags
+        /*#define FLAG_SHOW_LOGO              1       // Set to show raylib logo at startup
+        #define FLAG_FULLSCREEN_MODE        2       // Set to run program in fullscreen
+        #define FLAG_WINDOW_RESIZABLE       4       // Set to allow resizable window
+        #define FLAG_WINDOW_UNDECORATED     8       // Set to disable window decoration (frame and buttons)
+        #define FLAG_WINDOW_TRANSPARENT    16       // Set to allow transparent window
+        #define FLAG_MSAA_4X_HINT          32       // Set to try enabling MSAA 4X
+        #define FLAG_VSYNC_HINT            64       // Set to try enabling V-Sync on GPU
         */
+
+        // Keyboard Function Keys
+        /*#define KEY_SPACE 32
+        #define KEY_ESCAPE 256
+        #define KEY_ENTER 257
+        #define KEY_TAB 258
+        #define KEY_BACKSPACE 259
+        #define KEY_INSERT 260
+        #define KEY_DELETE 261
+        #define KEY_RIGHT 262
+        #define KEY_LEFT 263
+        #define KEY_DOWN 264
+        #define KEY_UP 265
+        #define KEY_PAGE_UP 266
+        #define KEY_PAGE_DOWN 267
+        #define KEY_HOME 268
+        #define KEY_END 269
+        #define KEY_CAPS_LOCK 280
+        #define KEY_SCROLL_LOCK 281
+        #define KEY_NUM_LOCK 282
+        #define KEY_PRINT_SCREEN 283
+        #define KEY_PAUSE 284
+        #define KEY_F1 290
+        #define KEY_F2 291
+        #define KEY_F3 292
+        #define KEY_F4 293
+        #define KEY_F5 294
+        #define KEY_F6 295
+        #define KEY_F7 296
+        #define KEY_F8 297
+        #define KEY_F9 298
+        #define KEY_F10 299
+        #define KEY_F11 300
+        #define KEY_F12 301
+        #define KEY_LEFT_SHIFT 340
+        #define KEY_LEFT_CONTROL 341
+        #define KEY_LEFT_ALT 342
+        #define KEY_RIGHT_SHIFT 344
+        #define KEY_RIGHT_CONTROL 345
+        #define KEY_RIGHT_ALT 346
+        #define KEY_GRAVE 96
+        #define KEY_SLASH 47
+        #define KEY_BACKSLASH 92
+        
+                    // Keyboard Alpha Numeric Keys
+        #define KEY_ZERO 48
+        #define KEY_ONE 49
+        #define KEY_TWO 50
+        #define KEY_THREE 51
+        #define KEY_FOUR 52
+        #define KEY_FIVE 53
+        #define KEY_SIX 54
+        #define KEY_SEVEN 55
+        #define KEY_EIGHT 56
+        #define KEY_NINE 57
+        #define KEY_A 65
+        #define KEY_B 66
+        #define KEY_C 67
+        #define KEY_D 68
+        #define KEY_E 69
+        #define KEY_F 70
+        #define KEY_G 71
+        #define KEY_H 72
+        #define KEY_I 73
+        #define KEY_J 74
+        #define KEY_K 75
+        #define KEY_L 76
+        #define KEY_M 77
+        #define KEY_N 78
+        #define KEY_O 79
+        #define KEY_P 80
+        #define KEY_Q 81
+        #define KEY_R 82
+        #define KEY_S 83
+        #define KEY_T 84
+        #define KEY_U 85
+        #define KEY_V 86
+        #define KEY_W 87
+        #define KEY_X 88
+        #define KEY_Y 89
+        #define KEY_Z 90
+        
+        // Android Physical Buttons
+        #define KEY_BACK 4
+        #define KEY_MENU 82
+        #define KEY_VOLUME_UP 24
+        #define KEY_VOLUME_DOWN 25*/
+
+        // Mouse Buttons
+        /*#define MOUSE_LEFT_BUTTON     0
+        #define MOUSE_RIGHT_BUTTON    1
+        #define MOUSE_MIDDLE_BUTTON   2
+
+        // Touch points registered
+        #define MAX_TOUCH_POINTS      2
+
+        // Gamepad Number
+        #define GAMEPAD_PLAYER1       0
+        #define GAMEPAD_PLAYER2       1
+        #define GAMEPAD_PLAYER3       2
+        #define GAMEPAD_PLAYER4       3
+
+        // Gamepad Buttons/Axis
+
+        // PS3 USB Controller Buttons
+        #define GAMEPAD_PS3_BUTTON_TRIANGLE 0
+        #define GAMEPAD_PS3_BUTTON_CIRCLE   1
+        #define GAMEPAD_PS3_BUTTON_CROSS    2
+        #define GAMEPAD_PS3_BUTTON_SQUARE   3
+        #define GAMEPAD_PS3_BUTTON_L1       6
+        #define GAMEPAD_PS3_BUTTON_R1       7
+        #define GAMEPAD_PS3_BUTTON_L2       4
+        #define GAMEPAD_PS3_BUTTON_R2       5
+        #define GAMEPAD_PS3_BUTTON_START    8
+        #define GAMEPAD_PS3_BUTTON_SELECT   9
+        #define GAMEPAD_PS3_BUTTON_UP      24
+        #define GAMEPAD_PS3_BUTTON_RIGHT   25
+        #define GAMEPAD_PS3_BUTTON_DOWN    26
+        #define GAMEPAD_PS3_BUTTON_LEFT    27
+        #define GAMEPAD_PS3_BUTTON_PS      12
+
+        // PS3 USB Controller Axis
+        #define GAMEPAD_PS3_AXIS_LEFT_X     0
+        #define GAMEPAD_PS3_AXIS_LEFT_Y     1
+        #define GAMEPAD_PS3_AXIS_RIGHT_X    2
+        #define GAMEPAD_PS3_AXIS_RIGHT_Y    5
+        #define GAMEPAD_PS3_AXIS_L2         3       // [1..-1] (pressure-level)
+        #define GAMEPAD_PS3_AXIS_R2         4       // [1..-1] (pressure-level)
+
+        // Xbox360 USB Controller Buttons
+        #define GAMEPAD_XBOX_BUTTON_A       0
+        #define GAMEPAD_XBOX_BUTTON_B       1
+        #define GAMEPAD_XBOX_BUTTON_X       2
+        #define GAMEPAD_XBOX_BUTTON_Y       3
+        #define GAMEPAD_XBOX_BUTTON_LB      4
+        #define GAMEPAD_XBOX_BUTTON_RB      5
+        #define GAMEPAD_XBOX_BUTTON_SELECT  6
+        #define GAMEPAD_XBOX_BUTTON_START   7
+        #define GAMEPAD_XBOX_BUTTON_UP      10
+        #define GAMEPAD_XBOX_BUTTON_RIGHT   11
+        #define GAMEPAD_XBOX_BUTTON_DOWN    12
+        #define GAMEPAD_XBOX_BUTTON_LEFT    13
+        #define GAMEPAD_XBOX_BUTTON_HOME    8
+
+        // Android Gamepad Controller (SNES CLASSIC)
+        #define GAMEPAD_ANDROID_DPAD_UP        19
+        #define GAMEPAD_ANDROID_DPAD_DOWN      20
+        #define GAMEPAD_ANDROID_DPAD_LEFT      21
+        #define GAMEPAD_ANDROID_DPAD_RIGHT     22
+        #define GAMEPAD_ANDROID_DPAD_CENTER    23
+
+        #define GAMEPAD_ANDROID_BUTTON_A       96
+        #define GAMEPAD_ANDROID_BUTTON_B       97
+        #define GAMEPAD_ANDROID_BUTTON_C       98
+        #define GAMEPAD_ANDROID_BUTTON_X       99
+        #define GAMEPAD_ANDROID_BUTTON_Y       100
+        #define GAMEPAD_ANDROID_BUTTON_Z       101
+        #define GAMEPAD_ANDROID_BUTTON_L1      102
+        #define GAMEPAD_ANDROID_BUTTON_R1      103
+        #define GAMEPAD_ANDROID_BUTTON_L2      104
+        #define GAMEPAD_ANDROID_BUTTON_R2      105
+
+        // Xbox360 USB Controller Axis
+        // NOTE: For Raspberry Pi, axis must be reconfigured
+        #if defined(PLATFORM_RPI)
+            #define GAMEPAD_XBOX_AXIS_LEFT_X    0   // [-1..1] (left->right)
+            #define GAMEPAD_XBOX_AXIS_LEFT_Y    1   // [-1..1] (up->down)
+            #define GAMEPAD_XBOX_AXIS_RIGHT_X   3   // [-1..1] (left->right)
+            #define GAMEPAD_XBOX_AXIS_RIGHT_Y   4   // [-1..1] (up->down)
+            #define GAMEPAD_XBOX_AXIS_LT        2   // [-1..1] (pressure-level)
+            #define GAMEPAD_XBOX_AXIS_RT        5   // [-1..1] (pressure-level)
+        #else
+            #define GAMEPAD_XBOX_AXIS_LEFT_X    0   // [-1..1] (left->right)
+            #define GAMEPAD_XBOX_AXIS_LEFT_Y    1   // [1..-1] (up->down)
+            #define GAMEPAD_XBOX_AXIS_RIGHT_X   2   // [-1..1] (left->right)
+            #define GAMEPAD_XBOX_AXIS_RIGHT_Y   3   // [1..-1] (up->down)
+            #define GAMEPAD_XBOX_AXIS_LT        4   // [-1..1] (pressure-level)
+            #define GAMEPAD_XBOX_AXIS_RT        5   // [-1..1] (pressure-level)
+        #endif*/
+
+        // colors
+
+        // Custom raylib color palette for amazing visuals
+        public static Color LIGHTGRAY  = new Color(200, 200, 200, 255);          // Light Gray
+        public static Color GRAY       = new Color(130, 130, 130, 255);          // Gray
+        public static Color DARKGRAY   = new Color(80, 80, 80, 255);             // Dark Gray
+	    public static Color YELLOW     = new Color( 253, 249, 0, 255 );          // Yellow
+	    public static Color GOLD       = new Color( 255, 203, 0, 255 );          // Gold
+	    public static Color ORANGE     = new Color( 255, 161, 0, 255 );          // Orange
+	    public static Color PINK       = new Color( 255, 109, 194, 255 );        // Pink
+	    public static Color RED        = new Color( 230, 41, 55, 255 );          // Red
+	    public static Color MAROON     = new Color( 190, 33, 55, 255 );          // Maroon
+	    public static Color GREEN      = new Color( 0, 228, 48, 255 );           // Green
+	    public static Color LIME       = new Color( 0, 158, 47, 255 );           // Lime
+	    public static Color DARKGREEN  = new Color( 0, 117, 44, 255 );           // Dark Green
+	    public static Color SKYBLUE    = new Color( 102, 191, 255, 255 );        // Sky Blue
+	    public static Color BLUE       = new Color( 0, 121, 241, 255 );          // Blue
+	    public static Color DARKBLUE   = new Color( 0, 82, 172, 255 );           // Dark Blue
+	    public static Color PURPLE     = new Color( 200, 122, 255, 255 );        // Purple
+	    public static Color VIOLET     = new Color( 135, 60, 190, 255 );         // Violet
+	    public static Color DARKPURPLE = new Color( 112, 31, 126, 255 );         // Dark Purple
+	    public static Color BEIGE      = new Color( 211, 176, 131, 255 );        // Beige
+	    public static Color BROWN      = new Color( 127, 106, 79, 255 );         // Brown
+	    public static Color DARKBROWN  = new Color( 76, 63, 47, 255 );           // Dark Brown
+
+	    public static Color WHITE      = new Color( 255, 255, 255, 255 );        // White
+	    public static Color BLACK      = new Color( 0, 0, 0, 255 );              // Black
+        public static Color BLANK      = new Color(0, 0, 0, 0);                  // Transparent
+	    public static Color MAGENTA    = new Color( 255, 0, 255, 255 );          // Magenta
+	    public static Color RAYWHITE   = new Color( 245, 245, 245, 255 );        // Ray White
+        
         #endregion
     }
 }
\ No newline at end of file
diff --git a/Raylib-cs/raylib.cs b/Raylib-cs/raylib.cs
new file mode 100644
index 0000000..deba33f
--- /dev/null
+++ b/Raylib-cs/raylib.cs
@@ -0,0 +1,9401 @@
+// ----------------------------------------------------------------------------
+// <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);
+        }
+    }
+}