summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flake.nix2
-rw-r--r--main.c312
-rw-r--r--project.json9
-rw-r--r--raylib.c31224
4 files changed, 1238 insertions, 9 deletions
diff --git a/flake.nix b/flake.nix
index 6622516..c0b1991 100644
--- a/flake.nix
+++ b/flake.nix
@@ -7,7 +7,6 @@
inputs.nixpkgs.follows = "nixpkgs";
};
};
-
outputs = {
nixpkgs,
c3c,
@@ -24,6 +23,7 @@
src = ./.;
buildInputs = [
pkgs.c3c
+ pkgs.raylib
];
buildPhase = ''
c3c build
diff --git a/main.c3 b/main.c3
index 01f5693..306d5c4 100644
--- a/main.c3
+++ b/main.c3
@@ -1,8 +1,18 @@
module c3term;
+import raylib;
import std::io;
fn int main(String[] args)
{
- io::printn("Hello, World!");
+ raylib::init_window(800, 450, "test window");
+ raylib::set_target_fps(60);
+ while (!raylib::window_should_close())
+ {
+ raylib::begin_drawing();
+ raylib::clear_background(raylib::RAYWHITE);
+ raylib::draw_text("first window", 190, 200, 20, raylib::LIGHTRAY);
+ raylib::end_drawing();
+ }
+ raylib::close_window();
return 0;
}
diff --git a/project.json b/project.json
index 822b279..d4c9333 100644
--- a/project.json
+++ b/project.json
@@ -1,14 +1,10 @@
{
"langrev": "1",
"warnings": [ "no-unused" ],
- "dependency-search-paths": [ ],
- "dependencies": [ ],
"authors": [ "Andromeda-fp" ],
"version": "0.1.0",
"sources": [ "**" ],
- "test-sources": [ ],
- "c-sources": [ ],
- "c-include-dirs": [ "include" ],
+ "linked-libraries": [ "raylib"],
"build-dir": "build",
"output": "build",
"targets": {
@@ -17,6 +13,5 @@
},
},
"cpu": "generic",
- // Optimization: "O0", "O1", "O2", "O3", "O4", "O5", "Os", "Oz".
- "opt": "O0"
+ "opt": "O5"
}
diff --git a/raylib.c3 b/raylib.c3
new file mode 100644
index 0000000..2631daa
--- /dev/null
+++ b/raylib.c3
@@ -0,0 +1,1224 @@
+module raylib;
+
+// adapted from https://github.com/GiorgosAthanasopoulos/raylib-c3
+
+struct Matrix {
+ float m0, m4, m8, m12;
+ float m1, m5, m9, m13;
+ float m2, m6, m10, m14;
+ float m3, m7, m11, m15;
+}
+
+struct Rectangle {
+ float x, y, width, height;
+}
+
+struct Image {
+ void *data;
+ int width, height, mipmaps, format;
+}
+
+struct Texture {
+ uint id;
+ int width, height, mipmaps, format;
+}
+struct RenderTexture {
+ uint id;
+ Texture texture;
+ Texture depth;
+}
+
+struct NPatchInfo {
+ Rectangle source;
+ int left, top, right, bottom, layout;
+}
+
+struct GlyphInfo {
+ int value, offsetX, offsetY, advanceX;
+ Image image;
+}
+
+struct Font {
+ int baseSize, glyphCount, glyphPadding;
+ Texture2D texture;
+ Rectangle *recs;
+ GlyphInfo *glyphs;
+}
+
+struct Camera3D {
+ Vector3 pos;
+ float fovy;
+ int projection;
+}
+struct Camera2D {
+ Vector2 offset, target;
+ float rotation, zoom;
+}
+
+struct Mesh {
+ int vertexCount, triangleCount;
+ float *vertices, texcoords, texcoords2, normals, tangents, animVertices, animNormals, boneWeights;
+ char *colors, boneIds;
+ ushort *indices;
+ uint vaoId;
+ uint *vboId;
+}
+
+struct Shader {
+ uint id;
+ int *locs;
+}
+
+struct MaterialMap {
+ Texture2D texture;
+ Color color;
+ float value;
+}
+struct Material {
+ Shader shader;
+ MaterialMap *maps;
+ float [4]params;
+}
+
+struct Transform {
+ Vector3 translation, scale;
+ Quaternion rotation;
+}
+
+struct BoneInfo {
+ char [32]name;
+ int parent;
+}
+
+struct Model {
+ Matrix transform;
+ int meshCount, materialCount, boneCount;
+ Mesh *meshes;
+ Material *materials;
+ int *meshMaterial;
+ BoneInfo *bones;
+ Transform *bindPose;
+}
+struct ModelAnimation {
+ int boneCount, frameCount;
+ BoneInfo *bones;
+ Transform **framePoses;
+ char [32]name;
+}
+
+struct Ray {
+ Vector3 position, direction;
+}
+struct RayCollision {
+ bool hit;
+ float distance;
+ Vector3 point, normal;
+}
+struct BoundingBox {
+ Vector3 min, max;
+}
+
+struct Wave {
+ uint frameCount, sampleRate, sampleSize, channels;
+ void *data;
+}
+struct AudioBuffer {
+ // ma_data_converter converter;
+
+ AudioCallback callback;
+ AudioProcessor *processor;
+
+ float volume;
+ float pitch;
+ float pan;
+
+ bool playing;
+ bool paused;
+ bool looping;
+ int usage;
+
+ bool [2]isSubBufferProcessed;
+ uint sizeInFrames;
+ uint frameCursorPos;
+ uint framesProcessed;
+
+ char *data;
+
+ AudioBuffer *next;
+ AudioBuffer *prev;
+}
+struct AudioProcessor {
+ AudioCallback process;
+ AudioProcessor *next;
+ AudioProcessor *prev;
+}
+struct AudioStream {
+ AudioBuffer *buffer;
+ AudioProcessor *processor;
+ uint sampleRate, sampleSize, channels;
+}
+struct Sound {
+ AudioStream sound;
+ uint frameCount;
+}
+struct Music {
+ AudioStream stream;
+ uint frameCount;
+ bool looping;
+ int ctxType;
+ void *ctxData;
+}
+
+struct VrDeviceInfo {
+ int hResolution, vResolution;
+ float hScreenSize, vScreenSize, eyeToScreenDistance, lensSeparationDistance, interpupillaryDistance;
+ float [4]lensDistortionValues, chromaAbCorrection;
+}
+struct VrStereoConfig {
+ Matrix [2]projection, viewOffset;
+ float [2]leftLensCenter, rightLensCenter, leftScreenCenter, rightScreenCenter, scale, scaleIn;
+}
+
+struct FilePathList {
+ uint capacity;
+ uint count;
+ char **paths;
+}
+
+struct AutomationEvent {
+ uint frame, type;
+ int [4]params;
+}
+struct AutomationEventList {
+ uint capacity;
+ uint count;
+ AutomationEvent *events;
+}
+
+constdef ConfigFlags : int {
+ FLAG_VSYNC_HINT = 0x00000040,
+ FLAG_FULLSCREEN_MODE = 0x00000002,
+ FLAG_WINDOW_RESIZABLE = 0x00000004,
+ FLAG_WINDOW_UNDECORATED = 0x00000008,
+ FLAG_WINDOW_HIDDEN = 0x00000080,
+ FLAG_WINDOW_MINIMIZED = 0x00000200,
+ FLAG_WINDOW_MAXIMIZED = 0x00000400,
+ FLAG_WINDOW_UNFOCUSED = 0x00000800,
+ FLAG_WINDOW_TOPMOST = 0x00001000,
+ FLAG_WINDOW_ALWAYS_RUN = 0x00000100,
+ FLAG_WINDOW_TRANSPARENT = 0x00000010,
+ FLAG_WINDOW_HIGHDPI = 0x00002000,
+ FLAG_WINDOW_MOUSE_PASSTHROUGH = 0x00004000,
+ FLAG_BORDERLESS_WINDOWED_MODE = 0x00008000,
+ FLAG_MSAA_4X_HINT = 0x00000020,
+ FLAG_INTERLACED_HINT = 0x00010000
+}
+
+constdef TraceLogLevel : int {
+ LOG_ALL = 0,
+ LOG_TRACE = 1,
+ LOG_DEBUG = 2,
+ LOG_INFO = 3,
+ LOG_WARNING = 4,
+ LOG_ERROR = 5,
+ LOG_FATAL = 6,
+ LOG_NONE = 7,
+}
+
+constdef KeyboardKey : int {
+ KEY_NULL = 0,
+ KEY_APOSTROPHE = 39,
+ KEY_COMMA = 44,
+ KEY_MINUS = 45,
+ KEY_PERIOD = 46,
+ KEY_SLASH = 47,
+ KEY_ZERO = 48,
+ KEY_ONE = 49,
+ KEY_TWO = 50,
+ KEY_THREE = 51,
+ KEY_FOUR = 52,
+ KEY_FIVE = 53,
+ KEY_SIX = 54,
+ KEY_SEVEN = 55,
+ KEY_EIGHT = 56,
+ KEY_NINE = 57,
+ KEY_SEMICOLON = 59,
+ KEY_EQUAL = 61,
+ KEY_A = 65,
+ KEY_B = 66,
+ KEY_C = 67,
+ KEY_D = 68,
+ KEY_E = 69,
+ KEY_F = 70,
+ KEY_G = 71,
+ KEY_H = 72,
+ KEY_I = 73,
+ KEY_J = 74,
+ KEY_K = 75,
+ KEY_L = 76,
+ KEY_M = 77,
+ KEY_N = 78,
+ KEY_O = 79,
+ KEY_P = 80,
+ KEY_Q = 81,
+ KEY_R = 82,
+ KEY_S = 83,
+ KEY_T = 84,
+ KEY_U = 85,
+ KEY_V = 86,
+ KEY_W = 87,
+ KEY_X = 88,
+ KEY_Y = 89,
+ KEY_Z = 90,
+ KEY_LEFT_BRACKET = 91,
+ KEY_BACKSLASH = 92,
+ KEY_RIGHT_BRACKET = 93,
+ KEY_GRAVE = 96,
+ KEY_SPACE = 32,
+ KEY_ESCAPE = 256,
+ KEY_ENTER = 257,
+ KEY_TAB = 258,
+ KEY_BACKSPACE = 259,
+ KEY_INSERT = 260,
+ KEY_DELETE = 261,
+ KEY_RIGHT = 262,
+ KEY_LEFT = 263,
+ KEY_DOWN = 264,
+ KEY_UP = 265,
+ KEY_PAGE_UP = 266,
+ KEY_PAGE_DOWN = 267,
+ KEY_HOME = 268,
+ KEY_END = 269,
+ KEY_CAPS_LOCK = 280,
+ KEY_SCROLL_LOCK = 281,
+ KEY_NUM_LOCK = 282,
+ KEY_PRINT_SCREEN = 283,
+ KEY_PAUSE = 284,
+ KEY_F1 = 290,
+ KEY_F2 = 291,
+ KEY_F3 = 292,
+ KEY_F4 = 293,
+ KEY_F5 = 294,
+ KEY_F6 = 295,
+ KEY_F7 = 296,
+ KEY_F8 = 297,
+ KEY_F9 = 298,
+ KEY_F10 = 299,
+ KEY_F11 = 300,
+ KEY_F12 = 301,
+ KEY_LEFT_SHIFT = 340,
+ KEY_LEFT_CONTROL = 341,
+ KEY_LEFT_ALT = 342,
+ KEY_LEFT_SUPER = 343,
+ KEY_RIGHT_SHIFT = 344,
+ KEY_RIGHT_CONTROL = 345,
+ KEY_RIGHT_ALT = 346,
+ KEY_RIGHT_SUPER = 347,
+ KEY_KB_MENU = 348,
+ KEY_KP_0 = 320,
+ KEY_KP_1 = 321,
+ KEY_KP_2 = 322,
+ KEY_KP_3 = 323,
+ KEY_KP_4 = 324,
+ KEY_KP_5 = 325,
+ KEY_KP_6 = 326,
+ KEY_KP_7 = 327,
+ KEY_KP_8 = 328,
+ KEY_KP_9 = 329,
+ KEY_KP_DECIMAL = 330,
+ KEY_KP_DIVIDE = 331,
+ KEY_KP_MULTIPLY = 332,
+ KEY_KP_SUBTRACT = 333,
+ KEY_KP_ADD = 334,
+ KEY_KP_ENTER = 335,
+ KEY_KP_EQUAL = 336,
+ KEY_BACK = 4,
+ KEY_MENU = 5,
+ KEY_VOLUME_UP = 24,
+ KEY_VOLUME_DOWN = 25
+}
+
+constdef MouseButton : int {
+ MOUSE_BUTTON_LEFT = 0,
+ MOUSE_BUTTON_RIGHT = 1,
+ MOUSE_BUTTON_MIDDLE = 2,
+ MOUSE_BUTTON_SIDE = 3,
+ MOUSE_BUTTON_EXTRA = 4,
+ MOUSE_BUTTON_FORWARD = 5,
+ MOUSE_BUTTON_BACK = 6,
+}
+constdef MouseCursor : int {
+ MOUSE_CURSOR_DEFAULT = 0,
+ MOUSE_CURSOR_ARROW = 1,
+ MOUSE_CURSOR_IBEAM = 2,
+ MOUSE_CURSOR_CROSSHAIR = 3,
+ MOUSE_CURSOR_POINTING_HAND = 4,
+ MOUSE_CURSOR_RESIZE_EW = 5,
+ MOUSE_CURSOR_RESIZE_NS = 6,
+ MOUSE_CURSOR_RESIZE_NWSE = 7,
+ MOUSE_CURSOR_RESIZE_NESW = 8,
+ MOUSE_CURSOR_RESIZE_ALL = 9,
+ MOUSE_CURSOR_NOT_ALLOWED = 10
+}
+
+constdef GamepadButton : int {
+ GAMEPAD_BUTTON_UNKNOWN = 0,
+ GAMEPAD_BUTTON_LEFT_FACE_UP = 1,
+ GAMEPAD_BUTTON_LEFT_FACE_RIGHT = 2,
+ GAMEPAD_BUTTON_LEFT_FACE_DOWN = 3,
+ GAMEPAD_BUTTON_LEFT_FACE_LEFT = 4,
+ GAMEPAD_BUTTON_RIGHT_FACE_UP = 5,
+ GAMEPAD_BUTTON_RIGHT_FACE_RIGHT = 6,
+ GAMEPAD_BUTTON_RIGHT_FACE_DOWN = 7,
+ GAMEPAD_BUTTON_RIGHT_FACE_LEFT = 8,
+ GAMEPAD_BUTTON_LEFT_TRIGGER_1 = 9,
+ GAMEPAD_BUTTON_LEFT_TRIGGER_2 = 10,
+ GAMEPAD_BUTTON_RIGHT_TRIGGER_1 = 11,
+ GAMEPAD_BUTTON_RIGHT_TRIGGER_2 = 12,
+ GAMEPAD_BUTTON_MIDDLE_LEFT = 13,
+ GAMEPAD_BUTTON_MIDDLE = 14,
+ GAMEPAD_BUTTON_MIDDLE_RIGHT = 15,
+ GAMEPAD_BUTTON_LEFT_THUMB = 16,
+ GAMEPAD_BUTTON_RIGHT_THUMB = 17,
+}
+constdef GamepadAxis : int {
+ GAMEPAD_AXIS_LEFT_X = 0,
+ GAMEPAD_AXIS_LEFT_Y = 1,
+ GAMEPAD_AXIS_RIGHT_X = 2,
+ GAMEPAD_AXIS_RIGHT_Y = 3,
+ GAMEPAD_AXIS_LEFT_TRIGGER = 4,
+ GAMEPAD_AXIS_RIGHT_TRIGGER = 5
+}
+
+constdef MaterialMapIndex : int {
+ MATERIAL_MAP_ALBEDO = 0,
+ MATERIAL_MAP_METALNESS = 1,
+ MATERIAL_MAP_NORMAL = 2,
+ MATERIAL_MAP_ROUGHNESS = 3,
+ MATERIAL_MAP_OCCLUSION = 4,
+ MATERIAL_MAP_EMISSION = 5,
+ MATERIAL_MAP_HEIGHT = 6,
+ MATERIAL_MAP_CUBEMAP = 7,
+ MATERIAL_MAP_IRRADIANCE = 8,
+ MATERIAL_MAP_PREFILTER = 9,
+ MATERIAL_MAP_BRDF = 10,
+}
+
+constdef ShaderLocationIndex : int {
+ SHADER_LOC_VERTEX_POSITION = 0,
+ SHADER_LOC_VERTEX_TEXCOORD01 = 1,
+ SHADER_LOC_VERTEX_TEXCOORD02 = 2,
+ SHADER_LOC_VERTEX_NORMAL = 3,
+ SHADER_LOC_VERTEX_TANGENT = 4,
+ SHADER_LOC_VERTEX_COLOR = 5,
+ SHADER_LOC_MATRIX_MVP = 6,
+ SHADER_LOC_MATRIX_VIEW = 7,
+ SHADER_LOC_MATRIX_PROJECTION = 8,
+ SHADER_LOC_MATRIX_MODEL = 9,
+ SHADER_LOC_MATRIX_NORMAL = 10,
+ SHADER_LOC_VECTOR_VIEW = 11,
+ SHADER_LOC_COLOR_DIFFUSE = 12,
+ SHADER_LOC_COLOR_SPECULAR = 13,
+ SHADER_LOC_COLOR_AMBIENT = 14,
+ SHADER_LOC_MAP_ALBEDO = 15,
+ SHADER_LOC_MAP_METALNESS = 16,
+ SHADER_LOC_MAP_NORMAL = 17,
+ SHADER_LOC_MAP_ROUGHNESS = 18,
+ SHADER_LOC_MAP_OCCLUSION = 19,
+ SHADER_LOC_MAP_EMISSION = 20,
+ SHADER_LOC_MAP_HEIGHT = 21,
+ SHADER_LOC_MAP_CUBEMAP = 22,
+ SHADER_LOC_MAP_IRRADIANCE = 23,
+ SHADER_LOC_MAP_PREFILTER = 24,
+ SHADER_LOC_MAP_BRDF = 25,
+}
+constdef ShaderUniformDataType : int {
+ SHADER_UNIFORM_FLOAT = 0,
+ SHADER_UNIFORM_VEC2 = 1,
+ SHADER_UNIFORM_VEC3 = 2,
+ SHADER_UNIFORM_VEC4 = 3,
+ SHADER_UNIFORM_INT = 4,
+ SHADER_UNIFORM_IVEC2 = 5,
+ SHADER_UNIFORM_IVEC3 = 6,
+ SHADER_UNIFORM_IVEC4 = 7,
+ SHADER_UNIFORM_SAMPLER2D = 8,
+}
+constdef ShaderAttributeDataType : int {
+ SHADER_ATTRIB_FLOAT = 0,
+ SHADER_ATTRIB_VEC2 = 1,
+ SHADER_ATTRIB_VEC3 = 2,
+ SHADER_ATTRIB_VEC4 = 3,
+}
+
+constdef PixelFormat : int {
+ PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1,
+ PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA = 2,
+ PIXELFORMAT_UNCOMPRESSED_R5G6B5 = 3,
+ PIXELFORMAT_UNCOMPRESSED_R8G8B8 = 4,
+ PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 = 5,
+ PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 = 6,
+ PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 = 7,
+ PIXELFORMAT_UNCOMPRESSED_R32 = 8,
+ PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9,
+ PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10,
+ PIXELFORMAT_UNCOMPRESSED_R16 = 11,
+ PIXELFORMAT_UNCOMPRESSED_R16G16B16 = 12,
+ PIXELFORMAT_UNCOMPRESSED_R16G16B16A16 = 13,
+ PIXELFORMAT_COMPRESSED_DXT1_RGB = 14,
+ PIXELFORMAT_COMPRESSED_DXT1_RGBA = 15,
+ PIXELFORMAT_COMPRESSED_DXT3_RGBA = 16,
+ PIXELFORMAT_COMPRESSED_DXT5_RGBA = 17,
+ PIXELFORMAT_COMPRESSED_ETC1_RGB = 18,
+ PIXELFORMAT_COMPRESSED_ETC2_RGB = 19,
+ PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 20,
+ PIXELFORMAT_COMPRESSED_PVRT_RGB = 21,
+ PIXELFORMAT_COMPRESSED_PVRT_RGBA = 22,
+ PIXELFORMAT_COMPRESSED_ASTC_4X4_RGBA = 23,
+ PIXELFORMAT_COMPRESSED_ASTC_8X8_RGBA = 24,
+}
+
+constdef TextureFilter : int {
+ TEXTURE_FILTER_POINT = 0,
+ TEXTURE_FILTER_BILINEAR = 1,
+ TEXTURE_FILTER_TRILINEAR = 2,
+ TEXTURE_FILTER_ANISOTROPIC_4X = 3,
+ TEXTURE_FILTER_ANISOTROPIC_8X = 4,
+ TEXTURE_FILTER_ANISOTROPIC_16X = 5,
+}
+constdef TextureWrap : int {
+ TEXTURE_WRAP_REPEAT = 0,
+ TEXTURE_WRAP_CLAMP = 1,
+ TEXTURE_WRAP_MIRROR_REPEAT = 2,
+ TEXTURE_WRAP_MIRROR_CLAMP = 3,
+}
+
+constdef CubemapLayout : int {
+ CUBEMAP_LAYOUT_AUTO_DETECT = 0,
+ CUBEMAP_LAYOUT_LINE_VERTICAL = 1,
+ CUBEMAP_LAYOUT_LINE_HORIZONTAL = 2,
+ CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR = 3,
+ CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE = 4,
+ CUBEMAP_LAYOUT_PANORAMA = 5,
+}
+
+constdef FontType : int {
+ FONT_DEFAULT = 0,
+ FONT_BITMAP = 1,
+ FONT_SDF = 2,
+}
+
+constdef BlendMode : int {
+ BLEND_ALPHA = 0,
+ BLEND_ADDITIVE = 1,
+ BLEND_MULTIPLIED = 2,
+ BLEND_ADD_COLORS = 3,
+ BLEND_SUBTRACT_COLORS = 4,
+ BLEND_ALPHA_PREMULTIPLY = 5,
+ BLEND_CUSTOM = 6,
+ BLEND_CUSTOM_SEPARATE = 7,
+}
+
+constdef Gesture : int {
+ 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
+}
+
+constdef CameraMode : int {
+ CAMERA_CUSTOM = 0,
+ CAMERA_FREE = 1,
+ CAMERA_ORBITAL = 2,
+ CAMERA_FIRST_PERSON = 3,
+ CAMERA_THIRD_PERSON = 4,
+}
+constdef CameraProjection : int {
+ CAMERA_PERSPECTIVE = 0,
+ CAMERA_ORTHOGRAPHIC = 1,
+}
+
+constdef NPathLayout: int {
+ NPATCH_NINE_PATCH = 0,
+ NPATCH_THREE_PATCH_VERTICAL = 1,
+ NPATCH_THREE_PATCH_HORIZONTAL = 2,
+}
+
+alias Vector2 = float[<2>];
+alias Vector3 = float[<3>];
+alias Vector4 = float[<4>];
+alias Quaternion = Vector4;
+
+alias Color = char[<4>];
+
+alias Texture2D = Texture;
+alias TextureCubemap = Texture;
+alias RenderTexture2D = RenderTexture;
+
+alias Camera = Camera3D;
+
+alias TraceLogCallback = fn void(int logLevel, char *text, ...);
+alias LoadFileDataCallback = fn char*(char *filename, int *dataSize);
+alias SaveFileDataCallback = fn bool(char *filename, void *data, int dataSize);
+alias LoadFileTextCallback = fn char*(char *fileName);
+alias SaveFileTextCallback = fn bool(char *filename, char *text);
+
+alias AudioCallback = fn void(void *bufferData, uint frames);
+
+const int RAYLIB_VERSION_PATCH = 0;
+const int RAYLIB_VERSION_MAJOR = 5;
+const int RAYLIB_VERSION_MINOR = 5;
+const char *RAYLIB_VERSION = "5.5-dev";
+const DEG2RAD = PI/180.0f;
+const float PI = 3.14159265358979323846f;
+const float RAD2DEG = 180.0f/PI;
+const Color LIGHTRAY = {200, 200, 200, 255};
+const Color GRAY = {130, 130, 130, 255};
+const Color DARKGRAY= {80, 80, 80, 255};
+const Color YELLOW = {253, 249, 0, 255};
+const Color GOLD = {255, 203, 0, 255};
+const Color ORANGE = {255, 161, 0, 255};
+const Color PINK = {255, 109, 194, 255};
+const Color RED = {230, 41, 55, 255};
+const Color MAROON = {190, 33, 55, 255};
+const Color GREEN = {0, 228, 48, 255};
+const Color LIME = {0, 158, 47, 255};
+const Color DARKGREEN = {0, 117, 44, 255};
+const Color SKYBLUE = {102, 191, 255, 255};
+const Color BLUE = {0, 121, 241, 255};
+const Color DARKBLUE = {0, 82, 172, 255};
+const Color PURPLE = {200, 122, 255, 255};
+const Color VIOLET = {135, 60, 190, 255};
+const Color DARKPURPLE = {112, 31, 126, 255};
+const Color BEIGE = {211, 176, 131, 255};
+const Color BROWN = {127, 106, 79, 255};
+const Color DARKBROWN = {76, 63, 47, 255};
+const Color WHITE = {255, 255, 255, 255};
+const Color BLACK = {0, 0, 0, 255};
+const Color BLANK = {0, 0, 0, 0};
+const Color MAGENTA = {255, 0, 255, 255};
+const Color RAYWHITE = {245, 245, 245, 255};
+
+const MouseButton MOUSE_LEFT_BUTTON = MOUSE_BUTTON_LEFT;
+const MouseButton MOUSE_RIGHT_BUTTON = MOUSE_BUTTON_RIGHT;
+const MouseButton MOUSE_MIDDLE_BUTTON = MOUSE_BUTTON_MIDDLE;
+
+const MaterialMapIndex MATERIAL_MAP_DIFFUSE = MATERIAL_MAP_ALBEDO;
+const MaterialMapIndex MATERIAL_MAP_SPECULAR = MATERIAL_MAP_METALNESS;
+
+const ShaderLocationIndex SHADER_LOC_MAP_DIFFUSE = SHADER_LOC_MAP_ALBEDO;
+const ShaderLocationIndex SHADER_LOC_MAP_SPECULAR = SHADER_LOC_MAP_METALNESS;
+
+extern fn void init_window(int width, int height, char *title) @cname("InitWindow");
+extern fn void close_window() @cname("CloseWindow");
+extern fn bool window_should_close() @cname("WindowShouldClose");
+extern fn bool is_window_ready() @cname("IsWindowReady");
+extern fn bool is_window_fullscreen() @cname("IsWindowFulLscreen");
+extern fn bool is_window_hidden() @cname("IsWindowHidden");
+extern fn bool is_window_minimized() @cname("IsWindowMinimized");
+extern fn bool is_window_maximized() @cname("IsWindowMaximized");
+extern fn bool is_window_focused() @cname("IsWindowFocused");
+extern fn bool is_window_resized() @cname("IsWindowResized");
+extern fn bool is_window_state(uint flags) @cname("IsWindowState");
+extern fn void set_window_state(uint flags) @cname("SetWindowState");
+extern fn void clear_window_state(uint flags) @cname("ClearWindowState");
+extern fn void toggle_fullscreen() @cname("ToggleFullscreen");
+extern fn void toggle_borderless_windowed() @cname("ToggleBorderlessWindowed");
+extern fn void maximize_window() @cname("MaximizeWindow");
+extern fn void minimize_window() @cname("MinimizeWindow");
+extern fn void restore_window() @cname("RestoreWindow");
+extern fn void set_window_icon(Image image) @cname("SetWindowIcon");
+extern fn void set_window_icons(Image *images, int count) @cname("SetWindowIcons");
+extern fn void set_window_title(char *title) @cname("SetWindowTitle");
+extern fn void set_window_position(int x, int y) @cname("SetWindowPosition");
+extern fn void set_window_monitor(int monitor) @cname("SetWindowMonitor");
+extern fn void set_window_min_size(int width, int height) @cname("SetWindowMinSize");
+extern fn void set_window_max_size(int width, int height) @cname("SetWindowMaxSize");
+extern fn void set_window_size(int width, int height) @cname("SetWindowSize");
+extern fn void set_window_opacity(float opacity) @cname("SetWindowOpacity");
+extern fn void set_window_focused() @cname("SetWindowFocused");
+extern fn void *get_window_handle() @cname("GetWindowHandle");
+extern fn int get_screen_width() @cname("GetScreenWidth");
+extern fn int get_screen_height() @cname("GetScreenHeight");
+extern fn int get_render_width() @cname("GetRenderWidth");
+extern fn int get_render_height() @cname("GetRenderHeight");
+extern fn int get_monitor_count() @cname("GetMonitorCount");
+extern fn int get_current_monitor() @cname("GetCurrentMonitor");
+extern fn Vector2 get_monitor_position(int monitor) @cname("GetMonitorPosition");
+extern fn int get_monitor_width(int monitor) @cname("GetMonitorWidth");
+extern fn int get_monitor_height(int monitor) @cname("GetMonitorHeight");
+extern fn int get_monitor_physical_width(int monitor) @cname("GetMonitorPhysicalWidth");
+extern fn int get_monitor_physical_height(int monitor) @cname("GetMonitorPhysicalHeight");
+extern fn int get_monitor_refresh_rate(int monitor) @cname("GetMonitorRefreshRate");
+extern fn Vector2 get_window_position() @cname("GetWindowPosition");
+extern fn Vector2 get_window_scale_dpi() @cname("GetWindowScaleDPI");
+extern fn char *get_monitor_name(int monitor) @cname("GetMonitorName");
+extern fn void set_clipboard_text(char *text) @cname("SetClipboardText");
+extern fn char *get_clipboard_text() @cname("GetClipboardText");
+extern fn void enable_event_waiting() @cname("EnableEventWaiting");
+extern fn void disable_event_waiting() @cname("DisableEventWaiting");
+
+extern fn void show_cursor() @cname("ShowCursor");
+extern fn void hide_cursor() @cname("HideCursor");
+extern fn bool is_cursor_hidden() @cname("IsCursorHidden");
+extern fn void enable_cursor() @cname("EnableCursor");
+extern fn void disable_cursor() @cname("DisableCursor");
+extern fn bool is_cursor_on_screen() @cname("IsCursorOnSreen");
+
+extern fn void clear_background(Color color) @cname("ClearBackground");
+extern fn void begin_drawing() @cname("BeginDrawing");
+extern fn void end_drawing() @cname("EndDrawing");
+extern fn void begin_mode_2d(Camera2D camera) @cname("BeginMode2D");
+extern fn void end_mode_2d() @cname("EndMode2D");
+extern fn void begin_mode_3d(Camera3D camera) @cname("BeginMode3D");
+extern fn void end_mode_3d() @cname("EndMode3D");
+extern fn void begin_texture_mode(RenderTexture2D target) @cname("BeginTextureMode");
+extern fn void end_texture_mode() @cname("EndTextureMode");
+extern fn void begin_shader_mode(Shader shader) @cname("BeginShaderMode");
+extern fn void end_shader_mode() @cname("EndShaderMode");
+extern fn void begin_blend_mode(int mode) @cname("BeginBlendMode");
+extern fn void end_blend_mode() @cname("EndBlendMode");
+extern fn void begin_scissor_mode(int x, int y, int width, int height) @cname("BeginScissorMode");
+extern fn void end_scissor_mode() @cname("EndScissorMode");
+extern fn void begin_vr_stereo_mode(VrStereoConfig config) @cname("BeginVrStereoMode");
+extern fn void end_vr_stereo_mode() @cname("EndVrStereoMode");
+
+extern fn VrStereoConfig load_vr_stereo_config(VrDeviceInfo device) @cname("LoadVrStereoConfig");
+extern fn void unload_vr_stereo_config(VrStereoConfig config) @cname("UnloadVrStereoConfig");
+
+
+extern fn Shader load_shader(char *vsFileName, char *fsFileName) @cname("LoadShader");
+extern fn Shader load_shader_from_meomry(char *vsCode, char *fsCode) @cname("LoadShaderFromMemory");
+extern fn bool is_shader_ready(Shader shader) @cname("IsShaderReady");
+extern fn int get_shader_location(Shader shader,char *uniformName) @cname("GetShaderLocation");
+extern fn int get_shader_location_attrib(Shader shader, char *attribName) @cname("GetShaderLocationAttrib");
+extern fn void set_shader_value(Shader shader, int locIndex, void *value, int uniformType) @cname("SetShaderValue");
+extern fn void set_shader_value_v(Shader shader, int locIndex, void *value, int uniformType, int count) @cname("SetShaderValueV");
+extern fn void set_shader_value_matrix(Shader shader, int locIndex, Matrix mat) @cname("SetShaderValueMatrix");
+extern fn void set_shader_value_texture(Shader shader, int locIndex, Texture2D texture) @cname("SetShaderValueTexture");
+extern fn void unload_shader(Shader shader) @cname("UnloadShader");
+
+extern fn Ray get_mouse_ray(Vector2 mousePosition, Camera camera) @cname("GetMouseRay");
+extern fn Matrix get_camera_matrix(Camera camera) @cname("GetCameraMatrix");
+extern fn Matrix get_camera_matrix_2d(Camera2D camera) @cname("GetCameraMatrix2D");
+extern fn Vector2 get_world_to_screen(Vector3 position, Camera camera) @cname("GetWorldToScreen");
+extern fn Vector2 get_screen_to_world_2d(Vector2 position, Camera2D camera) @cname("GetScreenToWorld2D");
+extern fn Vector2 get_world_to_screen_ex(Vector3 position, Camera camera, int width, int height) @cname("GetWorldToScreenEx");
+extern fn Vector2 get_world_to_screen_2d(Vector2 position, Camera2D camera) @cname("GetWorldToScreen2D");
+
+extern fn void set_target_fps(int fps) @cname("SetTargetFPS");
+extern fn float get_frame_time() @cname("GetFrameTime");
+extern fn double get_time() @cname("GetTime");
+extern fn int get_fps() @cname("GetFPS");
+
+extern fn void swap_screen_buffer() @cname("SwapScreenBuffer");
+extern fn void poll_input_events() @cname("PollInputEvents");
+extern fn void wait_time(double seconds) @cname("WaitTime");
+
+extern fn void set_random_seed(uint seed) @cname("SetRandomSeed");
+extern fn int get_random_value(int min, int max) @cname("GetRandomValue");
+extern fn int *load_random_sequence(uint count, int min, int max) @cname("LoadRandomSequence");
+extern fn void unload_random_sequence(int *sequence) @cname("UnloadRandomSequence");
+
+extern fn void take_screenshot(char *fileName) @cname("TakeScreenshot");
+extern fn void set_config_flags(uint flags) @cname("SetConfigFlags");
+extern fn void open_url(char *url) @cname("OpenURL");
+
+extern fn void trace_log(int logLevel, char *text, ...) @cname("TraceLog");
+extern fn void set_trace_log_level(int logLevel) @cname("SetTraceLogLevel");
+extern fn void *mem_alloc(uint size) @cname("MemAlloc");
+extern fn void *mem_realloc(void *ptr, uint size) @cname("MemRealloc");
+extern fn void mem_free(void *ptr) @cname("MemFree");
+
+extern fn void set_trace_log_callback(TraceLogCallback callback) @cname("SetTraceLogCallback");
+extern fn void set_load_file_data_callback(LoadFileDataCallback callback) @cname("SetLoadFileDataCallback");
+extern fn void set_save_file_data_callback(SaveFileDataCallback callback) @cname("SetSaveFileDataCallback");
+extern fn void set_load_file_text_callback(LoadFileTextCallback callback) @cname("SetLoadFileTextCallback");
+extern fn void set_save_file_text_callback(SaveFileTextCallback callback) @cname("SetSaveFileTextCallback");
+
+extern fn char *load_file_data(char *fileName, int *dataSize) @cname("LoadFileData");
+extern fn void unload_file_data(char *data) @cname("UnloadFileData");
+extern fn bool save_file_data(char *fileName, void *data, int dataSize) @cname("SaveFileData");
+extern fn bool export_data_as_code(char *data, int dataSize, char *fileName) @cname("ExportDataAsCode");
+extern fn char *load_file_text(char *fileName) @cname("LoadFileText");
+extern fn void unload_file_text(char *text) @cname("UnloadFileText");
+extern fn bool save_file_text(char *fileName, char *text) @cname("SaveFileText");
+
+extern fn bool file_exists(char *fileName) @cname("FileExists");
+extern fn bool directory_exists(char *dirPath) @cname("DirectoryExists");
+extern fn bool is_file_extension(char *fileName, char *ext) @cname("IsFileExtension");
+extern fn int get_file_length(char *fileName) @cname("GetFileLength");
+extern fn char *get_file_extension(char *fileName) @cname("GetFileExtension");
+extern fn char *get_file_name(char *filePath) @cname("GetFileName");
+extern fn char *get_filename_without_ext(char *filePath) @cname("GetFilenameWithoutExt");
+extern fn char *get_directory_path(char *filePath) @cname("GetDirectoryPath");
+extern fn char *get_prev_directory_path(char *dirPath) @cname("GetPrevDirectoryPath");
+extern fn char *get_working_directory() @cname("GetWorkingDirectory");
+extern fn char *get_application_directory() @cname("GetApplicationDirectory");
+extern fn bool change_directory(char *dir) @cname("ChangeDirectory");
+extern fn bool is_path_file(char *path) @cname("IsPathFile");
+extern fn FilePathList load_directory_files(char *dirPath) @cname("LoadDirectoryFiles");
+extern fn FilePathList load_directory_files_ex(char *basePath, char *filter, bool scanSubdirs) @cname("LoadDirectoryFilesEx");
+extern fn void unload_directory_files(FilePathList files) @cname("UnloadDirectoryFiles");
+extern fn bool is_file_dropped() @cname("IsFileDropped");
+extern fn FilePathList load_dropped_files() @cname("LoadDroppedFiles");
+extern fn void unload_dropped_files(FilePathList files) @cname("UnloadDroppedFiles");
+extern fn long get_file_mod_time(char *fileName) @cname("GetFileModTime");
+
+extern fn char *compress_data(char *data, int dataSize, int *compDataSize) @cname("CompressData");
+extern fn char *decompress_data(char *compData, int compDataSize, int *dataSize) @cname("DecompressData");
+extern fn char *encode_database_64(char *data, int dataSize, int *outputSize) @cname("EncodeDatabase64");
+extern fn char *decode_database_64(char *data, int *outputSize) @cname("DecodeDatabase64");
+
+extern fn AutomationEventList load_automation_event_list(char *fileName) @cname("LoadAutomationEventList");
+extern fn void unload_automation_event_list(AutomationEventList *list) @cname("UnloadAutomationEventList");
+extern fn bool export_automation_event_list(AutomationEventList list, char *fileName) @cname("ExportAutomationEventList");
+extern fn void set_automation_event_list(AutomationEventList *list) @cname("SetAutomationEventList");
+extern fn void set_automation_event_base_frame(int frame) @cname("SetAutomationEventBaseFrame");
+extern fn void start_automation_event_recording() @cname("StartAutomationEventRecording");
+extern fn void stop_automation_event_recording() @cname("StopAutomationEventRecording");
+extern fn void play_automation_event(AutomationEvent event) @cname("PlayAutomationEvent");
+
+extern fn bool is_key_pressed(int key) @cname("IsKeyPressed");
+extern fn bool is_key_pressed_repeat(int key) @cname("IsKeyPressedRepeat");
+extern fn bool is_key_down(int key) @cname("IsKeyDown");
+extern fn bool is_key_released(int key) @cname("IsKeyReleased");
+extern fn bool is_key_up(int key) @cname("IsKeyUp");
+extern fn int get_key_pressed() @cname("GetKeyPressed");
+extern fn int get_char_pressed() @cname("GetCharPressed");
+extern fn void set_exit_key(int key) @cname("SetExitKey");
+
+extern fn bool is_gamepad_available(int gamepad) @cname("IsGamepadAvailable");
+extern fn char *get_gamepad_name(int gamepad) @cname("GetGamepadName");
+extern fn bool is_gamepad_button_pressed(int gamepad, int button) @cname("IsGamepadButtonPressed");
+extern fn bool is_gamepad_button_down(int gamepad, int button) @cname("IsGamepadButtonDown");
+extern fn bool is_gamepad_button_released(int gamepad, int button) @cname("IsGamepadButtonReleased");
+extern fn bool is_gamepad_button_up(int gamepad, int button) @cname("IsGamepadButtonUp");
+extern fn int get_gamepad_button_pressed() @cname("GetGamepadButtonPressed");
+extern fn int get_gamepad_axis_count(int gamepad) @cname("GetGamepadAxisCount");
+extern fn float get_gamepad_axis_movement(int gamepad, int axis) @cname("GetGamepadAxisMovement");
+extern fn int set_gamepad_mappings(char *mappings) @cname("SetGamepadMappings");
+
+extern fn bool is_mouse_button_pressed(int button) @cname("IsMouseButtonPressed");
+extern fn bool is_mouse_button_down(int button) @cname("IsMouseButtonDown");
+extern fn bool is_mouse_button_released(int button) @cname("IsMouseButtonReleased");
+extern fn bool is_mouse_button_up(int button) @cname("IsMouseButtonUp");
+extern fn int get_mouse_x() @cname("GetMouseX");
+extern fn int get_mouse_y() @cname("GetMouseY");
+extern fn Vector2 get_mouse_position() @cname("GetMousePosition");
+extern fn Vector2 get_mouse_delta() @cname("GetMouseDelta");
+extern fn void set_mouse_position(int x, int y) @cname("SetMousePosition");
+extern fn void set_mouse_offset(int offsetX, int offsetY) @cname("SetMouseOffset");
+extern fn void set_mouse_scale(float scaleX, float scaleY) @cname("SetMouseScale");
+extern fn float get_mouse_wheel_move() @cname("GetMouseWheelMove");
+extern fn Vector2 get_mouse_wheel_move_v() @cname("GetMouseWheelMoveV");
+extern fn void set_mouse_cursor(int cursor) @cname("SetMouseCursor");
+
+extern fn int get_touch_x() @cname("GetTouchX");
+extern fn int get_touch_y() @cname("GetTouchY");
+extern fn Vector2 get_touch_position(int index) @cname("GetTouchPosition");
+extern fn int get_touch_point_id(int index) @cname("GetTouchPointId");
+extern fn int get_touch_point_count() @cname("GetTouchPointCount");
+
+extern fn void set_gestures_enabled(uint flags) @cname("SetGesturesEnabled");
+extern fn bool is_gesture_detected(uint gesture) @cname("IsGestureDetected");
+extern fn int get_gesture_detected() @cname("GetGestureDetected");
+extern fn float get_gesture_hold_duration() @cname("GetGestureHoldDuration");
+extern fn Vector2 get_gesture_drag_vector() @cname("GetGestureDragVector");
+extern fn float get_gesture_drag_angle() @cname("GetGestureDragAngle");
+extern fn Vector2 get_gesture_pinch_vector() @cname("GetGesturePinchVector");
+extern fn float get_gesture_pinch_angle() @cname("GetGesturePinchAngle");
+
+extern fn void update_camera(Camera *camera, int mode) @cname("UpdateCamera");
+extern fn void update_camera_pro(Camera *camera, Vector3 movement, Vector3 rotation, float zoom) @cname("UpdateCameraPro");
+
+extern fn void set_shapes_texture(Texture2D texture, Rectangle source) @cname("SetShapesTexture");
+
+extern fn void draw_pixel(int posX, int posY, Color color) @cname("DrawPixel");
+extern fn void draw_pixel_v(Vector2 position, Color color) @cname("DrawPixelV");
+extern fn void draw_line(int startPosX, int startPosY, int endPosX, int endPosY, Color color) @cname("DrawLine");
+extern fn void draw_line_v(Vector2 startPos, Vector2 endPos, Color color) @cname("DrawLineV");
+extern fn void draw_line_ex(Vector2 startPos, Vector2 endPos, float thick, Color color) @cname("DrawLineEx");
+extern fn void draw_line_strip(Vector2 *points, int pointCount, Color color) @cname("DrawLineStrip");
+extern fn void draw_line_bezier(Vector2 startPos, Vector2 endPos, float thick, Color color) @cname("DrawLineBezier");
+extern fn void draw_circle(int centerX, int centerY, float radius, Color color) @cname("DrawCircle");
+extern fn void draw_circle_sector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color) @cname("DrawCircleSector");
+extern fn void draw_circle_sector_lines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color) @cname("DrawCircleSectorLines");
+extern fn void draw_circle_gradient(int centerX, int centerY, float radius, Color color1, Color color2) @cname("DrawCircleGradient");
+extern fn void draw_circle_v(Vector2 center, float radius, Color color) @cname("DrawCircleV");
+extern fn void draw_circle_lines(int centerX, int centerY, float radius, Color color) @cname("DrawCircleLines");
+extern fn void draw_circle_lines_v(Vector2 center, float radius, Color color) @cname("DrawCirclesLinesV");
+extern fn void draw_ellipse(int centerX, int centerY, float radiusH, float radiusV, Color color) @cname("DrawEllipse");
+extern fn void draw_ellipse_lines(int centerX, int centerY, float radiusH, float radiusV, Color color) @cname("DrawEllipseLines");
+extern fn void draw_ring(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color) @cname("DrawRing");
+extern fn void draw_ring_lines(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color) @cname("DrawRingLines");
+extern fn void draw_rectangle(int posX, int posY, int width, int height, Color color) @cname("DrawRectangle");
+extern fn void draw_rectangle_v(Vector2 position, Vector2 size, Color color) @cname("DrawRectangleV");
+extern fn void draw_rectangle_rec(Rectangle rec, Color color) @cname("DrawRectangleRec");
+extern fn void draw_rectangle_pro(Rectangle rec, Vector2 origin, float rotation, Color color) @cname("DrawRectanglePro");
+extern fn void draw_rectangle_gradient_v(int posX, int posY, int width, int height, Color color1, Color color2) @cname("DrawRectangleGradientV");
+extern fn void draw_rectangle_gradient_h(int posX, int posY, int width, int height, Color color1, Color color2) @cname("DrawRectangleGradientH");
+extern fn void draw_rectangle_gradient_ex(Rectangle rec, Color col1, Color col2, Color col3, Color col4) @cname("DrawRectangleGradientEx");
+extern fn void draw_rectangle_lines(int posX, int posY, int width, int height, Color color) @cname("DrawRectangleLines");
+extern fn void draw_rectangle_lines_ex(Rectangle rec, float lineThick, Color color) @cname("DrawRectangleLinesEx");
+extern fn void draw_rectangle_rounded(Rectangle rec, float roundness, int segments, Color color) @cname("DrawRectangleRounded");
+extern fn void draw_rectangle_rounded_lines(Rectangle rec, float roundness, int segments, float lineThick, Color color) @cname("DrawRectangleRoundedLines");
+extern fn void draw_triangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color) @cname("DrawTriangle");
+extern fn void draw_triangle_lines(Vector2 v1, Vector2 v2, Vector2 v3, Color color) @cname("DrawTriangleLines");
+extern fn void draw_triangle_fan(Vector2 *points, int pointCount, Color color) @cname("DrawTriangleFan");
+extern fn void draw_triangle_strip(Vector2 *points, int pointCount, Color color) @cname("DrawTriangleStrip");
+extern fn void draw_poly(Vector2 center, int sides, float radius, float rotation, Color color) @cname("DrawPoly");
+extern fn void draw_poly_lines(Vector2 center, int sides, float radius, float rotation, Color color) @cname("DrawPolyLines");
+extern fn void draw_poly_lines_ex(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color) @cname("DrawPolyLinesEx");
+
+extern fn void draw_spline_linear(Vector2 *points, int pointCount, float thick, Color color) @cname("DrawSplineLinear");
+extern fn void draw_spline_basis(Vector2 *points, int pointCount, float thick, Color color) @cname("DrawSplineBasis");
+extern fn void draw_spline_catmull_rom(Vector2 *points, int pointCount, float thick, Color color) @cname("DrawSplineCatmullRom");
+extern fn void draw_spline_bezier_quadratic(Vector2 *points, int pointCount, float thick, Color color) @cname("DrawSplineBezierQuadratic");
+extern fn void draw_spline_bezier_cubic(Vector2 *points, int pointCount, float thick, Color color) @cname("DrawSplineBezierCubic");
+extern fn void draw_spline_segment_linear(Vector2 p1, Vector2 p2, float thick, Color color) @cname("DrawSplineSegmentLinear");
+extern fn void draw_spline_segment_basis(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color) @cname("DrawSplineSegmentBasis");
+extern fn void draw_spline_segment_catmull_rom(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color) @cname("DrawSplineSegmentCatmullRom");
+extern fn void draw_spline_segment_bezier_quadratic(Vector2 p1, Vector2 c2, Vector2 p3, float thick, Color color) @cname("DrawSplineSegmentBezierQuadratic");
+extern fn void draw_spline_segment_bezier_cubic(Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float thick, Color color) @cname("DrawSplineSegmentBezierCubic");
+
+extern fn Vector2 get_spline_point_linear(Vector2 startPos, Vector2 endPos, float t) @cname("GetSplinePointLinear");
+extern fn Vector2 get_spline_point_basis(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t) @cname("GetSplinePointBasis");
+extern fn Vector2 get_spline_point_catmull_rom(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t) @cname("GetSplinePointCatmullRom");
+extern fn Vector2 get_spline_point_bezier_quad(Vector2 p1, Vector2 c2, Vector2 p3, float t) @cname("GetSplinePointBezierQuad");
+extern fn Vector2 get_spline_point_bezier_cubic(Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float t) @cname("GetSplinePointBezierCubic");
+
+extern fn bool check_collision_recs(Rectangle rec1, Rectangle rec2) @cname("CheckCollisionRecs");
+extern fn bool check_collision_circles(Vector2 center1, float radius1, Vector2 center2, float radius2) @cname("CheckCollisionCircles");
+extern fn bool check_collision_circle_rec(Vector2 center, float radius, Rectangle rec) @cname("CheckCollisionCircleRec");
+extern fn bool check_collision_point_rec(Vector2 point, Rectangle rec) @cname("CheckCollisionPointRec");
+extern fn bool check_collision_point_circle(Vector2 point, Vector2 center, float radius) @cname("CheckCollisionPointCircle");
+extern fn bool check_collision_point_triangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3) @cname("CheckCollisionPointTriangle");
+extern fn bool check_collision_point_poly(Vector2 point, Vector2 *points, int pointCount) @cname("CheckCollisionPointPoly");
+extern fn bool check_collision_lines(Vector2 startPos1, Vector2 endPos1, Vector2 startPos2, Vector2 endPos2, Vector2 *collisionPoint) @cname("CheckCollisionLines");
+extern fn bool check_collision_point_line(Vector2 point, Vector2 p1, Vector2 p2, int threshold) @cname("CheckCollisionPointLine");
+extern fn Rectangle get_collision_rec(Rectangle rec1, Rectangle rec2) @cname("GetCollisionRec");
+
+extern fn Image load_image(char *fileName) @cname("LoadImage");
+extern fn Image load_image_raw(char *fileName, int width, int height, int format, int headerSize) @cname("LoadImageRaw");
+extern fn Image load_image_svg(char *fileNameOrString, int width, int height) @cname("LoadImageSvg");
+extern fn Image load_image_anim(char *fileName, int *frames) @cname("LoadImageAnim");
+extern fn Image load_image_from_memory(char *fileType, char *fileData, int dataSize) @cname("LoadImageFromMemory");
+extern fn Image load_image_from_texture(Texture2D texture) @cname("LoadImageFromTexture");
+extern fn Image load_image_from_screen() @cname("LoadImageFromScreen");
+extern fn bool is_image_ready(Image image) @cname("IsImageReady");
+extern fn void unload_image(Image image) @cname("UnloadImage");
+extern fn bool export_image(Image image, char *fileName) @cname("ExportImage");
+extern fn char *export_image_to_memory(Image image, char *fileType, int *fileSize) @cname("ExportImageToMemory");
+extern fn bool export_image_as_code(Image image, char *fileName) @cname("ExportImageAsCode");
+
+extern fn Image gen_image_color(int width, int height, Color color) @cname("GenImageColor");
+extern fn Image gen_image_gradient_linear(int width, int height, int direction, Color start, Color end) @cname("GenImageGradientLinear");
+extern fn Image gen_image_gradient_radial(int width, int height, float density, Color inner, Color outer) @cname("GenImageGradientRadial");
+extern fn Image gen_image_gradient_square(int width, int height, float density, Color inner, Color outer) @cname("GenImageGradientSquare");
+extern fn Image gen_image_checked(int width, int height, int checksX, int checksY, Color col1, Color col2) @cname("GenImageChecked");
+extern fn Image gen_image_white_noise(int width, int height, float factor) @cname("GenImageWhiteNoise");
+extern fn Image gen_image_perlin_noise(int width, int height, int offsetX, int offsetY, float scale) @cname("GenImagePerlinNoise");
+extern fn Image gen_image_cellular(int width, int height, int tileSize) @cname("GenImageCellular");
+extern fn Image gen_image_text(int width, int height, char *text) @cname("GenImageText");
+
+extern fn Image image_copy(Image image) @cname("ImageCopy");
+extern fn Image image_from_image(Image image, Rectangle rec) @cname("ImageFromImage");
+extern fn Image image_text(char *text, int fontSize, Color color) @cname("ImageText");
+extern fn Image image_text_ex(Font font, char *text, float fontSize, float spacing, Color tint) @cname("ImageTextEx");
+extern fn void image_format(Image *image, int newFormat) @cname("ImageFormat");
+extern fn void image_to_pot(Image *image, Color fill) @cname("ImageToPot");
+extern fn void image_crop(Image *image, Rectangle crop) @cname("ImageCrop");
+extern fn void image_alpha_crop(Image *image, float threshold) @cname("ImageAlphaCrop");
+extern fn void image_alpha_clear(Image *image, Color color, float threshold) @cname("ImageAlphaClear");
+extern fn void image_alpha_mask(Image *image, Image alphaMask) @cname("ImageAlphaMask");
+extern fn void image_alpha_premultiply(Image *image) @cname("ImageAlphaPremultiply");
+extern fn void image_blur_guassian(Image *image, int blurSize) @cname("ImageBlueGuassian");
+extern fn void image_resize(Image *image, int newWidth, int newHeight) @cname("ImageResize");
+extern fn void image_resize_nn(Image *image, int newWidth,int newHeight) @cname("ImageResizeNN");
+extern fn void image_resize_canvas(Image *image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill) @cname("ImageResizeCanvas");
+extern fn void image_mipmaps(Image *image) @cname("ImageMipmaps");
+extern fn void image_dither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp) @cname("ImageDither");
+extern fn void image_flip_vertical(Image *image) @cname("ImageFlipVertical");
+extern fn void image_flip_horizontal(Image *image) @cname("ImageFlipHorizontal");
+extern fn void image_rotate(Image *image, int degrees) @cname("ImageRotate");
+extern fn void image_rotate_cw(Image *image) @cname("ImageRotateCW");
+extern fn void image_rotate_ccw(Image *image) @cname("ImageRotateCCW");
+extern fn void image_color_tint(Image *image, Color color) @cname("ImageColorTint");
+extern fn void image_color_invert(Image *image) @cname("ImageColorInvert");
+extern fn void image_color_grayscale(Image *image) @cname("ImageColorGrayscale");
+extern fn void image_color_contrast(Image *image, float contrast) @cname("ImageColorContrast");
+extern fn void image_color_brightness(Image *image, int brightness) @cname("ImageColorBrightness");
+extern fn void image_color_replace(Image *image, Color color, Color replace) @cname("ImageColorReplace");
+extern fn Color *load_image_colors(Image image) @cname("LoadImageColors");
+extern fn Color *load_image_palette(Image image, int maxPaletteSize, int *colorCount) @cname("LoadImagePalette");
+extern fn void unload_image_colors(Color *colors) @cname("UnloadImageColors");
+extern fn void unload_image_palette(Color *colors) @cname("UnloadImagePalette");
+extern fn Rectangle get_image_alpha_border(Image image, float threshold) @cname("GetImageAlphaBorder");
+extern fn Color get_image_color(Image image, int x, int y) @cname("GetImageColor");
+
+extern fn void image_clear_background(Image *dst, Color color) @cname("ImageClearBackground");
+extern fn void image_draw_pixel(Image *dst, int posX, int posY, Color color) @cname("ImageDrawPixel");
+extern fn void image_draw_pixel_v(Image *dst, Vector2 position, Color color) @cname("ImageDrawPixelV");
+extern fn void image_draw_line(Image *dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color) @cname("ImageDrawLine");
+extern fn void image_draw_line_v(Image *dst, Vector2 start, Vector2 end, Color color) @cname("ImageDrawLineV");
+extern fn void image_draw_circle(Image *dst, int centerX, int centerY, int radius, Color color) @cname("ImageDrawCircle");
+extern fn void image_draw_circle_v(Image *dst, Vector2 center, int radius, Color color) @cname("ImageDrawCircleV");
+extern fn void image_draw_circle_lines(Image *dst, int centerX, int centerY, int radius, Color color) @cname("ImageDrawCircleLines");
+extern fn void image_draw_circle_lines_v(Image *dst, Vector2 center, int radius, Color color) @cname("ImageDrawCircleLinesV");
+extern fn void image_draw_rectangle(Image *dst, int posX, int posY, int width, int height, Color color) @cname("ImageDrawRectangle");
+extern fn void image_draw_rectangle_v(Image *dst, Vector2 position, Vector2 size, Color color) @cname("ImageDrawRectangleV");
+extern fn void image_draw_rectangle_rec(Image *dst, Rectangle rec, Color color) @cname("ImageDrawRectangleRec");
+extern fn void image_draw_rectangle_lines(Image *dst, Rectangle rec, int thick, Color color) @cname("ImageDrawRectangeLines");
+extern fn void image_draw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint) @cname("ImageDraw");
+extern fn void image_draw_text(Image *dst, char *text, int posX, int posY, int fontSize, Color color) @cname("ImageDrawText");
+extern fn void image_draw_text_ex(Image *dst, Font font, char *text, Vector2 position, float fontSize, float spacing, Color tint) @cname("ImageDrawTextEx");
+
+extern fn Texture2D load_texture(char *fileName) @cname("LoadTexture");
+extern fn Texture2D load_texture_from_image(Image image) @cname("LoadTextureFromImage");
+extern fn TextureCubemap load_texture_cubemap(Image image, int layout) @cname("LoadTextureCubemap");
+extern fn RenderTexture2D load_render_texture(int width, int height) @cname("LoadRenderTexture");
+extern fn bool is_texture_ready(Texture2D texture) @cname("IsTextureReady");
+extern fn void unload_texture(Texture2D texture) @cname("UnloadTexture");
+extern fn bool is_render_texture_ready(RenderTexture2D target) @cname("IsRenderTextureReady");
+extern fn void unload_render_texture(RenderTexture2D target) @cname("UploadRenderTexture");
+extern fn void update_texture(Texture2D texture, void *pixels) @cname("UpdateTexture");
+extern fn void update_texture_rec(Texture2D texture, Rectangle rec, void *pixels) @cname("UpdateTextureRec");
+
+extern fn void gen_texture_mipmaps(Texture2D *texture) @cname("GenTextureMipmaps");
+extern fn void set_texture_filter(Texture2D texture, int filter) @cname("SetTextureFilter");
+extern fn void set_texture_wrap(Texture2D texture, int wrap) @cname("SetTextureWrap");
+
+extern fn void draw_texture(Texture2D texture, int posX, int posY, Color tint) @cname("DrawTexture");
+extern fn void draw_texture_v(Texture2D texture, Vector2 position, Color tint) @cname("DrawTextureV");
+extern fn void draw_texture_ex(Texture2D texture, Vector2 position, float rotation, float scale, Color tint) @cname("DrawTextureEx");
+extern fn void draw_texture_rec(Texture2D texture, Rectangle source, Vector2 position, Color tint) @cname("DrawTextureRec");
+extern fn void draw_texture_pro(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint) @cname("DrawTexturePro");
+extern fn void draw_texture_n_patch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint) @cname("DrawTextureNPatch");
+
+extern fn Color fade(Color color, float alpha) @cname("Fade");
+extern fn int color_to_int(Color color) @cname("ColorToInt");
+extern fn Vector4 color_normalize(Color color) @cname("ColorToNormalize");
+extern fn Color color_from_normalized(Vector4 normalized) @cname("ColorFromNormalized");
+extern fn Vector3 color_to_hsv(Color color) @cname("ColorToHSV");
+extern fn Color color_from_hsv(float hue, float saturation, float value) @cname("ColorFromHSV");
+extern fn Color color_tint(Color color, Color tint) @cname("ColorTint");
+extern fn Color color_brightness(Color color, float factor) @cname("ColorBrightness");
+extern fn Color color_contrast(Color color, float contrast) @cname("ColorContrast");
+extern fn Color color_alpha(Color color, float alpha) @cname("ColorAlpha");
+extern fn Color color_alpha_blend(Color dst, Color src, Color tint) @cname("ColorAlphaBlend");
+extern fn Color get_color(uint hexValue) @cname("GetColor");
+extern fn Color get_pixel_color(void *srcPtr, int format) @cname("GetPixelColor");
+extern fn void set_pixel_color(void *dstPtr, Color color, int format) @cname("SetPixelColor");
+extern fn int get_pixel_data_size(int width, int height, int format) @cname("GetPixelDataSize");
+
+extern fn Font get_font_default() @cname("GetFontDefault");
+extern fn Font load_font(char *fileName) @cname("LoadFont");
+extern fn Font load_font_ex(char *fileName, int fontSize, int *codepoints, int codepointCount) @cname("LoadFontEx");
+extern fn Font load_font_from_image(Image image, Color key, int firstChar) @cname("LoadFontFromImage");
+extern fn Font load_font_from_memory(char *fileType, char *fileData, int dataSize, int fontSize, int *codepoints, int codepointCount) @cname("LoadFontFromMemory");
+extern fn bool is_font_ready(Font font) @cname("IsFontReady");
+extern fn GlyphInfo *load_font_data(char *fileData, int dataSize, int fontSize, int *codepoints, int codepointCount, int type) @cname("LoadFontData");
+extern fn Image gen_image_from_atlas(GlyphInfo *glyphs, Rectangle **glyphRecs, int glyphCount, int fontSize, int padding, int packMethod) @cname("GenImageFromAtlas");
+extern fn void unload_font_data(GlyphInfo *glyphs, int glyphCount) @cname("UnloadFontData");
+extern fn void unload_font(Font font) @cname("UnloadFont");
+extern fn bool export_font_as_code(Font font, char *fileName) @cname("ExportFontAsCode");
+
+extern fn void draw_fps(int posX, int posY) @cname("DrawFPS");
+extern fn void draw_text(char *text, int posX, int posY, int fontSize, Color color) @cname("DrawText");
+extern fn void draw_text_ex(Font font, char *text, Vector2 position, float fontSize, float spacing, Color tint) @cname("DrawTextEx");
+extern fn void draw_text_pro(Font font, char *text, Vector2 position, Vector2 origin, float rotation, float fontSize, float spacing, Color tint) @cname("DrawTextPro");
+extern fn void draw_text_codepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint) @cname("DrawTextCodepoint");
+extern fn void draw_text_codepoints(Font font, int *codepoints, int codepointCount, Vector2 position, float fontSize, float spacing, Color tint) @cname("DrawTextCodepoints");
+
+extern fn void set_text_line_spacing(int spacing) @cname("SetTextLineSpacing");
+extern fn int measure_text(char *text, int fontSize) @cname("MeasureText");
+extern fn Vector2 measure_text_ex(Font font, char *text, float fontSize, float spacing) @cname("MeasureTextEx");
+extern fn int get_glyph_index(Font font, int codepoint) @cname("GetGlyphIndex");
+extern fn Rectangle get_glyph_atlas_rec(Font font, int codepoint) @cname("GetGlyphAtlasRec");
+extern fn GlyphInfo get_glyph_info(Font font, int codepoint) @cname("GetGlyphInfo");
+
+extern fn char *load_utf8(int *codepoints, int length) @cname("LoadUTF8");
+extern fn void unload_utf8(char *text) @cname("UnloadUTF8");
+extern fn int *load_codepoints(char *text, int *count) @cname("LoadCodepoints");
+extern fn void unload_codepoints(int *codepoints) @cname("UnloadCodepoints");
+extern fn int get_codepoint_count(char *text) @cname("GetCodepointCount");
+extern fn int get_codepoint(char *text, int *codepointSize) @cname("GetCodepoint");
+extern fn int get_codepoint_next(char *text, int *codepointSize) @cname("GetCodepointNext");
+extern fn int get_codepoint_previous(char *text, int *codepointSize) @cname("GetCodepointPrevious");
+extern fn char *codepoint_to_utf8(int codepoint, int *utf8Size) @cname("CodepointToUTF8");
+
+extern fn int text_copy(char *dst, char *src) @cname("TextCopy");
+extern fn bool text_is_equal(char *text1, char *text2) @cname("TextIsEqual");
+extern fn uint text_length(char *text) @cname("TextLength");
+extern fn char *text_format(char *text, ...) @cname("TextFormat");
+extern fn char *text_subtext(char *text, int position, int length) @cname("TextSubtext");
+extern fn char *text_replace(char *text, char *replace, char *by) @cname("TextReplace");
+extern fn char *text_insert(char *text, char *insert, int position) @cname("TextInsert");
+extern fn char *text_join(char **textList, int count, char *delimiter) @cname("TextJoin");
+extern fn char **text_split(char *text, char delimiter, int *count) @cname("TextSplit");
+extern fn void text_append(char *text, char *append, int *position) @cname("TextAppend");
+extern fn int text_find_index(char *text, char *find) @cname("TextFindIndex");
+extern fn char *text_to_upper(char *text) @cname("TextToUpper");
+extern fn char *text_to_lower(char *text) @cname("TextToLower");
+extern fn char *text_to_pascal(char *text) @cname("TextToPascal");
+extern fn int text_to_integer(char *text) @cname("TextToInteger");
+
+extern fn void draw_line_3d(Vector3 startPos, Vector3 endPos, Color color) @cname("DrawLine3D");
+extern fn void draw_point_3d(Vector3 position, Color color) @cname("DrawPoint3D");
+extern fn void draw_circle_3d(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color) @cname("DrawCircle3D");
+extern fn void draw_triangle_3d(Vector3 v1, Vector3 v2, Vector3 v3, Color color) @cname("DrawTriangle3D");
+extern fn void draw_triangle_strip_3d(Vector3 *points, int pointCount, Color color) @cname("DrawTriangleStrip3D");
+extern fn void draw_cube(Vector3 position, float width, float height, float length, Color color) @cname("DrawCube");
+extern fn void draw_cube_v(Vector3 position, Vector3 size, Color color) @cname("DrawCubeV");
+extern fn void draw_cube_wires(Vector3 position, float width, float height, float length, Color color) @cname("DrawCubeWires");
+extern fn void draw_cube_wires_v(Vector3 position, Vector3 size, Color color) @cname("DrawCubeWiresV");
+extern fn void draw_sphere(Vector3 centerPos, float radius, Color color) @cname("DrawSphere");
+extern fn void draw_sphere_ex(Vector3 centerPos, float radius, int rings, int slices, Color color) @cname("DrawSphereEx");
+extern fn void draw_sphere_wires(Vector3 centerPos, float radius, int rings, int slices, Color color) @cname("DrawSphereWires");
+extern fn void draw_cylinder(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color) @cname("DrawCylinder");
+extern fn void draw_cylinder_ex(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color) @cname("DrawCylinderEx");
+extern fn void draw_cylinder_wires(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color) @cname("DrawCylinderWires");
+extern fn void draw_cylinders_wires_ex(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color) @cname("DrawCylinderWiresEx");
+extern fn void draw_capsule(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color) @cname("DrawCapsule");
+extern fn void draw_capsule_wires(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color) @cname("DrawCapsuleWires");
+extern fn void draw_plane(Vector3 centerPos, Vector2 size, Color color) @cname("DrawPlane");
+extern fn void draw_ray(Ray ray, Color color) @cname("DrawRay");
+extern fn void draw_grid(int slices, float spacing) @cname("DrawGrid");
+
+extern fn Model load_model(char *fileName) @cname("LoadModel");
+extern fn Model load_model_from_mesh(Mesh mesh) @cname("LoadModelFromMesh");
+extern fn bool is_model_ready(Model model) @cname("IsModelReady");
+extern fn void unload_model(Model model) @cname("UnloadModel");
+extern fn BoundingBox get_model_bounding_box(Model model) @cname("GetModelBoundingBox");
+
+extern fn void draw_model(Model model, Vector3 position, float scale, Color tint) @cname("DrawModel");
+extern fn void draw_model_ex(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint) @cname("DrawModelEx");
+extern fn void draw_model_wires(Model model, Vector3 position, float scale, Color tint) @cname("DrawModelWires");
+extern fn void draw_model_wires_ex(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint) @cname("DrawModelWiresEx");
+extern fn void draw_bounding_box(BoundingBox box, Color color) @cname("DrawBoundingBox");
+extern fn void draw_billboard(Camera camera, Texture2D texture, Vector3 position, float size, Color tint) @cname("DrawBillboard");
+extern fn void draw_billboard_rec(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint) @cname("DrawBillboardRec");
+extern fn void draw_billboard_pro(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector3 up, Vector2 size, Vector2 origin, float rotation, Color tint) @cname("DrawBillboardRec");
+
+extern fn void upload_mesh(Mesh *mesh, bool dynamic) @cname("UploadMesh");
+extern fn void update_mesh_buffer(Mesh mesh, int index, void *data, int dataSize, int offset) @cname("UpdateMeshBuffer");
+extern fn void unload_mesh(Mesh mesh) @cname("UnloadMesh");
+extern fn void draw_mesh(Mesh mesh, Material material, Matrix transform) @cname("DrawMesh");
+extern fn void draw_mesh_instanced(Mesh mesh, Material material, Matrix *transforms, int instances) @cname("DrawMeshInstanced");
+extern fn bool export_mesh(Mesh mesh, char *fileName) @cname("ExportMesh");
+extern fn BoundingBox get_mesh_bounding_box(Mesh mesh) @cname("GetMeshBoundingBox");
+extern fn void get_mesh_tangents(Mesh *mesh) @cname("GetMeshTangents");
+
+extern fn Mesh gen_mesh_poly(int sides, float radius) @cname("GenMeshPoly");
+extern fn Mesh gen_mesh_plane(float width, float length, int resX, int resZ) @cname("GenMeshPlane");
+extern fn Mesh gen_mesh_cube(float width, float height, float length) @cname("GenMeshCube");
+extern fn Mesh gen_mesh_sphere(float radius, int rings, int slices) @cname("GenMeshSphere");
+extern fn Mesh gen_mesh_hemisphere(float radius, int rings, int slices) @cname("GenMeshHemisphere");
+extern fn Mesh gen_mesh_cylinder(float radius, float height, int slices) @cname("GenMeshCylinder");
+extern fn Mesh gen_mesh_cone(float radius, float height, int slices) @cname("GenMeshCone");
+extern fn Mesh gen_mesh_torus(float radius, float size, int radSeg, int sides) @cname("GenMeshTorus");
+extern fn Mesh gen_mesh_knot(float radius, float size, int radSeg, int sides) @cname("GenMeshKnot");
+extern fn Mesh gen_mesh_heightmap(Image heightmap, Vector3 size) @cname("GenMeshHeightmap");
+extern fn Mesh gen_mesh_cubicmap(Image cubicmap, Vector3 cubeSize) @cname("GenMeshCubicmap");
+
+extern fn Material *load_materials(char *fileName, int *materialCount) @cname("LoadMaterials");
+extern fn Material load_material_default() @cname("LoadMaterialDefault");
+extern fn bool is_material_ready(Material material) @cname("IsMaterialReady");
+extern fn void unload_material(Material material) @cname("UnloadMaterial");
+extern fn void set_material_texture(Material *material, int mapType, Texture2D texture) @cname("SetMaterialTexture");
+extern fn void set_model_mesh_material(Model *model, int meshId, int materialId) @cname("SetModelMeshMaterial");
+
+extern fn ModelAnimation *load_model_animations(char *fileName, int *animCount) @cname("LoadModelAnimations");
+extern fn void update_model_animation(Model model, ModelAnimation anim, int frame) @cname("UpdateModelAnimation");
+extern fn void unload_model_animation(ModelAnimation anim) @cname("UnloadModelAnimation");
+extern fn void unload_model_animations(ModelAnimation *animations, int animCount) @cname("UnloadModelAnimations");
+extern fn bool is_model_animaton_valid(Model model, ModelAnimation anim) @cname("IsModelAnimationValid");
+
+extern fn bool check_collision_spheres(Vector3 center1, float radius1, Vector3 center2, float radius2) @cname("CheckCollisionSpheres");
+extern fn bool check_collision_boxes(BoundingBox box1, BoundingBox box2) @cname("CheckCollisionBoxes");
+extern fn bool check_collision_box_sphere(BoundingBox box, Vector3 center, float radius) @cname("CheckCollisionBoxSphere");
+extern fn RayCollision get_ray_collision_sphere(Ray ray, Vector3 center, float radius) @cname("GetRayCollisionSphere");
+extern fn RayCollision get_ray_collision_box(Ray ray, BoundingBox box) @cname("GetRayCollisionBox");
+extern fn RayCollision get_ray_collision_mesh(Ray ray, Mesh mesh, Matrix transform) @cname("GetRayCollisionMesh");
+extern fn RayCollision get_ray_collision_triangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3) @cname("GetRayCollisionTriangle");
+extern fn RayCollision get_ray_collision_quad(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3, Vector3 p4) @cname("GetRayCollisionQuad");
+
+extern fn void init_audio_device() @cname("InitAudioDevice");
+extern fn void close_audio_device() @cname("CloseAudioDevice");
+extern fn bool is_audio_device_ready() @cname("IsAudioDeviceReady");
+extern fn void set_master_volume(float volume) @cname("SetMasterVolume");
+extern fn float get_master_volume() @cname("GetMasterVolume");
+
+extern fn Wave load_wave(char *fileName) @cname("LoadWave");
+extern fn Wave load_wave_from_memory(char *fileType, char *fileData, int dataSize) @cname("LoadWaveFromMemory");
+extern fn bool is_wave_ready(Wave wave) @cname("IsWaveReady");
+extern fn Sound load_sound(char *fileName) @cname("LoadSound");
+extern fn Sound load_sound_from_wave(Wave wave) @cname("LoadSoundFromWave");
+extern fn Sound load_sound_alias(Sound source) @cname("LoadSoundAlias");
+extern fn bool is_sound_ready(Sound sound) @cname("IsSoundReady");
+extern fn void update_sound(Sound sound, void *data, int sampleCount) @cname("UpdateSound");
+extern fn void unload_wave(Wave wave) @cname("UnloadWave");
+extern fn void unload_sound(Sound sound) @cname("UnloadSound");
+extern fn void unload_sound_alias(Sound sound_alias) @cname("UnloadSoundAlias");
+extern fn bool export_wave(Wave wave, char *fileName) @cname("ExportWave");
+extern fn bool export_wave_as_code(Wave wave, char *fileName) @cname("ExportWaveAsCode");
+
+extern fn void play_sound(Sound sound) @cname("PlaySound");
+extern fn void stop_sound(Sound sound) @cname("StopSound");
+extern fn void pause_sound(Sound sound) @cname("PauseSound");
+extern fn void resume_sound(Sound sound) @cname("ResumeSound");
+extern fn bool is_sound_playing(Sound sound) @cname("IsSoundPlaying");
+extern fn void set_sound_volume(Sound sound, float volume) @cname("SetSoundVolume");
+extern fn void set_sound_pitch(Sound sound, float pitch) @cname("SetSoundPitch");
+extern fn void set_sound_pan(Sound sound, float pan) @cname("SetSoundPan");
+extern fn Wave wave_copy(Wave wave) @cname("WaveCopy");
+extern fn void wave_crop(Wave *wave, int initSample, int finalSample) @cname("WaveCrop");
+extern fn void wave_format(Wave *wave, int sampleRate, int sampleSize, int channels) @cname("WaveFormat");
+extern fn float *load_wave_samples(Wave wave) @cname("LoadWaveSamples");
+extern fn void unload_wave_samples(float *samples) @cname("UnloadWaveSamples");
+
+extern fn Music load_music_stream(char *fileName) @cname("LoadMusicStream");
+extern fn Music load_music_stream_from_memory(char *fileType, char *data, int dataSize) @cname("LoadMusicStreamFromMemory");
+extern fn bool is_music_ready(Music music) @cname("IsMusicReady");
+extern fn void unload_music_stream(Music music) @cname("UnloadMusicStream");
+extern fn void play_music_stream(Music music) @cname("PlayMusicStream");
+extern fn bool is_music_stream_playing(Music music) @cname("IsMusicStreamPlaying");
+extern fn void update_music_stream(Music music) @cname("UpdateMusicStream");
+extern fn void stop_music_stream(Music music) @cname("StopMusicStream");
+extern fn void pause_music_stream(Music music) @cname("PauseMusicStream");
+extern fn void resume_music_stream(Music music) @cname("ResumeMusicStream");
+extern fn void seek_music_stream(Music music, float position) @cname("SeekMusicStream");
+extern fn void set_music_volume(Music music, float volume) @cname("SetMusicVolume");
+extern fn void set_music_pitch(Music music, float pitch) @cname("SetMusicPitch");
+extern fn void set_music_pan(Music music, float pan) @cname("SetMusicPan");
+extern fn float get_music_time_length(Music music) @cname("GetMusicTimeLength");
+extern fn float get_music_time_played(Music music) @cname("GetMusicTimePlayed");
+
+extern fn AudioStream load_audio_stream(uint sampleRate, uint sampleSize, uint channels) @cname("LoadAudioStream");
+extern fn bool is_audio_stream_ready(AudioStream stream) @cname("IsAudioStreamReady");
+extern fn void unload_audio_stream(AudioStream stream) @cname("UnloadAudioStream");
+extern fn void update_audio_stream(AudioStream stream, void *data, int frameCount) @cname("UpdateAudioStream");
+extern fn bool is_audio_stream_processed(AudioStream stream) @cname("IsAudioStreamProcessed");
+extern fn void play_audio_stream(AudioStream stream) @cname("PlayAudioStream");
+extern fn void pause_audio_stream(AudioStream stream) @cname("PauseAudioStream");
+extern fn void resume_audio_stream(AudioStream stream) @cname("ResumeAudioStream");
+extern fn bool is_audio_stream_playing(AudioStream stream) @cname("IsAudioStreamPlaying");
+extern fn void stop_audio_stream(AudioStream stream) @cname("StopAudioStream");
+extern fn void set_audio_stream_volume(AudioStream stream, float volume) @cname("SetAudioStreamVolume");
+extern fn void set_audio_stream_pitch(AudioStream stream, float pitch) @cname("SetAudioStreamPitch");
+extern fn void set_audio_stream_pan(AudioStream stream, float pan) @cname("SetAudioStreamPan");
+extern fn void set_audio_stream_buffer_size_default(int size) @cname("SetAudioStreamBufferSizeDefault");
+extern fn void set_audio_stream_callback(AudioStream stream, AudioCallback callback) @cname("SetAudioStreamCallback");
+
+extern fn void attach_audio_stream_processor(AudioStream stream, AudioCallback processor) @cname("AttachAudioStreamProcessor");
+extern fn void detach_audio_stream_processor(AudioStream stream, AudioCallback processor) @cname("DetachAudioStreamProcessor");
+
+extern fn void attach_audio_mixer_processor(AudioCallback processor) @cname("AttachAudioMixerProcessor");
+extern fn void detach_audio_mixer_processor(AudioCallback processor) @cname("DetachAudioMixerProcessor");