diff options
| -rw-r--r-- | flake.nix | 2 | ||||
| -rw-r--r-- | main.c3 | 12 | ||||
| -rw-r--r-- | project.json | 9 | ||||
| -rw-r--r-- | raylib.c3 | 1224 |
4 files changed, 1238 insertions, 9 deletions
@@ -7,7 +7,6 @@ inputs.nixpkgs.follows = "nixpkgs"; }; }; - outputs = { nixpkgs, c3c, @@ -24,6 +23,7 @@ src = ./.; buildInputs = [ pkgs.c3c + pkgs.raylib ]; buildPhase = '' c3c build @@ -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"); |
