summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandromeda <andromeda@lenovo>2026-04-24 17:47:27 +0200
committerandromeda <andromeda@lenovo>2026-04-24 17:47:27 +0200
commit3adf2a7b49a3a62b4c019b745a6c631a2b518b5e (patch)
tree320e0c5fac59f1e4f168582ac39215cebd6283de
parent3b3cfa6c91f66440a64fdfb26559972a6ab600e4 (diff)
attempt wayland :~
-rw-r--r--flake.nix2
-rw-r--r--main.c3102
-rw-r--r--project.json5
-rw-r--r--raylib.c31224
-rw-r--r--shim.c20
5 files changed, 115 insertions, 1238 deletions
diff --git a/flake.nix b/flake.nix
index c0b1991..df78293 100644
--- a/flake.nix
+++ b/flake.nix
@@ -23,7 +23,7 @@
src = ./.;
buildInputs = [
pkgs.c3c
- pkgs.raylib
+ pkgs.wayland
];
buildPhase = ''
c3c build
diff --git a/main.c3 b/main.c3
index 306d5c4..742616e 100644
--- a/main.c3
+++ b/main.c3
@@ -1,18 +1,98 @@
module c3term;
-import raylib;
import std::io;
+import libc;
-fn int main(String[] args)
+typedef WL_display = void;
+typedef WL_registry = void;
+typedef WL_compositor = void;
+
+extern fn WL_display* wl_display_connect(ZString);
+extern fn WL_display* wl_display_disconnect(WL_display*);
+extern fn CInt wl_display_roundtrip(WL_display*);
+
+extern fn void* wl_registry_bind(WL_registry*, uint, WL_interface*, uint) @cname("_wl_registry_bind");
+extern fn CInt wl_registry_add_listener(WL_registry*, WL_registry_listener*, void*) @cname("_wl_registry_add_listener");
+extern fn WL_registry* wl_display_get_registry(WL_display*) @cname("_wl_display_get_registry");
+
+alias RegistryListenerGlobalCallback = fn void (void*, WL_registry*, uint, ZString, uint);
+alias RegistryListenerGlobalRemoveCallback = fn void (void*, WL_registry*, uint);
+
+struct WL_registry_listener
+{
+ RegistryListenerGlobalCallback global;
+ RegistryListenerGlobalRemoveCallback global_remove;
+}
+
+struct WL_message
+{
+ ZString name;
+ ZString signature;
+ WL_interface** types;
+}
+
+struct WL_interface
+{
+ ZString name;
+ int version;
+ int method_count;
+ WL_message* methods;
+ int event_count;
+ WL_message* events;
+}
+
+void* wl_client_lib;
+WL_interface wl_compositor_interface;
+
+fn void? init()
+{
+ wl_client_lib = libc::dlopen("libwayland-client.so", libc::RTLD_LAZY);
+ wl_compositor_interface = *(WL_interface*)load_symbol("wl_compositor_interface")!;
+}
+
+struct State
{
- raylib::init_window(800, 450, "test window");
- raylib::set_target_fps(60);
- while (!raylib::window_should_close())
+ WL_compositor* compositor;
+}
+
+fn void registry_handle_global(void* data, WL_registry* registry, uint name, ZString nterface, uint version)
+{
+ io::printf("interface: %s\nversion: %d\nname: %d\n", nterface, version, name);
+ State* state = data;
+ if (nterface == wl_compositor_interface.name)
{
- raylib::begin_drawing();
- raylib::clear_background(raylib::RAYWHITE);
- raylib::draw_text("first window", 190, 200, 20, raylib::LIGHTRAY);
- raylib::end_drawing();
+ state.compositor = wl_registry_bind(registry, name, &wl_compositor_interface, 4);
}
- raylib::close_window();
- return 0;
+}
+
+fn void registry_handle_global_remove(void* data, WL_registry* registry, uint name)
+{
+}
+
+
+fn int main(String[] args)
+{
+ init()!!;
+ WL_display* display = wl_display_connect(null);
+ if (!display) {
+ io::printn("failed to connect display");
+ return(1);
+ };
+
+ WL_registry* registry = wl_display_get_registry(display);
+ if (!registry) {
+ io::printn("failed to get registry");
+ return(1);
+ }
+
+ WL_registry_listener registry_listener;
+ registry_listener.global = &registry_handle_global;
+ registry_listener.global_remove = &registry_handle_global_remove;
+
+ wl_registry_add_listener(registry, &registry_listener, null);
+
+ wl_display_roundtrip(display);
+
+ wl_display_disconnect(display);
+ io::printn("disconnected");
+ return(0);
}
diff --git a/project.json b/project.json
index d4c9333..e4bb99e 100644
--- a/project.json
+++ b/project.json
@@ -4,7 +4,8 @@
"authors": [ "Andromeda-fp" ],
"version": "0.1.0",
"sources": [ "**" ],
- "linked-libraries": [ "raylib"],
+ "linked-libraries": [ "wayland-client" ],
+ "c-sources": [ "**" ],
"build-dir": "build",
"output": "build",
"targets": {
@@ -13,5 +14,5 @@
},
},
"cpu": "generic",
- "opt": "O5"
+ "opt": "O0"
}
diff --git a/raylib.c3 b/raylib.c3
deleted file mode 100644
index 2631daa..0000000
--- a/raylib.c3
+++ /dev/null
@@ -1,1224 +0,0 @@
-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");
diff --git a/shim.c b/shim.c
new file mode 100644
index 0000000..56d8064
--- /dev/null
+++ b/shim.c
@@ -0,0 +1,20 @@
+#include "wayland-client.h"
+
+struct wl_registry *
+_wl_display_get_registry(struct wl_display *wl_display)
+{
+ return wl_display_get_registry(wl_display);
+}
+
+int
+_wl_registry_add_listener(struct wl_registry *wl_registry,
+ const struct wl_registry_listener *listener, void *data)
+{
+ return wl_registry_add_listener(wl_registry, listener, data);
+}
+
+void *
+_wl_registry_bind(struct wl_registry *wl_registry, uint32_t name, const struct wl_interface *interface, uint32_t version)
+{
+ return wl_registry_bind(wl_registry, name, interface, version);
+}