diff --git a/.gitmodules b/.gitmodules
index ac57bbc..71c171f 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
[submodule "libs/zgltf"]
path = libs/zgltf
url = https://github.com/kooparse/zgltf.git
+[submodule "libs/raylib/raylib"]
+ path = libs/raylib/raylib
+ url = git@github.com:raysan5/raylib.git
diff --git a/libs/raylib/.gitignore b/libs/raylib/.gitignore
new file mode 100644
index 0000000..5bd9db1
--- /dev/null
+++ b/libs/raylib/.gitignore
@@ -0,0 +1,58 @@
+# Prerequisites
+*.d
+
+# Object files
+*.o
+*.ko
+*.obj
+*.elf
+
+# Linker output
+*.ilk
+*.map
+*.exp
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Libraries
+*.lib
+*.a
+*.la
+*.lo
+
+# Shared objects (inc. Windows DLLs)
+*.dll
+*.so
+*.so.*
+*.dylib
+
+# Executables
+*.exe
+*.out
+*.app
+*.i*86
+*.x86_64
+*.hex
+
+# Debug files
+*.dSYM/
+*.su
+*.idb
+*.pdb
+
+# Kernel Module Compile Results
+*.mod*
+*.cmd
+.tmp_versions/
+modules.order
+Module.symvers
+Mkfile.old
+dkms.conf
+
+zig-cache/
+
+.vscode/settings.json
+
+.DS_Store
diff --git a/libs/raylib/LICENSE b/libs/raylib/LICENSE
new file mode 100644
index 0000000..a3d23c1
--- /dev/null
+++ b/libs/raylib/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Michael Scherbakow
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/libs/raylib/README.md b/libs/raylib/README.md
new file mode 100644
index 0000000..c0c8870
--- /dev/null
+++ b/libs/raylib/README.md
@@ -0,0 +1,116 @@
+
+
+# raylib.zig
+Idiomatic [raylib](https://www.raylib.com/) (5.1-dev) bindings for [Zig](https://ziglang.org/) (master).
+
+[Example Usage](#usage)
+
+Additional infos and WebGL examples [here](https://github.com/ryupold/examples-raylib.zig).
+
+## supported platforms
+- Windows
+- macOS
+- Linux
+- HTML5/WebGL (emscripten)
+
+## supported APIs
+- [x] RLAPI (raylib.h)
+- [x] RLAPI (rlgl.h)
+- [x] RMAPI (raymath.h)
+- [x] Constants
+ - [x] int, float, string
+ - [x] Colors
+ - [x] Versions
+
+For [raygui](https://github.com/raysan5/raygui) bindings see: https://github.com/ryupold/raygui.zig
+
+## usage
+
+The easy way would be adding this as submodule directly in your source folder.
+Thats what I do until there is an official package manager for Zig.
+
+```sh
+cd $YOUR_SRC_FOLDER
+git submodule add https://github.com/ryupold/raylib.zig raylib
+git submodule update --init --recursive
+```
+
+The bindings have been prebuilt so you just need to add raylib as module
+
+build.zig:
+```zig
+const raylib = @import("path/to/raylib.zig/build.zig");
+
+pub fn build(b: *std.Build) !void {
+ const target = b.standardTargetOptions(.{});
+ const mode = b.standardOptimizeOption(.{});
+ const exe = ...;
+ raylib.addTo(b, exe, target, mode, .{});
+}
+```
+
+and import in main.zig:
+```zig
+const raylib = @import("raylib");
+
+pub fn main() void {
+ raylib.SetConfigFlags(raylib.ConfigFlags{ .FLAG_WINDOW_RESIZABLE = true });
+ raylib.InitWindow(800, 800, "hello world!");
+ raylib.SetTargetFPS(60);
+
+ defer raylib.CloseWindow();
+
+ while (!raylib.WindowShouldClose()) {
+ raylib.BeginDrawing();
+ defer raylib.EndDrawing();
+
+ raylib.ClearBackground(raylib.BLACK);
+ raylib.DrawFPS(10, 10);
+
+ raylib.DrawText("hello world!", 100, 100, 20, raylib.YELLOW);
+ }
+}
+```
+
+### WebGL (emscripten) builds
+
+For Webassembly builds see [examples-raylib.zig/build.zig](https://github.com/ryupold/examples-raylib.zig/blob/main/build.zig)
+
+This weird workaround with `marshal.h/marshal.c` I actually had to make for Webassembly builds to work, because passing structs as function parameters or returning them cannot be done on the Zig side somehow. If I try it, I get a runtime error "index out of bounds". This happens only in WebAssembly builds. So `marshal.c` must be compiled with `emcc`. See [build.zig](https://github.com/ryupold/examples-raylib.zig/blob/main/build.zig) in the examples.
+
+## custom definitions
+An easy way to fix binding mistakes is to edit them in `bindings.json` and setting the custom flag to true. This way the binding will not be overriden when calling `zig build intermediate`.
+Additionally you can add custom definitions into `inject.zig, inject.h, inject.c` these files will be prepended accordingly.
+
+## disclaimer
+I have NOT tested most of the generated functions, so there might be bugs. Especially when it comes to pointers as it is not decidable (for the generator) what a pointer to C means. Could be single item, array, sentinel terminated and/or nullable. If you run into crashes using one of the functions or types in `raylib.zig` feel free to [create an issue](https://github.com/ryupold/raylib.zig/issues) and I will look into it.
+
+## memory
+Some of the functions may return pointers to memory allocated within raylib.
+Usually there will be a corresponding Unload/Free function to dispose it. You cannot use a Zig allocator to free that:
+
+```zig
+const data = LoadFileData("test.png");
+defer UnloadFileData(data);
+
+// using data...
+```
+
+## generate bindings
+for current raylib source (submodule)
+
+```sh
+zig build parse # create JSON files with raylib_parser
+zig build intermediate # generate bindings.json (keeps definitions with custom=true)
+zig build bindings # write all intermediate bindings to raylib.zig
+```
+
+For easier diffing and to follow changes to the raylib repository I commit also the generated json files.
+
+## build raylib_parser (executable)
+If you want to build the raylib_parser executable without a C compiler.
+```sh
+zig build raylib_parser
+```
+
+you can then find the executable in `./zig-out/bin/`
diff --git a/libs/raylib/bindings.json b/libs/raylib/bindings.json
new file mode 100644
index 0000000..3b3a395
--- /dev/null
+++ b/libs/raylib/bindings.json
@@ -0,0 +1,17829 @@
+{
+ "functions": [
+ {
+ "name": "InitWindow",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "title",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "void",
+ "description": "Initialize window and OpenGL context",
+ "custom": false
+ },
+ {
+ "name": "CloseWindow",
+ "params": [],
+ "returnType": "void",
+ "description": "Close window and unload OpenGL context",
+ "custom": false
+ },
+ {
+ "name": "WindowShouldClose",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if application should close (KEY_ESCAPE pressed or windows close icon clicked)",
+ "custom": false
+ },
+ {
+ "name": "IsWindowReady",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if window has been initialized successfully",
+ "custom": false
+ },
+ {
+ "name": "IsWindowFullscreen",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if window is currently fullscreen",
+ "custom": false
+ },
+ {
+ "name": "IsWindowHidden",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if window is currently hidden (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "IsWindowMinimized",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if window is currently minimized (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "IsWindowMaximized",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if window is currently maximized (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "IsWindowFocused",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if window is currently focused (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "IsWindowResized",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if window has been resized last frame",
+ "custom": false
+ },
+ {
+ "name": "IsWindowState",
+ "params": [
+ {
+ "name": "flag",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if one specific window flag is enabled",
+ "custom": false
+ },
+ {
+ "name": "SetWindowState",
+ "params": [
+ {
+ "name": "flags",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set window configuration state using flags (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "ClearWindowState",
+ "params": [
+ {
+ "name": "flags",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Clear window configuration state flags",
+ "custom": false
+ },
+ {
+ "name": "ToggleFullscreen",
+ "params": [],
+ "returnType": "void",
+ "description": "Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "ToggleBorderlessWindowed",
+ "params": [],
+ "returnType": "void",
+ "description": "Toggle window state: borderless windowed (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "MaximizeWindow",
+ "params": [],
+ "returnType": "void",
+ "description": "Set window state: maximized, if resizable (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "MinimizeWindow",
+ "params": [],
+ "returnType": "void",
+ "description": "Set window state: minimized, if resizable (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "RestoreWindow",
+ "params": [],
+ "returnType": "void",
+ "description": "Set window state: not minimized/maximized (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "SetWindowIcon",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "SetWindowIcons",
+ "params": [
+ {
+ "name": "images",
+ "typ": "*Image"
+ },
+ {
+ "name": "count",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "SetWindowTitle",
+ "params": [
+ {
+ "name": "title",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set title for window (only PLATFORM_DESKTOP and PLATFORM_WEB)",
+ "custom": false
+ },
+ {
+ "name": "SetWindowPosition",
+ "params": [
+ {
+ "name": "x",
+ "typ": "i32"
+ },
+ {
+ "name": "y",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set window position on screen (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "SetWindowMonitor",
+ "params": [
+ {
+ "name": "monitor",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set monitor for the current window",
+ "custom": false
+ },
+ {
+ "name": "SetWindowMinSize",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)",
+ "custom": false
+ },
+ {
+ "name": "SetWindowMaxSize",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)",
+ "custom": false
+ },
+ {
+ "name": "SetWindowSize",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set window dimensions",
+ "custom": false
+ },
+ {
+ "name": "SetWindowOpacity",
+ "params": [
+ {
+ "name": "opacity",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "SetWindowFocused",
+ "params": [],
+ "returnType": "void",
+ "description": "Set window focused (only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "GetWindowHandle",
+ "params": [],
+ "returnType": "*anyopaque",
+ "description": "Get native window handle",
+ "custom": false
+ },
+ {
+ "name": "GetScreenWidth",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get current screen width",
+ "custom": false
+ },
+ {
+ "name": "GetScreenHeight",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get current screen height",
+ "custom": false
+ },
+ {
+ "name": "GetRenderWidth",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get current render width (it considers HiDPI)",
+ "custom": false
+ },
+ {
+ "name": "GetRenderHeight",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get current render height (it considers HiDPI)",
+ "custom": false
+ },
+ {
+ "name": "GetMonitorCount",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get number of connected monitors",
+ "custom": false
+ },
+ {
+ "name": "GetCurrentMonitor",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get current connected monitor",
+ "custom": false
+ },
+ {
+ "name": "GetMonitorPosition",
+ "params": [
+ {
+ "name": "monitor",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "Get specified monitor position",
+ "custom": false
+ },
+ {
+ "name": "GetMonitorWidth",
+ "params": [
+ {
+ "name": "monitor",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get specified monitor width (current video mode used by monitor)",
+ "custom": false
+ },
+ {
+ "name": "GetMonitorHeight",
+ "params": [
+ {
+ "name": "monitor",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get specified monitor height (current video mode used by monitor)",
+ "custom": false
+ },
+ {
+ "name": "GetMonitorPhysicalWidth",
+ "params": [
+ {
+ "name": "monitor",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get specified monitor physical width in millimetres",
+ "custom": false
+ },
+ {
+ "name": "GetMonitorPhysicalHeight",
+ "params": [
+ {
+ "name": "monitor",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get specified monitor physical height in millimetres",
+ "custom": false
+ },
+ {
+ "name": "GetMonitorRefreshRate",
+ "params": [
+ {
+ "name": "monitor",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get specified monitor refresh rate",
+ "custom": false
+ },
+ {
+ "name": "GetWindowPosition",
+ "params": [],
+ "returnType": "Vector2",
+ "description": "Get window position XY on monitor",
+ "custom": false
+ },
+ {
+ "name": "GetWindowScaleDPI",
+ "params": [],
+ "returnType": "Vector2",
+ "description": "Get window scale DPI factor",
+ "custom": false
+ },
+ {
+ "name": "GetMonitorName",
+ "params": [
+ {
+ "name": "monitor",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Get the human-readable, UTF-8 encoded name of the specified monitor",
+ "custom": false
+ },
+ {
+ "name": "SetClipboardText",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set clipboard text content",
+ "custom": false
+ },
+ {
+ "name": "GetClipboardText",
+ "params": [],
+ "returnType": "[*:0]const u8",
+ "description": "Get clipboard text content",
+ "custom": false
+ },
+ {
+ "name": "EnableEventWaiting",
+ "params": [],
+ "returnType": "void",
+ "description": "Enable waiting for events on EndDrawing(), no automatic event polling",
+ "custom": false
+ },
+ {
+ "name": "DisableEventWaiting",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable waiting for events on EndDrawing(), automatic events polling",
+ "custom": false
+ },
+ {
+ "name": "ShowCursor",
+ "params": [],
+ "returnType": "void",
+ "description": "Shows cursor",
+ "custom": false
+ },
+ {
+ "name": "HideCursor",
+ "params": [],
+ "returnType": "void",
+ "description": "Hides cursor",
+ "custom": false
+ },
+ {
+ "name": "IsCursorHidden",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if cursor is not visible",
+ "custom": false
+ },
+ {
+ "name": "EnableCursor",
+ "params": [],
+ "returnType": "void",
+ "description": "Enables cursor (unlock cursor)",
+ "custom": false
+ },
+ {
+ "name": "DisableCursor",
+ "params": [],
+ "returnType": "void",
+ "description": "Disables cursor (lock cursor)",
+ "custom": false
+ },
+ {
+ "name": "IsCursorOnScreen",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if cursor is on the screen",
+ "custom": false
+ },
+ {
+ "name": "ClearBackground",
+ "params": [
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set background color (framebuffer clear color)",
+ "custom": false
+ },
+ {
+ "name": "BeginDrawing",
+ "params": [],
+ "returnType": "void",
+ "description": "Setup canvas (framebuffer) to start drawing",
+ "custom": false
+ },
+ {
+ "name": "EndDrawing",
+ "params": [],
+ "returnType": "void",
+ "description": "End canvas drawing and swap buffers (double buffering)",
+ "custom": false
+ },
+ {
+ "name": "BeginMode2D",
+ "params": [
+ {
+ "name": "camera",
+ "typ": "Camera2D"
+ }
+ ],
+ "returnType": "void",
+ "description": "Begin 2D mode with custom camera (2D)",
+ "custom": false
+ },
+ {
+ "name": "EndMode2D",
+ "params": [],
+ "returnType": "void",
+ "description": "Ends 2D mode with custom camera",
+ "custom": false
+ },
+ {
+ "name": "BeginMode3D",
+ "params": [
+ {
+ "name": "camera",
+ "typ": "Camera3D"
+ }
+ ],
+ "returnType": "void",
+ "description": "Begin 3D mode with custom camera (3D)",
+ "custom": false
+ },
+ {
+ "name": "EndMode3D",
+ "params": [],
+ "returnType": "void",
+ "description": "Ends 3D mode and returns to default 2D orthographic mode",
+ "custom": false
+ },
+ {
+ "name": "BeginTextureMode",
+ "params": [
+ {
+ "name": "target",
+ "typ": "RenderTexture2D"
+ }
+ ],
+ "returnType": "void",
+ "description": "Begin drawing to render texture",
+ "custom": false
+ },
+ {
+ "name": "EndTextureMode",
+ "params": [],
+ "returnType": "void",
+ "description": "Ends drawing to render texture",
+ "custom": false
+ },
+ {
+ "name": "BeginShaderMode",
+ "params": [
+ {
+ "name": "shader",
+ "typ": "Shader"
+ }
+ ],
+ "returnType": "void",
+ "description": "Begin custom shader drawing",
+ "custom": false
+ },
+ {
+ "name": "EndShaderMode",
+ "params": [],
+ "returnType": "void",
+ "description": "End custom shader drawing (use default shader)",
+ "custom": false
+ },
+ {
+ "name": "BeginBlendMode",
+ "params": [
+ {
+ "name": "mode",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Begin blending mode (alpha, additive, multiplied, subtract, custom)",
+ "custom": false
+ },
+ {
+ "name": "EndBlendMode",
+ "params": [],
+ "returnType": "void",
+ "description": "End blending mode (reset to default: alpha blending)",
+ "custom": false
+ },
+ {
+ "name": "BeginScissorMode",
+ "params": [
+ {
+ "name": "x",
+ "typ": "i32"
+ },
+ {
+ "name": "y",
+ "typ": "i32"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Begin scissor mode (define screen area for following drawing)",
+ "custom": false
+ },
+ {
+ "name": "EndScissorMode",
+ "params": [],
+ "returnType": "void",
+ "description": "End scissor mode",
+ "custom": false
+ },
+ {
+ "name": "BeginVrStereoMode",
+ "params": [
+ {
+ "name": "config",
+ "typ": "VrStereoConfig"
+ }
+ ],
+ "returnType": "void",
+ "description": "Begin stereo rendering (requires VR simulator)",
+ "custom": false
+ },
+ {
+ "name": "EndVrStereoMode",
+ "params": [],
+ "returnType": "void",
+ "description": "End stereo rendering (requires VR simulator)",
+ "custom": false
+ },
+ {
+ "name": "LoadVrStereoConfig",
+ "params": [
+ {
+ "name": "device",
+ "typ": "VrDeviceInfo"
+ }
+ ],
+ "returnType": "VrStereoConfig",
+ "description": "Load VR stereo config for VR simulator device parameters",
+ "custom": false
+ },
+ {
+ "name": "UnloadVrStereoConfig",
+ "params": [
+ {
+ "name": "config",
+ "typ": "VrStereoConfig"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload VR stereo config",
+ "custom": false
+ },
+ {
+ "name": "LoadShader",
+ "params": [
+ {
+ "name": "vsFileName",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fsFileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "Shader",
+ "description": "Load shader from files and bind default locations",
+ "custom": false
+ },
+ {
+ "name": "LoadShaderFromMemory",
+ "params": [
+ {
+ "name": "vsCode",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fsCode",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "Shader",
+ "description": "Load shader from code strings and bind default locations",
+ "custom": false
+ },
+ {
+ "name": "IsShaderReady",
+ "params": [
+ {
+ "name": "shader",
+ "typ": "Shader"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a shader is ready",
+ "custom": false
+ },
+ {
+ "name": "GetShaderLocation",
+ "params": [
+ {
+ "name": "shader",
+ "typ": "Shader"
+ },
+ {
+ "name": "uniformName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get shader uniform location",
+ "custom": false
+ },
+ {
+ "name": "GetShaderLocationAttrib",
+ "params": [
+ {
+ "name": "shader",
+ "typ": "Shader"
+ },
+ {
+ "name": "attribName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get shader attribute location",
+ "custom": false
+ },
+ {
+ "name": "SetShaderValue",
+ "params": [
+ {
+ "name": "shader",
+ "typ": "Shader"
+ },
+ {
+ "name": "locIndex",
+ "typ": "i32"
+ },
+ {
+ "name": "value",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "uniformType",
+ "typ": "ShaderUniformDataType"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set shader uniform value",
+ "custom": true
+ },
+ {
+ "name": "SetShaderValueV",
+ "params": [
+ {
+ "name": "shader",
+ "typ": "Shader"
+ },
+ {
+ "name": "locIndex",
+ "typ": "i32"
+ },
+ {
+ "name": "value",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "uniformType",
+ "typ": "i32"
+ },
+ {
+ "name": "count",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set shader uniform value vector",
+ "custom": false
+ },
+ {
+ "name": "SetShaderValueMatrix",
+ "params": [
+ {
+ "name": "shader",
+ "typ": "Shader"
+ },
+ {
+ "name": "locIndex",
+ "typ": "i32"
+ },
+ {
+ "name": "mat",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set shader uniform value (matrix 4x4)",
+ "custom": false
+ },
+ {
+ "name": "SetShaderValueTexture",
+ "params": [
+ {
+ "name": "shader",
+ "typ": "Shader"
+ },
+ {
+ "name": "locIndex",
+ "typ": "i32"
+ },
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set shader uniform value for texture (sampler2d)",
+ "custom": false
+ },
+ {
+ "name": "UnloadShader",
+ "params": [
+ {
+ "name": "shader",
+ "typ": "Shader"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload shader from GPU memory (VRAM)",
+ "custom": false
+ },
+ {
+ "name": "GetMouseRay",
+ "params": [
+ {
+ "name": "mousePosition",
+ "typ": "Vector2"
+ },
+ {
+ "name": "camera",
+ "typ": "Camera3D"
+ }
+ ],
+ "returnType": "Ray",
+ "description": "Get a ray trace from mouse position",
+ "custom": false
+ },
+ {
+ "name": "GetCameraMatrix",
+ "params": [
+ {
+ "name": "camera",
+ "typ": "Camera3D"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "Get camera transform matrix (view matrix)",
+ "custom": false
+ },
+ {
+ "name": "GetCameraMatrix2D",
+ "params": [
+ {
+ "name": "camera",
+ "typ": "Camera2D"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "Get camera 2d transform matrix",
+ "custom": false
+ },
+ {
+ "name": "GetWorldToScreen",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "camera",
+ "typ": "Camera3D"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "Get the screen space position for a 3d world space position",
+ "custom": false
+ },
+ {
+ "name": "GetScreenToWorld2D",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "camera",
+ "typ": "Camera2D"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "Get the world space position for a 2d camera screen space position",
+ "custom": false
+ },
+ {
+ "name": "GetWorldToScreenEx",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "camera",
+ "typ": "Camera3D"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "Get size position for a 3d world space position",
+ "custom": false
+ },
+ {
+ "name": "GetWorldToScreen2D",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "camera",
+ "typ": "Camera2D"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "Get the screen space position for a 2d camera world space position",
+ "custom": false
+ },
+ {
+ "name": "SetTargetFPS",
+ "params": [
+ {
+ "name": "fps",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set target FPS (maximum)",
+ "custom": false
+ },
+ {
+ "name": "GetFrameTime",
+ "params": [],
+ "returnType": "f32",
+ "description": "Get time in seconds for last frame drawn (delta time)",
+ "custom": false
+ },
+ {
+ "name": "GetTime",
+ "params": [],
+ "returnType": "f64",
+ "description": "Get elapsed time in seconds since InitWindow()",
+ "custom": false
+ },
+ {
+ "name": "GetFPS",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get current FPS",
+ "custom": false
+ },
+ {
+ "name": "SwapScreenBuffer",
+ "params": [],
+ "returnType": "void",
+ "description": "Swap back buffer with front buffer (screen drawing)",
+ "custom": false
+ },
+ {
+ "name": "PollInputEvents",
+ "params": [],
+ "returnType": "void",
+ "description": "Register all input events",
+ "custom": false
+ },
+ {
+ "name": "WaitTime",
+ "params": [
+ {
+ "name": "seconds",
+ "typ": "f64"
+ }
+ ],
+ "returnType": "void",
+ "description": "Wait for some time (halt program execution)",
+ "custom": false
+ },
+ {
+ "name": "SetRandomSeed",
+ "params": [
+ {
+ "name": "seed",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set the seed for the random number generator",
+ "custom": false
+ },
+ {
+ "name": "GetRandomValue",
+ "params": [
+ {
+ "name": "min",
+ "typ": "i32"
+ },
+ {
+ "name": "max",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get a random value between min and max (both included)",
+ "custom": false
+ },
+ {
+ "name": "LoadRandomSequence",
+ "params": [
+ {
+ "name": "count",
+ "typ": "u32"
+ },
+ {
+ "name": "min",
+ "typ": "i32"
+ },
+ {
+ "name": "max",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "?[*]i32",
+ "description": "Load random values sequence, no values repeated",
+ "custom": false
+ },
+ {
+ "name": "UnloadRandomSequence",
+ "params": [
+ {
+ "name": "sequence",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload random values sequence",
+ "custom": false
+ },
+ {
+ "name": "TakeScreenshot",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "void",
+ "description": "Takes a screenshot of current screen (filename extension defines format)",
+ "custom": false
+ },
+ {
+ "name": "SetConfigFlags",
+ "params": [
+ {
+ "name": "flags",
+ "typ": "ConfigFlags"
+ }
+ ],
+ "returnType": "void",
+ "description": "Setup init configuration flags (view FLAGS)",
+ "custom": true
+ },
+ {
+ "name": "OpenURL",
+ "params": [
+ {
+ "name": "url",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "void",
+ "description": "Open URL with default system browser (if available)",
+ "custom": false
+ },
+ {
+ "name": "TraceLog",
+ "params": [
+ {
+ "name": "logLevel",
+ "typ": "i32"
+ },
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "void",
+ "description": "Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...)",
+ "custom": true
+ },
+ {
+ "name": "SetTraceLogLevel",
+ "params": [
+ {
+ "name": "logLevel",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set the current threshold (minimum) log level",
+ "custom": false
+ },
+ {
+ "name": "MemAlloc",
+ "params": [
+ {
+ "name": "size",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "*anyopaque",
+ "description": "Internal memory allocator",
+ "custom": false
+ },
+ {
+ "name": "MemRealloc",
+ "params": [
+ {
+ "name": "ptr",
+ "typ": "*anyopaque"
+ },
+ {
+ "name": "size",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "*anyopaque",
+ "description": "Internal memory reallocator",
+ "custom": false
+ },
+ {
+ "name": "MemFree",
+ "params": [
+ {
+ "name": "ptr",
+ "typ": "*anyopaque"
+ }
+ ],
+ "returnType": "void",
+ "description": "Internal memory free",
+ "custom": false
+ },
+ {
+ "name": "SetTraceLogCallback",
+ "params": [
+ {
+ "name": "callback",
+ "typ": "TraceLogCallback"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set custom trace log",
+ "custom": false
+ },
+ {
+ "name": "SetLoadFileDataCallback",
+ "params": [
+ {
+ "name": "callback",
+ "typ": "LoadFileDataCallback"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set custom file binary data loader",
+ "custom": false
+ },
+ {
+ "name": "SetSaveFileDataCallback",
+ "params": [
+ {
+ "name": "callback",
+ "typ": "SaveFileDataCallback"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set custom file binary data saver",
+ "custom": false
+ },
+ {
+ "name": "SetLoadFileTextCallback",
+ "params": [
+ {
+ "name": "callback",
+ "typ": "LoadFileTextCallback"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set custom file text data loader",
+ "custom": false
+ },
+ {
+ "name": "SetSaveFileTextCallback",
+ "params": [
+ {
+ "name": "callback",
+ "typ": "SaveFileTextCallback"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set custom file text data saver",
+ "custom": false
+ },
+ {
+ "name": "LoadFileData",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "dataSize",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "?[*]u8",
+ "description": "Load file data as byte array (read)",
+ "custom": false
+ },
+ {
+ "name": "UnloadFileData",
+ "params": [
+ {
+ "name": "data",
+ "typ": "?[*]u8"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload file data allocated by LoadFileData()",
+ "custom": false
+ },
+ {
+ "name": "SaveFileData",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "data",
+ "typ": "*anyopaque"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Save data to file from byte array (write), returns true on success",
+ "custom": false
+ },
+ {
+ "name": "ExportDataAsCode",
+ "params": [
+ {
+ "name": "data",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ },
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Export data to code (.h), returns true on success",
+ "custom": false
+ },
+ {
+ "name": "LoadFileText",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "?[*]u8",
+ "description": "Load text data from file (read), returns a '\\0' terminated string",
+ "custom": false
+ },
+ {
+ "name": "UnloadFileText",
+ "params": [
+ {
+ "name": "text",
+ "typ": "?[*]u8"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload file text data allocated by LoadFileText()",
+ "custom": false
+ },
+ {
+ "name": "SaveFileText",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "text",
+ "typ": "?[*]u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Save text data to file (write), string must be '\\0' terminated, returns true on success",
+ "custom": false
+ },
+ {
+ "name": "FileExists",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if file exists",
+ "custom": false
+ },
+ {
+ "name": "DirectoryExists",
+ "params": [
+ {
+ "name": "dirPath",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a directory path exists",
+ "custom": false
+ },
+ {
+ "name": "IsFileExtension",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "ext",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check file extension (including point: .png, .wav)",
+ "custom": false
+ },
+ {
+ "name": "GetFileLength",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h)",
+ "custom": false
+ },
+ {
+ "name": "GetFileExtension",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Get pointer to extension for a filename string (includes dot: '.png')",
+ "custom": false
+ },
+ {
+ "name": "GetFileName",
+ "params": [
+ {
+ "name": "filePath",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Get pointer to filename for a path string",
+ "custom": false
+ },
+ {
+ "name": "GetFileNameWithoutExt",
+ "params": [
+ {
+ "name": "filePath",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Get filename string without extension (uses static string)",
+ "custom": false
+ },
+ {
+ "name": "GetDirectoryPath",
+ "params": [
+ {
+ "name": "filePath",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Get full path for a given fileName with path (uses static string)",
+ "custom": false
+ },
+ {
+ "name": "GetPrevDirectoryPath",
+ "params": [
+ {
+ "name": "dirPath",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Get previous directory path for a given path (uses static string)",
+ "custom": false
+ },
+ {
+ "name": "GetWorkingDirectory",
+ "params": [],
+ "returnType": "[*:0]const u8",
+ "description": "Get current working directory (uses static string)",
+ "custom": false
+ },
+ {
+ "name": "GetApplicationDirectory",
+ "params": [],
+ "returnType": "[*:0]const u8",
+ "description": "Get the directory of the running application (uses static string)",
+ "custom": false
+ },
+ {
+ "name": "ChangeDirectory",
+ "params": [
+ {
+ "name": "dir",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Change working directory, return true on success",
+ "custom": false
+ },
+ {
+ "name": "IsPathFile",
+ "params": [
+ {
+ "name": "path",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a given path is a file or a directory",
+ "custom": false
+ },
+ {
+ "name": "LoadDirectoryFiles",
+ "params": [
+ {
+ "name": "dirPath",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "FilePathList",
+ "description": "Load directory filepaths",
+ "custom": false
+ },
+ {
+ "name": "LoadDirectoryFilesEx",
+ "params": [
+ {
+ "name": "basePath",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "filter",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "scanSubdirs",
+ "typ": "bool"
+ }
+ ],
+ "returnType": "FilePathList",
+ "description": "Load directory filepaths with extension filtering and recursive directory scan",
+ "custom": false
+ },
+ {
+ "name": "UnloadDirectoryFiles",
+ "params": [
+ {
+ "name": "files",
+ "typ": "FilePathList"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload filepaths",
+ "custom": false
+ },
+ {
+ "name": "IsFileDropped",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if a file has been dropped into window",
+ "custom": false
+ },
+ {
+ "name": "LoadDroppedFiles",
+ "params": [],
+ "returnType": "FilePathList",
+ "description": "Load dropped filepaths",
+ "custom": false
+ },
+ {
+ "name": "UnloadDroppedFiles",
+ "params": [
+ {
+ "name": "files",
+ "typ": "FilePathList"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload dropped filepaths",
+ "custom": false
+ },
+ {
+ "name": "GetFileModTime",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "i64",
+ "description": "Get file modification time (last write time)",
+ "custom": false
+ },
+ {
+ "name": "CompressData",
+ "params": [
+ {
+ "name": "data",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ },
+ {
+ "name": "compDataSize",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "?[*]u8",
+ "description": "Compress data (DEFLATE algorithm), memory must be MemFree()",
+ "custom": false
+ },
+ {
+ "name": "DecompressData",
+ "params": [
+ {
+ "name": "compData",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "compDataSize",
+ "typ": "i32"
+ },
+ {
+ "name": "dataSize",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "?[*]u8",
+ "description": "Decompress data (DEFLATE algorithm), memory must be MemFree()",
+ "custom": false
+ },
+ {
+ "name": "EncodeDataBase64",
+ "params": [
+ {
+ "name": "data",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ },
+ {
+ "name": "outputSize",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "?[*]u8",
+ "description": "Encode data to Base64 string, memory must be MemFree()",
+ "custom": false
+ },
+ {
+ "name": "DecodeDataBase64",
+ "params": [
+ {
+ "name": "data",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "outputSize",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "?[*]u8",
+ "description": "Decode Base64 string data, memory must be MemFree()",
+ "custom": false
+ },
+ {
+ "name": "LoadAutomationEventList",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "AutomationEventList",
+ "description": "Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS",
+ "custom": false
+ },
+ {
+ "name": "UnloadAutomationEventList",
+ "params": [
+ {
+ "name": "list",
+ "typ": "AutomationEventList"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload automation events list from file",
+ "custom": false
+ },
+ {
+ "name": "ExportAutomationEventList",
+ "params": [
+ {
+ "name": "list",
+ "typ": "AutomationEventList"
+ },
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Export automation events list as text file",
+ "custom": false
+ },
+ {
+ "name": "SetAutomationEventList",
+ "params": [
+ {
+ "name": "list",
+ "typ": "?[*]AutomationEventList"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set automation event list to record to",
+ "custom": false
+ },
+ {
+ "name": "SetAutomationEventBaseFrame",
+ "params": [
+ {
+ "name": "frame",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set automation event internal base frame to start recording",
+ "custom": false
+ },
+ {
+ "name": "StartAutomationEventRecording",
+ "params": [],
+ "returnType": "void",
+ "description": "Start recording automation events (AutomationEventList must be set)",
+ "custom": false
+ },
+ {
+ "name": "StopAutomationEventRecording",
+ "params": [],
+ "returnType": "void",
+ "description": "Stop recording automation events",
+ "custom": false
+ },
+ {
+ "name": "PlayAutomationEvent",
+ "params": [
+ {
+ "name": "event",
+ "typ": "AutomationEvent"
+ }
+ ],
+ "returnType": "void",
+ "description": "Play a recorded automation event",
+ "custom": false
+ },
+ {
+ "name": "IsKeyPressed",
+ "params": [
+ {
+ "name": "key",
+ "typ": "KeyboardKey"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a key has been pressed once",
+ "custom": true
+ },
+ {
+ "name": "IsKeyPressedRepeat",
+ "params": [
+ {
+ "name": "key",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a key has been pressed again (Only PLATFORM_DESKTOP)",
+ "custom": false
+ },
+ {
+ "name": "IsKeyDown",
+ "params": [
+ {
+ "name": "key",
+ "typ": "KeyboardKey"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a key is being pressed",
+ "custom": true
+ },
+ {
+ "name": "IsKeyReleased",
+ "params": [
+ {
+ "name": "key",
+ "typ": "KeyboardKey"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a key has been released once",
+ "custom": true
+ },
+ {
+ "name": "IsKeyUp",
+ "params": [
+ {
+ "name": "key",
+ "typ": "KeyboardKey"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a key is NOT being pressed",
+ "custom": true
+ },
+ {
+ "name": "GetKeyPressed",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty",
+ "custom": false
+ },
+ {
+ "name": "GetCharPressed",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty",
+ "custom": false
+ },
+ {
+ "name": "SetExitKey",
+ "params": [
+ {
+ "name": "key",
+ "typ": "KeyboardKey"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set a custom key to exit program (default is ESC)",
+ "custom": true
+ },
+ {
+ "name": "IsGamepadAvailable",
+ "params": [
+ {
+ "name": "gamepad",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a gamepad is available",
+ "custom": false
+ },
+ {
+ "name": "GetGamepadName",
+ "params": [
+ {
+ "name": "gamepad",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Get gamepad internal name id",
+ "custom": false
+ },
+ {
+ "name": "IsGamepadButtonPressed",
+ "params": [
+ {
+ "name": "gamepad",
+ "typ": "i32"
+ },
+ {
+ "name": "button",
+ "typ": "GamepadButton"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a gamepad button has been pressed once",
+ "custom": true
+ },
+ {
+ "name": "IsGamepadButtonDown",
+ "params": [
+ {
+ "name": "gamepad",
+ "typ": "i32"
+ },
+ {
+ "name": "button",
+ "typ": "GamepadButton"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a gamepad button is being pressed",
+ "custom": true
+ },
+ {
+ "name": "IsGamepadButtonReleased",
+ "params": [
+ {
+ "name": "gamepad",
+ "typ": "i32"
+ },
+ {
+ "name": "button",
+ "typ": "GamepadButton"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a gamepad button has been released once",
+ "custom": true
+ },
+ {
+ "name": "IsGamepadButtonUp",
+ "params": [
+ {
+ "name": "gamepad",
+ "typ": "i32"
+ },
+ {
+ "name": "button",
+ "typ": "GamepadButton"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a gamepad button is NOT being pressed",
+ "custom": true
+ },
+ {
+ "name": "GetGamepadButtonPressed",
+ "params": [],
+ "returnType": "GamepadButton",
+ "description": "Get the last gamepad button pressed",
+ "custom": true
+ },
+ {
+ "name": "GetGamepadAxisCount",
+ "params": [
+ {
+ "name": "gamepad",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get gamepad axis count for a gamepad",
+ "custom": false
+ },
+ {
+ "name": "GetGamepadAxisMovement",
+ "params": [
+ {
+ "name": "gamepad",
+ "typ": "i32"
+ },
+ {
+ "name": "axis",
+ "typ": "GamepadAxis"
+ }
+ ],
+ "returnType": "f32",
+ "description": "Get axis movement value for a gamepad axis",
+ "custom": true
+ },
+ {
+ "name": "SetGamepadMappings",
+ "params": [
+ {
+ "name": "mappings",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Set internal gamepad mappings (SDL_GameControllerDB)",
+ "custom": false
+ },
+ {
+ "name": "IsMouseButtonPressed",
+ "params": [
+ {
+ "name": "button",
+ "typ": "MouseButton"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a mouse button has been pressed once",
+ "custom": true
+ },
+ {
+ "name": "IsMouseButtonDown",
+ "params": [
+ {
+ "name": "button",
+ "typ": "MouseButton"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a mouse button is being pressed",
+ "custom": true
+ },
+ {
+ "name": "IsMouseButtonReleased",
+ "params": [
+ {
+ "name": "button",
+ "typ": "MouseButton"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a mouse button has been released once",
+ "custom": true
+ },
+ {
+ "name": "IsMouseButtonUp",
+ "params": [
+ {
+ "name": "button",
+ "typ": "MouseButton"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a mouse button is NOT being pressed",
+ "custom": true
+ },
+ {
+ "name": "GetMouseX",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get mouse position X",
+ "custom": false
+ },
+ {
+ "name": "GetMouseY",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get mouse position Y",
+ "custom": false
+ },
+ {
+ "name": "GetMousePosition",
+ "params": [],
+ "returnType": "Vector2",
+ "description": "Get mouse position XY",
+ "custom": false
+ },
+ {
+ "name": "GetMouseDelta",
+ "params": [],
+ "returnType": "Vector2",
+ "description": "Get mouse delta between frames",
+ "custom": false
+ },
+ {
+ "name": "SetMousePosition",
+ "params": [
+ {
+ "name": "x",
+ "typ": "i32"
+ },
+ {
+ "name": "y",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set mouse position XY",
+ "custom": false
+ },
+ {
+ "name": "SetMouseOffset",
+ "params": [
+ {
+ "name": "offsetX",
+ "typ": "i32"
+ },
+ {
+ "name": "offsetY",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set mouse offset",
+ "custom": false
+ },
+ {
+ "name": "SetMouseScale",
+ "params": [
+ {
+ "name": "scaleX",
+ "typ": "f32"
+ },
+ {
+ "name": "scaleY",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set mouse scaling",
+ "custom": false
+ },
+ {
+ "name": "GetMouseWheelMove",
+ "params": [],
+ "returnType": "f32",
+ "description": "Get mouse wheel movement for X or Y, whichever is larger",
+ "custom": false
+ },
+ {
+ "name": "GetMouseWheelMoveV",
+ "params": [],
+ "returnType": "Vector2",
+ "description": "Get mouse wheel movement for both X and Y",
+ "custom": false
+ },
+ {
+ "name": "SetMouseCursor",
+ "params": [
+ {
+ "name": "cursor",
+ "typ": "MouseCursor"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set mouse cursor",
+ "custom": true
+ },
+ {
+ "name": "GetTouchX",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get touch position X for touch point 0 (relative to screen size)",
+ "custom": false
+ },
+ {
+ "name": "GetTouchY",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get touch position Y for touch point 0 (relative to screen size)",
+ "custom": false
+ },
+ {
+ "name": "GetTouchPosition",
+ "params": [
+ {
+ "name": "index",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "Get touch position XY for a touch point index (relative to screen size)",
+ "custom": false
+ },
+ {
+ "name": "GetTouchPointId",
+ "params": [
+ {
+ "name": "index",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get touch point identifier for given index",
+ "custom": false
+ },
+ {
+ "name": "GetTouchPointCount",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get number of touch points",
+ "custom": false
+ },
+ {
+ "name": "SetGesturesEnabled",
+ "params": [
+ {
+ "name": "flags",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Enable a set of gestures using flags",
+ "custom": false
+ },
+ {
+ "name": "IsGestureDetected",
+ "params": [
+ {
+ "name": "gesture",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a gesture have been detected",
+ "custom": false
+ },
+ {
+ "name": "GetGestureDetected",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get latest detected gesture",
+ "custom": false
+ },
+ {
+ "name": "GetGestureHoldDuration",
+ "params": [],
+ "returnType": "f32",
+ "description": "Get gesture hold time in milliseconds",
+ "custom": false
+ },
+ {
+ "name": "GetGestureDragVector",
+ "params": [],
+ "returnType": "Vector2",
+ "description": "Get gesture drag vector",
+ "custom": false
+ },
+ {
+ "name": "GetGestureDragAngle",
+ "params": [],
+ "returnType": "f32",
+ "description": "Get gesture drag angle",
+ "custom": false
+ },
+ {
+ "name": "GetGesturePinchVector",
+ "params": [],
+ "returnType": "Vector2",
+ "description": "Get gesture pinch delta",
+ "custom": false
+ },
+ {
+ "name": "GetGesturePinchAngle",
+ "params": [],
+ "returnType": "f32",
+ "description": "Get gesture pinch angle",
+ "custom": false
+ },
+ {
+ "name": "UpdateCamera",
+ "params": [
+ {
+ "name": "camera",
+ "typ": "*Camera3D"
+ },
+ {
+ "name": "mode",
+ "typ": "CameraMode"
+ }
+ ],
+ "returnType": "void",
+ "description": "Update camera position for selected mode",
+ "custom": true
+ },
+ {
+ "name": "UpdateCameraPro",
+ "params": [
+ {
+ "name": "camera",
+ "typ": "?[*]Camera3D"
+ },
+ {
+ "name": "movement",
+ "typ": "Vector3"
+ },
+ {
+ "name": "rotation",
+ "typ": "Vector3"
+ },
+ {
+ "name": "zoom",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Update camera movement/rotation",
+ "custom": false
+ },
+ {
+ "name": "SetShapesTexture",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "source",
+ "typ": "Rectangle"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set texture and rectangle to be used on shapes drawing",
+ "custom": false
+ },
+ {
+ "name": "GetShapesTexture",
+ "params": [],
+ "returnType": "Texture2D",
+ "description": "Get texture that is used for shapes drawing",
+ "custom": false
+ },
+ {
+ "name": "GetShapesTextureRectangle",
+ "params": [],
+ "returnType": "Rectangle",
+ "description": "Get texture source rectangle that is used for shapes drawing",
+ "custom": false
+ },
+ {
+ "name": "DrawPixel",
+ "params": [
+ {
+ "name": "posX",
+ "typ": "i32"
+ },
+ {
+ "name": "posY",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a pixel",
+ "custom": false
+ },
+ {
+ "name": "DrawPixelV",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a pixel (Vector version)",
+ "custom": false
+ },
+ {
+ "name": "DrawLine",
+ "params": [
+ {
+ "name": "startPosX",
+ "typ": "i32"
+ },
+ {
+ "name": "startPosY",
+ "typ": "i32"
+ },
+ {
+ "name": "endPosX",
+ "typ": "i32"
+ },
+ {
+ "name": "endPosY",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a line",
+ "custom": false
+ },
+ {
+ "name": "DrawLineV",
+ "params": [
+ {
+ "name": "startPos",
+ "typ": "Vector2"
+ },
+ {
+ "name": "endPos",
+ "typ": "Vector2"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a line (using gl lines)",
+ "custom": false
+ },
+ {
+ "name": "DrawLineEx",
+ "params": [
+ {
+ "name": "startPos",
+ "typ": "Vector2"
+ },
+ {
+ "name": "endPos",
+ "typ": "Vector2"
+ },
+ {
+ "name": "thick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a line (using triangles/quads)",
+ "custom": false
+ },
+ {
+ "name": "DrawLineStrip",
+ "params": [
+ {
+ "name": "points",
+ "typ": "?[*]Vector2"
+ },
+ {
+ "name": "pointCount",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw lines sequence (using gl lines)",
+ "custom": false
+ },
+ {
+ "name": "DrawLineBezier",
+ "params": [
+ {
+ "name": "startPos",
+ "typ": "Vector2"
+ },
+ {
+ "name": "endPos",
+ "typ": "Vector2"
+ },
+ {
+ "name": "thick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw line segment cubic-bezier in-out interpolation",
+ "custom": false
+ },
+ {
+ "name": "DrawCircle",
+ "params": [
+ {
+ "name": "centerX",
+ "typ": "i32"
+ },
+ {
+ "name": "centerY",
+ "typ": "i32"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a color-filled circle",
+ "custom": false
+ },
+ {
+ "name": "DrawCircleSector",
+ "params": [
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "startAngle",
+ "typ": "f32"
+ },
+ {
+ "name": "endAngle",
+ "typ": "f32"
+ },
+ {
+ "name": "segments",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a piece of a circle",
+ "custom": false
+ },
+ {
+ "name": "DrawCircleSectorLines",
+ "params": [
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "startAngle",
+ "typ": "f32"
+ },
+ {
+ "name": "endAngle",
+ "typ": "f32"
+ },
+ {
+ "name": "segments",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw circle sector outline",
+ "custom": false
+ },
+ {
+ "name": "DrawCircleGradient",
+ "params": [
+ {
+ "name": "centerX",
+ "typ": "i32"
+ },
+ {
+ "name": "centerY",
+ "typ": "i32"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "color1",
+ "typ": "Color"
+ },
+ {
+ "name": "color2",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a gradient-filled circle",
+ "custom": false
+ },
+ {
+ "name": "DrawCircleV",
+ "params": [
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a color-filled circle (Vector version)",
+ "custom": false
+ },
+ {
+ "name": "DrawCircleLines",
+ "params": [
+ {
+ "name": "centerX",
+ "typ": "i32"
+ },
+ {
+ "name": "centerY",
+ "typ": "i32"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw circle outline",
+ "custom": false
+ },
+ {
+ "name": "DrawCircleLinesV",
+ "params": [
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw circle outline (Vector version)",
+ "custom": false
+ },
+ {
+ "name": "DrawEllipse",
+ "params": [
+ {
+ "name": "centerX",
+ "typ": "i32"
+ },
+ {
+ "name": "centerY",
+ "typ": "i32"
+ },
+ {
+ "name": "radiusH",
+ "typ": "f32"
+ },
+ {
+ "name": "radiusV",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw ellipse",
+ "custom": false
+ },
+ {
+ "name": "DrawEllipseLines",
+ "params": [
+ {
+ "name": "centerX",
+ "typ": "i32"
+ },
+ {
+ "name": "centerY",
+ "typ": "i32"
+ },
+ {
+ "name": "radiusH",
+ "typ": "f32"
+ },
+ {
+ "name": "radiusV",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw ellipse outline",
+ "custom": false
+ },
+ {
+ "name": "DrawRing",
+ "params": [
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "innerRadius",
+ "typ": "f32"
+ },
+ {
+ "name": "outerRadius",
+ "typ": "f32"
+ },
+ {
+ "name": "startAngle",
+ "typ": "f32"
+ },
+ {
+ "name": "endAngle",
+ "typ": "f32"
+ },
+ {
+ "name": "segments",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw ring",
+ "custom": false
+ },
+ {
+ "name": "DrawRingLines",
+ "params": [
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "innerRadius",
+ "typ": "f32"
+ },
+ {
+ "name": "outerRadius",
+ "typ": "f32"
+ },
+ {
+ "name": "startAngle",
+ "typ": "f32"
+ },
+ {
+ "name": "endAngle",
+ "typ": "f32"
+ },
+ {
+ "name": "segments",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw ring outline",
+ "custom": false
+ },
+ {
+ "name": "DrawRectangle",
+ "params": [
+ {
+ "name": "posX",
+ "typ": "i32"
+ },
+ {
+ "name": "posY",
+ "typ": "i32"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a color-filled rectangle",
+ "custom": false
+ },
+ {
+ "name": "DrawRectangleV",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "size",
+ "typ": "Vector2"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a color-filled rectangle (Vector version)",
+ "custom": false
+ },
+ {
+ "name": "DrawRectangleRec",
+ "params": [
+ {
+ "name": "rec",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a color-filled rectangle",
+ "custom": false
+ },
+ {
+ "name": "DrawRectanglePro",
+ "params": [
+ {
+ "name": "rec",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "origin",
+ "typ": "Vector2"
+ },
+ {
+ "name": "rotation",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a color-filled rectangle with pro parameters",
+ "custom": false
+ },
+ {
+ "name": "DrawRectangleGradientV",
+ "params": [
+ {
+ "name": "posX",
+ "typ": "i32"
+ },
+ {
+ "name": "posY",
+ "typ": "i32"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "color1",
+ "typ": "Color"
+ },
+ {
+ "name": "color2",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a vertical-gradient-filled rectangle",
+ "custom": false
+ },
+ {
+ "name": "DrawRectangleGradientH",
+ "params": [
+ {
+ "name": "posX",
+ "typ": "i32"
+ },
+ {
+ "name": "posY",
+ "typ": "i32"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "color1",
+ "typ": "Color"
+ },
+ {
+ "name": "color2",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a horizontal-gradient-filled rectangle",
+ "custom": false
+ },
+ {
+ "name": "DrawRectangleGradientEx",
+ "params": [
+ {
+ "name": "rec",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "col1",
+ "typ": "Color"
+ },
+ {
+ "name": "col2",
+ "typ": "Color"
+ },
+ {
+ "name": "col3",
+ "typ": "Color"
+ },
+ {
+ "name": "col4",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a gradient-filled rectangle with custom vertex colors",
+ "custom": false
+ },
+ {
+ "name": "DrawRectangleLines",
+ "params": [
+ {
+ "name": "posX",
+ "typ": "i32"
+ },
+ {
+ "name": "posY",
+ "typ": "i32"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw rectangle outline",
+ "custom": false
+ },
+ {
+ "name": "DrawRectangleLinesEx",
+ "params": [
+ {
+ "name": "rec",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "lineThick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw rectangle outline with extended parameters",
+ "custom": false
+ },
+ {
+ "name": "DrawRectangleRounded",
+ "params": [
+ {
+ "name": "rec",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "roundness",
+ "typ": "f32"
+ },
+ {
+ "name": "segments",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw rectangle with rounded edges",
+ "custom": false
+ },
+ {
+ "name": "DrawRectangleRoundedLines",
+ "params": [
+ {
+ "name": "rec",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "roundness",
+ "typ": "f32"
+ },
+ {
+ "name": "segments",
+ "typ": "i32"
+ },
+ {
+ "name": "lineThick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw rectangle with rounded edges outline",
+ "custom": false
+ },
+ {
+ "name": "DrawTriangle",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v3",
+ "typ": "Vector2"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a color-filled triangle (vertex in counter-clockwise order!)",
+ "custom": false
+ },
+ {
+ "name": "DrawTriangleLines",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v3",
+ "typ": "Vector2"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw triangle outline (vertex in counter-clockwise order!)",
+ "custom": false
+ },
+ {
+ "name": "DrawTriangleFan",
+ "params": [
+ {
+ "name": "points",
+ "typ": "?[*]Vector2"
+ },
+ {
+ "name": "pointCount",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a triangle fan defined by points (first vertex is the center)",
+ "custom": false
+ },
+ {
+ "name": "DrawTriangleStrip",
+ "params": [
+ {
+ "name": "points",
+ "typ": "?[*]Vector2"
+ },
+ {
+ "name": "pointCount",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a triangle strip defined by points",
+ "custom": false
+ },
+ {
+ "name": "DrawPoly",
+ "params": [
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "sides",
+ "typ": "i32"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "rotation",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a regular polygon (Vector version)",
+ "custom": false
+ },
+ {
+ "name": "DrawPolyLines",
+ "params": [
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "sides",
+ "typ": "i32"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "rotation",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a polygon outline of n sides",
+ "custom": false
+ },
+ {
+ "name": "DrawPolyLinesEx",
+ "params": [
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "sides",
+ "typ": "i32"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "rotation",
+ "typ": "f32"
+ },
+ {
+ "name": "lineThick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a polygon outline of n sides with extended parameters",
+ "custom": false
+ },
+ {
+ "name": "DrawSplineLinear",
+ "params": [
+ {
+ "name": "points",
+ "typ": "?[*]Vector2"
+ },
+ {
+ "name": "pointCount",
+ "typ": "i32"
+ },
+ {
+ "name": "thick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw spline: Linear, minimum 2 points",
+ "custom": false
+ },
+ {
+ "name": "DrawSplineBasis",
+ "params": [
+ {
+ "name": "points",
+ "typ": "?[*]Vector2"
+ },
+ {
+ "name": "pointCount",
+ "typ": "i32"
+ },
+ {
+ "name": "thick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw spline: B-Spline, minimum 4 points",
+ "custom": false
+ },
+ {
+ "name": "DrawSplineCatmullRom",
+ "params": [
+ {
+ "name": "points",
+ "typ": "?[*]Vector2"
+ },
+ {
+ "name": "pointCount",
+ "typ": "i32"
+ },
+ {
+ "name": "thick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw spline: Catmull-Rom, minimum 4 points",
+ "custom": false
+ },
+ {
+ "name": "DrawSplineBezierQuadratic",
+ "params": [
+ {
+ "name": "points",
+ "typ": "?[*]Vector2"
+ },
+ {
+ "name": "pointCount",
+ "typ": "i32"
+ },
+ {
+ "name": "thick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]",
+ "custom": false
+ },
+ {
+ "name": "DrawSplineBezierCubic",
+ "params": [
+ {
+ "name": "points",
+ "typ": "?[*]Vector2"
+ },
+ {
+ "name": "pointCount",
+ "typ": "i32"
+ },
+ {
+ "name": "thick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]",
+ "custom": false
+ },
+ {
+ "name": "DrawSplineSegmentLinear",
+ "params": [
+ {
+ "name": "p1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "thick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw spline segment: Linear, 2 points",
+ "custom": false
+ },
+ {
+ "name": "DrawSplineSegmentBasis",
+ "params": [
+ {
+ "name": "p1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p3",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p4",
+ "typ": "Vector2"
+ },
+ {
+ "name": "thick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw spline segment: B-Spline, 4 points",
+ "custom": false
+ },
+ {
+ "name": "DrawSplineSegmentCatmullRom",
+ "params": [
+ {
+ "name": "p1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p3",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p4",
+ "typ": "Vector2"
+ },
+ {
+ "name": "thick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw spline segment: Catmull-Rom, 4 points",
+ "custom": false
+ },
+ {
+ "name": "DrawSplineSegmentBezierQuadratic",
+ "params": [
+ {
+ "name": "p1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "c2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p3",
+ "typ": "Vector2"
+ },
+ {
+ "name": "thick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw spline segment: Quadratic Bezier, 2 points, 1 control point",
+ "custom": false
+ },
+ {
+ "name": "DrawSplineSegmentBezierCubic",
+ "params": [
+ {
+ "name": "p1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "c2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "c3",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p4",
+ "typ": "Vector2"
+ },
+ {
+ "name": "thick",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw spline segment: Cubic Bezier, 2 points, 2 control points",
+ "custom": false
+ },
+ {
+ "name": "GetSplinePointLinear",
+ "params": [
+ {
+ "name": "startPos",
+ "typ": "Vector2"
+ },
+ {
+ "name": "endPos",
+ "typ": "Vector2"
+ },
+ {
+ "name": "t",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "Get (evaluate) spline point: Linear",
+ "custom": false
+ },
+ {
+ "name": "GetSplinePointBasis",
+ "params": [
+ {
+ "name": "p1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p3",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p4",
+ "typ": "Vector2"
+ },
+ {
+ "name": "t",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "Get (evaluate) spline point: B-Spline",
+ "custom": false
+ },
+ {
+ "name": "GetSplinePointCatmullRom",
+ "params": [
+ {
+ "name": "p1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p3",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p4",
+ "typ": "Vector2"
+ },
+ {
+ "name": "t",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "Get (evaluate) spline point: Catmull-Rom",
+ "custom": false
+ },
+ {
+ "name": "GetSplinePointBezierQuad",
+ "params": [
+ {
+ "name": "p1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "c2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p3",
+ "typ": "Vector2"
+ },
+ {
+ "name": "t",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "Get (evaluate) spline point: Quadratic Bezier",
+ "custom": false
+ },
+ {
+ "name": "GetSplinePointBezierCubic",
+ "params": [
+ {
+ "name": "p1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "c2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "c3",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p4",
+ "typ": "Vector2"
+ },
+ {
+ "name": "t",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "Get (evaluate) spline point: Cubic Bezier",
+ "custom": false
+ },
+ {
+ "name": "CheckCollisionRecs",
+ "params": [
+ {
+ "name": "rec1",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "rec2",
+ "typ": "Rectangle"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check collision between two rectangles",
+ "custom": false
+ },
+ {
+ "name": "CheckCollisionCircles",
+ "params": [
+ {
+ "name": "center1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "radius1",
+ "typ": "f32"
+ },
+ {
+ "name": "center2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "radius2",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check collision between two circles",
+ "custom": false
+ },
+ {
+ "name": "CheckCollisionCircleRec",
+ "params": [
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "rec",
+ "typ": "Rectangle"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check collision between circle and rectangle",
+ "custom": false
+ },
+ {
+ "name": "CheckCollisionPointRec",
+ "params": [
+ {
+ "name": "point",
+ "typ": "Vector2"
+ },
+ {
+ "name": "rec",
+ "typ": "Rectangle"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if point is inside rectangle",
+ "custom": false
+ },
+ {
+ "name": "CheckCollisionPointCircle",
+ "params": [
+ {
+ "name": "point",
+ "typ": "Vector2"
+ },
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if point is inside circle",
+ "custom": false
+ },
+ {
+ "name": "CheckCollisionPointTriangle",
+ "params": [
+ {
+ "name": "point",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p3",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if point is inside a triangle",
+ "custom": false
+ },
+ {
+ "name": "CheckCollisionPointPoly",
+ "params": [
+ {
+ "name": "point",
+ "typ": "Vector2"
+ },
+ {
+ "name": "points",
+ "typ": "?[*]Vector2"
+ },
+ {
+ "name": "pointCount",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if point is within a polygon described by array of vertices",
+ "custom": false
+ },
+ {
+ "name": "CheckCollisionLines",
+ "params": [
+ {
+ "name": "startPos1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "endPos1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "startPos2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "endPos2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "collisionPoint",
+ "typ": "?[*]Vector2"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check the collision between two lines defined by two points each, returns collision point by reference",
+ "custom": false
+ },
+ {
+ "name": "CheckCollisionPointLine",
+ "params": [
+ {
+ "name": "point",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "p2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "threshold",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold]",
+ "custom": false
+ },
+ {
+ "name": "GetCollisionRec",
+ "params": [
+ {
+ "name": "rec1",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "rec2",
+ "typ": "Rectangle"
+ }
+ ],
+ "returnType": "Rectangle",
+ "description": "Get collision rectangle for two rectangles collision",
+ "custom": false
+ },
+ {
+ "name": "LoadImage",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Load image from file into CPU memory (RAM)",
+ "custom": false
+ },
+ {
+ "name": "LoadImageRaw",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "format",
+ "typ": "i32"
+ },
+ {
+ "name": "headerSize",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Load image from RAW file data",
+ "custom": false
+ },
+ {
+ "name": "LoadImageSvg",
+ "params": [
+ {
+ "name": "fileNameOrString",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Load image from SVG file data or string with specified size",
+ "custom": false
+ },
+ {
+ "name": "LoadImageAnim",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "frames",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Load image sequence from file (frames appended to image.data)",
+ "custom": false
+ },
+ {
+ "name": "LoadImageAnimFromMemory",
+ "params": [
+ {
+ "name": "fileType",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fileData",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ },
+ {
+ "name": "frames",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Load image sequence from memory buffer",
+ "custom": false
+ },
+ {
+ "name": "LoadImageFromMemory",
+ "params": [
+ {
+ "name": "fileType",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fileData",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Load image from memory buffer, fileType refers to extension: i.e. '.png'",
+ "custom": false
+ },
+ {
+ "name": "LoadImageFromTexture",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Load image from GPU texture data",
+ "custom": false
+ },
+ {
+ "name": "LoadImageFromScreen",
+ "params": [],
+ "returnType": "Image",
+ "description": "Load image from screen buffer and (screenshot)",
+ "custom": false
+ },
+ {
+ "name": "IsImageReady",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if an image is ready",
+ "custom": false
+ },
+ {
+ "name": "UnloadImage",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload image from CPU memory (RAM)",
+ "custom": false
+ },
+ {
+ "name": "ExportImage",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ },
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Export image data to file, returns true on success",
+ "custom": false
+ },
+ {
+ "name": "ExportImageToMemory",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ },
+ {
+ "name": "fileType",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fileSize",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "?[*]u8",
+ "description": "Export image to memory buffer",
+ "custom": false
+ },
+ {
+ "name": "ExportImageAsCode",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ },
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Export image as code file defining an array of bytes, returns true on success",
+ "custom": false
+ },
+ {
+ "name": "GenImageColor",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Generate image: plain color",
+ "custom": false
+ },
+ {
+ "name": "GenImageGradientLinear",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "direction",
+ "typ": "i32"
+ },
+ {
+ "name": "start",
+ "typ": "Color"
+ },
+ {
+ "name": "end",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient",
+ "custom": false
+ },
+ {
+ "name": "GenImageGradientRadial",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "density",
+ "typ": "f32"
+ },
+ {
+ "name": "inner",
+ "typ": "Color"
+ },
+ {
+ "name": "outer",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Generate image: radial gradient",
+ "custom": false
+ },
+ {
+ "name": "GenImageGradientSquare",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "density",
+ "typ": "f32"
+ },
+ {
+ "name": "inner",
+ "typ": "Color"
+ },
+ {
+ "name": "outer",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Generate image: square gradient",
+ "custom": false
+ },
+ {
+ "name": "GenImageChecked",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "checksX",
+ "typ": "i32"
+ },
+ {
+ "name": "checksY",
+ "typ": "i32"
+ },
+ {
+ "name": "col1",
+ "typ": "Color"
+ },
+ {
+ "name": "col2",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Generate image: checked",
+ "custom": false
+ },
+ {
+ "name": "GenImageWhiteNoise",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "factor",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Generate image: white noise",
+ "custom": false
+ },
+ {
+ "name": "GenImagePerlinNoise",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "offsetX",
+ "typ": "i32"
+ },
+ {
+ "name": "offsetY",
+ "typ": "i32"
+ },
+ {
+ "name": "scale",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Generate image: perlin noise",
+ "custom": false
+ },
+ {
+ "name": "GenImageCellular",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "tileSize",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Generate image: cellular algorithm, bigger tileSize means bigger cells",
+ "custom": false
+ },
+ {
+ "name": "GenImageText",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Generate image: grayscale image from text data",
+ "custom": false
+ },
+ {
+ "name": "ImageCopy",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Create an image duplicate (useful for transformations)",
+ "custom": false
+ },
+ {
+ "name": "ImageFromImage",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ },
+ {
+ "name": "rec",
+ "typ": "Rectangle"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Create an image from another image piece",
+ "custom": false
+ },
+ {
+ "name": "ImageText",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fontSize",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Create an image from text (default font)",
+ "custom": false
+ },
+ {
+ "name": "ImageTextEx",
+ "params": [
+ {
+ "name": "font",
+ "typ": "Font"
+ },
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fontSize",
+ "typ": "f32"
+ },
+ {
+ "name": "spacing",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Create an image from text (custom sprite font)",
+ "custom": false
+ },
+ {
+ "name": "ImageFormat",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "newFormat",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Convert image data to desired format",
+ "custom": false
+ },
+ {
+ "name": "ImageToPOT",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "fill",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Convert image to POT (power-of-two)",
+ "custom": false
+ },
+ {
+ "name": "ImageCrop",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "crop",
+ "typ": "Rectangle"
+ }
+ ],
+ "returnType": "void",
+ "description": "Crop an image to a defined rectangle",
+ "custom": false
+ },
+ {
+ "name": "ImageAlphaCrop",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "threshold",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Crop image depending on alpha value",
+ "custom": false
+ },
+ {
+ "name": "ImageAlphaClear",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ },
+ {
+ "name": "threshold",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Clear alpha channel to desired color",
+ "custom": false
+ },
+ {
+ "name": "ImageAlphaMask",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "alphaMask",
+ "typ": "Image"
+ }
+ ],
+ "returnType": "void",
+ "description": "Apply alpha mask to image",
+ "custom": false
+ },
+ {
+ "name": "ImageAlphaPremultiply",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ }
+ ],
+ "returnType": "void",
+ "description": "Premultiply alpha channel",
+ "custom": false
+ },
+ {
+ "name": "ImageBlurGaussian",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "blurSize",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Apply Gaussian blur using a box blur approximation",
+ "custom": false
+ },
+ {
+ "name": "ImageKernelConvolution",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "kernel",
+ "typ": "?[*]f32"
+ },
+ {
+ "name": "kernelSize",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Apply Custom Square image convolution kernel",
+ "custom": false
+ },
+ {
+ "name": "ImageResize",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "newWidth",
+ "typ": "i32"
+ },
+ {
+ "name": "newHeight",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Resize image (Bicubic scaling algorithm)",
+ "custom": false
+ },
+ {
+ "name": "ImageResizeNN",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "newWidth",
+ "typ": "i32"
+ },
+ {
+ "name": "newHeight",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Resize image (Nearest-Neighbor scaling algorithm)",
+ "custom": false
+ },
+ {
+ "name": "ImageResizeCanvas",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "newWidth",
+ "typ": "i32"
+ },
+ {
+ "name": "newHeight",
+ "typ": "i32"
+ },
+ {
+ "name": "offsetX",
+ "typ": "i32"
+ },
+ {
+ "name": "offsetY",
+ "typ": "i32"
+ },
+ {
+ "name": "fill",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Resize canvas and fill with color",
+ "custom": false
+ },
+ {
+ "name": "ImageMipmaps",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ }
+ ],
+ "returnType": "void",
+ "description": "Compute all mipmap levels for a provided image",
+ "custom": false
+ },
+ {
+ "name": "ImageDither",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "rBpp",
+ "typ": "i32"
+ },
+ {
+ "name": "gBpp",
+ "typ": "i32"
+ },
+ {
+ "name": "bBpp",
+ "typ": "i32"
+ },
+ {
+ "name": "aBpp",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Dither image data to 16bpp or lower (Floyd-Steinberg dithering)",
+ "custom": false
+ },
+ {
+ "name": "ImageFlipVertical",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ }
+ ],
+ "returnType": "void",
+ "description": "Flip image vertically",
+ "custom": false
+ },
+ {
+ "name": "ImageFlipHorizontal",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ }
+ ],
+ "returnType": "void",
+ "description": "Flip image horizontally",
+ "custom": false
+ },
+ {
+ "name": "ImageRotate",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "degrees",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Rotate image by input angle in degrees (-359 to 359)",
+ "custom": false
+ },
+ {
+ "name": "ImageRotateCW",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ }
+ ],
+ "returnType": "void",
+ "description": "Rotate image clockwise 90deg",
+ "custom": false
+ },
+ {
+ "name": "ImageRotateCCW",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ }
+ ],
+ "returnType": "void",
+ "description": "Rotate image counter-clockwise 90deg",
+ "custom": false
+ },
+ {
+ "name": "ImageColorTint",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Modify image color: tint",
+ "custom": false
+ },
+ {
+ "name": "ImageColorInvert",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ }
+ ],
+ "returnType": "void",
+ "description": "Modify image color: invert",
+ "custom": false
+ },
+ {
+ "name": "ImageColorGrayscale",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ }
+ ],
+ "returnType": "void",
+ "description": "Modify image color: grayscale",
+ "custom": false
+ },
+ {
+ "name": "ImageColorContrast",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "contrast",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Modify image color: contrast (-100 to 100)",
+ "custom": false
+ },
+ {
+ "name": "ImageColorBrightness",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "brightness",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Modify image color: brightness (-255 to 255)",
+ "custom": false
+ },
+ {
+ "name": "ImageColorReplace",
+ "params": [
+ {
+ "name": "image",
+ "typ": "*Image"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ },
+ {
+ "name": "replace",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Modify image color: replace color",
+ "custom": false
+ },
+ {
+ "name": "LoadImageColors",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ }
+ ],
+ "returnType": "?[*]Color",
+ "description": "Load color data from image as a Color array (RGBA - 32bit)",
+ "custom": false
+ },
+ {
+ "name": "LoadImagePalette",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ },
+ {
+ "name": "maxPaletteSize",
+ "typ": "i32"
+ },
+ {
+ "name": "colorCount",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "?[*]Color",
+ "description": "Load colors palette from image as a Color array (RGBA - 32bit)",
+ "custom": false
+ },
+ {
+ "name": "UnloadImageColors",
+ "params": [
+ {
+ "name": "colors",
+ "typ": "?[*]Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload color data loaded with LoadImageColors()",
+ "custom": false
+ },
+ {
+ "name": "UnloadImagePalette",
+ "params": [
+ {
+ "name": "colors",
+ "typ": "?[*]Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload colors palette loaded with LoadImagePalette()",
+ "custom": false
+ },
+ {
+ "name": "GetImageAlphaBorder",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ },
+ {
+ "name": "threshold",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Rectangle",
+ "description": "Get image alpha border rectangle",
+ "custom": false
+ },
+ {
+ "name": "GetImageColor",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ },
+ {
+ "name": "x",
+ "typ": "i32"
+ },
+ {
+ "name": "y",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Color",
+ "description": "Get image pixel color at (x, y) position",
+ "custom": false
+ },
+ {
+ "name": "ImageClearBackground",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Clear image background with given color",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawPixel",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "posX",
+ "typ": "i32"
+ },
+ {
+ "name": "posY",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw pixel within an image",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawPixelV",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw pixel within an image (Vector version)",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawLine",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "startPosX",
+ "typ": "i32"
+ },
+ {
+ "name": "startPosY",
+ "typ": "i32"
+ },
+ {
+ "name": "endPosX",
+ "typ": "i32"
+ },
+ {
+ "name": "endPosY",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw line within an image",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawLineV",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "start",
+ "typ": "Vector2"
+ },
+ {
+ "name": "end",
+ "typ": "Vector2"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw line within an image (Vector version)",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawCircle",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "centerX",
+ "typ": "i32"
+ },
+ {
+ "name": "centerY",
+ "typ": "i32"
+ },
+ {
+ "name": "radius",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a filled circle within an image",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawCircleV",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "radius",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a filled circle within an image (Vector version)",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawCircleLines",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "centerX",
+ "typ": "i32"
+ },
+ {
+ "name": "centerY",
+ "typ": "i32"
+ },
+ {
+ "name": "radius",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw circle outline within an image",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawCircleLinesV",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "center",
+ "typ": "Vector2"
+ },
+ {
+ "name": "radius",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw circle outline within an image (Vector version)",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawRectangle",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "posX",
+ "typ": "i32"
+ },
+ {
+ "name": "posY",
+ "typ": "i32"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw rectangle within an image",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawRectangleV",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "size",
+ "typ": "Vector2"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw rectangle within an image (Vector version)",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawRectangleRec",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "rec",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw rectangle within an image",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawRectangleLines",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "rec",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "thick",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw rectangle lines within an image",
+ "custom": false
+ },
+ {
+ "name": "ImageDraw",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "src",
+ "typ": "Image"
+ },
+ {
+ "name": "srcRec",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "dstRec",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a source image within a destination image (tint applied to source)",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawText",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "posX",
+ "typ": "i32"
+ },
+ {
+ "name": "posY",
+ "typ": "i32"
+ },
+ {
+ "name": "fontSize",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw text (using default font) within an image (destination)",
+ "custom": false
+ },
+ {
+ "name": "ImageDrawTextEx",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "*Image"
+ },
+ {
+ "name": "font",
+ "typ": "Font"
+ },
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "fontSize",
+ "typ": "f32"
+ },
+ {
+ "name": "spacing",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw text (custom sprite font) within an image (destination)",
+ "custom": false
+ },
+ {
+ "name": "LoadTexture",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "Texture2D",
+ "description": "Load texture from file into GPU memory (VRAM)",
+ "custom": false
+ },
+ {
+ "name": "LoadTextureFromImage",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ }
+ ],
+ "returnType": "Texture2D",
+ "description": "Load texture from image data",
+ "custom": false
+ },
+ {
+ "name": "LoadTextureCubemap",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ },
+ {
+ "name": "layout",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Texture2D",
+ "description": "Load cubemap from image, multiple image cubemap layouts supported",
+ "custom": false
+ },
+ {
+ "name": "LoadRenderTexture",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "RenderTexture2D",
+ "description": "Load texture for rendering (framebuffer)",
+ "custom": false
+ },
+ {
+ "name": "IsTextureReady",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a texture is ready",
+ "custom": false
+ },
+ {
+ "name": "UnloadTexture",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload texture from GPU memory (VRAM)",
+ "custom": false
+ },
+ {
+ "name": "IsRenderTextureReady",
+ "params": [
+ {
+ "name": "target",
+ "typ": "RenderTexture2D"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a render texture is ready",
+ "custom": false
+ },
+ {
+ "name": "UnloadRenderTexture",
+ "params": [
+ {
+ "name": "target",
+ "typ": "RenderTexture2D"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload render texture from GPU memory (VRAM)",
+ "custom": false
+ },
+ {
+ "name": "UpdateTexture",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "pixels",
+ "typ": "*const anyopaque"
+ }
+ ],
+ "returnType": "void",
+ "description": "Update GPU texture with new data",
+ "custom": false
+ },
+ {
+ "name": "UpdateTextureRec",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "rec",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "pixels",
+ "typ": "*const anyopaque"
+ }
+ ],
+ "returnType": "void",
+ "description": "Update GPU texture rectangle with new data",
+ "custom": false
+ },
+ {
+ "name": "TextFormat",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "rewritten in inject.zig",
+ "custom": true
+ },
+ {
+ "name": "SetTextureFilter",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "filter",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set texture scaling filter mode",
+ "custom": false
+ },
+ {
+ "name": "SetTextureWrap",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "wrap",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set texture wrapping mode",
+ "custom": false
+ },
+ {
+ "name": "DrawTexture",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "posX",
+ "typ": "i32"
+ },
+ {
+ "name": "posY",
+ "typ": "i32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a Texture2D",
+ "custom": false
+ },
+ {
+ "name": "DrawTextureV",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a Texture2D with position defined as Vector2",
+ "custom": false
+ },
+ {
+ "name": "DrawTextureEx",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "rotation",
+ "typ": "f32"
+ },
+ {
+ "name": "scale",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a Texture2D with extended parameters",
+ "custom": false
+ },
+ {
+ "name": "DrawTextureRec",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "source",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a part of a texture defined by a rectangle",
+ "custom": false
+ },
+ {
+ "name": "DrawTexturePro",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "source",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "dest",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "origin",
+ "typ": "Vector2"
+ },
+ {
+ "name": "rotation",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a part of a texture defined by a rectangle with 'pro' parameters",
+ "custom": false
+ },
+ {
+ "name": "DrawTextureNPatch",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "nPatchInfo",
+ "typ": "NPatchInfo"
+ },
+ {
+ "name": "dest",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "origin",
+ "typ": "Vector2"
+ },
+ {
+ "name": "rotation",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draws a texture (or part of it) that stretches or shrinks nicely",
+ "custom": false
+ },
+ {
+ "name": "Fade",
+ "params": [
+ {
+ "name": "color",
+ "typ": "Color"
+ },
+ {
+ "name": "alpha",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Color",
+ "description": "Get color with alpha applied, alpha goes from 0.0f to 1.0f",
+ "custom": false
+ },
+ {
+ "name": "ColorToInt",
+ "params": [
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get hexadecimal value for a Color",
+ "custom": false
+ },
+ {
+ "name": "ColorNormalize",
+ "params": [
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "Get Color normalized as float [0..1]",
+ "custom": false
+ },
+ {
+ "name": "ColorFromNormalized",
+ "params": [
+ {
+ "name": "normalized",
+ "typ": "Vector4"
+ }
+ ],
+ "returnType": "Color",
+ "description": "Get Color from normalized values [0..1]",
+ "custom": false
+ },
+ {
+ "name": "ColorToHSV",
+ "params": [
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "Get HSV values for a Color, hue [0..360], saturation/value [0..1]",
+ "custom": false
+ },
+ {
+ "name": "ColorFromHSV",
+ "params": [
+ {
+ "name": "hue",
+ "typ": "f32"
+ },
+ {
+ "name": "saturation",
+ "typ": "f32"
+ },
+ {
+ "name": "value",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Color",
+ "description": "Get a Color from HSV values, hue [0..360], saturation/value [0..1]",
+ "custom": false
+ },
+ {
+ "name": "ColorTint",
+ "params": [
+ {
+ "name": "color",
+ "typ": "Color"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "Color",
+ "description": "Get color multiplied with another color",
+ "custom": false
+ },
+ {
+ "name": "ColorBrightness",
+ "params": [
+ {
+ "name": "color",
+ "typ": "Color"
+ },
+ {
+ "name": "factor",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Color",
+ "description": "Get color with brightness correction, brightness factor goes from -1.0f to 1.0f",
+ "custom": false
+ },
+ {
+ "name": "ColorContrast",
+ "params": [
+ {
+ "name": "color",
+ "typ": "Color"
+ },
+ {
+ "name": "contrast",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Color",
+ "description": "Get color with contrast correction, contrast values between -1.0f and 1.0f",
+ "custom": false
+ },
+ {
+ "name": "ColorAlpha",
+ "params": [
+ {
+ "name": "color",
+ "typ": "Color"
+ },
+ {
+ "name": "alpha",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Color",
+ "description": "Get color with alpha applied, alpha goes from 0.0f to 1.0f",
+ "custom": false
+ },
+ {
+ "name": "ColorAlphaBlend",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "Color"
+ },
+ {
+ "name": "src",
+ "typ": "Color"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "Color",
+ "description": "Get src alpha-blended into dst color with tint",
+ "custom": false
+ },
+ {
+ "name": "GetColor",
+ "params": [
+ {
+ "name": "hexValue",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "Color",
+ "description": "Get Color structure from hexadecimal value",
+ "custom": false
+ },
+ {
+ "name": "GetPixelColor",
+ "params": [
+ {
+ "name": "srcPtr",
+ "typ": "*anyopaque"
+ },
+ {
+ "name": "format",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Color",
+ "description": "Get Color from a source pixel pointer of certain format",
+ "custom": false
+ },
+ {
+ "name": "SetPixelColor",
+ "params": [
+ {
+ "name": "dstPtr",
+ "typ": "*anyopaque"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ },
+ {
+ "name": "format",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set color formatted into destination pixel pointer",
+ "custom": false
+ },
+ {
+ "name": "GetPixelDataSize",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "format",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get pixel data size in bytes for certain format",
+ "custom": false
+ },
+ {
+ "name": "GetFontDefault",
+ "params": [],
+ "returnType": "Font",
+ "description": "Get the default Font",
+ "custom": false
+ },
+ {
+ "name": "LoadFont",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "Font",
+ "description": "Load font from file into GPU memory (VRAM)",
+ "custom": false
+ },
+ {
+ "name": "LoadFontEx",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fontSize",
+ "typ": "i32"
+ },
+ {
+ "name": "codepoints",
+ "typ": "?[*]i32"
+ },
+ {
+ "name": "codepointCount",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Font",
+ "description": "Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character setFont",
+ "custom": false
+ },
+ {
+ "name": "LoadFontFromImage",
+ "params": [
+ {
+ "name": "image",
+ "typ": "Image"
+ },
+ {
+ "name": "key",
+ "typ": "Color"
+ },
+ {
+ "name": "firstChar",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Font",
+ "description": "Load font from Image (XNA style)",
+ "custom": false
+ },
+ {
+ "name": "LoadFontFromMemory",
+ "params": [
+ {
+ "name": "fileType",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fileData",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ },
+ {
+ "name": "fontSize",
+ "typ": "i32"
+ },
+ {
+ "name": "codepoints",
+ "typ": "?[*]i32"
+ },
+ {
+ "name": "codepointCount",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Font",
+ "description": "Load font from memory buffer, fileType refers to extension: i.e. '.ttf'",
+ "custom": false
+ },
+ {
+ "name": "IsFontReady",
+ "params": [
+ {
+ "name": "font",
+ "typ": "Font"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a font is ready",
+ "custom": false
+ },
+ {
+ "name": "TextFormat",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "rewritten in inject.zig",
+ "custom": true
+ },
+ {
+ "name": "GenImageFontAtlas",
+ "params": [
+ {
+ "name": "glyphs",
+ "typ": "?[*]const GlyphInfo"
+ },
+ {
+ "name": "glyphRecs",
+ "typ": "?[*]Rectangle"
+ },
+ {
+ "name": "glyphCount",
+ "typ": "i32"
+ },
+ {
+ "name": "fontSize",
+ "typ": "i32"
+ },
+ {
+ "name": "padding",
+ "typ": "i32"
+ },
+ {
+ "name": "packMethod",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Image",
+ "description": "Generate image font atlas using chars info",
+ "custom": false
+ },
+ {
+ "name": "UnloadFontData",
+ "params": [
+ {
+ "name": "glyphs",
+ "typ": "?[*]GlyphInfo"
+ },
+ {
+ "name": "glyphCount",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload font chars info data (RAM)",
+ "custom": false
+ },
+ {
+ "name": "UnloadFont",
+ "params": [
+ {
+ "name": "font",
+ "typ": "Font"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload font from GPU memory (VRAM)",
+ "custom": false
+ },
+ {
+ "name": "ExportFontAsCode",
+ "params": [
+ {
+ "name": "font",
+ "typ": "Font"
+ },
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Export font as code file, returns true on success",
+ "custom": false
+ },
+ {
+ "name": "DrawFPS",
+ "params": [
+ {
+ "name": "posX",
+ "typ": "i32"
+ },
+ {
+ "name": "posY",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw current FPS",
+ "custom": false
+ },
+ {
+ "name": "DrawText",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "posX",
+ "typ": "i32"
+ },
+ {
+ "name": "posY",
+ "typ": "i32"
+ },
+ {
+ "name": "fontSize",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw text (using default font)",
+ "custom": false
+ },
+ {
+ "name": "DrawTextEx",
+ "params": [
+ {
+ "name": "font",
+ "typ": "Font"
+ },
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "fontSize",
+ "typ": "f32"
+ },
+ {
+ "name": "spacing",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw text using font and additional parameters",
+ "custom": false
+ },
+ {
+ "name": "DrawTextPro",
+ "params": [
+ {
+ "name": "font",
+ "typ": "Font"
+ },
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "origin",
+ "typ": "Vector2"
+ },
+ {
+ "name": "rotation",
+ "typ": "f32"
+ },
+ {
+ "name": "fontSize",
+ "typ": "f32"
+ },
+ {
+ "name": "spacing",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw text using Font and pro parameters (rotation)",
+ "custom": false
+ },
+ {
+ "name": "DrawTextCodepoint",
+ "params": [
+ {
+ "name": "font",
+ "typ": "Font"
+ },
+ {
+ "name": "codepoint",
+ "typ": "i32"
+ },
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "fontSize",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw one character (codepoint)",
+ "custom": false
+ },
+ {
+ "name": "DrawTextCodepoints",
+ "params": [
+ {
+ "name": "font",
+ "typ": "Font"
+ },
+ {
+ "name": "codepoints",
+ "typ": "?[*]const i32"
+ },
+ {
+ "name": "codepointCount",
+ "typ": "i32"
+ },
+ {
+ "name": "position",
+ "typ": "Vector2"
+ },
+ {
+ "name": "fontSize",
+ "typ": "f32"
+ },
+ {
+ "name": "spacing",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw multiple character (codepoint)",
+ "custom": false
+ },
+ {
+ "name": "SetTextLineSpacing",
+ "params": [
+ {
+ "name": "spacing",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set vertical line spacing when drawing with line-breaks",
+ "custom": false
+ },
+ {
+ "name": "MeasureText",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fontSize",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Measure string width for default font",
+ "custom": false
+ },
+ {
+ "name": "MeasureTextEx",
+ "params": [
+ {
+ "name": "font",
+ "typ": "Font"
+ },
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fontSize",
+ "typ": "f32"
+ },
+ {
+ "name": "spacing",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "Measure string size for Font",
+ "custom": false
+ },
+ {
+ "name": "GetGlyphIndex",
+ "params": [
+ {
+ "name": "font",
+ "typ": "Font"
+ },
+ {
+ "name": "codepoint",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found",
+ "custom": false
+ },
+ {
+ "name": "GetGlyphInfo",
+ "params": [
+ {
+ "name": "font",
+ "typ": "Font"
+ },
+ {
+ "name": "codepoint",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "GlyphInfo",
+ "description": "Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found",
+ "custom": false
+ },
+ {
+ "name": "GetGlyphAtlasRec",
+ "params": [
+ {
+ "name": "font",
+ "typ": "Font"
+ },
+ {
+ "name": "codepoint",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Rectangle",
+ "description": "Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found",
+ "custom": false
+ },
+ {
+ "name": "LoadUTF8",
+ "params": [
+ {
+ "name": "codepoints",
+ "typ": "?[*]const i32"
+ },
+ {
+ "name": "length",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "?[*]u8",
+ "description": "Load UTF-8 text encoded from codepoints array",
+ "custom": false
+ },
+ {
+ "name": "UnloadUTF8",
+ "params": [
+ {
+ "name": "text",
+ "typ": "?[*]u8"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload UTF-8 text encoded from codepoints array",
+ "custom": false
+ },
+ {
+ "name": "LoadCodepoints",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "count",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "?[*]i32",
+ "description": "Load all codepoints from a UTF-8 text string, codepoints count returned by parameter",
+ "custom": false
+ },
+ {
+ "name": "UnloadCodepoints",
+ "params": [
+ {
+ "name": "codepoints",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload codepoints data from memory",
+ "custom": false
+ },
+ {
+ "name": "GetCodepointCount",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get total number of codepoints in a UTF-8 encoded string",
+ "custom": false
+ },
+ {
+ "name": "GetCodepoint",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "codepointSize",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure",
+ "custom": false
+ },
+ {
+ "name": "GetCodepointNext",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "codepointSize",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure",
+ "custom": false
+ },
+ {
+ "name": "GetCodepointPrevious",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "codepointSize",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure",
+ "custom": false
+ },
+ {
+ "name": "CodepointToUTF8",
+ "params": [
+ {
+ "name": "codepoint",
+ "typ": "i32"
+ },
+ {
+ "name": "utf8Size",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Encode one codepoint into UTF-8 byte array (array length returned as parameter)",
+ "custom": false
+ },
+ {
+ "name": "TextCopy",
+ "params": [
+ {
+ "name": "dst",
+ "typ": "?[*]u8"
+ },
+ {
+ "name": "src",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Copy one string to another, returns bytes copied",
+ "custom": false
+ },
+ {
+ "name": "TextIsEqual",
+ "params": [
+ {
+ "name": "text1",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "text2",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if two text string are equal",
+ "custom": false
+ },
+ {
+ "name": "TextLength",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Get text length, checks for '\\0' ending",
+ "custom": false
+ },
+ {
+ "name": "GenTextureMipmaps",
+ "params": [
+ {
+ "name": "texture",
+ "typ": "*Texture2D"
+ }
+ ],
+ "returnType": "void",
+ "description": "Generate GPU mipmaps for a texture",
+ "custom": true
+ },
+ {
+ "name": "TextSubtext",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "position",
+ "typ": "i32"
+ },
+ {
+ "name": "length",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Get a piece of a text string",
+ "custom": false
+ },
+ {
+ "name": "TextReplace",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "replace",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "by",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "?[*]u8",
+ "description": "Replace text string (WARNING: memory must be freed!)",
+ "custom": false
+ },
+ {
+ "name": "TextInsert",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "insert",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "position",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "?[*]u8",
+ "description": "Insert text in a position (WARNING: memory must be freed!)",
+ "custom": false
+ },
+ {
+ "name": "LoadFontData",
+ "params": [
+ {
+ "name": "fileData",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ },
+ {
+ "name": "fontSize",
+ "typ": "i32"
+ },
+ {
+ "name": "fontChars",
+ "typ": "[*]i32"
+ },
+ {
+ "name": "glyphCount",
+ "typ": "i32"
+ },
+ {
+ "name": "typ",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "[*]GlyphInfo",
+ "description": "Load font data for further use",
+ "custom": true
+ },
+ {
+ "name": "TextJoin",
+ "params": [
+ {
+ "name": "textList",
+ "typ": "[*]const [*:0]const u8"
+ },
+ {
+ "name": "count",
+ "typ": "i32"
+ },
+ {
+ "name": "delimiter",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "overriden in inject.zig",
+ "custom": true
+ },
+ {
+ "name": "rlSetVertexAttribute",
+ "params": [
+ {
+ "name": "index",
+ "typ": "u32"
+ },
+ {
+ "name": "compSize",
+ "typ": "i32"
+ },
+ {
+ "name": "typ",
+ "typ": "i32"
+ },
+ {
+ "name": "normalized",
+ "typ": "bool"
+ },
+ {
+ "name": "stride",
+ "typ": "i32"
+ },
+ {
+ "name": "pointer",
+ "typ": "*anyopaque"
+ }
+ ],
+ "returnType": "void",
+ "description": "",
+ "custom": true
+ },
+ {
+ "name": "TextFindIndex",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "find",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Find first text occurrence within a string",
+ "custom": false
+ },
+ {
+ "name": "TextToUpper",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Get upper case version of provided string",
+ "custom": false
+ },
+ {
+ "name": "TextToLower",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Get lower case version of provided string",
+ "custom": false
+ },
+ {
+ "name": "TextToPascal",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Get Pascal case notation version of provided string",
+ "custom": false
+ },
+ {
+ "name": "TextToInteger",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get integer value from text (negative values not supported)",
+ "custom": false
+ },
+ {
+ "name": "TextToFloat",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "f32",
+ "description": "Get float value from text (negative values not supported)",
+ "custom": false
+ },
+ {
+ "name": "DrawLine3D",
+ "params": [
+ {
+ "name": "startPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "endPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a line in 3D world space",
+ "custom": false
+ },
+ {
+ "name": "DrawPoint3D",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a point in 3D space, actually a small line",
+ "custom": false
+ },
+ {
+ "name": "DrawCircle3D",
+ "params": [
+ {
+ "name": "center",
+ "typ": "Vector3"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "rotationAxis",
+ "typ": "Vector3"
+ },
+ {
+ "name": "rotationAngle",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a circle in 3D world space",
+ "custom": false
+ },
+ {
+ "name": "DrawTriangle3D",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v3",
+ "typ": "Vector3"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a color-filled triangle (vertex in counter-clockwise order!)",
+ "custom": false
+ },
+ {
+ "name": "DrawTriangleStrip3D",
+ "params": [
+ {
+ "name": "points",
+ "typ": "?[*]Vector3"
+ },
+ {
+ "name": "pointCount",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a triangle strip defined by points",
+ "custom": false
+ },
+ {
+ "name": "DrawCube",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "width",
+ "typ": "f32"
+ },
+ {
+ "name": "height",
+ "typ": "f32"
+ },
+ {
+ "name": "length",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw cube",
+ "custom": false
+ },
+ {
+ "name": "DrawCubeV",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "size",
+ "typ": "Vector3"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw cube (Vector version)",
+ "custom": false
+ },
+ {
+ "name": "DrawCubeWires",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "width",
+ "typ": "f32"
+ },
+ {
+ "name": "height",
+ "typ": "f32"
+ },
+ {
+ "name": "length",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw cube wires",
+ "custom": false
+ },
+ {
+ "name": "DrawCubeWiresV",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "size",
+ "typ": "Vector3"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw cube wires (Vector version)",
+ "custom": false
+ },
+ {
+ "name": "DrawSphere",
+ "params": [
+ {
+ "name": "centerPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw sphere",
+ "custom": false
+ },
+ {
+ "name": "DrawSphereEx",
+ "params": [
+ {
+ "name": "centerPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "rings",
+ "typ": "i32"
+ },
+ {
+ "name": "slices",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw sphere with extended parameters",
+ "custom": false
+ },
+ {
+ "name": "DrawSphereWires",
+ "params": [
+ {
+ "name": "centerPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "rings",
+ "typ": "i32"
+ },
+ {
+ "name": "slices",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw sphere wires",
+ "custom": false
+ },
+ {
+ "name": "DrawCylinder",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "radiusTop",
+ "typ": "f32"
+ },
+ {
+ "name": "radiusBottom",
+ "typ": "f32"
+ },
+ {
+ "name": "height",
+ "typ": "f32"
+ },
+ {
+ "name": "slices",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a cylinder/cone",
+ "custom": false
+ },
+ {
+ "name": "DrawCylinderEx",
+ "params": [
+ {
+ "name": "startPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "endPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "startRadius",
+ "typ": "f32"
+ },
+ {
+ "name": "endRadius",
+ "typ": "f32"
+ },
+ {
+ "name": "sides",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a cylinder with base at startPos and top at endPos",
+ "custom": false
+ },
+ {
+ "name": "DrawCylinderWires",
+ "params": [
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "radiusTop",
+ "typ": "f32"
+ },
+ {
+ "name": "radiusBottom",
+ "typ": "f32"
+ },
+ {
+ "name": "height",
+ "typ": "f32"
+ },
+ {
+ "name": "slices",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a cylinder/cone wires",
+ "custom": false
+ },
+ {
+ "name": "DrawCylinderWiresEx",
+ "params": [
+ {
+ "name": "startPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "endPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "startRadius",
+ "typ": "f32"
+ },
+ {
+ "name": "endRadius",
+ "typ": "f32"
+ },
+ {
+ "name": "sides",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a cylinder wires with base at startPos and top at endPos",
+ "custom": false
+ },
+ {
+ "name": "DrawCapsule",
+ "params": [
+ {
+ "name": "startPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "endPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "slices",
+ "typ": "i32"
+ },
+ {
+ "name": "rings",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a capsule with the center of its sphere caps at startPos and endPos",
+ "custom": false
+ },
+ {
+ "name": "DrawCapsuleWires",
+ "params": [
+ {
+ "name": "startPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "endPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "slices",
+ "typ": "i32"
+ },
+ {
+ "name": "rings",
+ "typ": "i32"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw capsule wireframe with the center of its sphere caps at startPos and endPos",
+ "custom": false
+ },
+ {
+ "name": "DrawPlane",
+ "params": [
+ {
+ "name": "centerPos",
+ "typ": "Vector3"
+ },
+ {
+ "name": "size",
+ "typ": "Vector2"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a plane XZ",
+ "custom": false
+ },
+ {
+ "name": "DrawRay",
+ "params": [
+ {
+ "name": "ray",
+ "typ": "Ray"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a ray line",
+ "custom": false
+ },
+ {
+ "name": "DrawGrid",
+ "params": [
+ {
+ "name": "slices",
+ "typ": "i32"
+ },
+ {
+ "name": "spacing",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a grid (centered at (0, 0, 0))",
+ "custom": false
+ },
+ {
+ "name": "LoadModel",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "Model",
+ "description": "Load model from files (meshes and materials)",
+ "custom": false
+ },
+ {
+ "name": "LoadModelFromMesh",
+ "params": [
+ {
+ "name": "mesh",
+ "typ": "Mesh"
+ }
+ ],
+ "returnType": "Model",
+ "description": "Load model from generated mesh (default material)",
+ "custom": false
+ },
+ {
+ "name": "IsModelReady",
+ "params": [
+ {
+ "name": "model",
+ "typ": "Model"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a model is ready",
+ "custom": false
+ },
+ {
+ "name": "UnloadModel",
+ "params": [
+ {
+ "name": "model",
+ "typ": "Model"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload model (including meshes) from memory (RAM and/or VRAM)",
+ "custom": false
+ },
+ {
+ "name": "GetModelBoundingBox",
+ "params": [
+ {
+ "name": "model",
+ "typ": "Model"
+ }
+ ],
+ "returnType": "BoundingBox",
+ "description": "Compute model bounding box limits (considers all meshes)",
+ "custom": false
+ },
+ {
+ "name": "DrawModel",
+ "params": [
+ {
+ "name": "model",
+ "typ": "Model"
+ },
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "scale",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a model (with texture if set)",
+ "custom": false
+ },
+ {
+ "name": "DrawModelEx",
+ "params": [
+ {
+ "name": "model",
+ "typ": "Model"
+ },
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "rotationAxis",
+ "typ": "Vector3"
+ },
+ {
+ "name": "rotationAngle",
+ "typ": "f32"
+ },
+ {
+ "name": "scale",
+ "typ": "Vector3"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a model with extended parameters",
+ "custom": false
+ },
+ {
+ "name": "DrawModelWires",
+ "params": [
+ {
+ "name": "model",
+ "typ": "Model"
+ },
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "scale",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a model wires (with texture if set)",
+ "custom": false
+ },
+ {
+ "name": "DrawModelWiresEx",
+ "params": [
+ {
+ "name": "model",
+ "typ": "Model"
+ },
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "rotationAxis",
+ "typ": "Vector3"
+ },
+ {
+ "name": "rotationAngle",
+ "typ": "f32"
+ },
+ {
+ "name": "scale",
+ "typ": "Vector3"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a model wires (with texture if set) with extended parameters",
+ "custom": false
+ },
+ {
+ "name": "DrawBoundingBox",
+ "params": [
+ {
+ "name": "box",
+ "typ": "BoundingBox"
+ },
+ {
+ "name": "color",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw bounding box (wires)",
+ "custom": false
+ },
+ {
+ "name": "DrawBillboard",
+ "params": [
+ {
+ "name": "camera",
+ "typ": "Camera3D"
+ },
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "size",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a billboard texture",
+ "custom": false
+ },
+ {
+ "name": "DrawBillboardRec",
+ "params": [
+ {
+ "name": "camera",
+ "typ": "Camera3D"
+ },
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "source",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "size",
+ "typ": "Vector2"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a billboard texture defined by source",
+ "custom": false
+ },
+ {
+ "name": "DrawBillboardPro",
+ "params": [
+ {
+ "name": "camera",
+ "typ": "Camera3D"
+ },
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ },
+ {
+ "name": "source",
+ "typ": "Rectangle"
+ },
+ {
+ "name": "position",
+ "typ": "Vector3"
+ },
+ {
+ "name": "up",
+ "typ": "Vector3"
+ },
+ {
+ "name": "size",
+ "typ": "Vector2"
+ },
+ {
+ "name": "origin",
+ "typ": "Vector2"
+ },
+ {
+ "name": "rotation",
+ "typ": "f32"
+ },
+ {
+ "name": "tint",
+ "typ": "Color"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a billboard texture defined by source and rotation",
+ "custom": false
+ },
+ {
+ "name": "UploadMesh",
+ "params": [
+ {
+ "name": "mesh",
+ "typ": "?[*]Mesh"
+ },
+ {
+ "name": "dynamic",
+ "typ": "bool"
+ }
+ ],
+ "returnType": "void",
+ "description": "Upload mesh vertex data in GPU and provide VAO/VBO ids",
+ "custom": false
+ },
+ {
+ "name": "UpdateMeshBuffer",
+ "params": [
+ {
+ "name": "mesh",
+ "typ": "Mesh"
+ },
+ {
+ "name": "index",
+ "typ": "i32"
+ },
+ {
+ "name": "data",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ },
+ {
+ "name": "offset",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Update mesh vertex data in GPU for a specific buffer index",
+ "custom": false
+ },
+ {
+ "name": "UnloadMesh",
+ "params": [
+ {
+ "name": "mesh",
+ "typ": "Mesh"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload mesh data from CPU and GPU",
+ "custom": false
+ },
+ {
+ "name": "DrawMesh",
+ "params": [
+ {
+ "name": "mesh",
+ "typ": "Mesh"
+ },
+ {
+ "name": "material",
+ "typ": "Material"
+ },
+ {
+ "name": "transform",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw a 3d mesh with material and transform",
+ "custom": false
+ },
+ {
+ "name": "DrawMeshInstanced",
+ "params": [
+ {
+ "name": "mesh",
+ "typ": "Mesh"
+ },
+ {
+ "name": "material",
+ "typ": "Material"
+ },
+ {
+ "name": "transforms",
+ "typ": "?[*]const Matrix"
+ },
+ {
+ "name": "instances",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw multiple mesh instances with material and different transforms",
+ "custom": false
+ },
+ {
+ "name": "GetMeshBoundingBox",
+ "params": [
+ {
+ "name": "mesh",
+ "typ": "Mesh"
+ }
+ ],
+ "returnType": "BoundingBox",
+ "description": "Compute mesh bounding box limits",
+ "custom": false
+ },
+ {
+ "name": "GenMeshTangents",
+ "params": [
+ {
+ "name": "mesh",
+ "typ": "?[*]Mesh"
+ }
+ ],
+ "returnType": "void",
+ "description": "Compute mesh tangents",
+ "custom": false
+ },
+ {
+ "name": "ExportMesh",
+ "params": [
+ {
+ "name": "mesh",
+ "typ": "Mesh"
+ },
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Export mesh data to file, returns true on success",
+ "custom": false
+ },
+ {
+ "name": "ExportMeshAsCode",
+ "params": [
+ {
+ "name": "mesh",
+ "typ": "Mesh"
+ },
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Export mesh as code file (.h) defining multiple arrays of vertex attributes",
+ "custom": false
+ },
+ {
+ "name": "GenMeshPoly",
+ "params": [
+ {
+ "name": "sides",
+ "typ": "i32"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Mesh",
+ "description": "Generate polygonal mesh",
+ "custom": false
+ },
+ {
+ "name": "GenMeshPlane",
+ "params": [
+ {
+ "name": "width",
+ "typ": "f32"
+ },
+ {
+ "name": "length",
+ "typ": "f32"
+ },
+ {
+ "name": "resX",
+ "typ": "i32"
+ },
+ {
+ "name": "resZ",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Mesh",
+ "description": "Generate plane mesh (with subdivisions)",
+ "custom": false
+ },
+ {
+ "name": "GenMeshCube",
+ "params": [
+ {
+ "name": "width",
+ "typ": "f32"
+ },
+ {
+ "name": "height",
+ "typ": "f32"
+ },
+ {
+ "name": "length",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Mesh",
+ "description": "Generate cuboid mesh",
+ "custom": false
+ },
+ {
+ "name": "GenMeshSphere",
+ "params": [
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "rings",
+ "typ": "i32"
+ },
+ {
+ "name": "slices",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Mesh",
+ "description": "Generate sphere mesh (standard sphere)",
+ "custom": false
+ },
+ {
+ "name": "GenMeshHemiSphere",
+ "params": [
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "rings",
+ "typ": "i32"
+ },
+ {
+ "name": "slices",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Mesh",
+ "description": "Generate half-sphere mesh (no bottom cap)",
+ "custom": false
+ },
+ {
+ "name": "GenMeshCylinder",
+ "params": [
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "height",
+ "typ": "f32"
+ },
+ {
+ "name": "slices",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Mesh",
+ "description": "Generate cylinder mesh",
+ "custom": false
+ },
+ {
+ "name": "GenMeshCone",
+ "params": [
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "height",
+ "typ": "f32"
+ },
+ {
+ "name": "slices",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Mesh",
+ "description": "Generate cone/pyramid mesh",
+ "custom": false
+ },
+ {
+ "name": "GenMeshTorus",
+ "params": [
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "size",
+ "typ": "f32"
+ },
+ {
+ "name": "radSeg",
+ "typ": "i32"
+ },
+ {
+ "name": "sides",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Mesh",
+ "description": "Generate torus mesh",
+ "custom": false
+ },
+ {
+ "name": "GenMeshKnot",
+ "params": [
+ {
+ "name": "radius",
+ "typ": "f32"
+ },
+ {
+ "name": "size",
+ "typ": "f32"
+ },
+ {
+ "name": "radSeg",
+ "typ": "i32"
+ },
+ {
+ "name": "sides",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Mesh",
+ "description": "Generate trefoil knot mesh",
+ "custom": false
+ },
+ {
+ "name": "GenMeshHeightmap",
+ "params": [
+ {
+ "name": "heightmap",
+ "typ": "Image"
+ },
+ {
+ "name": "size",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Mesh",
+ "description": "Generate heightmap mesh from image data",
+ "custom": false
+ },
+ {
+ "name": "GenMeshCubicmap",
+ "params": [
+ {
+ "name": "cubicmap",
+ "typ": "Image"
+ },
+ {
+ "name": "cubeSize",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Mesh",
+ "description": "Generate cubes-based map mesh from image data",
+ "custom": false
+ },
+ {
+ "name": "LoadMaterials",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "materialCount",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "?[*]Material",
+ "description": "Load materials from model file",
+ "custom": false
+ },
+ {
+ "name": "LoadMaterialDefault",
+ "params": [],
+ "returnType": "Material",
+ "description": "Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)",
+ "custom": false
+ },
+ {
+ "name": "IsMaterialReady",
+ "params": [
+ {
+ "name": "material",
+ "typ": "Material"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a material is ready",
+ "custom": false
+ },
+ {
+ "name": "UnloadMaterial",
+ "params": [
+ {
+ "name": "material",
+ "typ": "Material"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload material from GPU memory (VRAM)",
+ "custom": false
+ },
+ {
+ "name": "SetMaterialTexture",
+ "params": [
+ {
+ "name": "material",
+ "typ": "?[*]Material"
+ },
+ {
+ "name": "mapType",
+ "typ": "i32"
+ },
+ {
+ "name": "texture",
+ "typ": "Texture2D"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)",
+ "custom": false
+ },
+ {
+ "name": "SetModelMeshMaterial",
+ "params": [
+ {
+ "name": "model",
+ "typ": "?[*]Model"
+ },
+ {
+ "name": "meshId",
+ "typ": "i32"
+ },
+ {
+ "name": "materialId",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set material for a mesh",
+ "custom": false
+ },
+ {
+ "name": "LoadModelAnimations",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "animCount",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "?[*]ModelAnimation",
+ "description": "Load model animations from file",
+ "custom": false
+ },
+ {
+ "name": "UpdateModelAnimation",
+ "params": [
+ {
+ "name": "model",
+ "typ": "Model"
+ },
+ {
+ "name": "anim",
+ "typ": "ModelAnimation"
+ },
+ {
+ "name": "frame",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Update model animation pose",
+ "custom": false
+ },
+ {
+ "name": "UnloadModelAnimation",
+ "params": [
+ {
+ "name": "anim",
+ "typ": "ModelAnimation"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload animation data",
+ "custom": false
+ },
+ {
+ "name": "UnloadModelAnimations",
+ "params": [
+ {
+ "name": "animations",
+ "typ": "?[*]ModelAnimation"
+ },
+ {
+ "name": "animCount",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload animation array data",
+ "custom": false
+ },
+ {
+ "name": "IsModelAnimationValid",
+ "params": [
+ {
+ "name": "model",
+ "typ": "Model"
+ },
+ {
+ "name": "anim",
+ "typ": "ModelAnimation"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check model animation skeleton match",
+ "custom": false
+ },
+ {
+ "name": "CheckCollisionSpheres",
+ "params": [
+ {
+ "name": "center1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "radius1",
+ "typ": "f32"
+ },
+ {
+ "name": "center2",
+ "typ": "Vector3"
+ },
+ {
+ "name": "radius2",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check collision between two spheres",
+ "custom": false
+ },
+ {
+ "name": "CheckCollisionBoxes",
+ "params": [
+ {
+ "name": "box1",
+ "typ": "BoundingBox"
+ },
+ {
+ "name": "box2",
+ "typ": "BoundingBox"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check collision between two bounding boxes",
+ "custom": false
+ },
+ {
+ "name": "CheckCollisionBoxSphere",
+ "params": [
+ {
+ "name": "box",
+ "typ": "BoundingBox"
+ },
+ {
+ "name": "center",
+ "typ": "Vector3"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check collision between box and sphere",
+ "custom": false
+ },
+ {
+ "name": "GetRayCollisionSphere",
+ "params": [
+ {
+ "name": "ray",
+ "typ": "Ray"
+ },
+ {
+ "name": "center",
+ "typ": "Vector3"
+ },
+ {
+ "name": "radius",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "RayCollision",
+ "description": "Get collision info between ray and sphere",
+ "custom": false
+ },
+ {
+ "name": "GetRayCollisionBox",
+ "params": [
+ {
+ "name": "ray",
+ "typ": "Ray"
+ },
+ {
+ "name": "box",
+ "typ": "BoundingBox"
+ }
+ ],
+ "returnType": "RayCollision",
+ "description": "Get collision info between ray and box",
+ "custom": false
+ },
+ {
+ "name": "GetRayCollisionMesh",
+ "params": [
+ {
+ "name": "ray",
+ "typ": "Ray"
+ },
+ {
+ "name": "mesh",
+ "typ": "Mesh"
+ },
+ {
+ "name": "transform",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "RayCollision",
+ "description": "Get collision info between ray and mesh",
+ "custom": false
+ },
+ {
+ "name": "GetRayCollisionTriangle",
+ "params": [
+ {
+ "name": "ray",
+ "typ": "Ray"
+ },
+ {
+ "name": "p1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "p2",
+ "typ": "Vector3"
+ },
+ {
+ "name": "p3",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "RayCollision",
+ "description": "Get collision info between ray and triangle",
+ "custom": false
+ },
+ {
+ "name": "GetRayCollisionQuad",
+ "params": [
+ {
+ "name": "ray",
+ "typ": "Ray"
+ },
+ {
+ "name": "p1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "p2",
+ "typ": "Vector3"
+ },
+ {
+ "name": "p3",
+ "typ": "Vector3"
+ },
+ {
+ "name": "p4",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "RayCollision",
+ "description": "Get collision info between ray and quad",
+ "custom": false
+ },
+ {
+ "name": "InitAudioDevice",
+ "params": [],
+ "returnType": "void",
+ "description": "Initialize audio device and context",
+ "custom": false
+ },
+ {
+ "name": "CloseAudioDevice",
+ "params": [],
+ "returnType": "void",
+ "description": "Close the audio device and context",
+ "custom": false
+ },
+ {
+ "name": "IsAudioDeviceReady",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if audio device has been initialized successfully",
+ "custom": false
+ },
+ {
+ "name": "SetMasterVolume",
+ "params": [
+ {
+ "name": "volume",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set master volume (listener)",
+ "custom": false
+ },
+ {
+ "name": "GetMasterVolume",
+ "params": [],
+ "returnType": "f32",
+ "description": "Get master volume (listener)",
+ "custom": false
+ },
+ {
+ "name": "LoadWave",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "Wave",
+ "description": "Load wave data from file",
+ "custom": false
+ },
+ {
+ "name": "LoadWaveFromMemory",
+ "params": [
+ {
+ "name": "fileType",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fileData",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Wave",
+ "description": "Load wave from memory buffer, fileType refers to extension: i.e. '.wav'",
+ "custom": false
+ },
+ {
+ "name": "IsWaveReady",
+ "params": [
+ {
+ "name": "wave",
+ "typ": "Wave"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Checks if wave data is ready",
+ "custom": false
+ },
+ {
+ "name": "LoadSound",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "Sound",
+ "description": "Load sound from file",
+ "custom": false
+ },
+ {
+ "name": "LoadSoundFromWave",
+ "params": [
+ {
+ "name": "wave",
+ "typ": "Wave"
+ }
+ ],
+ "returnType": "Sound",
+ "description": "Load sound from wave data",
+ "custom": false
+ },
+ {
+ "name": "LoadSoundAlias",
+ "params": [
+ {
+ "name": "source",
+ "typ": "Sound"
+ }
+ ],
+ "returnType": "Sound",
+ "description": "Create a new sound that shares the same sample data as the source sound, does not own the sound data",
+ "custom": false
+ },
+ {
+ "name": "IsSoundReady",
+ "params": [
+ {
+ "name": "sound",
+ "typ": "Sound"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Checks if a sound is ready",
+ "custom": false
+ },
+ {
+ "name": "UpdateSound",
+ "params": [
+ {
+ "name": "sound",
+ "typ": "Sound"
+ },
+ {
+ "name": "data",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "sampleCount",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Update sound buffer with new data",
+ "custom": false
+ },
+ {
+ "name": "UnloadWave",
+ "params": [
+ {
+ "name": "wave",
+ "typ": "Wave"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload wave data",
+ "custom": false
+ },
+ {
+ "name": "UnloadSound",
+ "params": [
+ {
+ "name": "sound",
+ "typ": "Sound"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload sound",
+ "custom": false
+ },
+ {
+ "name": "UnloadSoundAlias",
+ "params": [
+ {
+ "name": "alias",
+ "typ": "Sound"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload a sound alias (does not deallocate sample data)",
+ "custom": false
+ },
+ {
+ "name": "ExportWave",
+ "params": [
+ {
+ "name": "wave",
+ "typ": "Wave"
+ },
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Export wave data to file, returns true on success",
+ "custom": false
+ },
+ {
+ "name": "ExportWaveAsCode",
+ "params": [
+ {
+ "name": "wave",
+ "typ": "Wave"
+ },
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Export wave sample data to code (.h), returns true on success",
+ "custom": false
+ },
+ {
+ "name": "PlaySound",
+ "params": [
+ {
+ "name": "sound",
+ "typ": "Sound"
+ }
+ ],
+ "returnType": "void",
+ "description": "Play a sound",
+ "custom": false
+ },
+ {
+ "name": "StopSound",
+ "params": [
+ {
+ "name": "sound",
+ "typ": "Sound"
+ }
+ ],
+ "returnType": "void",
+ "description": "Stop playing a sound",
+ "custom": false
+ },
+ {
+ "name": "PauseSound",
+ "params": [
+ {
+ "name": "sound",
+ "typ": "Sound"
+ }
+ ],
+ "returnType": "void",
+ "description": "Pause a sound",
+ "custom": false
+ },
+ {
+ "name": "ResumeSound",
+ "params": [
+ {
+ "name": "sound",
+ "typ": "Sound"
+ }
+ ],
+ "returnType": "void",
+ "description": "Resume a paused sound",
+ "custom": false
+ },
+ {
+ "name": "IsSoundPlaying",
+ "params": [
+ {
+ "name": "sound",
+ "typ": "Sound"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if a sound is currently playing",
+ "custom": false
+ },
+ {
+ "name": "SetSoundVolume",
+ "params": [
+ {
+ "name": "sound",
+ "typ": "Sound"
+ },
+ {
+ "name": "volume",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set volume for a sound (1.0 is max level)",
+ "custom": false
+ },
+ {
+ "name": "SetSoundPitch",
+ "params": [
+ {
+ "name": "sound",
+ "typ": "Sound"
+ },
+ {
+ "name": "pitch",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set pitch for a sound (1.0 is base level)",
+ "custom": false
+ },
+ {
+ "name": "SetSoundPan",
+ "params": [
+ {
+ "name": "sound",
+ "typ": "Sound"
+ },
+ {
+ "name": "pan",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set pan for a sound (0.5 is center)",
+ "custom": false
+ },
+ {
+ "name": "WaveCopy",
+ "params": [
+ {
+ "name": "wave",
+ "typ": "Wave"
+ }
+ ],
+ "returnType": "Wave",
+ "description": "Copy a wave to a new wave",
+ "custom": false
+ },
+ {
+ "name": "WaveCrop",
+ "params": [
+ {
+ "name": "wave",
+ "typ": "?[*]Wave"
+ },
+ {
+ "name": "initSample",
+ "typ": "i32"
+ },
+ {
+ "name": "finalSample",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Crop a wave to defined samples range",
+ "custom": false
+ },
+ {
+ "name": "WaveFormat",
+ "params": [
+ {
+ "name": "wave",
+ "typ": "?[*]Wave"
+ },
+ {
+ "name": "sampleRate",
+ "typ": "i32"
+ },
+ {
+ "name": "sampleSize",
+ "typ": "i32"
+ },
+ {
+ "name": "channels",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Convert wave data to desired format",
+ "custom": false
+ },
+ {
+ "name": "LoadWaveSamples",
+ "params": [
+ {
+ "name": "wave",
+ "typ": "Wave"
+ }
+ ],
+ "returnType": "?[*]f32",
+ "description": "Load samples data from wave as a 32bit float data array",
+ "custom": false
+ },
+ {
+ "name": "UnloadWaveSamples",
+ "params": [
+ {
+ "name": "samples",
+ "typ": "?[*]f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload samples data loaded with LoadWaveSamples()",
+ "custom": false
+ },
+ {
+ "name": "LoadMusicStream",
+ "params": [
+ {
+ "name": "fileName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "Music",
+ "description": "Load music stream from file",
+ "custom": false
+ },
+ {
+ "name": "LoadMusicStreamFromMemory",
+ "params": [
+ {
+ "name": "fileType",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "data",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Music",
+ "description": "Load music stream from data",
+ "custom": false
+ },
+ {
+ "name": "IsMusicReady",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Checks if a music stream is ready",
+ "custom": false
+ },
+ {
+ "name": "UnloadMusicStream",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload music stream",
+ "custom": false
+ },
+ {
+ "name": "PlayMusicStream",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ }
+ ],
+ "returnType": "void",
+ "description": "Start music playing",
+ "custom": false
+ },
+ {
+ "name": "IsMusicStreamPlaying",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if music is playing",
+ "custom": false
+ },
+ {
+ "name": "UpdateMusicStream",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ }
+ ],
+ "returnType": "void",
+ "description": "Updates buffers for music streaming",
+ "custom": false
+ },
+ {
+ "name": "StopMusicStream",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ }
+ ],
+ "returnType": "void",
+ "description": "Stop music playing",
+ "custom": false
+ },
+ {
+ "name": "PauseMusicStream",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ }
+ ],
+ "returnType": "void",
+ "description": "Pause music playing",
+ "custom": false
+ },
+ {
+ "name": "ResumeMusicStream",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ }
+ ],
+ "returnType": "void",
+ "description": "Resume playing paused music",
+ "custom": false
+ },
+ {
+ "name": "SeekMusicStream",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ },
+ {
+ "name": "position",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Seek music to a position (in seconds)",
+ "custom": false
+ },
+ {
+ "name": "SetMusicVolume",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ },
+ {
+ "name": "volume",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set volume for music (1.0 is max level)",
+ "custom": false
+ },
+ {
+ "name": "SetMusicPitch",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ },
+ {
+ "name": "pitch",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set pitch for a music (1.0 is base level)",
+ "custom": false
+ },
+ {
+ "name": "SetMusicPan",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ },
+ {
+ "name": "pan",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set pan for a music (0.5 is center)",
+ "custom": false
+ },
+ {
+ "name": "GetMusicTimeLength",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ }
+ ],
+ "returnType": "f32",
+ "description": "Get music time length (in seconds)",
+ "custom": false
+ },
+ {
+ "name": "GetMusicTimePlayed",
+ "params": [
+ {
+ "name": "music",
+ "typ": "Music"
+ }
+ ],
+ "returnType": "f32",
+ "description": "Get current music time played (in seconds)",
+ "custom": false
+ },
+ {
+ "name": "LoadAudioStream",
+ "params": [
+ {
+ "name": "sampleRate",
+ "typ": "u32"
+ },
+ {
+ "name": "sampleSize",
+ "typ": "u32"
+ },
+ {
+ "name": "channels",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "AudioStream",
+ "description": "Load audio stream (to stream raw audio pcm data)",
+ "custom": false
+ },
+ {
+ "name": "IsAudioStreamReady",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Checks if an audio stream is ready",
+ "custom": false
+ },
+ {
+ "name": "UnloadAudioStream",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload audio stream and free memory",
+ "custom": false
+ },
+ {
+ "name": "UpdateAudioStream",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ },
+ {
+ "name": "data",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "frameCount",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Update audio stream buffers with data",
+ "custom": false
+ },
+ {
+ "name": "IsAudioStreamProcessed",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if any audio stream buffers requires refill",
+ "custom": false
+ },
+ {
+ "name": "PlayAudioStream",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ }
+ ],
+ "returnType": "void",
+ "description": "Play audio stream",
+ "custom": false
+ },
+ {
+ "name": "PauseAudioStream",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ }
+ ],
+ "returnType": "void",
+ "description": "Pause audio stream",
+ "custom": false
+ },
+ {
+ "name": "ResumeAudioStream",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ }
+ ],
+ "returnType": "void",
+ "description": "Resume audio stream",
+ "custom": false
+ },
+ {
+ "name": "IsAudioStreamPlaying",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check if audio stream is playing",
+ "custom": false
+ },
+ {
+ "name": "StopAudioStream",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ }
+ ],
+ "returnType": "void",
+ "description": "Stop audio stream",
+ "custom": false
+ },
+ {
+ "name": "SetAudioStreamVolume",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ },
+ {
+ "name": "volume",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set volume for audio stream (1.0 is max level)",
+ "custom": false
+ },
+ {
+ "name": "SetAudioStreamPitch",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ },
+ {
+ "name": "pitch",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set pitch for audio stream (1.0 is base level)",
+ "custom": false
+ },
+ {
+ "name": "SetAudioStreamPan",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ },
+ {
+ "name": "pan",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set pan for audio stream (0.5 is centered)",
+ "custom": false
+ },
+ {
+ "name": "SetAudioStreamBufferSizeDefault",
+ "params": [
+ {
+ "name": "size",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Default size for new audio streams",
+ "custom": false
+ },
+ {
+ "name": "SetAudioStreamCallback",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ },
+ {
+ "name": "callback",
+ "typ": "AudioCallback"
+ }
+ ],
+ "returnType": "void",
+ "description": "Audio thread callback to request new data",
+ "custom": false
+ },
+ {
+ "name": "AttachAudioStreamProcessor",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ },
+ {
+ "name": "processor",
+ "typ": "AudioCallback"
+ }
+ ],
+ "returnType": "void",
+ "description": "Attach audio stream processor to stream, receives the samples as s",
+ "custom": false
+ },
+ {
+ "name": "DetachAudioStreamProcessor",
+ "params": [
+ {
+ "name": "stream",
+ "typ": "AudioStream"
+ },
+ {
+ "name": "processor",
+ "typ": "AudioCallback"
+ }
+ ],
+ "returnType": "void",
+ "description": "Detach audio stream processor from stream",
+ "custom": false
+ },
+ {
+ "name": "AttachAudioMixedProcessor",
+ "params": [
+ {
+ "name": "processor",
+ "typ": "AudioCallback"
+ }
+ ],
+ "returnType": "void",
+ "description": "Attach audio stream processor to the entire audio pipeline, receives the samples as s",
+ "custom": false
+ },
+ {
+ "name": "DetachAudioMixedProcessor",
+ "params": [
+ {
+ "name": "processor",
+ "typ": "AudioCallback"
+ }
+ ],
+ "returnType": "void",
+ "description": "Detach audio stream processor from the entire audio pipeline",
+ "custom": false
+ },
+ {
+ "name": "rlMatrixMode",
+ "params": [
+ {
+ "name": "mode",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Choose the current matrix to be transformed",
+ "custom": false
+ },
+ {
+ "name": "rlPushMatrix",
+ "params": [],
+ "returnType": "void",
+ "description": "Push the current matrix to stack",
+ "custom": false
+ },
+ {
+ "name": "rlPopMatrix",
+ "params": [],
+ "returnType": "void",
+ "description": "Pop latest inserted matrix from stack",
+ "custom": false
+ },
+ {
+ "name": "rlLoadIdentity",
+ "params": [],
+ "returnType": "void",
+ "description": "Reset current matrix to identity matrix",
+ "custom": false
+ },
+ {
+ "name": "rlTranslatef",
+ "params": [
+ {
+ "name": "x",
+ "typ": "f32"
+ },
+ {
+ "name": "y",
+ "typ": "f32"
+ },
+ {
+ "name": "z",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Multiply the current matrix by a translation matrix",
+ "custom": false
+ },
+ {
+ "name": "rlRotatef",
+ "params": [
+ {
+ "name": "angle",
+ "typ": "f32"
+ },
+ {
+ "name": "x",
+ "typ": "f32"
+ },
+ {
+ "name": "y",
+ "typ": "f32"
+ },
+ {
+ "name": "z",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Multiply the current matrix by a rotation matrix",
+ "custom": false
+ },
+ {
+ "name": "rlScalef",
+ "params": [
+ {
+ "name": "x",
+ "typ": "f32"
+ },
+ {
+ "name": "y",
+ "typ": "f32"
+ },
+ {
+ "name": "z",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Multiply the current matrix by a scaling matrix",
+ "custom": false
+ },
+ {
+ "name": "rlMultMatrixf",
+ "params": [
+ {
+ "name": "matf",
+ "typ": "?[*]const f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Multiply the current matrix by another matrix",
+ "custom": false
+ },
+ {
+ "name": "rlFrustum",
+ "params": [
+ {
+ "name": "left",
+ "typ": "f64"
+ },
+ {
+ "name": "right",
+ "typ": "f64"
+ },
+ {
+ "name": "bottom",
+ "typ": "f64"
+ },
+ {
+ "name": "top",
+ "typ": "f64"
+ },
+ {
+ "name": "znear",
+ "typ": "f64"
+ },
+ {
+ "name": "zfar",
+ "typ": "f64"
+ }
+ ],
+ "returnType": "void",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "rlOrtho",
+ "params": [
+ {
+ "name": "left",
+ "typ": "f64"
+ },
+ {
+ "name": "right",
+ "typ": "f64"
+ },
+ {
+ "name": "bottom",
+ "typ": "f64"
+ },
+ {
+ "name": "top",
+ "typ": "f64"
+ },
+ {
+ "name": "znear",
+ "typ": "f64"
+ },
+ {
+ "name": "zfar",
+ "typ": "f64"
+ }
+ ],
+ "returnType": "void",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "rlViewport",
+ "params": [
+ {
+ "name": "x",
+ "typ": "i32"
+ },
+ {
+ "name": "y",
+ "typ": "i32"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set the viewport area",
+ "custom": false
+ },
+ {
+ "name": "rlBegin",
+ "params": [
+ {
+ "name": "mode",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Initialize drawing mode (how to organize vertex)",
+ "custom": false
+ },
+ {
+ "name": "rlEnd",
+ "params": [],
+ "returnType": "void",
+ "description": "Finish vertex providing",
+ "custom": false
+ },
+ {
+ "name": "rlVertex2i",
+ "params": [
+ {
+ "name": "x",
+ "typ": "i32"
+ },
+ {
+ "name": "y",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Define one vertex (position) - 2 int",
+ "custom": false
+ },
+ {
+ "name": "rlVertex2f",
+ "params": [
+ {
+ "name": "x",
+ "typ": "f32"
+ },
+ {
+ "name": "y",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Define one vertex (position) - 2 float",
+ "custom": false
+ },
+ {
+ "name": "rlVertex3f",
+ "params": [
+ {
+ "name": "x",
+ "typ": "f32"
+ },
+ {
+ "name": "y",
+ "typ": "f32"
+ },
+ {
+ "name": "z",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Define one vertex (position) - 3 float",
+ "custom": false
+ },
+ {
+ "name": "rlTexCoord2f",
+ "params": [
+ {
+ "name": "x",
+ "typ": "f32"
+ },
+ {
+ "name": "y",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Define one vertex (texture coordinate) - 2 float",
+ "custom": false
+ },
+ {
+ "name": "rlNormal3f",
+ "params": [
+ {
+ "name": "x",
+ "typ": "f32"
+ },
+ {
+ "name": "y",
+ "typ": "f32"
+ },
+ {
+ "name": "z",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Define one vertex (normal) - 3 float",
+ "custom": false
+ },
+ {
+ "name": "rlColor4ub",
+ "params": [
+ {
+ "name": "r",
+ "typ": "u8"
+ },
+ {
+ "name": "g",
+ "typ": "u8"
+ },
+ {
+ "name": "b",
+ "typ": "u8"
+ },
+ {
+ "name": "a",
+ "typ": "u8"
+ }
+ ],
+ "returnType": "void",
+ "description": "Define one vertex (color) - 4 byte",
+ "custom": false
+ },
+ {
+ "name": "rlColor3f",
+ "params": [
+ {
+ "name": "x",
+ "typ": "f32"
+ },
+ {
+ "name": "y",
+ "typ": "f32"
+ },
+ {
+ "name": "z",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Define one vertex (color) - 3 float",
+ "custom": false
+ },
+ {
+ "name": "rlColor4f",
+ "params": [
+ {
+ "name": "x",
+ "typ": "f32"
+ },
+ {
+ "name": "y",
+ "typ": "f32"
+ },
+ {
+ "name": "z",
+ "typ": "f32"
+ },
+ {
+ "name": "w",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Define one vertex (color) - 4 float",
+ "custom": false
+ },
+ {
+ "name": "rlEnableVertexArray",
+ "params": [
+ {
+ "name": "vaoId",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Enable vertex array (VAO, if supported)",
+ "custom": false
+ },
+ {
+ "name": "rlDisableVertexArray",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable vertex array (VAO, if supported)",
+ "custom": false
+ },
+ {
+ "name": "rlEnableVertexBuffer",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Enable vertex buffer (VBO)",
+ "custom": false
+ },
+ {
+ "name": "rlDisableVertexBuffer",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable vertex buffer (VBO)",
+ "custom": false
+ },
+ {
+ "name": "rlEnableVertexBufferElement",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Enable vertex buffer element (VBO element)",
+ "custom": false
+ },
+ {
+ "name": "rlDisableVertexBufferElement",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable vertex buffer element (VBO element)",
+ "custom": false
+ },
+ {
+ "name": "rlEnableVertexAttribute",
+ "params": [
+ {
+ "name": "index",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Enable vertex attribute index",
+ "custom": false
+ },
+ {
+ "name": "rlDisableVertexAttribute",
+ "params": [
+ {
+ "name": "index",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Disable vertex attribute index",
+ "custom": false
+ },
+ {
+ "name": "rlEnableStatePointer",
+ "params": [
+ {
+ "name": "vertexAttribType",
+ "typ": "i32"
+ },
+ {
+ "name": "buffer",
+ "typ": "*anyopaque"
+ }
+ ],
+ "returnType": "void",
+ "description": "Enable attribute state pointer",
+ "custom": false
+ },
+ {
+ "name": "rlDisableStatePointer",
+ "params": [
+ {
+ "name": "vertexAttribType",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Disable attribute state pointer",
+ "custom": false
+ },
+ {
+ "name": "rlActiveTextureSlot",
+ "params": [
+ {
+ "name": "slot",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Select and active a texture slot",
+ "custom": false
+ },
+ {
+ "name": "rlEnableTexture",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Enable texture",
+ "custom": false
+ },
+ {
+ "name": "rlDisableTexture",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable texture",
+ "custom": false
+ },
+ {
+ "name": "rlEnableTextureCubemap",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Enable texture cubemap",
+ "custom": false
+ },
+ {
+ "name": "rlDisableTextureCubemap",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable texture cubemap",
+ "custom": false
+ },
+ {
+ "name": "rlTextureParameters",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ },
+ {
+ "name": "param",
+ "typ": "i32"
+ },
+ {
+ "name": "value",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set texture parameters (filter, wrap)",
+ "custom": false
+ },
+ {
+ "name": "rlCubemapParameters",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ },
+ {
+ "name": "param",
+ "typ": "i32"
+ },
+ {
+ "name": "value",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set cubemap parameters (filter, wrap)",
+ "custom": false
+ },
+ {
+ "name": "rlEnableShader",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Enable shader program",
+ "custom": false
+ },
+ {
+ "name": "rlDisableShader",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable shader program",
+ "custom": false
+ },
+ {
+ "name": "rlEnableFramebuffer",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Enable render texture (fbo)",
+ "custom": false
+ },
+ {
+ "name": "rlDisableFramebuffer",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable render texture (fbo), return to default framebuffer",
+ "custom": false
+ },
+ {
+ "name": "rlActiveDrawBuffers",
+ "params": [
+ {
+ "name": "count",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Activate multiple draw color buffers",
+ "custom": false
+ },
+ {
+ "name": "rlBlitFramebuffer",
+ "params": [
+ {
+ "name": "srcX",
+ "typ": "i32"
+ },
+ {
+ "name": "srcY",
+ "typ": "i32"
+ },
+ {
+ "name": "srcWidth",
+ "typ": "i32"
+ },
+ {
+ "name": "srcHeight",
+ "typ": "i32"
+ },
+ {
+ "name": "dstX",
+ "typ": "i32"
+ },
+ {
+ "name": "dstY",
+ "typ": "i32"
+ },
+ {
+ "name": "dstWidth",
+ "typ": "i32"
+ },
+ {
+ "name": "dstHeight",
+ "typ": "i32"
+ },
+ {
+ "name": "bufferMask",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Blit active framebuffer to main framebuffer",
+ "custom": false
+ },
+ {
+ "name": "rlBindFramebuffer",
+ "params": [
+ {
+ "name": "target",
+ "typ": "u32"
+ },
+ {
+ "name": "framebuffer",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Bind framebuffer (FBO) ",
+ "custom": false
+ },
+ {
+ "name": "rlEnableColorBlend",
+ "params": [],
+ "returnType": "void",
+ "description": "Enable color blending",
+ "custom": false
+ },
+ {
+ "name": "rlDisableColorBlend",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable color blending",
+ "custom": false
+ },
+ {
+ "name": "rlEnableDepthTest",
+ "params": [],
+ "returnType": "void",
+ "description": "Enable depth test",
+ "custom": false
+ },
+ {
+ "name": "rlDisableDepthTest",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable depth test",
+ "custom": false
+ },
+ {
+ "name": "rlEnableDepthMask",
+ "params": [],
+ "returnType": "void",
+ "description": "Enable depth write",
+ "custom": false
+ },
+ {
+ "name": "rlDisableDepthMask",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable depth write",
+ "custom": false
+ },
+ {
+ "name": "rlEnableBackfaceCulling",
+ "params": [],
+ "returnType": "void",
+ "description": "Enable backface culling",
+ "custom": false
+ },
+ {
+ "name": "rlDisableBackfaceCulling",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable backface culling",
+ "custom": false
+ },
+ {
+ "name": "rlColorMask",
+ "params": [
+ {
+ "name": "r",
+ "typ": "bool"
+ },
+ {
+ "name": "g",
+ "typ": "bool"
+ },
+ {
+ "name": "b",
+ "typ": "bool"
+ },
+ {
+ "name": "a",
+ "typ": "bool"
+ }
+ ],
+ "returnType": "void",
+ "description": "Color mask control",
+ "custom": false
+ },
+ {
+ "name": "rlSetCullFace",
+ "params": [
+ {
+ "name": "mode",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set face culling mode",
+ "custom": false
+ },
+ {
+ "name": "rlEnableScissorTest",
+ "params": [],
+ "returnType": "void",
+ "description": "Enable scissor test",
+ "custom": false
+ },
+ {
+ "name": "rlDisableScissorTest",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable scissor test",
+ "custom": false
+ },
+ {
+ "name": "rlScissor",
+ "params": [
+ {
+ "name": "x",
+ "typ": "i32"
+ },
+ {
+ "name": "y",
+ "typ": "i32"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Scissor test",
+ "custom": false
+ },
+ {
+ "name": "rlEnableWireMode",
+ "params": [],
+ "returnType": "void",
+ "description": "Enable wire mode",
+ "custom": false
+ },
+ {
+ "name": "rlEnablePointMode",
+ "params": [],
+ "returnType": "void",
+ "description": "Enable point mode",
+ "custom": false
+ },
+ {
+ "name": "rlDisableWireMode",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable wire mode ( and point ) maybe rename",
+ "custom": false
+ },
+ {
+ "name": "rlSetLineWidth",
+ "params": [
+ {
+ "name": "width",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set the line drawing width",
+ "custom": false
+ },
+ {
+ "name": "rlGetLineWidth",
+ "params": [],
+ "returnType": "f32",
+ "description": "Get the line drawing width",
+ "custom": false
+ },
+ {
+ "name": "rlEnableSmoothLines",
+ "params": [],
+ "returnType": "void",
+ "description": "Enable line aliasing",
+ "custom": false
+ },
+ {
+ "name": "rlDisableSmoothLines",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable line aliasing",
+ "custom": false
+ },
+ {
+ "name": "rlEnableStereoRender",
+ "params": [],
+ "returnType": "void",
+ "description": "Enable stereo rendering",
+ "custom": false
+ },
+ {
+ "name": "rlDisableStereoRender",
+ "params": [],
+ "returnType": "void",
+ "description": "Disable stereo rendering",
+ "custom": false
+ },
+ {
+ "name": "rlIsStereoRenderEnabled",
+ "params": [],
+ "returnType": "bool",
+ "description": "Check if stereo render is enabled",
+ "custom": false
+ },
+ {
+ "name": "rlClearColor",
+ "params": [
+ {
+ "name": "r",
+ "typ": "u8"
+ },
+ {
+ "name": "g",
+ "typ": "u8"
+ },
+ {
+ "name": "b",
+ "typ": "u8"
+ },
+ {
+ "name": "a",
+ "typ": "u8"
+ }
+ ],
+ "returnType": "void",
+ "description": "Clear color buffer with color",
+ "custom": false
+ },
+ {
+ "name": "rlClearScreenBuffers",
+ "params": [],
+ "returnType": "void",
+ "description": "Clear used screen buffers (color and depth)",
+ "custom": false
+ },
+ {
+ "name": "rlCheckErrors",
+ "params": [],
+ "returnType": "void",
+ "description": "Check and log OpenGL error codes",
+ "custom": false
+ },
+ {
+ "name": "rlSetBlendMode",
+ "params": [
+ {
+ "name": "mode",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set blending mode",
+ "custom": false
+ },
+ {
+ "name": "rlSetBlendFactors",
+ "params": [
+ {
+ "name": "glSrcFactor",
+ "typ": "i32"
+ },
+ {
+ "name": "glDstFactor",
+ "typ": "i32"
+ },
+ {
+ "name": "glEquation",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set blending mode factor and equation (using OpenGL factors)",
+ "custom": false
+ },
+ {
+ "name": "rlSetBlendFactorsSeparate",
+ "params": [
+ {
+ "name": "glSrcRGB",
+ "typ": "i32"
+ },
+ {
+ "name": "glDstRGB",
+ "typ": "i32"
+ },
+ {
+ "name": "glSrcAlpha",
+ "typ": "i32"
+ },
+ {
+ "name": "glDstAlpha",
+ "typ": "i32"
+ },
+ {
+ "name": "glEqRGB",
+ "typ": "i32"
+ },
+ {
+ "name": "glEqAlpha",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set blending mode factors and equations separately (using OpenGL factors)",
+ "custom": false
+ },
+ {
+ "name": "rlglInit",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Initialize rlgl (buffers, shaders, textures, states)",
+ "custom": false
+ },
+ {
+ "name": "rlglClose",
+ "params": [],
+ "returnType": "void",
+ "description": "De-initialize rlgl (buffers, shaders, textures)",
+ "custom": false
+ },
+ {
+ "name": "rlLoadExtensions",
+ "params": [
+ {
+ "name": "loader",
+ "typ": "*anyopaque"
+ }
+ ],
+ "returnType": "void",
+ "description": "Load OpenGL extensions (loader function required)",
+ "custom": false
+ },
+ {
+ "name": "rlGetVersion",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get current OpenGL version",
+ "custom": false
+ },
+ {
+ "name": "rlSetFramebufferWidth",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set current framebuffer width",
+ "custom": false
+ },
+ {
+ "name": "rlGetFramebufferWidth",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get default framebuffer width",
+ "custom": false
+ },
+ {
+ "name": "rlSetFramebufferHeight",
+ "params": [
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set current framebuffer height",
+ "custom": false
+ },
+ {
+ "name": "rlGetFramebufferHeight",
+ "params": [],
+ "returnType": "i32",
+ "description": "Get default framebuffer height",
+ "custom": false
+ },
+ {
+ "name": "rlGetTextureIdDefault",
+ "params": [],
+ "returnType": "u32",
+ "description": "Get default texture id",
+ "custom": false
+ },
+ {
+ "name": "rlGetShaderIdDefault",
+ "params": [],
+ "returnType": "u32",
+ "description": "Get default shader id",
+ "custom": false
+ },
+ {
+ "name": "rlGetShaderLocsDefault",
+ "params": [],
+ "returnType": "?[*]i32",
+ "description": "Get default shader locations",
+ "custom": false
+ },
+ {
+ "name": "rlLoadRenderBatch",
+ "params": [
+ {
+ "name": "numBuffers",
+ "typ": "i32"
+ },
+ {
+ "name": "bufferElements",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "rlRenderBatch",
+ "description": "Load a render batch system",
+ "custom": false
+ },
+ {
+ "name": "rlUnloadRenderBatch",
+ "params": [
+ {
+ "name": "batch",
+ "typ": "rlRenderBatch"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload render batch system",
+ "custom": false
+ },
+ {
+ "name": "rlDrawRenderBatch",
+ "params": [
+ {
+ "name": "batch",
+ "typ": "?[*]rlRenderBatch"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw render batch data (Update->Draw->Reset)",
+ "custom": false
+ },
+ {
+ "name": "rlSetRenderBatchActive",
+ "params": [
+ {
+ "name": "batch",
+ "typ": "?[*]rlRenderBatch"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set the active render batch for rlgl (NULL for default internal)",
+ "custom": false
+ },
+ {
+ "name": "rlDrawRenderBatchActive",
+ "params": [],
+ "returnType": "void",
+ "description": "Update and draw internal render batch",
+ "custom": false
+ },
+ {
+ "name": "rlCheckRenderBatchLimit",
+ "params": [
+ {
+ "name": "vCount",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Check internal buffer overflow for a given number of vertex",
+ "custom": false
+ },
+ {
+ "name": "rlSetTexture",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set current texture for render batch and check buffers limits",
+ "custom": false
+ },
+ {
+ "name": "rlLoadVertexArray",
+ "params": [],
+ "returnType": "u32",
+ "description": "Load vertex array (vao) if supported",
+ "custom": false
+ },
+ {
+ "name": "rlLoadVertexBuffer",
+ "params": [
+ {
+ "name": "buffer",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "size",
+ "typ": "i32"
+ },
+ {
+ "name": "dynamic",
+ "typ": "bool"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Load a vertex buffer object",
+ "custom": false
+ },
+ {
+ "name": "rlLoadVertexBufferElement",
+ "params": [
+ {
+ "name": "buffer",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "size",
+ "typ": "i32"
+ },
+ {
+ "name": "dynamic",
+ "typ": "bool"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Load vertex buffer elements object",
+ "custom": false
+ },
+ {
+ "name": "rlUpdateVertexBuffer",
+ "params": [
+ {
+ "name": "bufferId",
+ "typ": "u32"
+ },
+ {
+ "name": "data",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ },
+ {
+ "name": "offset",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Update vertex buffer object data on GPU buffer",
+ "custom": false
+ },
+ {
+ "name": "rlUpdateVertexBufferElements",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ },
+ {
+ "name": "data",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "dataSize",
+ "typ": "i32"
+ },
+ {
+ "name": "offset",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Update vertex buffer elements data on GPU buffer",
+ "custom": false
+ },
+ {
+ "name": "rlUnloadVertexArray",
+ "params": [
+ {
+ "name": "vaoId",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload vertex array (vao)",
+ "custom": false
+ },
+ {
+ "name": "rlUnloadVertexBuffer",
+ "params": [
+ {
+ "name": "vboId",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload vertex buffer object",
+ "custom": false
+ },
+ {
+ "name": "rlCompileShader",
+ "params": [
+ {
+ "name": "shaderCode",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "typ",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER)",
+ "custom": true
+ },
+ {
+ "name": "rlSetVertexAttributeDivisor",
+ "params": [
+ {
+ "name": "index",
+ "typ": "u32"
+ },
+ {
+ "name": "divisor",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set vertex attribute data divisor",
+ "custom": false
+ },
+ {
+ "name": "rlSetVertexAttributeDefault",
+ "params": [
+ {
+ "name": "locIndex",
+ "typ": "i32"
+ },
+ {
+ "name": "value",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "attribType",
+ "typ": "i32"
+ },
+ {
+ "name": "count",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set vertex attribute default value, when attribute to provided",
+ "custom": false
+ },
+ {
+ "name": "rlDrawVertexArray",
+ "params": [
+ {
+ "name": "offset",
+ "typ": "i32"
+ },
+ {
+ "name": "count",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw vertex array (currently active vao)",
+ "custom": false
+ },
+ {
+ "name": "rlDrawVertexArrayElements",
+ "params": [
+ {
+ "name": "offset",
+ "typ": "i32"
+ },
+ {
+ "name": "count",
+ "typ": "i32"
+ },
+ {
+ "name": "buffer",
+ "typ": "*const anyopaque"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw vertex array elements",
+ "custom": false
+ },
+ {
+ "name": "rlDrawVertexArrayInstanced",
+ "params": [
+ {
+ "name": "offset",
+ "typ": "i32"
+ },
+ {
+ "name": "count",
+ "typ": "i32"
+ },
+ {
+ "name": "instances",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw vertex array (currently active vao) with instancing",
+ "custom": false
+ },
+ {
+ "name": "rlDrawVertexArrayElementsInstanced",
+ "params": [
+ {
+ "name": "offset",
+ "typ": "i32"
+ },
+ {
+ "name": "count",
+ "typ": "i32"
+ },
+ {
+ "name": "buffer",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "instances",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Draw vertex array elements with instancing",
+ "custom": false
+ },
+ {
+ "name": "rlLoadTexture",
+ "params": [
+ {
+ "name": "data",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "format",
+ "typ": "i32"
+ },
+ {
+ "name": "mipmapCount",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Load texture data",
+ "custom": false
+ },
+ {
+ "name": "rlLoadTextureDepth",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "useRenderBuffer",
+ "typ": "bool"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Load depth texture/renderbuffer (to be attached to fbo)",
+ "custom": false
+ },
+ {
+ "name": "rlLoadTextureCubemap",
+ "params": [
+ {
+ "name": "data",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "size",
+ "typ": "i32"
+ },
+ {
+ "name": "format",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Load texture cubemap data",
+ "custom": false
+ },
+ {
+ "name": "rlUpdateTexture",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ },
+ {
+ "name": "offsetX",
+ "typ": "i32"
+ },
+ {
+ "name": "offsetY",
+ "typ": "i32"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "format",
+ "typ": "i32"
+ },
+ {
+ "name": "data",
+ "typ": "*const anyopaque"
+ }
+ ],
+ "returnType": "void",
+ "description": "Update texture with new data on GPU",
+ "custom": false
+ },
+ {
+ "name": "rlGetGlTextureFormats",
+ "params": [
+ {
+ "name": "format",
+ "typ": "i32"
+ },
+ {
+ "name": "glInternalFormat",
+ "typ": "?[*]u32"
+ },
+ {
+ "name": "glFormat",
+ "typ": "?[*]u32"
+ },
+ {
+ "name": "glType",
+ "typ": "?[*]u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Get OpenGL internal formats",
+ "custom": false
+ },
+ {
+ "name": "rlGetPixelFormatName",
+ "params": [
+ {
+ "name": "format",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "[*:0]const u8",
+ "description": "Get name string for pixel format",
+ "custom": false
+ },
+ {
+ "name": "rlUnloadTexture",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload texture from GPU memory",
+ "custom": false
+ },
+ {
+ "name": "rlGenTextureMipmaps",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "format",
+ "typ": "i32"
+ },
+ {
+ "name": "mipmaps",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Generate mipmap data for selected texture",
+ "custom": false
+ },
+ {
+ "name": "rlReadTexturePixels",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ },
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ },
+ {
+ "name": "format",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "*anyopaque",
+ "description": "Read texture pixel data",
+ "custom": false
+ },
+ {
+ "name": "rlReadScreenPixels",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "?[*]u8",
+ "description": "Read screen pixel data (color buffer)",
+ "custom": false
+ },
+ {
+ "name": "rlLoadFramebuffer",
+ "params": [
+ {
+ "name": "width",
+ "typ": "i32"
+ },
+ {
+ "name": "height",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Load an empty framebuffer",
+ "custom": false
+ },
+ {
+ "name": "rlFramebufferAttach",
+ "params": [
+ {
+ "name": "fboId",
+ "typ": "u32"
+ },
+ {
+ "name": "texId",
+ "typ": "u32"
+ },
+ {
+ "name": "attachType",
+ "typ": "i32"
+ },
+ {
+ "name": "texType",
+ "typ": "i32"
+ },
+ {
+ "name": "mipLevel",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Attach texture/renderbuffer to a framebuffer",
+ "custom": false
+ },
+ {
+ "name": "rlFramebufferComplete",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "bool",
+ "description": "Verify framebuffer is complete",
+ "custom": false
+ },
+ {
+ "name": "rlUnloadFramebuffer",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Delete framebuffer from GPU",
+ "custom": false
+ },
+ {
+ "name": "rlLoadShaderCode",
+ "params": [
+ {
+ "name": "vsCode",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "fsCode",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Load shader from code strings",
+ "custom": false
+ },
+ {
+ "name": "TextSplit",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "delimiter",
+ "typ": "u8"
+ },
+ {
+ "name": "count",
+ "typ": "[*]i32"
+ }
+ ],
+ "returnType": "[*]const [*:0]const u8",
+ "description": "overriden in inject.zig",
+ "custom": true
+ },
+ {
+ "name": "rlLoadShaderProgram",
+ "params": [
+ {
+ "name": "vShaderId",
+ "typ": "u32"
+ },
+ {
+ "name": "fShaderId",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Load custom shader program",
+ "custom": false
+ },
+ {
+ "name": "rlUnloadShaderProgram",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload shader program",
+ "custom": false
+ },
+ {
+ "name": "rlGetLocationUniform",
+ "params": [
+ {
+ "name": "shaderId",
+ "typ": "u32"
+ },
+ {
+ "name": "uniformName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get shader location uniform",
+ "custom": false
+ },
+ {
+ "name": "rlGetLocationAttrib",
+ "params": [
+ {
+ "name": "shaderId",
+ "typ": "u32"
+ },
+ {
+ "name": "attribName",
+ "typ": "[*:0]const u8"
+ }
+ ],
+ "returnType": "i32",
+ "description": "Get shader location attribute",
+ "custom": false
+ },
+ {
+ "name": "rlSetUniform",
+ "params": [
+ {
+ "name": "locIndex",
+ "typ": "i32"
+ },
+ {
+ "name": "value",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "uniformType",
+ "typ": "i32"
+ },
+ {
+ "name": "count",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set shader value uniform",
+ "custom": false
+ },
+ {
+ "name": "rlSetUniformMatrix",
+ "params": [
+ {
+ "name": "locIndex",
+ "typ": "i32"
+ },
+ {
+ "name": "mat",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set shader value matrix",
+ "custom": false
+ },
+ {
+ "name": "rlSetUniformSampler",
+ "params": [
+ {
+ "name": "locIndex",
+ "typ": "i32"
+ },
+ {
+ "name": "textureId",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set shader value sampler",
+ "custom": false
+ },
+ {
+ "name": "rlSetShader",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ },
+ {
+ "name": "locs",
+ "typ": "?[*]i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set shader currently active (id and locations)",
+ "custom": false
+ },
+ {
+ "name": "rlLoadComputeShaderProgram",
+ "params": [
+ {
+ "name": "shaderId",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Load compute shader program",
+ "custom": false
+ },
+ {
+ "name": "rlComputeShaderDispatch",
+ "params": [
+ {
+ "name": "groupX",
+ "typ": "u32"
+ },
+ {
+ "name": "groupY",
+ "typ": "u32"
+ },
+ {
+ "name": "groupZ",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Dispatch compute shader (equivalent to *draw* for graphics pipeline)",
+ "custom": false
+ },
+ {
+ "name": "rlLoadShaderBuffer",
+ "params": [
+ {
+ "name": "size",
+ "typ": "u32"
+ },
+ {
+ "name": "data",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "usageHint",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Load shader storage buffer object (SSBO)",
+ "custom": false
+ },
+ {
+ "name": "rlUnloadShaderBuffer",
+ "params": [
+ {
+ "name": "ssboId",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Unload shader storage buffer object (SSBO)",
+ "custom": false
+ },
+ {
+ "name": "rlUpdateShaderBuffer",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ },
+ {
+ "name": "data",
+ "typ": "*const anyopaque"
+ },
+ {
+ "name": "dataSize",
+ "typ": "u32"
+ },
+ {
+ "name": "offset",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Update SSBO buffer data",
+ "custom": false
+ },
+ {
+ "name": "rlBindShaderBuffer",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ },
+ {
+ "name": "index",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Bind SSBO buffer",
+ "custom": false
+ },
+ {
+ "name": "rlReadShaderBuffer",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ },
+ {
+ "name": "dest",
+ "typ": "*anyopaque"
+ },
+ {
+ "name": "count",
+ "typ": "u32"
+ },
+ {
+ "name": "offset",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Read SSBO buffer data (GPU->CPU)",
+ "custom": false
+ },
+ {
+ "name": "rlCopyShaderBuffer",
+ "params": [
+ {
+ "name": "destId",
+ "typ": "u32"
+ },
+ {
+ "name": "srcId",
+ "typ": "u32"
+ },
+ {
+ "name": "destOffset",
+ "typ": "u32"
+ },
+ {
+ "name": "srcOffset",
+ "typ": "u32"
+ },
+ {
+ "name": "count",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "void",
+ "description": "Copy SSBO data between buffers",
+ "custom": false
+ },
+ {
+ "name": "rlGetShaderBufferSize",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ }
+ ],
+ "returnType": "u32",
+ "description": "Get SSBO buffer size",
+ "custom": false
+ },
+ {
+ "name": "rlBindImageTexture",
+ "params": [
+ {
+ "name": "id",
+ "typ": "u32"
+ },
+ {
+ "name": "index",
+ "typ": "u32"
+ },
+ {
+ "name": "format",
+ "typ": "i32"
+ },
+ {
+ "name": "readonly",
+ "typ": "bool"
+ }
+ ],
+ "returnType": "void",
+ "description": "Bind image texture",
+ "custom": false
+ },
+ {
+ "name": "rlGetMatrixModelview",
+ "params": [],
+ "returnType": "Matrix",
+ "description": "Get internal modelview matrix",
+ "custom": false
+ },
+ {
+ "name": "rlGetMatrixProjection",
+ "params": [],
+ "returnType": "Matrix",
+ "description": "Get internal projection matrix",
+ "custom": false
+ },
+ {
+ "name": "rlGetMatrixTransform",
+ "params": [],
+ "returnType": "Matrix",
+ "description": "Get internal accumulated transform matrix",
+ "custom": false
+ },
+ {
+ "name": "rlGetMatrixProjectionStereo",
+ "params": [
+ {
+ "name": "eye",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "rlGetMatrixViewOffsetStereo",
+ "params": [
+ {
+ "name": "eye",
+ "typ": "i32"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "rlSetMatrixProjection",
+ "params": [
+ {
+ "name": "proj",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set a custom projection matrix (replaces internal projection matrix)",
+ "custom": false
+ },
+ {
+ "name": "rlSetMatrixModelview",
+ "params": [
+ {
+ "name": "view",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set a custom modelview matrix (replaces internal modelview matrix)",
+ "custom": false
+ },
+ {
+ "name": "rlSetMatrixProjectionStereo",
+ "params": [
+ {
+ "name": "right",
+ "typ": "Matrix"
+ },
+ {
+ "name": "left",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set eyes projection matrices for stereo rendering",
+ "custom": false
+ },
+ {
+ "name": "rlSetMatrixViewOffsetStereo",
+ "params": [
+ {
+ "name": "right",
+ "typ": "Matrix"
+ },
+ {
+ "name": "left",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "void",
+ "description": "Set eyes view offsets matrices for stereo rendering",
+ "custom": false
+ },
+ {
+ "name": "rlLoadDrawCube",
+ "params": [],
+ "returnType": "void",
+ "description": "Load and draw a cube",
+ "custom": false
+ },
+ {
+ "name": "rlLoadDrawQuad",
+ "params": [],
+ "returnType": "void",
+ "description": "Load and draw a quad",
+ "custom": false
+ },
+ {
+ "name": "Clamp",
+ "params": [
+ {
+ "name": "value",
+ "typ": "f32"
+ },
+ {
+ "name": "min",
+ "typ": "f32"
+ },
+ {
+ "name": "max",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Lerp",
+ "params": [
+ {
+ "name": "start",
+ "typ": "f32"
+ },
+ {
+ "name": "end",
+ "typ": "f32"
+ },
+ {
+ "name": "amount",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Normalize",
+ "params": [
+ {
+ "name": "value",
+ "typ": "f32"
+ },
+ {
+ "name": "start",
+ "typ": "f32"
+ },
+ {
+ "name": "end",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Remap",
+ "params": [
+ {
+ "name": "value",
+ "typ": "f32"
+ },
+ {
+ "name": "inputStart",
+ "typ": "f32"
+ },
+ {
+ "name": "inputEnd",
+ "typ": "f32"
+ },
+ {
+ "name": "outputStart",
+ "typ": "f32"
+ },
+ {
+ "name": "outputEnd",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Wrap",
+ "params": [
+ {
+ "name": "value",
+ "typ": "f32"
+ },
+ {
+ "name": "min",
+ "typ": "f32"
+ },
+ {
+ "name": "max",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "FloatEquals",
+ "params": [
+ {
+ "name": "x",
+ "typ": "f32"
+ },
+ {
+ "name": "y",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "i32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Zero",
+ "params": [],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2One",
+ "params": [],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Add",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2AddValue",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ },
+ {
+ "name": "add",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Subtract",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2SubtractValue",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ },
+ {
+ "name": "sub",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Length",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2LengthSqr",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2DotProduct",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Distance",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2DistanceSqr",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Angle",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2LineAngle",
+ "params": [
+ {
+ "name": "start",
+ "typ": "Vector2"
+ },
+ {
+ "name": "end",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Scale",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ },
+ {
+ "name": "scale",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Multiply",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Negate",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Divide",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Normalize",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Transform",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ },
+ {
+ "name": "mat",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Lerp",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector2"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector2"
+ },
+ {
+ "name": "amount",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Reflect",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ },
+ {
+ "name": "normal",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Rotate",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ },
+ {
+ "name": "angle",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2MoveTowards",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ },
+ {
+ "name": "target",
+ "typ": "Vector2"
+ },
+ {
+ "name": "maxDistance",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Invert",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Clamp",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ },
+ {
+ "name": "min",
+ "typ": "Vector2"
+ },
+ {
+ "name": "max",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2ClampValue",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector2"
+ },
+ {
+ "name": "min",
+ "typ": "f32"
+ },
+ {
+ "name": "max",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector2",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector2Equals",
+ "params": [
+ {
+ "name": "p",
+ "typ": "Vector2"
+ },
+ {
+ "name": "q",
+ "typ": "Vector2"
+ }
+ ],
+ "returnType": "i32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Zero",
+ "params": [],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3One",
+ "params": [],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Add",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3AddValue",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ },
+ {
+ "name": "add",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Subtract",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3SubtractValue",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ },
+ {
+ "name": "sub",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Scale",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ },
+ {
+ "name": "scalar",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Multiply",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3CrossProduct",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Perpendicular",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Length",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3LengthSqr",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3DotProduct",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Distance",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3DistanceSqr",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Angle",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Negate",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Divide",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Normalize",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Project",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Reject",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3OrthoNormalize",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "?[*]Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "?[*]Vector3"
+ }
+ ],
+ "returnType": "void",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Transform",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ },
+ {
+ "name": "mat",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3RotateByQuaternion",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ },
+ {
+ "name": "q",
+ "typ": "Vector4"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3RotateByAxisAngle",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ },
+ {
+ "name": "axis",
+ "typ": "Vector3"
+ },
+ {
+ "name": "angle",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Lerp",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ },
+ {
+ "name": "amount",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Reflect",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ },
+ {
+ "name": "normal",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Min",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Max",
+ "params": [
+ {
+ "name": "v1",
+ "typ": "Vector3"
+ },
+ {
+ "name": "v2",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Barycenter",
+ "params": [
+ {
+ "name": "p",
+ "typ": "Vector3"
+ },
+ {
+ "name": "a",
+ "typ": "Vector3"
+ },
+ {
+ "name": "b",
+ "typ": "Vector3"
+ },
+ {
+ "name": "c",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Unproject",
+ "params": [
+ {
+ "name": "source",
+ "typ": "Vector3"
+ },
+ {
+ "name": "projection",
+ "typ": "Matrix"
+ },
+ {
+ "name": "view",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3ToFloatV",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "float3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Invert",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Clamp",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ },
+ {
+ "name": "min",
+ "typ": "Vector3"
+ },
+ {
+ "name": "max",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3ClampValue",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ },
+ {
+ "name": "min",
+ "typ": "f32"
+ },
+ {
+ "name": "max",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Equals",
+ "params": [
+ {
+ "name": "p",
+ "typ": "Vector3"
+ },
+ {
+ "name": "q",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "i32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "Vector3Refract",
+ "params": [
+ {
+ "name": "v",
+ "typ": "Vector3"
+ },
+ {
+ "name": "n",
+ "typ": "Vector3"
+ },
+ {
+ "name": "r",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixDeterminant",
+ "params": [
+ {
+ "name": "mat",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixTrace",
+ "params": [
+ {
+ "name": "mat",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixTranspose",
+ "params": [
+ {
+ "name": "mat",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixInvert",
+ "params": [
+ {
+ "name": "mat",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixIdentity",
+ "params": [],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixAdd",
+ "params": [
+ {
+ "name": "left",
+ "typ": "Matrix"
+ },
+ {
+ "name": "right",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixSubtract",
+ "params": [
+ {
+ "name": "left",
+ "typ": "Matrix"
+ },
+ {
+ "name": "right",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixMultiply",
+ "params": [
+ {
+ "name": "left",
+ "typ": "Matrix"
+ },
+ {
+ "name": "right",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixTranslate",
+ "params": [
+ {
+ "name": "x",
+ "typ": "f32"
+ },
+ {
+ "name": "y",
+ "typ": "f32"
+ },
+ {
+ "name": "z",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixRotate",
+ "params": [
+ {
+ "name": "axis",
+ "typ": "Vector3"
+ },
+ {
+ "name": "angle",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixRotateX",
+ "params": [
+ {
+ "name": "angle",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixRotateY",
+ "params": [
+ {
+ "name": "angle",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixRotateZ",
+ "params": [
+ {
+ "name": "angle",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixRotateXYZ",
+ "params": [
+ {
+ "name": "angle",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixRotateZYX",
+ "params": [
+ {
+ "name": "angle",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixScale",
+ "params": [
+ {
+ "name": "x",
+ "typ": "f32"
+ },
+ {
+ "name": "y",
+ "typ": "f32"
+ },
+ {
+ "name": "z",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixFrustum",
+ "params": [
+ {
+ "name": "left",
+ "typ": "f64"
+ },
+ {
+ "name": "right",
+ "typ": "f64"
+ },
+ {
+ "name": "bottom",
+ "typ": "f64"
+ },
+ {
+ "name": "top",
+ "typ": "f64"
+ },
+ {
+ "name": "near",
+ "typ": "f64"
+ },
+ {
+ "name": "far",
+ "typ": "f64"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixPerspective",
+ "params": [
+ {
+ "name": "fovY",
+ "typ": "f64"
+ },
+ {
+ "name": "aspect",
+ "typ": "f64"
+ },
+ {
+ "name": "nearPlane",
+ "typ": "f64"
+ },
+ {
+ "name": "farPlane",
+ "typ": "f64"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixOrtho",
+ "params": [
+ {
+ "name": "left",
+ "typ": "f64"
+ },
+ {
+ "name": "right",
+ "typ": "f64"
+ },
+ {
+ "name": "bottom",
+ "typ": "f64"
+ },
+ {
+ "name": "top",
+ "typ": "f64"
+ },
+ {
+ "name": "nearPlane",
+ "typ": "f64"
+ },
+ {
+ "name": "farPlane",
+ "typ": "f64"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixLookAt",
+ "params": [
+ {
+ "name": "eye",
+ "typ": "Vector3"
+ },
+ {
+ "name": "target",
+ "typ": "Vector3"
+ },
+ {
+ "name": "up",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "MatrixToFloatV",
+ "params": [
+ {
+ "name": "mat",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "float16",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionAdd",
+ "params": [
+ {
+ "name": "q1",
+ "typ": "Vector4"
+ },
+ {
+ "name": "q2",
+ "typ": "Vector4"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionAddValue",
+ "params": [
+ {
+ "name": "q",
+ "typ": "Vector4"
+ },
+ {
+ "name": "add",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionSubtract",
+ "params": [
+ {
+ "name": "q1",
+ "typ": "Vector4"
+ },
+ {
+ "name": "q2",
+ "typ": "Vector4"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionSubtractValue",
+ "params": [
+ {
+ "name": "q",
+ "typ": "Vector4"
+ },
+ {
+ "name": "sub",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionIdentity",
+ "params": [],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionLength",
+ "params": [
+ {
+ "name": "q",
+ "typ": "Vector4"
+ }
+ ],
+ "returnType": "f32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionNormalize",
+ "params": [
+ {
+ "name": "q",
+ "typ": "Vector4"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionInvert",
+ "params": [
+ {
+ "name": "q",
+ "typ": "Vector4"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionMultiply",
+ "params": [
+ {
+ "name": "q1",
+ "typ": "Vector4"
+ },
+ {
+ "name": "q2",
+ "typ": "Vector4"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionScale",
+ "params": [
+ {
+ "name": "q",
+ "typ": "Vector4"
+ },
+ {
+ "name": "mul",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionDivide",
+ "params": [
+ {
+ "name": "q1",
+ "typ": "Vector4"
+ },
+ {
+ "name": "q2",
+ "typ": "Vector4"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionLerp",
+ "params": [
+ {
+ "name": "q1",
+ "typ": "Vector4"
+ },
+ {
+ "name": "q2",
+ "typ": "Vector4"
+ },
+ {
+ "name": "amount",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionNlerp",
+ "params": [
+ {
+ "name": "q1",
+ "typ": "Vector4"
+ },
+ {
+ "name": "q2",
+ "typ": "Vector4"
+ },
+ {
+ "name": "amount",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionSlerp",
+ "params": [
+ {
+ "name": "q1",
+ "typ": "Vector4"
+ },
+ {
+ "name": "q2",
+ "typ": "Vector4"
+ },
+ {
+ "name": "amount",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionFromVector3ToVector3",
+ "params": [
+ {
+ "name": "from",
+ "typ": "Vector3"
+ },
+ {
+ "name": "to",
+ "typ": "Vector3"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionFromMatrix",
+ "params": [
+ {
+ "name": "mat",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionToMatrix",
+ "params": [
+ {
+ "name": "q",
+ "typ": "Vector4"
+ }
+ ],
+ "returnType": "Matrix",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionFromAxisAngle",
+ "params": [
+ {
+ "name": "axis",
+ "typ": "Vector3"
+ },
+ {
+ "name": "angle",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionToAxisAngle",
+ "params": [
+ {
+ "name": "q",
+ "typ": "Vector4"
+ },
+ {
+ "name": "outAxis",
+ "typ": "?[*]Vector3"
+ },
+ {
+ "name": "outAngle",
+ "typ": "?[*]f32"
+ }
+ ],
+ "returnType": "void",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionFromEuler",
+ "params": [
+ {
+ "name": "pitch",
+ "typ": "f32"
+ },
+ {
+ "name": "yaw",
+ "typ": "f32"
+ },
+ {
+ "name": "roll",
+ "typ": "f32"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionToEuler",
+ "params": [
+ {
+ "name": "q",
+ "typ": "Vector4"
+ }
+ ],
+ "returnType": "Vector3",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionTransform",
+ "params": [
+ {
+ "name": "q",
+ "typ": "Vector4"
+ },
+ {
+ "name": "mat",
+ "typ": "Matrix"
+ }
+ ],
+ "returnType": "Vector4",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "QuaternionEquals",
+ "params": [
+ {
+ "name": "p",
+ "typ": "Vector4"
+ },
+ {
+ "name": "q",
+ "typ": "Vector4"
+ }
+ ],
+ "returnType": "i32",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "TextAppend",
+ "params": [
+ {
+ "name": "text",
+ "typ": "[*]u8"
+ },
+ {
+ "name": "append",
+ "typ": "[*:0]const u8"
+ },
+ {
+ "name": "position",
+ "typ": "[*]i32"
+ }
+ ],
+ "returnType": "void",
+ "description": "overriden in inject.zig",
+ "custom": true
+ }
+ ],
+ "enums": [
+ {
+ "name": "ConfigFlags",
+ "values": [
+ {
+ "name": "FLAG_VSYNC_HINT",
+ "value": 64,
+ "description": "Set to try enabling V-Sync on GPU"
+ },
+ {
+ "name": "FLAG_FULLSCREEN_MODE",
+ "value": 2,
+ "description": "Set to run program in fullscreen"
+ },
+ {
+ "name": "FLAG_WINDOW_RESIZABLE",
+ "value": 4,
+ "description": "Set to allow resizable window"
+ },
+ {
+ "name": "FLAG_WINDOW_UNDECORATED",
+ "value": 8,
+ "description": "Set to disable window decoration (frame and buttons)"
+ },
+ {
+ "name": "FLAG_WINDOW_HIDDEN",
+ "value": 128,
+ "description": "Set to hide window"
+ },
+ {
+ "name": "FLAG_WINDOW_MINIMIZED",
+ "value": 512,
+ "description": "Set to minimize window (iconify)"
+ },
+ {
+ "name": "FLAG_WINDOW_MAXIMIZED",
+ "value": 1024,
+ "description": "Set to maximize window (expanded to monitor)"
+ },
+ {
+ "name": "FLAG_WINDOW_UNFOCUSED",
+ "value": 2048,
+ "description": "Set to window non focused"
+ },
+ {
+ "name": "FLAG_WINDOW_TOPMOST",
+ "value": 4096,
+ "description": "Set to window always on top"
+ },
+ {
+ "name": "FLAG_WINDOW_ALWAYS_RUN",
+ "value": 256,
+ "description": "Set to allow windows running while minimized"
+ },
+ {
+ "name": "FLAG_WINDOW_TRANSPARENT",
+ "value": 16,
+ "description": "Set to allow transparent framebuffer"
+ },
+ {
+ "name": "FLAG_WINDOW_HIGHDPI",
+ "value": 8192,
+ "description": "Set to support HighDPI"
+ },
+ {
+ "name": "FLAG_WINDOW_MOUSE_PASSTHROUGH",
+ "value": 16384,
+ "description": "Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED"
+ },
+ {
+ "name": "FLAG_BORDERLESS_WINDOWED_MODE",
+ "value": 32768,
+ "description": "Set to run program in borderless windowed mode"
+ },
+ {
+ "name": "FLAG_MSAA_4X_HINT",
+ "value": 32,
+ "description": "Set to try enabling MSAA 4X"
+ },
+ {
+ "name": "FLAG_INTERLACED_HINT",
+ "value": 65536,
+ "description": "Set to try enabling interlaced video format (for V3D)"
+ }
+ ],
+ "description": "System/Window config flags",
+ "custom": false
+ },
+ {
+ "name": "TraceLogLevel",
+ "values": [
+ {
+ "name": "LOG_ALL",
+ "value": 0,
+ "description": "Display all logs"
+ },
+ {
+ "name": "LOG_TRACE",
+ "value": 1,
+ "description": "Trace logging, intended for internal use only"
+ },
+ {
+ "name": "LOG_DEBUG",
+ "value": 2,
+ "description": "Debug logging, used for internal debugging, it should be disabled on release builds"
+ },
+ {
+ "name": "LOG_INFO",
+ "value": 3,
+ "description": "Info logging, used for program execution info"
+ },
+ {
+ "name": "LOG_WARNING",
+ "value": 4,
+ "description": "Warning logging, used on recoverable failures"
+ },
+ {
+ "name": "LOG_ERROR",
+ "value": 5,
+ "description": "Error logging, used on unrecoverable failures"
+ },
+ {
+ "name": "LOG_FATAL",
+ "value": 6,
+ "description": "Fatal logging, used to abort program: exit(EXIT_FAILURE)"
+ },
+ {
+ "name": "LOG_NONE",
+ "value": 7,
+ "description": "Disable logging"
+ }
+ ],
+ "description": "Trace log level",
+ "custom": false
+ },
+ {
+ "name": "KeyboardKey",
+ "values": [
+ {
+ "name": "KEY_NULL",
+ "value": 0,
+ "description": "Key: NULL, used for no key pressed"
+ },
+ {
+ "name": "KEY_APOSTROPHE",
+ "value": 39,
+ "description": "Key: '"
+ },
+ {
+ "name": "KEY_COMMA",
+ "value": 44,
+ "description": "Key: ,"
+ },
+ {
+ "name": "KEY_MINUS",
+ "value": 45,
+ "description": "Key: -"
+ },
+ {
+ "name": "KEY_PERIOD",
+ "value": 46,
+ "description": "Key: ."
+ },
+ {
+ "name": "KEY_SLASH",
+ "value": 47,
+ "description": "Key: /"
+ },
+ {
+ "name": "KEY_ZERO",
+ "value": 48,
+ "description": "Key: 0"
+ },
+ {
+ "name": "KEY_ONE",
+ "value": 49,
+ "description": "Key: 1"
+ },
+ {
+ "name": "KEY_TWO",
+ "value": 50,
+ "description": "Key: 2"
+ },
+ {
+ "name": "KEY_THREE",
+ "value": 51,
+ "description": "Key: 3"
+ },
+ {
+ "name": "KEY_FOUR",
+ "value": 52,
+ "description": "Key: 4"
+ },
+ {
+ "name": "KEY_FIVE",
+ "value": 53,
+ "description": "Key: 5"
+ },
+ {
+ "name": "KEY_SIX",
+ "value": 54,
+ "description": "Key: 6"
+ },
+ {
+ "name": "KEY_SEVEN",
+ "value": 55,
+ "description": "Key: 7"
+ },
+ {
+ "name": "KEY_EIGHT",
+ "value": 56,
+ "description": "Key: 8"
+ },
+ {
+ "name": "KEY_NINE",
+ "value": 57,
+ "description": "Key: 9"
+ },
+ {
+ "name": "KEY_SEMICOLON",
+ "value": 59,
+ "description": "Key: ;"
+ },
+ {
+ "name": "KEY_EQUAL",
+ "value": 61,
+ "description": "Key: ="
+ },
+ {
+ "name": "KEY_A",
+ "value": 65,
+ "description": "Key: A | a"
+ },
+ {
+ "name": "KEY_B",
+ "value": 66,
+ "description": "Key: B | b"
+ },
+ {
+ "name": "KEY_C",
+ "value": 67,
+ "description": "Key: C | c"
+ },
+ {
+ "name": "KEY_D",
+ "value": 68,
+ "description": "Key: D | d"
+ },
+ {
+ "name": "KEY_E",
+ "value": 69,
+ "description": "Key: E | e"
+ },
+ {
+ "name": "KEY_F",
+ "value": 70,
+ "description": "Key: F | f"
+ },
+ {
+ "name": "KEY_G",
+ "value": 71,
+ "description": "Key: G | g"
+ },
+ {
+ "name": "KEY_H",
+ "value": 72,
+ "description": "Key: H | h"
+ },
+ {
+ "name": "KEY_I",
+ "value": 73,
+ "description": "Key: I | i"
+ },
+ {
+ "name": "KEY_J",
+ "value": 74,
+ "description": "Key: J | j"
+ },
+ {
+ "name": "KEY_K",
+ "value": 75,
+ "description": "Key: K | k"
+ },
+ {
+ "name": "KEY_L",
+ "value": 76,
+ "description": "Key: L | l"
+ },
+ {
+ "name": "KEY_M",
+ "value": 77,
+ "description": "Key: M | m"
+ },
+ {
+ "name": "KEY_N",
+ "value": 78,
+ "description": "Key: N | n"
+ },
+ {
+ "name": "KEY_O",
+ "value": 79,
+ "description": "Key: O | o"
+ },
+ {
+ "name": "KEY_P",
+ "value": 80,
+ "description": "Key: P | p"
+ },
+ {
+ "name": "KEY_Q",
+ "value": 81,
+ "description": "Key: Q | q"
+ },
+ {
+ "name": "KEY_R",
+ "value": 82,
+ "description": "Key: R | r"
+ },
+ {
+ "name": "KEY_S",
+ "value": 83,
+ "description": "Key: S | s"
+ },
+ {
+ "name": "KEY_T",
+ "value": 84,
+ "description": "Key: T | t"
+ },
+ {
+ "name": "KEY_U",
+ "value": 85,
+ "description": "Key: U | u"
+ },
+ {
+ "name": "KEY_V",
+ "value": 86,
+ "description": "Key: V | v"
+ },
+ {
+ "name": "KEY_W",
+ "value": 87,
+ "description": "Key: W | w"
+ },
+ {
+ "name": "KEY_X",
+ "value": 88,
+ "description": "Key: X | x"
+ },
+ {
+ "name": "KEY_Y",
+ "value": 89,
+ "description": "Key: Y | y"
+ },
+ {
+ "name": "KEY_Z",
+ "value": 90,
+ "description": "Key: Z | z"
+ },
+ {
+ "name": "KEY_LEFT_BRACKET",
+ "value": 91,
+ "description": "Key: ["
+ },
+ {
+ "name": "KEY_BACKSLASH",
+ "value": 92,
+ "description": "Key: '\\'"
+ },
+ {
+ "name": "KEY_RIGHT_BRACKET",
+ "value": 93,
+ "description": "Key: ]"
+ },
+ {
+ "name": "KEY_GRAVE",
+ "value": 96,
+ "description": "Key: `"
+ },
+ {
+ "name": "KEY_SPACE",
+ "value": 32,
+ "description": "Key: Space"
+ },
+ {
+ "name": "KEY_ESCAPE",
+ "value": 256,
+ "description": "Key: Esc"
+ },
+ {
+ "name": "KEY_ENTER",
+ "value": 257,
+ "description": "Key: Enter"
+ },
+ {
+ "name": "KEY_TAB",
+ "value": 258,
+ "description": "Key: Tab"
+ },
+ {
+ "name": "KEY_BACKSPACE",
+ "value": 259,
+ "description": "Key: Backspace"
+ },
+ {
+ "name": "KEY_INSERT",
+ "value": 260,
+ "description": "Key: Ins"
+ },
+ {
+ "name": "KEY_DELETE",
+ "value": 261,
+ "description": "Key: Del"
+ },
+ {
+ "name": "KEY_RIGHT",
+ "value": 262,
+ "description": "Key: Cursor right"
+ },
+ {
+ "name": "KEY_LEFT",
+ "value": 263,
+ "description": "Key: Cursor left"
+ },
+ {
+ "name": "KEY_DOWN",
+ "value": 264,
+ "description": "Key: Cursor down"
+ },
+ {
+ "name": "KEY_UP",
+ "value": 265,
+ "description": "Key: Cursor up"
+ },
+ {
+ "name": "KEY_PAGE_UP",
+ "value": 266,
+ "description": "Key: Page up"
+ },
+ {
+ "name": "KEY_PAGE_DOWN",
+ "value": 267,
+ "description": "Key: Page down"
+ },
+ {
+ "name": "KEY_HOME",
+ "value": 268,
+ "description": "Key: Home"
+ },
+ {
+ "name": "KEY_END",
+ "value": 269,
+ "description": "Key: End"
+ },
+ {
+ "name": "KEY_CAPS_LOCK",
+ "value": 280,
+ "description": "Key: Caps lock"
+ },
+ {
+ "name": "KEY_SCROLL_LOCK",
+ "value": 281,
+ "description": "Key: Scroll down"
+ },
+ {
+ "name": "KEY_NUM_LOCK",
+ "value": 282,
+ "description": "Key: Num lock"
+ },
+ {
+ "name": "KEY_PRINT_SCREEN",
+ "value": 283,
+ "description": "Key: Print screen"
+ },
+ {
+ "name": "KEY_PAUSE",
+ "value": 284,
+ "description": "Key: Pause"
+ },
+ {
+ "name": "KEY_F1",
+ "value": 290,
+ "description": "Key: F1"
+ },
+ {
+ "name": "KEY_F2",
+ "value": 291,
+ "description": "Key: F2"
+ },
+ {
+ "name": "KEY_F3",
+ "value": 292,
+ "description": "Key: F3"
+ },
+ {
+ "name": "KEY_F4",
+ "value": 293,
+ "description": "Key: F4"
+ },
+ {
+ "name": "KEY_F5",
+ "value": 294,
+ "description": "Key: F5"
+ },
+ {
+ "name": "KEY_F6",
+ "value": 295,
+ "description": "Key: F6"
+ },
+ {
+ "name": "KEY_F7",
+ "value": 296,
+ "description": "Key: F7"
+ },
+ {
+ "name": "KEY_F8",
+ "value": 297,
+ "description": "Key: F8"
+ },
+ {
+ "name": "KEY_F9",
+ "value": 298,
+ "description": "Key: F9"
+ },
+ {
+ "name": "KEY_F10",
+ "value": 299,
+ "description": "Key: F10"
+ },
+ {
+ "name": "KEY_F11",
+ "value": 300,
+ "description": "Key: F11"
+ },
+ {
+ "name": "KEY_F12",
+ "value": 301,
+ "description": "Key: F12"
+ },
+ {
+ "name": "KEY_LEFT_SHIFT",
+ "value": 340,
+ "description": "Key: Shift left"
+ },
+ {
+ "name": "KEY_LEFT_CONTROL",
+ "value": 341,
+ "description": "Key: Control left"
+ },
+ {
+ "name": "KEY_LEFT_ALT",
+ "value": 342,
+ "description": "Key: Alt left"
+ },
+ {
+ "name": "KEY_LEFT_SUPER",
+ "value": 343,
+ "description": "Key: Super left"
+ },
+ {
+ "name": "KEY_RIGHT_SHIFT",
+ "value": 344,
+ "description": "Key: Shift right"
+ },
+ {
+ "name": "KEY_RIGHT_CONTROL",
+ "value": 345,
+ "description": "Key: Control right"
+ },
+ {
+ "name": "KEY_RIGHT_ALT",
+ "value": 346,
+ "description": "Key: Alt right"
+ },
+ {
+ "name": "KEY_RIGHT_SUPER",
+ "value": 347,
+ "description": "Key: Super right"
+ },
+ {
+ "name": "KEY_KB_MENU",
+ "value": 348,
+ "description": "Key: KB menu"
+ },
+ {
+ "name": "KEY_KP_0",
+ "value": 320,
+ "description": "Key: Keypad 0"
+ },
+ {
+ "name": "KEY_KP_1",
+ "value": 321,
+ "description": "Key: Keypad 1"
+ },
+ {
+ "name": "KEY_KP_2",
+ "value": 322,
+ "description": "Key: Keypad 2"
+ },
+ {
+ "name": "KEY_KP_3",
+ "value": 323,
+ "description": "Key: Keypad 3"
+ },
+ {
+ "name": "KEY_KP_4",
+ "value": 324,
+ "description": "Key: Keypad 4"
+ },
+ {
+ "name": "KEY_KP_5",
+ "value": 325,
+ "description": "Key: Keypad 5"
+ },
+ {
+ "name": "KEY_KP_6",
+ "value": 326,
+ "description": "Key: Keypad 6"
+ },
+ {
+ "name": "KEY_KP_7",
+ "value": 327,
+ "description": "Key: Keypad 7"
+ },
+ {
+ "name": "KEY_KP_8",
+ "value": 328,
+ "description": "Key: Keypad 8"
+ },
+ {
+ "name": "KEY_KP_9",
+ "value": 329,
+ "description": "Key: Keypad 9"
+ },
+ {
+ "name": "KEY_KP_DECIMAL",
+ "value": 330,
+ "description": "Key: Keypad ."
+ },
+ {
+ "name": "KEY_KP_DIVIDE",
+ "value": 331,
+ "description": "Key: Keypad /"
+ },
+ {
+ "name": "KEY_KP_MULTIPLY",
+ "value": 332,
+ "description": "Key: Keypad *"
+ },
+ {
+ "name": "KEY_KP_SUBTRACT",
+ "value": 333,
+ "description": "Key: Keypad -"
+ },
+ {
+ "name": "KEY_KP_ADD",
+ "value": 334,
+ "description": "Key: Keypad +"
+ },
+ {
+ "name": "KEY_KP_ENTER",
+ "value": 335,
+ "description": "Key: Keypad Enter"
+ },
+ {
+ "name": "KEY_KP_EQUAL",
+ "value": 336,
+ "description": "Key: Keypad ="
+ },
+ {
+ "name": "KEY_BACK",
+ "value": 4,
+ "description": "Key: Android back button"
+ },
+ {
+ "name": "KEY_VOLUME_UP",
+ "value": 24,
+ "description": "Key: Android volume up button"
+ },
+ {
+ "name": "KEY_VOLUME_DOWN",
+ "value": 25,
+ "description": "Key: Android volume down button"
+ }
+ ],
+ "description": "Keyboard keys (US keyboard layout)",
+ "custom": true
+ },
+ {
+ "name": "MouseButton",
+ "values": [
+ {
+ "name": "MOUSE_BUTTON_LEFT",
+ "value": 0,
+ "description": "Mouse button left"
+ },
+ {
+ "name": "MOUSE_BUTTON_RIGHT",
+ "value": 1,
+ "description": "Mouse button right"
+ },
+ {
+ "name": "MOUSE_BUTTON_MIDDLE",
+ "value": 2,
+ "description": "Mouse button middle (pressed wheel)"
+ },
+ {
+ "name": "MOUSE_BUTTON_SIDE",
+ "value": 3,
+ "description": "Mouse button side (advanced mouse device)"
+ },
+ {
+ "name": "MOUSE_BUTTON_EXTRA",
+ "value": 4,
+ "description": "Mouse button extra (advanced mouse device)"
+ },
+ {
+ "name": "MOUSE_BUTTON_FORWARD",
+ "value": 5,
+ "description": "Mouse button forward (advanced mouse device)"
+ },
+ {
+ "name": "MOUSE_BUTTON_BACK",
+ "value": 6,
+ "description": "Mouse button back (advanced mouse device)"
+ }
+ ],
+ "description": "Mouse buttons",
+ "custom": false
+ },
+ {
+ "name": "MouseCursor",
+ "values": [
+ {
+ "name": "MOUSE_CURSOR_DEFAULT",
+ "value": 0,
+ "description": "Default pointer shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_ARROW",
+ "value": 1,
+ "description": "Arrow shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_IBEAM",
+ "value": 2,
+ "description": "Text writing cursor shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_CROSSHAIR",
+ "value": 3,
+ "description": "Cross shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_POINTING_HAND",
+ "value": 4,
+ "description": "Pointing hand cursor"
+ },
+ {
+ "name": "MOUSE_CURSOR_RESIZE_EW",
+ "value": 5,
+ "description": "Horizontal resize/move arrow shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_RESIZE_NS",
+ "value": 6,
+ "description": "Vertical resize/move arrow shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_RESIZE_NWSE",
+ "value": 7,
+ "description": "Top-left to bottom-right diagonal resize/move arrow shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_RESIZE_NESW",
+ "value": 8,
+ "description": "The top-right to bottom-left diagonal resize/move arrow shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_RESIZE_ALL",
+ "value": 9,
+ "description": "The omnidirectional resize/move cursor shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_NOT_ALLOWED",
+ "value": 10,
+ "description": "The operation-not-allowed shape"
+ }
+ ],
+ "description": "Mouse cursor",
+ "custom": false
+ },
+ {
+ "name": "GamepadButton",
+ "values": [
+ {
+ "name": "GAMEPAD_BUTTON_UNKNOWN",
+ "value": 0,
+ "description": "Unknown button, just for error checking"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_FACE_UP",
+ "value": 1,
+ "description": "Gamepad left DPAD up button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_FACE_RIGHT",
+ "value": 2,
+ "description": "Gamepad left DPAD right button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_FACE_DOWN",
+ "value": 3,
+ "description": "Gamepad left DPAD down button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_FACE_LEFT",
+ "value": 4,
+ "description": "Gamepad left DPAD left button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_FACE_UP",
+ "value": 5,
+ "description": "Gamepad right button up (i.e. PS3: Triangle, Xbox: Y)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_FACE_RIGHT",
+ "value": 6,
+ "description": "Gamepad right button right (i.e. PS3: Square, Xbox: X)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_FACE_DOWN",
+ "value": 7,
+ "description": "Gamepad right button down (i.e. PS3: Cross, Xbox: A)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_FACE_LEFT",
+ "value": 8,
+ "description": "Gamepad right button left (i.e. PS3: Circle, Xbox: B)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_TRIGGER_1",
+ "value": 9,
+ "description": "Gamepad top/back trigger left (first), it could be a trailing button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_TRIGGER_2",
+ "value": 10,
+ "description": "Gamepad top/back trigger left (second), it could be a trailing button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_TRIGGER_1",
+ "value": 11,
+ "description": "Gamepad top/back trigger right (one), it could be a trailing button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_TRIGGER_2",
+ "value": 12,
+ "description": "Gamepad top/back trigger right (second), it could be a trailing button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_MIDDLE_LEFT",
+ "value": 13,
+ "description": "Gamepad center buttons, left one (i.e. PS3: Select)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_MIDDLE",
+ "value": 14,
+ "description": "Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_MIDDLE_RIGHT",
+ "value": 15,
+ "description": "Gamepad center buttons, right one (i.e. PS3: Start)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_THUMB",
+ "value": 16,
+ "description": "Gamepad joystick pressed button left"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_THUMB",
+ "value": 17,
+ "description": "Gamepad joystick pressed button right"
+ }
+ ],
+ "description": "Gamepad buttons",
+ "custom": false
+ },
+ {
+ "name": "GamepadAxis",
+ "values": [
+ {
+ "name": "GAMEPAD_AXIS_LEFT_X",
+ "value": 0,
+ "description": "Gamepad left stick X axis"
+ },
+ {
+ "name": "GAMEPAD_AXIS_LEFT_Y",
+ "value": 1,
+ "description": "Gamepad left stick Y axis"
+ },
+ {
+ "name": "GAMEPAD_AXIS_RIGHT_X",
+ "value": 2,
+ "description": "Gamepad right stick X axis"
+ },
+ {
+ "name": "GAMEPAD_AXIS_RIGHT_Y",
+ "value": 3,
+ "description": "Gamepad right stick Y axis"
+ },
+ {
+ "name": "GAMEPAD_AXIS_LEFT_TRIGGER",
+ "value": 4,
+ "description": "Gamepad back trigger left, pressure level: [1..-1]"
+ },
+ {
+ "name": "GAMEPAD_AXIS_RIGHT_TRIGGER",
+ "value": 5,
+ "description": "Gamepad back trigger right, pressure level: [1..-1]"
+ }
+ ],
+ "description": "Gamepad axis",
+ "custom": false
+ },
+ {
+ "name": "MaterialMapIndex",
+ "values": [
+ {
+ "name": "MATERIAL_MAP_ALBEDO",
+ "value": 0,
+ "description": "Albedo material (same as: MATERIAL_MAP_DIFFUSE)"
+ },
+ {
+ "name": "MATERIAL_MAP_METALNESS",
+ "value": 1,
+ "description": "Metalness material (same as: MATERIAL_MAP_SPECULAR)"
+ },
+ {
+ "name": "MATERIAL_MAP_NORMAL",
+ "value": 2,
+ "description": "Normal material"
+ },
+ {
+ "name": "MATERIAL_MAP_ROUGHNESS",
+ "value": 3,
+ "description": "Roughness material"
+ },
+ {
+ "name": "MATERIAL_MAP_OCCLUSION",
+ "value": 4,
+ "description": "Ambient occlusion material"
+ },
+ {
+ "name": "MATERIAL_MAP_EMISSION",
+ "value": 5,
+ "description": "Emission material"
+ },
+ {
+ "name": "MATERIAL_MAP_HEIGHT",
+ "value": 6,
+ "description": "Heightmap material"
+ },
+ {
+ "name": "MATERIAL_MAP_CUBEMAP",
+ "value": 7,
+ "description": "Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP)"
+ },
+ {
+ "name": "MATERIAL_MAP_IRRADIANCE",
+ "value": 8,
+ "description": "Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP)"
+ },
+ {
+ "name": "MATERIAL_MAP_PREFILTER",
+ "value": 9,
+ "description": "Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP)"
+ },
+ {
+ "name": "MATERIAL_MAP_BRDF",
+ "value": 10,
+ "description": "Brdf material"
+ }
+ ],
+ "description": "Material map index",
+ "custom": false
+ },
+ {
+ "name": "ShaderLocationIndex",
+ "values": [
+ {
+ "name": "SHADER_LOC_VERTEX_POSITION",
+ "value": 0,
+ "description": "Shader location: vertex attribute: position"
+ },
+ {
+ "name": "SHADER_LOC_VERTEX_TEXCOORD01",
+ "value": 1,
+ "description": "Shader location: vertex attribute: texcoord01"
+ },
+ {
+ "name": "SHADER_LOC_VERTEX_TEXCOORD02",
+ "value": 2,
+ "description": "Shader location: vertex attribute: texcoord02"
+ },
+ {
+ "name": "SHADER_LOC_VERTEX_NORMAL",
+ "value": 3,
+ "description": "Shader location: vertex attribute: normal"
+ },
+ {
+ "name": "SHADER_LOC_VERTEX_TANGENT",
+ "value": 4,
+ "description": "Shader location: vertex attribute: tangent"
+ },
+ {
+ "name": "SHADER_LOC_VERTEX_COLOR",
+ "value": 5,
+ "description": "Shader location: vertex attribute: color"
+ },
+ {
+ "name": "SHADER_LOC_MATRIX_MVP",
+ "value": 6,
+ "description": "Shader location: matrix uniform: model-view-projection"
+ },
+ {
+ "name": "SHADER_LOC_MATRIX_VIEW",
+ "value": 7,
+ "description": "Shader location: matrix uniform: view (camera transform)"
+ },
+ {
+ "name": "SHADER_LOC_MATRIX_PROJECTION",
+ "value": 8,
+ "description": "Shader location: matrix uniform: projection"
+ },
+ {
+ "name": "SHADER_LOC_MATRIX_MODEL",
+ "value": 9,
+ "description": "Shader location: matrix uniform: model (transform)"
+ },
+ {
+ "name": "SHADER_LOC_MATRIX_NORMAL",
+ "value": 10,
+ "description": "Shader location: matrix uniform: normal"
+ },
+ {
+ "name": "SHADER_LOC_VECTOR_VIEW",
+ "value": 11,
+ "description": "Shader location: vector uniform: view"
+ },
+ {
+ "name": "SHADER_LOC_COLOR_DIFFUSE",
+ "value": 12,
+ "description": "Shader location: vector uniform: diffuse color"
+ },
+ {
+ "name": "SHADER_LOC_COLOR_SPECULAR",
+ "value": 13,
+ "description": "Shader location: vector uniform: specular color"
+ },
+ {
+ "name": "SHADER_LOC_COLOR_AMBIENT",
+ "value": 14,
+ "description": "Shader location: vector uniform: ambient color"
+ },
+ {
+ "name": "SHADER_LOC_MAP_ALBEDO",
+ "value": 15,
+ "description": "Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE)"
+ },
+ {
+ "name": "SHADER_LOC_MAP_METALNESS",
+ "value": 16,
+ "description": "Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR)"
+ },
+ {
+ "name": "SHADER_LOC_MAP_NORMAL",
+ "value": 17,
+ "description": "Shader location: sampler2d texture: normal"
+ },
+ {
+ "name": "SHADER_LOC_MAP_ROUGHNESS",
+ "value": 18,
+ "description": "Shader location: sampler2d texture: roughness"
+ },
+ {
+ "name": "SHADER_LOC_MAP_OCCLUSION",
+ "value": 19,
+ "description": "Shader location: sampler2d texture: occlusion"
+ },
+ {
+ "name": "SHADER_LOC_MAP_EMISSION",
+ "value": 20,
+ "description": "Shader location: sampler2d texture: emission"
+ },
+ {
+ "name": "SHADER_LOC_MAP_HEIGHT",
+ "value": 21,
+ "description": "Shader location: sampler2d texture: height"
+ },
+ {
+ "name": "SHADER_LOC_MAP_CUBEMAP",
+ "value": 22,
+ "description": "Shader location: samplerCube texture: cubemap"
+ },
+ {
+ "name": "SHADER_LOC_MAP_IRRADIANCE",
+ "value": 23,
+ "description": "Shader location: samplerCube texture: irradiance"
+ },
+ {
+ "name": "SHADER_LOC_MAP_PREFILTER",
+ "value": 24,
+ "description": "Shader location: samplerCube texture: prefilter"
+ },
+ {
+ "name": "SHADER_LOC_MAP_BRDF",
+ "value": 25,
+ "description": "Shader location: sampler2d texture: brdf"
+ }
+ ],
+ "description": "Shader location index",
+ "custom": false
+ },
+ {
+ "name": "ShaderUniformDataType",
+ "values": [
+ {
+ "name": "SHADER_UNIFORM_FLOAT",
+ "value": 0,
+ "description": "Shader uniform type: float"
+ },
+ {
+ "name": "SHADER_UNIFORM_VEC2",
+ "value": 1,
+ "description": "Shader uniform type: vec2 (2 float)"
+ },
+ {
+ "name": "SHADER_UNIFORM_VEC3",
+ "value": 2,
+ "description": "Shader uniform type: vec3 (3 float)"
+ },
+ {
+ "name": "SHADER_UNIFORM_VEC4",
+ "value": 3,
+ "description": "Shader uniform type: vec4 (4 float)"
+ },
+ {
+ "name": "SHADER_UNIFORM_INT",
+ "value": 4,
+ "description": "Shader uniform type: int"
+ },
+ {
+ "name": "SHADER_UNIFORM_IVEC2",
+ "value": 5,
+ "description": "Shader uniform type: ivec2 (2 int)"
+ },
+ {
+ "name": "SHADER_UNIFORM_IVEC3",
+ "value": 6,
+ "description": "Shader uniform type: ivec3 (3 int)"
+ },
+ {
+ "name": "SHADER_UNIFORM_IVEC4",
+ "value": 7,
+ "description": "Shader uniform type: ivec4 (4 int)"
+ },
+ {
+ "name": "SHADER_UNIFORM_SAMPLER2D",
+ "value": 8,
+ "description": "Shader uniform type: sampler2d"
+ }
+ ],
+ "description": "Shader uniform data type",
+ "custom": false
+ },
+ {
+ "name": "ShaderAttributeDataType",
+ "values": [
+ {
+ "name": "SHADER_ATTRIB_FLOAT",
+ "value": 0,
+ "description": "Shader attribute type: float"
+ },
+ {
+ "name": "SHADER_ATTRIB_VEC2",
+ "value": 1,
+ "description": "Shader attribute type: vec2 (2 float)"
+ },
+ {
+ "name": "SHADER_ATTRIB_VEC3",
+ "value": 2,
+ "description": "Shader attribute type: vec3 (3 float)"
+ },
+ {
+ "name": "SHADER_ATTRIB_VEC4",
+ "value": 3,
+ "description": "Shader attribute type: vec4 (4 float)"
+ }
+ ],
+ "description": "Shader attribute data types",
+ "custom": false
+ },
+ {
+ "name": "PixelFormat",
+ "values": [
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_GRAYSCALE",
+ "value": 1,
+ "description": "8 bit per pixel (no alpha)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA",
+ "value": 2,
+ "description": "8*2 bpp (2 channels)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R5G6B5",
+ "value": 3,
+ "description": "16 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R8G8B8",
+ "value": 4,
+ "description": "24 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R5G5B5A1",
+ "value": 5,
+ "description": "16 bpp (1 bit alpha)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R4G4B4A4",
+ "value": 6,
+ "description": "16 bpp (4 bit alpha)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R8G8B8A8",
+ "value": 7,
+ "description": "32 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R32",
+ "value": 8,
+ "description": "32 bpp (1 channel - float)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R32G32B32",
+ "value": 9,
+ "description": "32*3 bpp (3 channels - float)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R32G32B32A32",
+ "value": 10,
+ "description": "32*4 bpp (4 channels - float)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R16",
+ "value": 11,
+ "description": "16 bpp (1 channel - half float)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R16G16B16",
+ "value": 12,
+ "description": "16*3 bpp (3 channels - half float)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R16G16B16A16",
+ "value": 13,
+ "description": "16*4 bpp (4 channels - half float)"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_DXT1_RGB",
+ "value": 14,
+ "description": "4 bpp (no alpha)"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_DXT1_RGBA",
+ "value": 15,
+ "description": "4 bpp (1 bit alpha)"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_DXT3_RGBA",
+ "value": 16,
+ "description": "8 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_DXT5_RGBA",
+ "value": 17,
+ "description": "8 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_ETC1_RGB",
+ "value": 18,
+ "description": "4 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_ETC2_RGB",
+ "value": 19,
+ "description": "4 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA",
+ "value": 20,
+ "description": "8 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_PVRT_RGB",
+ "value": 21,
+ "description": "4 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_PVRT_RGBA",
+ "value": 22,
+ "description": "4 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA",
+ "value": 23,
+ "description": "8 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA",
+ "value": 24,
+ "description": "2 bpp"
+ }
+ ],
+ "description": "Pixel formats",
+ "custom": false
+ },
+ {
+ "name": "TextureFilter",
+ "values": [
+ {
+ "name": "TEXTURE_FILTER_POINT",
+ "value": 0,
+ "description": "No filter, just pixel approximation"
+ },
+ {
+ "name": "TEXTURE_FILTER_BILINEAR",
+ "value": 1,
+ "description": "Linear filtering"
+ },
+ {
+ "name": "TEXTURE_FILTER_TRILINEAR",
+ "value": 2,
+ "description": "Trilinear filtering (linear with mipmaps)"
+ },
+ {
+ "name": "TEXTURE_FILTER_ANISOTROPIC_4X",
+ "value": 3,
+ "description": "Anisotropic filtering 4x"
+ },
+ {
+ "name": "TEXTURE_FILTER_ANISOTROPIC_8X",
+ "value": 4,
+ "description": "Anisotropic filtering 8x"
+ },
+ {
+ "name": "TEXTURE_FILTER_ANISOTROPIC_16X",
+ "value": 5,
+ "description": "Anisotropic filtering 16x"
+ }
+ ],
+ "description": "Texture parameters: filter mode",
+ "custom": false
+ },
+ {
+ "name": "TextureWrap",
+ "values": [
+ {
+ "name": "TEXTURE_WRAP_REPEAT",
+ "value": 0,
+ "description": "Repeats texture in tiled mode"
+ },
+ {
+ "name": "TEXTURE_WRAP_CLAMP",
+ "value": 1,
+ "description": "Clamps texture to edge pixel in tiled mode"
+ },
+ {
+ "name": "TEXTURE_WRAP_MIRROR_REPEAT",
+ "value": 2,
+ "description": "Mirrors and repeats the texture in tiled mode"
+ },
+ {
+ "name": "TEXTURE_WRAP_MIRROR_CLAMP",
+ "value": 3,
+ "description": "Mirrors and clamps to border the texture in tiled mode"
+ }
+ ],
+ "description": "Texture parameters: wrap mode",
+ "custom": false
+ },
+ {
+ "name": "CubemapLayout",
+ "values": [
+ {
+ "name": "CUBEMAP_LAYOUT_AUTO_DETECT",
+ "value": 0,
+ "description": "Automatically detect layout type"
+ },
+ {
+ "name": "CUBEMAP_LAYOUT_LINE_VERTICAL",
+ "value": 1,
+ "description": "Layout is defined by a vertical line with faces"
+ },
+ {
+ "name": "CUBEMAP_LAYOUT_LINE_HORIZONTAL",
+ "value": 2,
+ "description": "Layout is defined by a horizontal line with faces"
+ },
+ {
+ "name": "CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR",
+ "value": 3,
+ "description": "Layout is defined by a 3x4 cross with cubemap faces"
+ },
+ {
+ "name": "CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE",
+ "value": 4,
+ "description": "Layout is defined by a 4x3 cross with cubemap faces"
+ },
+ {
+ "name": "CUBEMAP_LAYOUT_PANORAMA",
+ "value": 5,
+ "description": "Layout is defined by a panorama image (equirrectangular map)"
+ }
+ ],
+ "description": "Cubemap layouts",
+ "custom": false
+ },
+ {
+ "name": "FontType",
+ "values": [
+ {
+ "name": "FONT_DEFAULT",
+ "value": 0,
+ "description": "Default font generation, anti-aliased"
+ },
+ {
+ "name": "FONT_BITMAP",
+ "value": 1,
+ "description": "Bitmap font generation, no anti-aliasing"
+ },
+ {
+ "name": "FONT_SDF",
+ "value": 2,
+ "description": "SDF font generation, requires external shader"
+ }
+ ],
+ "description": "Font type, defines generation method",
+ "custom": false
+ },
+ {
+ "name": "BlendMode",
+ "values": [
+ {
+ "name": "BLEND_ALPHA",
+ "value": 0,
+ "description": "Blend textures considering alpha (default)"
+ },
+ {
+ "name": "BLEND_ADDITIVE",
+ "value": 1,
+ "description": "Blend textures adding colors"
+ },
+ {
+ "name": "BLEND_MULTIPLIED",
+ "value": 2,
+ "description": "Blend textures multiplying colors"
+ },
+ {
+ "name": "BLEND_ADD_COLORS",
+ "value": 3,
+ "description": "Blend textures adding colors (alternative)"
+ },
+ {
+ "name": "BLEND_SUBTRACT_COLORS",
+ "value": 4,
+ "description": "Blend textures subtracting colors (alternative)"
+ },
+ {
+ "name": "BLEND_ALPHA_PREMULTIPLY",
+ "value": 5,
+ "description": "Blend premultiplied textures considering alpha"
+ },
+ {
+ "name": "BLEND_CUSTOM",
+ "value": 6,
+ "description": "Blend textures using custom src/dst factors (use rlSetBlendFactors())"
+ },
+ {
+ "name": "BLEND_CUSTOM_SEPARATE",
+ "value": 7,
+ "description": "Blend textures using custom rgb/alpha separate src/dst factors (use rlSetBlendFactorsSeparate())"
+ }
+ ],
+ "description": "Color blending modes (pre-defined)",
+ "custom": false
+ },
+ {
+ "name": "Gesture",
+ "values": [
+ {
+ "name": "GESTURE_NONE",
+ "value": 0,
+ "description": "No gesture"
+ },
+ {
+ "name": "GESTURE_TAP",
+ "value": 1,
+ "description": "Tap gesture"
+ },
+ {
+ "name": "GESTURE_DOUBLETAP",
+ "value": 2,
+ "description": "Double tap gesture"
+ },
+ {
+ "name": "GESTURE_HOLD",
+ "value": 4,
+ "description": "Hold gesture"
+ },
+ {
+ "name": "GESTURE_DRAG",
+ "value": 8,
+ "description": "Drag gesture"
+ },
+ {
+ "name": "GESTURE_SWIPE_RIGHT",
+ "value": 16,
+ "description": "Swipe right gesture"
+ },
+ {
+ "name": "GESTURE_SWIPE_LEFT",
+ "value": 32,
+ "description": "Swipe left gesture"
+ },
+ {
+ "name": "GESTURE_SWIPE_UP",
+ "value": 64,
+ "description": "Swipe up gesture"
+ },
+ {
+ "name": "GESTURE_SWIPE_DOWN",
+ "value": 128,
+ "description": "Swipe down gesture"
+ },
+ {
+ "name": "GESTURE_PINCH_IN",
+ "value": 256,
+ "description": "Pinch in gesture"
+ },
+ {
+ "name": "GESTURE_PINCH_OUT",
+ "value": 512,
+ "description": "Pinch out gesture"
+ }
+ ],
+ "description": "Gesture",
+ "custom": false
+ },
+ {
+ "name": "CameraMode",
+ "values": [
+ {
+ "name": "CAMERA_CUSTOM",
+ "value": 0,
+ "description": "Custom camera"
+ },
+ {
+ "name": "CAMERA_FREE",
+ "value": 1,
+ "description": "Free camera"
+ },
+ {
+ "name": "CAMERA_ORBITAL",
+ "value": 2,
+ "description": "Orbital camera"
+ },
+ {
+ "name": "CAMERA_FIRST_PERSON",
+ "value": 3,
+ "description": "First person camera"
+ },
+ {
+ "name": "CAMERA_THIRD_PERSON",
+ "value": 4,
+ "description": "Third person camera"
+ }
+ ],
+ "description": "Camera system modes",
+ "custom": false
+ },
+ {
+ "name": "CameraProjection",
+ "values": [
+ {
+ "name": "CAMERA_PERSPECTIVE",
+ "value": 0,
+ "description": "Perspective projection"
+ },
+ {
+ "name": "CAMERA_ORTHOGRAPHIC",
+ "value": 1,
+ "description": "Orthographic projection"
+ }
+ ],
+ "description": "Camera projection",
+ "custom": false
+ },
+ {
+ "name": "NPatchLayout",
+ "values": [
+ {
+ "name": "NPATCH_NINE_PATCH",
+ "value": 0,
+ "description": "Npatch layout: 3x3 tiles"
+ },
+ {
+ "name": "NPATCH_THREE_PATCH_VERTICAL",
+ "value": 1,
+ "description": "Npatch layout: 1x3 tiles"
+ },
+ {
+ "name": "NPATCH_THREE_PATCH_HORIZONTAL",
+ "value": 2,
+ "description": "Npatch layout: 3x1 tiles"
+ }
+ ],
+ "description": "N-patch layout",
+ "custom": false
+ },
+ {
+ "name": "rlGlVersion",
+ "values": [
+ {
+ "name": "RL_OPENGL_11",
+ "value": 1,
+ "description": "OpenGL 1.1"
+ },
+ {
+ "name": "RL_OPENGL_21",
+ "value": 2,
+ "description": "OpenGL 2.1 (GLSL 120)"
+ },
+ {
+ "name": "RL_OPENGL_33",
+ "value": 3,
+ "description": "OpenGL 3.3 (GLSL 330)"
+ },
+ {
+ "name": "RL_OPENGL_43",
+ "value": 4,
+ "description": "OpenGL 4.3 (using GLSL 330)"
+ },
+ {
+ "name": "RL_OPENGL_ES_20",
+ "value": 5,
+ "description": "OpenGL ES 2.0 (GLSL 100)"
+ },
+ {
+ "name": "RL_OPENGL_ES_30",
+ "value": 6,
+ "description": "OpenGL ES 3.0 (GLSL 300 es)"
+ }
+ ],
+ "description": "OpenGL version",
+ "custom": false
+ },
+ {
+ "name": "rlTraceLogLevel",
+ "values": [
+ {
+ "name": "RL_LOG_ALL",
+ "value": 0,
+ "description": "Display all logs"
+ },
+ {
+ "name": "RL_LOG_TRACE",
+ "value": 1,
+ "description": "Trace logging, intended for internal use only"
+ },
+ {
+ "name": "RL_LOG_DEBUG",
+ "value": 2,
+ "description": "Debug logging, used for internal debugging, it should be disabled on release builds"
+ },
+ {
+ "name": "RL_LOG_INFO",
+ "value": 3,
+ "description": "Info logging, used for program execution info"
+ },
+ {
+ "name": "RL_LOG_WARNING",
+ "value": 4,
+ "description": "Warning logging, used on recoverable failures"
+ },
+ {
+ "name": "RL_LOG_ERROR",
+ "value": 5,
+ "description": "Error logging, used on unrecoverable failures"
+ },
+ {
+ "name": "RL_LOG_FATAL",
+ "value": 6,
+ "description": "Fatal logging, used to abort program: exit(EXIT_FAILURE)"
+ },
+ {
+ "name": "RL_LOG_NONE",
+ "value": 7,
+ "description": "Disable logging"
+ }
+ ],
+ "description": "Trace log level",
+ "custom": false
+ },
+ {
+ "name": "rlPixelFormat",
+ "values": [
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE",
+ "value": 1,
+ "description": "8 bit per pixel (no alpha)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA",
+ "value": 2,
+ "description": "8*2 bpp (2 channels)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5",
+ "value": 3,
+ "description": "16 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8",
+ "value": 4,
+ "description": "24 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1",
+ "value": 5,
+ "description": "16 bpp (1 bit alpha)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4",
+ "value": 6,
+ "description": "16 bpp (4 bit alpha)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8",
+ "value": 7,
+ "description": "32 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R32",
+ "value": 8,
+ "description": "32 bpp (1 channel - float)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32",
+ "value": 9,
+ "description": "32*3 bpp (3 channels - float)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32",
+ "value": 10,
+ "description": "32*4 bpp (4 channels - float)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R16",
+ "value": 11,
+ "description": "16 bpp (1 channel - half float)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16",
+ "value": 12,
+ "description": "16*3 bpp (3 channels - half float)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16",
+ "value": 13,
+ "description": "16*4 bpp (4 channels - half float)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_DXT1_RGB",
+ "value": 14,
+ "description": "4 bpp (no alpha)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA",
+ "value": 15,
+ "description": "4 bpp (1 bit alpha)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA",
+ "value": 16,
+ "description": "8 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA",
+ "value": 17,
+ "description": "8 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_ETC1_RGB",
+ "value": 18,
+ "description": "4 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_ETC2_RGB",
+ "value": 19,
+ "description": "4 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA",
+ "value": 20,
+ "description": "8 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_PVRT_RGB",
+ "value": 21,
+ "description": "4 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA",
+ "value": 22,
+ "description": "4 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA",
+ "value": 23,
+ "description": "8 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA",
+ "value": 24,
+ "description": "2 bpp"
+ }
+ ],
+ "description": "Texture pixel formats",
+ "custom": false
+ },
+ {
+ "name": "rlTextureFilter",
+ "values": [
+ {
+ "name": "RL_TEXTURE_FILTER_POINT",
+ "value": 0,
+ "description": "No filter, just pixel approximation"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_BILINEAR",
+ "value": 1,
+ "description": "Linear filtering"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_TRILINEAR",
+ "value": 2,
+ "description": "Trilinear filtering (linear with mipmaps)"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_ANISOTROPIC_4X",
+ "value": 3,
+ "description": "Anisotropic filtering 4x"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_ANISOTROPIC_8X",
+ "value": 4,
+ "description": "Anisotropic filtering 8x"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_ANISOTROPIC_16X",
+ "value": 5,
+ "description": "Anisotropic filtering 16x"
+ }
+ ],
+ "description": "Texture parameters: filter mode",
+ "custom": false
+ },
+ {
+ "name": "rlBlendMode",
+ "values": [
+ {
+ "name": "RL_BLEND_ALPHA",
+ "value": 0,
+ "description": "Blend textures considering alpha (default)"
+ },
+ {
+ "name": "RL_BLEND_ADDITIVE",
+ "value": 1,
+ "description": "Blend textures adding colors"
+ },
+ {
+ "name": "RL_BLEND_MULTIPLIED",
+ "value": 2,
+ "description": "Blend textures multiplying colors"
+ },
+ {
+ "name": "RL_BLEND_ADD_COLORS",
+ "value": 3,
+ "description": "Blend textures adding colors (alternative)"
+ },
+ {
+ "name": "RL_BLEND_SUBTRACT_COLORS",
+ "value": 4,
+ "description": "Blend textures subtracting colors (alternative)"
+ },
+ {
+ "name": "RL_BLEND_ALPHA_PREMULTIPLY",
+ "value": 5,
+ "description": "Blend premultiplied textures considering alpha"
+ },
+ {
+ "name": "RL_BLEND_CUSTOM",
+ "value": 6,
+ "description": "Blend textures using custom src/dst factors (use rlSetBlendFactors())"
+ },
+ {
+ "name": "RL_BLEND_CUSTOM_SEPARATE",
+ "value": 7,
+ "description": "Blend textures using custom src/dst factors (use rlSetBlendFactorsSeparate())"
+ }
+ ],
+ "description": "Color blending modes (pre-defined)",
+ "custom": false
+ },
+ {
+ "name": "rlShaderLocationIndex",
+ "values": [
+ {
+ "name": "RL_SHADER_LOC_VERTEX_POSITION",
+ "value": 0,
+ "description": "Shader location: vertex attribute: position"
+ },
+ {
+ "name": "RL_SHADER_LOC_VERTEX_TEXCOORD01",
+ "value": 1,
+ "description": "Shader location: vertex attribute: texcoord01"
+ },
+ {
+ "name": "RL_SHADER_LOC_VERTEX_TEXCOORD02",
+ "value": 2,
+ "description": "Shader location: vertex attribute: texcoord02"
+ },
+ {
+ "name": "RL_SHADER_LOC_VERTEX_NORMAL",
+ "value": 3,
+ "description": "Shader location: vertex attribute: normal"
+ },
+ {
+ "name": "RL_SHADER_LOC_VERTEX_TANGENT",
+ "value": 4,
+ "description": "Shader location: vertex attribute: tangent"
+ },
+ {
+ "name": "RL_SHADER_LOC_VERTEX_COLOR",
+ "value": 5,
+ "description": "Shader location: vertex attribute: color"
+ },
+ {
+ "name": "RL_SHADER_LOC_MATRIX_MVP",
+ "value": 6,
+ "description": "Shader location: matrix uniform: model-view-projection"
+ },
+ {
+ "name": "RL_SHADER_LOC_MATRIX_VIEW",
+ "value": 7,
+ "description": "Shader location: matrix uniform: view (camera transform)"
+ },
+ {
+ "name": "RL_SHADER_LOC_MATRIX_PROJECTION",
+ "value": 8,
+ "description": "Shader location: matrix uniform: projection"
+ },
+ {
+ "name": "RL_SHADER_LOC_MATRIX_MODEL",
+ "value": 9,
+ "description": "Shader location: matrix uniform: model (transform)"
+ },
+ {
+ "name": "RL_SHADER_LOC_MATRIX_NORMAL",
+ "value": 10,
+ "description": "Shader location: matrix uniform: normal"
+ },
+ {
+ "name": "RL_SHADER_LOC_VECTOR_VIEW",
+ "value": 11,
+ "description": "Shader location: vector uniform: view"
+ },
+ {
+ "name": "RL_SHADER_LOC_COLOR_DIFFUSE",
+ "value": 12,
+ "description": "Shader location: vector uniform: diffuse color"
+ },
+ {
+ "name": "RL_SHADER_LOC_COLOR_SPECULAR",
+ "value": 13,
+ "description": "Shader location: vector uniform: specular color"
+ },
+ {
+ "name": "RL_SHADER_LOC_COLOR_AMBIENT",
+ "value": 14,
+ "description": "Shader location: vector uniform: ambient color"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_ALBEDO",
+ "value": 15,
+ "description": "Shader location: sampler2d texture: albedo (same as: RL_SHADER_LOC_MAP_DIFFUSE)"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_METALNESS",
+ "value": 16,
+ "description": "Shader location: sampler2d texture: metalness (same as: RL_SHADER_LOC_MAP_SPECULAR)"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_NORMAL",
+ "value": 17,
+ "description": "Shader location: sampler2d texture: normal"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_ROUGHNESS",
+ "value": 18,
+ "description": "Shader location: sampler2d texture: roughness"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_OCCLUSION",
+ "value": 19,
+ "description": "Shader location: sampler2d texture: occlusion"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_EMISSION",
+ "value": 20,
+ "description": "Shader location: sampler2d texture: emission"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_HEIGHT",
+ "value": 21,
+ "description": "Shader location: sampler2d texture: height"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_CUBEMAP",
+ "value": 22,
+ "description": "Shader location: samplerCube texture: cubemap"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_IRRADIANCE",
+ "value": 23,
+ "description": "Shader location: samplerCube texture: irradiance"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_PREFILTER",
+ "value": 24,
+ "description": "Shader location: samplerCube texture: prefilter"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_BRDF",
+ "value": 25,
+ "description": "Shader location: sampler2d texture: brdf"
+ }
+ ],
+ "description": "Shader location point type",
+ "custom": false
+ },
+ {
+ "name": "rlShaderUniformDataType",
+ "values": [
+ {
+ "name": "RL_SHADER_UNIFORM_FLOAT",
+ "value": 0,
+ "description": "Shader uniform type: float"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_VEC2",
+ "value": 1,
+ "description": "Shader uniform type: vec2 (2 float)"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_VEC3",
+ "value": 2,
+ "description": "Shader uniform type: vec3 (3 float)"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_VEC4",
+ "value": 3,
+ "description": "Shader uniform type: vec4 (4 float)"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_INT",
+ "value": 4,
+ "description": "Shader uniform type: int"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_IVEC2",
+ "value": 5,
+ "description": "Shader uniform type: ivec2 (2 int)"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_IVEC3",
+ "value": 6,
+ "description": "Shader uniform type: ivec3 (3 int)"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_IVEC4",
+ "value": 7,
+ "description": "Shader uniform type: ivec4 (4 int)"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_SAMPLER2D",
+ "value": 8,
+ "description": "Shader uniform type: sampler2d"
+ }
+ ],
+ "description": "Shader uniform data type",
+ "custom": false
+ },
+ {
+ "name": "rlShaderAttributeDataType",
+ "values": [
+ {
+ "name": "RL_SHADER_ATTRIB_FLOAT",
+ "value": 0,
+ "description": "Shader attribute type: float"
+ },
+ {
+ "name": "RL_SHADER_ATTRIB_VEC2",
+ "value": 1,
+ "description": "Shader attribute type: vec2 (2 float)"
+ },
+ {
+ "name": "RL_SHADER_ATTRIB_VEC3",
+ "value": 2,
+ "description": "Shader attribute type: vec3 (3 float)"
+ },
+ {
+ "name": "RL_SHADER_ATTRIB_VEC4",
+ "value": 3,
+ "description": "Shader attribute type: vec4 (4 float)"
+ }
+ ],
+ "description": "Shader attribute data types",
+ "custom": false
+ },
+ {
+ "name": "rlFramebufferAttachType",
+ "values": [
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL0",
+ "value": 0,
+ "description": "Framebuffer attachment type: color 0"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL1",
+ "value": 1,
+ "description": "Framebuffer attachment type: color 1"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL2",
+ "value": 2,
+ "description": "Framebuffer attachment type: color 2"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL3",
+ "value": 3,
+ "description": "Framebuffer attachment type: color 3"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL4",
+ "value": 4,
+ "description": "Framebuffer attachment type: color 4"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL5",
+ "value": 5,
+ "description": "Framebuffer attachment type: color 5"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL6",
+ "value": 6,
+ "description": "Framebuffer attachment type: color 6"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL7",
+ "value": 7,
+ "description": "Framebuffer attachment type: color 7"
+ },
+ {
+ "name": "RL_ATTACHMENT_DEPTH",
+ "value": 100,
+ "description": "Framebuffer attachment type: depth"
+ },
+ {
+ "name": "RL_ATTACHMENT_STENCIL",
+ "value": 200,
+ "description": "Framebuffer attachment type: stencil"
+ }
+ ],
+ "description": "Framebuffer attachment type",
+ "custom": false
+ },
+ {
+ "name": "rlFramebufferAttachTextureType",
+ "values": [
+ {
+ "name": "RL_ATTACHMENT_CUBEMAP_POSITIVE_X",
+ "value": 0,
+ "description": "Framebuffer texture attachment type: cubemap, +X side"
+ },
+ {
+ "name": "RL_ATTACHMENT_CUBEMAP_NEGATIVE_X",
+ "value": 1,
+ "description": "Framebuffer texture attachment type: cubemap, -X side"
+ },
+ {
+ "name": "RL_ATTACHMENT_CUBEMAP_POSITIVE_Y",
+ "value": 2,
+ "description": "Framebuffer texture attachment type: cubemap, +Y side"
+ },
+ {
+ "name": "RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y",
+ "value": 3,
+ "description": "Framebuffer texture attachment type: cubemap, -Y side"
+ },
+ {
+ "name": "RL_ATTACHMENT_CUBEMAP_POSITIVE_Z",
+ "value": 4,
+ "description": "Framebuffer texture attachment type: cubemap, +Z side"
+ },
+ {
+ "name": "RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z",
+ "value": 5,
+ "description": "Framebuffer texture attachment type: cubemap, -Z side"
+ },
+ {
+ "name": "RL_ATTACHMENT_TEXTURE2D",
+ "value": 100,
+ "description": "Framebuffer texture attachment type: texture2d"
+ },
+ {
+ "name": "RL_ATTACHMENT_RENDERBUFFER",
+ "value": 200,
+ "description": "Framebuffer texture attachment type: renderbuffer"
+ }
+ ],
+ "description": "Framebuffer texture attachment type",
+ "custom": false
+ },
+ {
+ "name": "rlCullMode",
+ "values": [
+ {
+ "name": "RL_CULL_FACE_FRONT",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "RL_CULL_FACE_BACK",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "Face culling mode",
+ "custom": false
+ },
+ {
+ "name": "PhysicsShapeType",
+ "values": [
+ {
+ "name": "PHYSICS_CIRCLE",
+ "value": 0,
+ "description": "physics shape is a circle"
+ },
+ {
+ "name": "PHYSICS_POLYGON",
+ "value": 1,
+ "description": "physics shape is a polygon"
+ }
+ ],
+ "description": "circle or polygon",
+ "custom": true
+ }
+ ],
+ "structs": [
+ {
+ "name": "Vector2",
+ "fields": [
+ {
+ "name": "x",
+ "typ": "f32",
+ "description": ""
+ },
+ {
+ "name": "y",
+ "typ": "f32",
+ "description": ""
+ }
+ ],
+ "description": "Vector2 type",
+ "custom": false
+ },
+ {
+ "name": "Vector3",
+ "fields": [
+ {
+ "name": "x",
+ "typ": "f32",
+ "description": ""
+ },
+ {
+ "name": "y",
+ "typ": "f32",
+ "description": ""
+ },
+ {
+ "name": "z",
+ "typ": "f32",
+ "description": ""
+ }
+ ],
+ "description": "Vector3 type",
+ "custom": false
+ },
+ {
+ "name": "Vector4",
+ "fields": [
+ {
+ "name": "x",
+ "typ": "f32",
+ "description": ""
+ },
+ {
+ "name": "y",
+ "typ": "f32",
+ "description": ""
+ },
+ {
+ "name": "z",
+ "typ": "f32",
+ "description": ""
+ },
+ {
+ "name": "w",
+ "typ": "f32",
+ "description": ""
+ }
+ ],
+ "description": "Vector4 type",
+ "custom": false
+ },
+ {
+ "name": "Matrix",
+ "fields": [
+ {
+ "name": "m0",
+ "typ": "f32",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "name": "m4",
+ "typ": "f32",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "name": "m8",
+ "typ": "f32",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "name": "m12",
+ "typ": "f32",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "name": "m1",
+ "typ": "f32",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "name": "m5",
+ "typ": "f32",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "name": "m9",
+ "typ": "f32",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "name": "m13",
+ "typ": "f32",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "name": "m2",
+ "typ": "f32",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "name": "m6",
+ "typ": "f32",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "name": "m10",
+ "typ": "f32",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "name": "m14",
+ "typ": "f32",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "name": "m3",
+ "typ": "f32",
+ "description": "Matrix fourth row (4 components)"
+ },
+ {
+ "name": "m7",
+ "typ": "f32",
+ "description": "Matrix fourth row (4 components)"
+ },
+ {
+ "name": "m11",
+ "typ": "f32",
+ "description": "Matrix fourth row (4 components)"
+ },
+ {
+ "name": "m15",
+ "typ": "f32",
+ "description": "Matrix fourth row (4 components)"
+ }
+ ],
+ "description": "Matrix type (OpenGL style 4x4 - right handed, column major)",
+ "custom": false
+ },
+ {
+ "name": "Color",
+ "fields": [
+ {
+ "name": "r",
+ "typ": "u8",
+ "description": "Color red value"
+ },
+ {
+ "name": "g",
+ "typ": "u8",
+ "description": "Color green value"
+ },
+ {
+ "name": "b",
+ "typ": "u8",
+ "description": "Color blue value"
+ },
+ {
+ "name": "a",
+ "typ": "u8",
+ "description": "Color alpha value"
+ }
+ ],
+ "description": "Color, 4 components, R8G8B8A8 (32bit)",
+ "custom": false
+ },
+ {
+ "name": "Rectangle",
+ "fields": [
+ {
+ "name": "x",
+ "typ": "f32",
+ "description": "Rectangle top-left corner position x"
+ },
+ {
+ "name": "y",
+ "typ": "f32",
+ "description": "Rectangle top-left corner position y"
+ },
+ {
+ "name": "width",
+ "typ": "f32",
+ "description": "Rectangle width"
+ },
+ {
+ "name": "height",
+ "typ": "f32",
+ "description": "Rectangle height"
+ }
+ ],
+ "description": "Rectangle, 4 components",
+ "custom": false
+ },
+ {
+ "name": "Image",
+ "fields": [
+ {
+ "name": "data",
+ "typ": "*anyopaque",
+ "description": "Image raw data"
+ },
+ {
+ "name": "width",
+ "typ": "i32",
+ "description": "Image base width"
+ },
+ {
+ "name": "height",
+ "typ": "i32",
+ "description": "Image base height"
+ },
+ {
+ "name": "mipmaps",
+ "typ": "i32",
+ "description": "Mipmap levels, 1 by default"
+ },
+ {
+ "name": "format",
+ "typ": "i32",
+ "description": "Data format (PixelFormat type)"
+ }
+ ],
+ "description": "Image, pixel data stored in CPU memory (RAM)",
+ "custom": false
+ },
+ {
+ "name": "Texture2D",
+ "fields": [
+ {
+ "name": "id",
+ "typ": "u32",
+ "description": "OpenGL texture id"
+ },
+ {
+ "name": "width",
+ "typ": "i32",
+ "description": "Texture base width"
+ },
+ {
+ "name": "height",
+ "typ": "i32",
+ "description": "Texture base height"
+ },
+ {
+ "name": "mipmaps",
+ "typ": "i32",
+ "description": "Mipmap levels, 1 by default"
+ },
+ {
+ "name": "format",
+ "typ": "i32",
+ "description": "Data format (PixelFormat type)"
+ }
+ ],
+ "description": "Texture, tex data stored in GPU memory (VRAM)",
+ "custom": false
+ },
+ {
+ "name": "RenderTexture2D",
+ "fields": [
+ {
+ "name": "id",
+ "typ": "u32",
+ "description": "OpenGL framebuffer object id"
+ },
+ {
+ "name": "texture",
+ "typ": "Texture2D",
+ "description": "Color buffer attachment texture"
+ },
+ {
+ "name": "depth",
+ "typ": "Texture2D",
+ "description": "Depth buffer attachment texture"
+ }
+ ],
+ "description": "RenderTexture, fbo for texture rendering",
+ "custom": false
+ },
+ {
+ "name": "NPatchInfo",
+ "fields": [
+ {
+ "name": "source",
+ "typ": "Rectangle",
+ "description": "Texture source rectangle"
+ },
+ {
+ "name": "left",
+ "typ": "i32",
+ "description": "Left border offset"
+ },
+ {
+ "name": "top",
+ "typ": "i32",
+ "description": "Top border offset"
+ },
+ {
+ "name": "right",
+ "typ": "i32",
+ "description": "Right border offset"
+ },
+ {
+ "name": "bottom",
+ "typ": "i32",
+ "description": "Bottom border offset"
+ },
+ {
+ "name": "layout",
+ "typ": "i32",
+ "description": "Layout of the n-patch: 3x3, 1x3 or 3x1"
+ }
+ ],
+ "description": "NPatchInfo, n-patch layout info",
+ "custom": false
+ },
+ {
+ "name": "GlyphInfo",
+ "fields": [
+ {
+ "name": "value",
+ "typ": "i32",
+ "description": "Character value (Unicode)"
+ },
+ {
+ "name": "offsetX",
+ "typ": "i32",
+ "description": "Character offset X when drawing"
+ },
+ {
+ "name": "offsetY",
+ "typ": "i32",
+ "description": "Character offset Y when drawing"
+ },
+ {
+ "name": "advanceX",
+ "typ": "i32",
+ "description": "Character advance position X"
+ },
+ {
+ "name": "image",
+ "typ": "Image",
+ "description": "Character image data"
+ }
+ ],
+ "description": "GlyphInfo, font characters glyphs info",
+ "custom": false
+ },
+ {
+ "name": "Font",
+ "fields": [
+ {
+ "name": "baseSize",
+ "typ": "i32",
+ "description": "Base size (default chars height)"
+ },
+ {
+ "name": "glyphCount",
+ "typ": "i32",
+ "description": "Number of glyph characters"
+ },
+ {
+ "name": "glyphPadding",
+ "typ": "i32",
+ "description": "Padding around the glyph characters"
+ },
+ {
+ "name": "texture",
+ "typ": "Texture2D",
+ "description": "Texture atlas containing the glyphs"
+ },
+ {
+ "name": "recs",
+ "typ": "?[*]Rectangle",
+ "description": "Rectangles in texture for the glyphs"
+ },
+ {
+ "name": "glyphs",
+ "typ": "?[*]GlyphInfo",
+ "description": "Glyphs info data"
+ }
+ ],
+ "description": "Font, font texture and GlyphInfo array data",
+ "custom": false
+ },
+ {
+ "name": "Camera3D",
+ "fields": [
+ {
+ "name": "position",
+ "typ": "Vector3",
+ "description": "Camera position"
+ },
+ {
+ "name": "target",
+ "typ": "Vector3",
+ "description": "Camera target it looks-at"
+ },
+ {
+ "name": "up",
+ "typ": "Vector3",
+ "description": "Camera up vector (rotation over its axis)"
+ },
+ {
+ "name": "fovy",
+ "typ": "f32",
+ "description": "Camera field-of-view apperture in Y (degrees) in perspective, used as near plane width in orthographic"
+ },
+ {
+ "name": "projection",
+ "typ": "CameraProjection",
+ "description": "Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC"
+ }
+ ],
+ "description": "Camera, defines position/orientation in 3d space",
+ "custom": true
+ },
+ {
+ "name": "Camera2D",
+ "fields": [
+ {
+ "name": "offset",
+ "typ": "Vector2",
+ "description": "Camera offset (displacement from target)"
+ },
+ {
+ "name": "target",
+ "typ": "Vector2",
+ "description": "Camera target (rotation and zoom origin)"
+ },
+ {
+ "name": "rotation",
+ "typ": "f32",
+ "description": "Camera rotation in degrees"
+ },
+ {
+ "name": "zoom",
+ "typ": "f32",
+ "description": "Camera zoom (scaling), should be 1.0f by default"
+ }
+ ],
+ "description": "Camera2D, defines position/orientation in 2d space",
+ "custom": false
+ },
+ {
+ "name": "Mesh",
+ "fields": [
+ {
+ "name": "vertexCount",
+ "typ": "i32",
+ "description": "Number of vertices stored in arrays"
+ },
+ {
+ "name": "triangleCount",
+ "typ": "i32",
+ "description": "Number of triangles stored (indexed or not)"
+ },
+ {
+ "name": "vertices",
+ "typ": "?[*]f32",
+ "description": "Vertex position (XYZ - 3 components per vertex) (shader-location = 0)"
+ },
+ {
+ "name": "texcoords",
+ "typ": "?[*]f32",
+ "description": "Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)"
+ },
+ {
+ "name": "texcoords2",
+ "typ": "?[*]f32",
+ "description": "Vertex texture second coordinates (UV - 2 components per vertex) (shader-location = 5)"
+ },
+ {
+ "name": "normals",
+ "typ": "?[*]f32",
+ "description": "Vertex normals (XYZ - 3 components per vertex) (shader-location = 2)"
+ },
+ {
+ "name": "tangents",
+ "typ": "?[*]f32",
+ "description": "Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4)"
+ },
+ {
+ "name": "colors",
+ "typ": "?[*]u8",
+ "description": "Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)"
+ },
+ {
+ "name": "indices",
+ "typ": "?[*]u16",
+ "description": "Vertex indices (in case vertex data comes indexed)"
+ },
+ {
+ "name": "animVertices",
+ "typ": "?[*]f32",
+ "description": "Animated vertex positions (after bones transformations)"
+ },
+ {
+ "name": "animNormals",
+ "typ": "?[*]f32",
+ "description": "Animated normals (after bones transformations)"
+ },
+ {
+ "name": "boneIds",
+ "typ": "?[*]u8",
+ "description": "Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning)"
+ },
+ {
+ "name": "boneWeights",
+ "typ": "?[*]f32",
+ "description": "Vertex bone weight, up to 4 bones influence by vertex (skinning)"
+ },
+ {
+ "name": "vaoId",
+ "typ": "u32",
+ "description": "OpenGL Vertex Array Object id"
+ },
+ {
+ "name": "vboId",
+ "typ": "?[*]u32",
+ "description": "OpenGL Vertex Buffer Objects id (default vertex data)"
+ }
+ ],
+ "description": "Mesh, vertex data and vao/vbo",
+ "custom": false
+ },
+ {
+ "name": "Shader",
+ "fields": [
+ {
+ "name": "id",
+ "typ": "u32",
+ "description": "Shader program id"
+ },
+ {
+ "name": "locs",
+ "typ": "?[*]i32",
+ "description": "Shader locations array (RL_MAX_SHADER_LOCATIONS)"
+ }
+ ],
+ "description": "Shader",
+ "custom": false
+ },
+ {
+ "name": "MaterialMap",
+ "fields": [
+ {
+ "name": "texture",
+ "typ": "Texture2D",
+ "description": "Material map texture"
+ },
+ {
+ "name": "color",
+ "typ": "Color",
+ "description": "Material map color"
+ },
+ {
+ "name": "value",
+ "typ": "f32",
+ "description": "Material map value"
+ }
+ ],
+ "description": "MaterialMap",
+ "custom": false
+ },
+ {
+ "name": "Material",
+ "fields": [
+ {
+ "name": "shader",
+ "typ": "Shader",
+ "description": "Material shader"
+ },
+ {
+ "name": "maps",
+ "typ": "?[*]MaterialMap",
+ "description": "Material maps array (MAX_MATERIAL_MAPS)"
+ },
+ {
+ "name": "params",
+ "typ": "[4]f32",
+ "description": "Material generic parameters (if required)"
+ }
+ ],
+ "description": "Material, includes shader and maps",
+ "custom": false
+ },
+ {
+ "name": "Transform",
+ "fields": [
+ {
+ "name": "translation",
+ "typ": "Vector3",
+ "description": "Translation"
+ },
+ {
+ "name": "rotation",
+ "typ": "Vector4",
+ "description": "Rotation"
+ },
+ {
+ "name": "scale",
+ "typ": "Vector3",
+ "description": "Scale"
+ }
+ ],
+ "description": "Transform, vertex transformation data",
+ "custom": false
+ },
+ {
+ "name": "BoneInfo",
+ "fields": [
+ {
+ "name": "name",
+ "typ": "[32]u8",
+ "description": "Bone name"
+ },
+ {
+ "name": "parent",
+ "typ": "i32",
+ "description": "Bone parent"
+ }
+ ],
+ "description": "Bone, skeletal animation bone",
+ "custom": false
+ },
+ {
+ "name": "Model",
+ "fields": [
+ {
+ "name": "transform",
+ "typ": "Matrix",
+ "description": "Local transform matrix"
+ },
+ {
+ "name": "meshCount",
+ "typ": "i32",
+ "description": "Number of meshes"
+ },
+ {
+ "name": "materialCount",
+ "typ": "i32",
+ "description": "Number of materials"
+ },
+ {
+ "name": "meshes",
+ "typ": "?[*]Mesh",
+ "description": "Meshes array"
+ },
+ {
+ "name": "materials",
+ "typ": "?[*]Material",
+ "description": "Materials array"
+ },
+ {
+ "name": "meshMaterial",
+ "typ": "?[*]i32",
+ "description": "Mesh material number"
+ },
+ {
+ "name": "boneCount",
+ "typ": "i32",
+ "description": "Number of bones"
+ },
+ {
+ "name": "bones",
+ "typ": "?[*]BoneInfo",
+ "description": "Bones information (skeleton)"
+ },
+ {
+ "name": "bindPose",
+ "typ": "?[*]Transform",
+ "description": "Bones base transformation (pose)"
+ }
+ ],
+ "description": "Model, meshes, materials and animation data",
+ "custom": false
+ },
+ {
+ "name": "ModelAnimation",
+ "fields": [
+ {
+ "name": "boneCount",
+ "typ": "i32",
+ "description": "Number of bones"
+ },
+ {
+ "name": "frameCount",
+ "typ": "i32",
+ "description": "Number of animation frames"
+ },
+ {
+ "name": "bones",
+ "typ": "?[*]BoneInfo",
+ "description": "Bones information (skeleton)"
+ },
+ {
+ "name": "framePoses",
+ "typ": "?[*][*]Transform",
+ "description": "Poses array by frame"
+ },
+ {
+ "name": "name",
+ "typ": "[32]u8",
+ "description": "Animation name"
+ }
+ ],
+ "description": "ModelAnimation",
+ "custom": true
+ },
+ {
+ "name": "Ray",
+ "fields": [
+ {
+ "name": "position",
+ "typ": "Vector3",
+ "description": "Ray position (origin)"
+ },
+ {
+ "name": "direction",
+ "typ": "Vector3",
+ "description": "Ray direction"
+ }
+ ],
+ "description": "Ray, ray for raycasting",
+ "custom": false
+ },
+ {
+ "name": "RayCollision",
+ "fields": [
+ {
+ "name": "hit",
+ "typ": "bool",
+ "description": "Did the ray hit something?"
+ },
+ {
+ "name": "distance",
+ "typ": "f32",
+ "description": "Distance to the nearest hit"
+ },
+ {
+ "name": "point",
+ "typ": "Vector3",
+ "description": "Point of the nearest hit"
+ },
+ {
+ "name": "normal",
+ "typ": "Vector3",
+ "description": "Surface normal of hit"
+ }
+ ],
+ "description": "RayCollision, ray hit information",
+ "custom": false
+ },
+ {
+ "name": "BoundingBox",
+ "fields": [
+ {
+ "name": "min",
+ "typ": "Vector3",
+ "description": "Minimum vertex box-corner"
+ },
+ {
+ "name": "max",
+ "typ": "Vector3",
+ "description": "Maximum vertex box-corner"
+ }
+ ],
+ "description": "BoundingBox",
+ "custom": false
+ },
+ {
+ "name": "Wave",
+ "fields": [
+ {
+ "name": "frameCount",
+ "typ": "u32",
+ "description": "Total number of frames (considering channels)"
+ },
+ {
+ "name": "sampleRate",
+ "typ": "u32",
+ "description": "Frequency (samples per second)"
+ },
+ {
+ "name": "sampleSize",
+ "typ": "u32",
+ "description": "Bit depth (bits per sample): 8, 16, 32 (24 not supported)"
+ },
+ {
+ "name": "channels",
+ "typ": "u32",
+ "description": "Number of channels (1-mono, 2-stereo, ...)"
+ },
+ {
+ "name": "data",
+ "typ": "*anyopaque",
+ "description": "Buffer data pointer"
+ }
+ ],
+ "description": "Wave, audio wave data",
+ "custom": false
+ },
+ {
+ "name": "AudioStream",
+ "fields": [
+ {
+ "name": "buffer",
+ "typ": "*anyopaque",
+ "description": "Pointer to internal data used by the audio system"
+ },
+ {
+ "name": "processor",
+ "typ": "*anyopaque",
+ "description": "Pointer to internal data processor, useful for audio effects"
+ },
+ {
+ "name": "sampleRate",
+ "typ": "u32",
+ "description": "Frequency (samples per second)"
+ },
+ {
+ "name": "sampleSize",
+ "typ": "u32",
+ "description": "Bit depth (bits per sample): 8, 16, 32 (24 not supported)"
+ },
+ {
+ "name": "channels",
+ "typ": "u32",
+ "description": "Number of channels (1-mono, 2-stereo, ...)"
+ }
+ ],
+ "description": "AudioStream, custom audio stream",
+ "custom": false
+ },
+ {
+ "name": "Sound",
+ "fields": [
+ {
+ "name": "stream",
+ "typ": "AudioStream",
+ "description": "Audio stream"
+ },
+ {
+ "name": "frameCount",
+ "typ": "u32",
+ "description": "Total number of frames (considering channels)"
+ }
+ ],
+ "description": "Sound",
+ "custom": false
+ },
+ {
+ "name": "Music",
+ "fields": [
+ {
+ "name": "stream",
+ "typ": "AudioStream",
+ "description": "Audio stream"
+ },
+ {
+ "name": "frameCount",
+ "typ": "u32",
+ "description": "Total number of frames (considering channels)"
+ },
+ {
+ "name": "looping",
+ "typ": "bool",
+ "description": "Music looping enable"
+ },
+ {
+ "name": "ctxType",
+ "typ": "i32",
+ "description": "Type of music context (audio filetype)"
+ },
+ {
+ "name": "ctxData",
+ "typ": "*anyopaque",
+ "description": "Audio context data, depends on type"
+ }
+ ],
+ "description": "Music, audio stream, anything longer than ~10 seconds should be streamed",
+ "custom": false
+ },
+ {
+ "name": "VrDeviceInfo",
+ "fields": [
+ {
+ "name": "hResolution",
+ "typ": "i32",
+ "description": "Horizontal resolution in pixels"
+ },
+ {
+ "name": "vResolution",
+ "typ": "i32",
+ "description": "Vertical resolution in pixels"
+ },
+ {
+ "name": "hScreenSize",
+ "typ": "f32",
+ "description": "Horizontal size in meters"
+ },
+ {
+ "name": "vScreenSize",
+ "typ": "f32",
+ "description": "Vertical size in meters"
+ },
+ {
+ "name": "eyeToScreenDistance",
+ "typ": "f32",
+ "description": "Distance between eye and display in meters"
+ },
+ {
+ "name": "lensSeparationDistance",
+ "typ": "f32",
+ "description": "Lens separation distance in meters"
+ },
+ {
+ "name": "interpupillaryDistance",
+ "typ": "f32",
+ "description": "IPD (distance between pupils) in meters"
+ },
+ {
+ "name": "lensDistortionValues",
+ "typ": "[4]f32",
+ "description": "Lens distortion constant parameters"
+ },
+ {
+ "name": "chromaAbCorrection",
+ "typ": "[4]f32",
+ "description": "Chromatic aberration correction parameters"
+ }
+ ],
+ "description": "VrDeviceInfo, Head-Mounted-Display device parameters",
+ "custom": false
+ },
+ {
+ "name": "VrStereoConfig",
+ "fields": [
+ {
+ "name": "projection",
+ "typ": "[2]Matrix",
+ "description": "VR projection matrices (per eye)"
+ },
+ {
+ "name": "viewOffset",
+ "typ": "[2]Matrix",
+ "description": "VR view offset matrices (per eye)"
+ },
+ {
+ "name": "leftLensCenter",
+ "typ": "[2]f32",
+ "description": "VR left lens center"
+ },
+ {
+ "name": "rightLensCenter",
+ "typ": "[2]f32",
+ "description": "VR right lens center"
+ },
+ {
+ "name": "leftScreenCenter",
+ "typ": "[2]f32",
+ "description": "VR left screen center"
+ },
+ {
+ "name": "rightScreenCenter",
+ "typ": "[2]f32",
+ "description": "VR right screen center"
+ },
+ {
+ "name": "scale",
+ "typ": "[2]f32",
+ "description": "VR distortion scale"
+ },
+ {
+ "name": "scaleIn",
+ "typ": "[2]f32",
+ "description": "VR distortion scale in"
+ }
+ ],
+ "description": "VrStereoConfig, VR stereo rendering configuration for simulator",
+ "custom": false
+ },
+ {
+ "name": "FilePathList",
+ "fields": [
+ {
+ "name": "capacity",
+ "typ": "u32",
+ "description": "Filepaths max entries"
+ },
+ {
+ "name": "count",
+ "typ": "u32",
+ "description": "Filepaths entries count"
+ },
+ {
+ "name": "paths",
+ "typ": "[*][*:0]u8",
+ "description": "Filepaths entries"
+ }
+ ],
+ "description": "File path list",
+ "custom": false
+ },
+ {
+ "name": "AutomationEvent",
+ "fields": [
+ {
+ "name": "frame",
+ "typ": "u32",
+ "description": "Event frame"
+ },
+ {
+ "name": "type",
+ "typ": "u32",
+ "description": "Event type (AutomationEventType)"
+ },
+ {
+ "name": "params",
+ "typ": "[4]i32",
+ "description": "Event parameters (if required)"
+ }
+ ],
+ "description": "Automation event",
+ "custom": false
+ },
+ {
+ "name": "AutomationEventList",
+ "fields": [
+ {
+ "name": "capacity",
+ "typ": "u32",
+ "description": "Events max entries (MAX_AUTOMATION_EVENTS)"
+ },
+ {
+ "name": "count",
+ "typ": "u32",
+ "description": "Events entries count"
+ },
+ {
+ "name": "events",
+ "typ": "?[*]AutomationEvent",
+ "description": "Events entries"
+ }
+ ],
+ "description": "Automation event list",
+ "custom": false
+ },
+ {
+ "name": "rlVertexBuffer",
+ "fields": [
+ {
+ "name": "elementCount",
+ "typ": "i32",
+ "description": "Number of elements in the buffer (QUADS)"
+ },
+ {
+ "name": "vertices",
+ "typ": "[*]f32",
+ "description": "Vertex position (XYZ - 3 components per vertex) (shader-location = 0)"
+ },
+ {
+ "name": "texcoords",
+ "typ": "[*]f32",
+ "description": "Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)"
+ },
+ {
+ "name": "colors",
+ "typ": "[*]u8",
+ "description": "Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)"
+ },
+ {
+ "name": "indices",
+ "typ": "[*]u16",
+ "description": "Vertex indices (in case vertex data comes indexed) (6 indices per quad)"
+ },
+ {
+ "name": "vaoId",
+ "typ": "u32",
+ "description": "OpenGL Vertex Array Object id"
+ },
+ {
+ "name": "vboId",
+ "typ": "[4]u32",
+ "description": "OpenGL Vertex Buffer Objects id (4 types of vertex data)"
+ }
+ ],
+ "description": "Dynamic vertex buffers (position + texcoords + colors + indices arrays)",
+ "custom": true
+ },
+ {
+ "name": "rlDrawCall",
+ "fields": [
+ {
+ "name": "mode",
+ "typ": "i32",
+ "description": "Drawing mode: LINES, TRIANGLES, QUADS"
+ },
+ {
+ "name": "vertexCount",
+ "typ": "i32",
+ "description": "Number of vertex of the draw"
+ },
+ {
+ "name": "vertexAlignment",
+ "typ": "i32",
+ "description": "Number of vertex required for index alignment (LINES, TRIANGLES)"
+ },
+ {
+ "name": "textureId",
+ "typ": "u32",
+ "description": "Texture id to be used on the draw -> Use to create new draw call if changes"
+ }
+ ],
+ "description": "of those state-change happens (this is done in core module)",
+ "custom": false
+ },
+ {
+ "name": "rlRenderBatch",
+ "fields": [
+ {
+ "name": "bufferCount",
+ "typ": "i32",
+ "description": "Number of vertex buffers (multi-buffering support)"
+ },
+ {
+ "name": "currentBuffer",
+ "typ": "i32",
+ "description": "Current buffer tracking in case of multi-buffering"
+ },
+ {
+ "name": "vertexBuffer",
+ "typ": "?[*]rlVertexBuffer",
+ "description": "Dynamic buffer(s) for vertex data"
+ },
+ {
+ "name": "draws",
+ "typ": "?[*]rlDrawCall",
+ "description": "Draw calls array, depends on textureId"
+ },
+ {
+ "name": "drawCounter",
+ "typ": "i32",
+ "description": "Draw calls counter"
+ },
+ {
+ "name": "currentDepth",
+ "typ": "f32",
+ "description": "Current depth value for next draw"
+ }
+ ],
+ "description": "rlRenderBatch type",
+ "custom": false
+ },
+ {
+ "name": "rlglData",
+ "fields": [
+ {
+ "name": "currentBatch",
+ "typ": "[*]rlRenderBatch",
+ "description": "Current render batch"
+ },
+ {
+ "name": "defaultBatch",
+ "typ": "rlRenderBatch",
+ "description": "Default internal render batch"
+ },
+ {
+ "name": "vertexCounter",
+ "typ": "i32",
+ "description": "Current active render batch vertex counter (generic, used for all batches)"
+ },
+ {
+ "name": "texcoordx, texcoordy",
+ "typ": "f32",
+ "description": "Current active texture coordinate (added on glVertex*())"
+ },
+ {
+ "name": "normalx, normaly, normalz",
+ "typ": "f32",
+ "description": "Current active normal (added on glVertex*())"
+ },
+ {
+ "name": "colorr, colorg, colorb, colora",
+ "typ": "u8",
+ "description": "Current active color (added on glVertex*())"
+ },
+ {
+ "name": "currentMatrixMode",
+ "typ": "i32",
+ "description": "Current matrix mode"
+ },
+ {
+ "name": "currentMatrix",
+ "typ": "[*]Matrix",
+ "description": "Current matrix pointer"
+ },
+ {
+ "name": "modelview",
+ "typ": "Matrix",
+ "description": "Default modelview matrix"
+ },
+ {
+ "name": "projection",
+ "typ": "Matrix",
+ "description": "Default projection matrix"
+ },
+ {
+ "name": "transform",
+ "typ": "Matrix",
+ "description": "Transform matrix to be used with rlTranslate, rlRotate, rlScale"
+ },
+ {
+ "name": "transformRequired",
+ "typ": "bool",
+ "description": "Require transform matrix application to current draw-call vertex (if required)"
+ },
+ {
+ "name": "stack",
+ "typ": "Matrix",
+ "description": "Matrix stack for push/pop"
+ },
+ {
+ "name": "stackCounter",
+ "typ": "i32",
+ "description": "Matrix stack counter"
+ },
+ {
+ "name": "defaultTextureId",
+ "typ": "u32",
+ "description": "Default texture used on shapes/poly drawing (required by shader)"
+ },
+ {
+ "name": "activeTextureId",
+ "typ": "u32",
+ "description": "Active texture ids to be enabled on batch drawing (0 active by default)"
+ },
+ {
+ "name": "defaultVShaderId",
+ "typ": "u32",
+ "description": "Default vertex shader id (used by default shader program)"
+ },
+ {
+ "name": "defaultFShaderId",
+ "typ": "u32",
+ "description": "Default fragment shader id (used by default shader program)"
+ },
+ {
+ "name": "defaultShaderId",
+ "typ": "u32",
+ "description": "Default shader program id, supports vertex color and diffuse texture"
+ },
+ {
+ "name": "defaultShaderLocs",
+ "typ": "[*]i32",
+ "description": "Default shader locations pointer to be used on rendering"
+ },
+ {
+ "name": "currentShaderId",
+ "typ": "u32",
+ "description": "Current shader id to be used on rendering (by default, defaultShaderId)"
+ },
+ {
+ "name": "currentShaderLocs",
+ "typ": "[*]i32",
+ "description": "Current shader locations pointer to be used on rendering (by default, defaultShaderLocs)"
+ },
+ {
+ "name": "stereoRender",
+ "typ": "bool",
+ "description": "Stereo rendering flag"
+ },
+ {
+ "name": "projectionStereo",
+ "typ": "[2]Matrix",
+ "description": "VR stereo rendering eyes projection matrices"
+ },
+ {
+ "name": "viewOffsetStereo",
+ "typ": "[2]Matrix",
+ "description": "VR stereo rendering eyes view offset matrices"
+ },
+ {
+ "name": "currentBlendMode",
+ "typ": "i32",
+ "description": "Blending mode active"
+ },
+ {
+ "name": "glBlendSrcFactor",
+ "typ": "i32",
+ "description": "Blending source factor"
+ },
+ {
+ "name": "glBlendDstFactor",
+ "typ": "i32",
+ "description": "Blending destination factor"
+ },
+ {
+ "name": "glBlendEquation",
+ "typ": "i32",
+ "description": "Blending equation"
+ },
+ {
+ "name": "framebufferWidth",
+ "typ": "i32",
+ "description": "Current framebuffer width"
+ },
+ {
+ "name": "framebufferHeight",
+ "typ": "i32",
+ "description": "Current framebuffer height"
+ }
+ ],
+ "description": "injected",
+ "custom": true
+ },
+ {
+ "name": "float3",
+ "fields": [
+ {
+ "name": "v",
+ "typ": "[3]f32",
+ "description": ""
+ }
+ ],
+ "description": "NOTE: Helper types to be used instead of array return types for *ToFloat functions",
+ "custom": false
+ },
+ {
+ "name": "float16",
+ "fields": [
+ {
+ "name": "v",
+ "typ": "[16]f32",
+ "description": ""
+ }
+ ],
+ "description": "",
+ "custom": false
+ }
+ ],
+ "defines": [
+ {
+ "name": "RAYLIB_VERSION_MAJOR",
+ "typ": "i32",
+ "value": "5",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "RAYLIB_VERSION_MINOR",
+ "typ": "i32",
+ "value": "1",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "RAYLIB_VERSION_PATCH",
+ "typ": "i32",
+ "value": "0",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "RAYLIB_VERSION",
+ "typ": "[]const u8",
+ "value": "\"5.1-dev\"",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "PI",
+ "typ": "f32",
+ "value": "3.14159265358979323846",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "LIGHTGRAY",
+ "typ": "Color",
+ "value": ".{.r=200, .g=200, .b=200, .a=255}",
+ "description": "Light Gray",
+ "custom": false
+ },
+ {
+ "name": "GRAY",
+ "typ": "Color",
+ "value": ".{.r=130, .g=130, .b=130, .a=255}",
+ "description": "Gray",
+ "custom": false
+ },
+ {
+ "name": "DARKGRAY",
+ "typ": "Color",
+ "value": ".{.r=80, .g=80, .b=80, .a=255}",
+ "description": "Dark Gray",
+ "custom": false
+ },
+ {
+ "name": "YELLOW",
+ "typ": "Color",
+ "value": ".{.r=253, .g=249, .b=0, .a=255}",
+ "description": "Yellow",
+ "custom": false
+ },
+ {
+ "name": "GOLD",
+ "typ": "Color",
+ "value": ".{.r=255, .g=203, .b=0, .a=255}",
+ "description": "Gold",
+ "custom": false
+ },
+ {
+ "name": "ORANGE",
+ "typ": "Color",
+ "value": ".{.r=255, .g=161, .b=0, .a=255}",
+ "description": "Orange",
+ "custom": false
+ },
+ {
+ "name": "PINK",
+ "typ": "Color",
+ "value": ".{.r=255, .g=109, .b=194, .a=255}",
+ "description": "Pink",
+ "custom": false
+ },
+ {
+ "name": "RED",
+ "typ": "Color",
+ "value": ".{.r=230, .g=41, .b=55, .a=255}",
+ "description": "Red",
+ "custom": false
+ },
+ {
+ "name": "MAROON",
+ "typ": "Color",
+ "value": ".{.r=190, .g=33, .b=55, .a=255}",
+ "description": "Maroon",
+ "custom": false
+ },
+ {
+ "name": "GREEN",
+ "typ": "Color",
+ "value": ".{.r=0, .g=228, .b=48, .a=255}",
+ "description": "Green",
+ "custom": false
+ },
+ {
+ "name": "LIME",
+ "typ": "Color",
+ "value": ".{.r=0, .g=158, .b=47, .a=255}",
+ "description": "Lime",
+ "custom": false
+ },
+ {
+ "name": "DARKGREEN",
+ "typ": "Color",
+ "value": ".{.r=0, .g=117, .b=44, .a=255}",
+ "description": "Dark Green",
+ "custom": false
+ },
+ {
+ "name": "SKYBLUE",
+ "typ": "Color",
+ "value": ".{.r=102, .g=191, .b=255, .a=255}",
+ "description": "Sky Blue",
+ "custom": false
+ },
+ {
+ "name": "BLUE",
+ "typ": "Color",
+ "value": ".{.r=0, .g=121, .b=241, .a=255}",
+ "description": "Blue",
+ "custom": false
+ },
+ {
+ "name": "DARKBLUE",
+ "typ": "Color",
+ "value": ".{.r=0, .g=82, .b=172, .a=255}",
+ "description": "Dark Blue",
+ "custom": false
+ },
+ {
+ "name": "PURPLE",
+ "typ": "Color",
+ "value": ".{.r=200, .g=122, .b=255, .a=255}",
+ "description": "Purple",
+ "custom": false
+ },
+ {
+ "name": "VIOLET",
+ "typ": "Color",
+ "value": ".{.r=135, .g=60, .b=190, .a=255}",
+ "description": "Violet",
+ "custom": false
+ },
+ {
+ "name": "DARKPURPLE",
+ "typ": "Color",
+ "value": ".{.r=112, .g=31, .b=126, .a=255}",
+ "description": "Dark Purple",
+ "custom": false
+ },
+ {
+ "name": "BEIGE",
+ "typ": "Color",
+ "value": ".{.r=211, .g=176, .b=131, .a=255}",
+ "description": "Beige",
+ "custom": false
+ },
+ {
+ "name": "BROWN",
+ "typ": "Color",
+ "value": ".{.r=127, .g=106, .b=79, .a=255}",
+ "description": "Brown",
+ "custom": false
+ },
+ {
+ "name": "DARKBROWN",
+ "typ": "Color",
+ "value": ".{.r=76, .g=63, .b=47, .a=255}",
+ "description": "Dark Brown",
+ "custom": false
+ },
+ {
+ "name": "WHITE",
+ "typ": "Color",
+ "value": ".{.r=255, .g=255, .b=255, .a=255}",
+ "description": "White",
+ "custom": false
+ },
+ {
+ "name": "BLACK",
+ "typ": "Color",
+ "value": ".{.r=0, .g=0, .b=0, .a=255}",
+ "description": "Black",
+ "custom": false
+ },
+ {
+ "name": "BLANK",
+ "typ": "Color",
+ "value": ".{.r=0, .g=0, .b=0, .a=0}",
+ "description": "Blank (Transparent)",
+ "custom": false
+ },
+ {
+ "name": "MAGENTA",
+ "typ": "Color",
+ "value": ".{.r=255, .g=0, .b=255, .a=255}",
+ "description": "Magenta",
+ "custom": false
+ },
+ {
+ "name": "RAYWHITE",
+ "typ": "Color",
+ "value": ".{.r=245, .g=245, .b=245, .a=255}",
+ "description": "My own White (raylib logo)",
+ "custom": false
+ },
+ {
+ "name": "RLGL_VERSION",
+ "typ": "[]const u8",
+ "value": "\"4.5\"",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_BATCH_BUFFER_ELEMENTS",
+ "typ": "i32",
+ "value": "8192",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_BATCH_BUFFERS",
+ "typ": "i32",
+ "value": "1",
+ "description": "Default number of batch buffers (multi-buffering)",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_BATCH_DRAWCALLS",
+ "typ": "i32",
+ "value": "256",
+ "description": "Default number of batch draw calls (by state changes: mode, texture)",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS",
+ "typ": "i32",
+ "value": "4",
+ "description": "Maximum number of textures units that can be activated on batch drawing (SetShaderValueTexture())",
+ "custom": false
+ },
+ {
+ "name": "RL_MAX_MATRIX_STACK_SIZE",
+ "typ": "i32",
+ "value": "32",
+ "description": "Maximum size of Matrix stack",
+ "custom": false
+ },
+ {
+ "name": "RL_MAX_SHADER_LOCATIONS",
+ "typ": "i32",
+ "value": "32",
+ "description": "Maximum number of shader locations supported",
+ "custom": false
+ },
+ {
+ "name": "RL_CULL_DISTANCE_NEAR",
+ "typ": "f64",
+ "value": "0.01",
+ "description": "Default near cull distance",
+ "custom": false
+ },
+ {
+ "name": "RL_CULL_DISTANCE_FAR",
+ "typ": "f64",
+ "value": "1000.0",
+ "description": "Default far cull distance",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_WRAP_S",
+ "typ": "i32",
+ "value": "10242",
+ "description": "GL_TEXTURE_WRAP_S",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_WRAP_T",
+ "typ": "i32",
+ "value": "10243",
+ "description": "GL_TEXTURE_WRAP_T",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_MAG_FILTER",
+ "typ": "i32",
+ "value": "10240",
+ "description": "GL_TEXTURE_MAG_FILTER",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_MIN_FILTER",
+ "typ": "i32",
+ "value": "10241",
+ "description": "GL_TEXTURE_MIN_FILTER",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_NEAREST",
+ "typ": "i32",
+ "value": "9728",
+ "description": "GL_NEAREST",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_LINEAR",
+ "typ": "i32",
+ "value": "9729",
+ "description": "GL_LINEAR",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_MIP_NEAREST",
+ "typ": "i32",
+ "value": "9984",
+ "description": "GL_NEAREST_MIPMAP_NEAREST",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR",
+ "typ": "i32",
+ "value": "9986",
+ "description": "GL_NEAREST_MIPMAP_LINEAR",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST",
+ "typ": "i32",
+ "value": "9985",
+ "description": "GL_LINEAR_MIPMAP_NEAREST",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_MIP_LINEAR",
+ "typ": "i32",
+ "value": "9987",
+ "description": "GL_LINEAR_MIPMAP_LINEAR",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_ANISOTROPIC",
+ "typ": "i32",
+ "value": "12288",
+ "description": "Anisotropic filter (custom identifier)",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_MIPMAP_BIAS_RATIO",
+ "typ": "i32",
+ "value": "16384",
+ "description": "Texture mipmap bias, percentage ratio (custom identifier)",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_WRAP_REPEAT",
+ "typ": "i32",
+ "value": "10497",
+ "description": "GL_REPEAT",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_WRAP_CLAMP",
+ "typ": "i32",
+ "value": "33071",
+ "description": "GL_CLAMP_TO_EDGE",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_WRAP_MIRROR_REPEAT",
+ "typ": "i32",
+ "value": "33648",
+ "description": "GL_MIRRORED_REPEAT",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE_WRAP_MIRROR_CLAMP",
+ "typ": "i32",
+ "value": "34626",
+ "description": "GL_MIRROR_CLAMP_EXT",
+ "custom": false
+ },
+ {
+ "name": "RL_MODELVIEW",
+ "typ": "i32",
+ "value": "5888",
+ "description": "GL_MODELVIEW",
+ "custom": false
+ },
+ {
+ "name": "RL_PROJECTION",
+ "typ": "i32",
+ "value": "5889",
+ "description": "GL_PROJECTION",
+ "custom": false
+ },
+ {
+ "name": "RL_TEXTURE",
+ "typ": "i32",
+ "value": "5890",
+ "description": "GL_TEXTURE",
+ "custom": false
+ },
+ {
+ "name": "RL_LINES",
+ "typ": "i32",
+ "value": "1",
+ "description": "GL_LINES",
+ "custom": false
+ },
+ {
+ "name": "RL_TRIANGLES",
+ "typ": "i32",
+ "value": "4",
+ "description": "GL_TRIANGLES",
+ "custom": false
+ },
+ {
+ "name": "RL_QUADS",
+ "typ": "i32",
+ "value": "7",
+ "description": "GL_QUADS",
+ "custom": false
+ },
+ {
+ "name": "RL_UNSIGNED_BYTE",
+ "typ": "i32",
+ "value": "5121",
+ "description": "GL_UNSIGNED_BYTE",
+ "custom": false
+ },
+ {
+ "name": "RL_FLOAT",
+ "typ": "i32",
+ "value": "5126",
+ "description": "GL_FLOAT",
+ "custom": false
+ },
+ {
+ "name": "RL_STREAM_DRAW",
+ "typ": "i32",
+ "value": "35040",
+ "description": "GL_STREAM_DRAW",
+ "custom": false
+ },
+ {
+ "name": "RL_STREAM_READ",
+ "typ": "i32",
+ "value": "35041",
+ "description": "GL_STREAM_READ",
+ "custom": false
+ },
+ {
+ "name": "RL_STREAM_COPY",
+ "typ": "i32",
+ "value": "35042",
+ "description": "GL_STREAM_COPY",
+ "custom": false
+ },
+ {
+ "name": "RL_STATIC_DRAW",
+ "typ": "i32",
+ "value": "35044",
+ "description": "GL_STATIC_DRAW",
+ "custom": false
+ },
+ {
+ "name": "RL_STATIC_READ",
+ "typ": "i32",
+ "value": "35045",
+ "description": "GL_STATIC_READ",
+ "custom": false
+ },
+ {
+ "name": "RL_STATIC_COPY",
+ "typ": "i32",
+ "value": "35046",
+ "description": "GL_STATIC_COPY",
+ "custom": false
+ },
+ {
+ "name": "RL_DYNAMIC_DRAW",
+ "typ": "i32",
+ "value": "35048",
+ "description": "GL_DYNAMIC_DRAW",
+ "custom": false
+ },
+ {
+ "name": "RL_DYNAMIC_READ",
+ "typ": "i32",
+ "value": "35049",
+ "description": "GL_DYNAMIC_READ",
+ "custom": false
+ },
+ {
+ "name": "RL_DYNAMIC_COPY",
+ "typ": "i32",
+ "value": "35050",
+ "description": "GL_DYNAMIC_COPY",
+ "custom": false
+ },
+ {
+ "name": "RL_FRAGMENT_SHADER",
+ "typ": "i32",
+ "value": "35632",
+ "description": "GL_FRAGMENT_SHADER",
+ "custom": false
+ },
+ {
+ "name": "RL_VERTEX_SHADER",
+ "typ": "i32",
+ "value": "35633",
+ "description": "GL_VERTEX_SHADER",
+ "custom": false
+ },
+ {
+ "name": "RL_COMPUTE_SHADER",
+ "typ": "i32",
+ "value": "37305",
+ "description": "GL_COMPUTE_SHADER",
+ "custom": false
+ },
+ {
+ "name": "RL_ZERO",
+ "typ": "i32",
+ "value": "0",
+ "description": "GL_ZERO",
+ "custom": false
+ },
+ {
+ "name": "RL_ONE",
+ "typ": "i32",
+ "value": "1",
+ "description": "GL_ONE",
+ "custom": false
+ },
+ {
+ "name": "RL_SRC_COLOR",
+ "typ": "i32",
+ "value": "768",
+ "description": "GL_SRC_COLOR",
+ "custom": false
+ },
+ {
+ "name": "RL_ONE_MINUS_SRC_COLOR",
+ "typ": "i32",
+ "value": "769",
+ "description": "GL_ONE_MINUS_SRC_COLOR",
+ "custom": false
+ },
+ {
+ "name": "RL_SRC_ALPHA",
+ "typ": "i32",
+ "value": "770",
+ "description": "GL_SRC_ALPHA",
+ "custom": false
+ },
+ {
+ "name": "RL_ONE_MINUS_SRC_ALPHA",
+ "typ": "i32",
+ "value": "771",
+ "description": "GL_ONE_MINUS_SRC_ALPHA",
+ "custom": false
+ },
+ {
+ "name": "RL_DST_ALPHA",
+ "typ": "i32",
+ "value": "772",
+ "description": "GL_DST_ALPHA",
+ "custom": false
+ },
+ {
+ "name": "RL_ONE_MINUS_DST_ALPHA",
+ "typ": "i32",
+ "value": "773",
+ "description": "GL_ONE_MINUS_DST_ALPHA",
+ "custom": false
+ },
+ {
+ "name": "RL_DST_COLOR",
+ "typ": "i32",
+ "value": "774",
+ "description": "GL_DST_COLOR",
+ "custom": false
+ },
+ {
+ "name": "RL_ONE_MINUS_DST_COLOR",
+ "typ": "i32",
+ "value": "775",
+ "description": "GL_ONE_MINUS_DST_COLOR",
+ "custom": false
+ },
+ {
+ "name": "RL_SRC_ALPHA_SATURATE",
+ "typ": "i32",
+ "value": "776",
+ "description": "GL_SRC_ALPHA_SATURATE",
+ "custom": false
+ },
+ {
+ "name": "RL_CONSTANT_COLOR",
+ "typ": "i32",
+ "value": "32769",
+ "description": "GL_CONSTANT_COLOR",
+ "custom": false
+ },
+ {
+ "name": "RL_ONE_MINUS_CONSTANT_COLOR",
+ "typ": "i32",
+ "value": "32770",
+ "description": "GL_ONE_MINUS_CONSTANT_COLOR",
+ "custom": false
+ },
+ {
+ "name": "RL_CONSTANT_ALPHA",
+ "typ": "i32",
+ "value": "32771",
+ "description": "GL_CONSTANT_ALPHA",
+ "custom": false
+ },
+ {
+ "name": "RL_ONE_MINUS_CONSTANT_ALPHA",
+ "typ": "i32",
+ "value": "32772",
+ "description": "GL_ONE_MINUS_CONSTANT_ALPHA",
+ "custom": false
+ },
+ {
+ "name": "RL_FUNC_ADD",
+ "typ": "i32",
+ "value": "32774",
+ "description": "GL_FUNC_ADD",
+ "custom": false
+ },
+ {
+ "name": "RL_MIN",
+ "typ": "i32",
+ "value": "32775",
+ "description": "GL_MIN",
+ "custom": false
+ },
+ {
+ "name": "RL_MAX",
+ "typ": "i32",
+ "value": "32776",
+ "description": "GL_MAX",
+ "custom": false
+ },
+ {
+ "name": "RL_FUNC_SUBTRACT",
+ "typ": "i32",
+ "value": "32778",
+ "description": "GL_FUNC_SUBTRACT",
+ "custom": false
+ },
+ {
+ "name": "RL_FUNC_REVERSE_SUBTRACT",
+ "typ": "i32",
+ "value": "32779",
+ "description": "GL_FUNC_REVERSE_SUBTRACT",
+ "custom": false
+ },
+ {
+ "name": "RL_BLEND_EQUATION",
+ "typ": "i32",
+ "value": "32777",
+ "description": "GL_BLEND_EQUATION",
+ "custom": false
+ },
+ {
+ "name": "RL_BLEND_EQUATION_RGB",
+ "typ": "i32",
+ "value": "32777",
+ "description": "GL_BLEND_EQUATION_RGB // (Same as BLEND_EQUATION)",
+ "custom": false
+ },
+ {
+ "name": "RL_BLEND_EQUATION_ALPHA",
+ "typ": "i32",
+ "value": "34877",
+ "description": "GL_BLEND_EQUATION_ALPHA",
+ "custom": false
+ },
+ {
+ "name": "RL_BLEND_DST_RGB",
+ "typ": "i32",
+ "value": "32968",
+ "description": "GL_BLEND_DST_RGB",
+ "custom": false
+ },
+ {
+ "name": "RL_BLEND_SRC_RGB",
+ "typ": "i32",
+ "value": "32969",
+ "description": "GL_BLEND_SRC_RGB",
+ "custom": false
+ },
+ {
+ "name": "RL_BLEND_DST_ALPHA",
+ "typ": "i32",
+ "value": "32970",
+ "description": "GL_BLEND_DST_ALPHA",
+ "custom": false
+ },
+ {
+ "name": "RL_BLEND_SRC_ALPHA",
+ "typ": "i32",
+ "value": "32971",
+ "description": "GL_BLEND_SRC_ALPHA",
+ "custom": false
+ },
+ {
+ "name": "RL_BLEND_COLOR",
+ "typ": "i32",
+ "value": "32773",
+ "description": "GL_BLEND_COLOR",
+ "custom": false
+ },
+ {
+ "name": "RL_READ_FRAMEBUFFER",
+ "typ": "i32",
+ "value": "36008",
+ "description": "GL_READ_FRAMEBUFFER",
+ "custom": false
+ },
+ {
+ "name": "RL_DRAW_FRAMEBUFFER",
+ "typ": "i32",
+ "value": "36009",
+ "description": "GL_DRAW_FRAMEBUFFER",
+ "custom": false
+ },
+ {
+ "name": "GL_SHADING_LANGUAGE_VERSION",
+ "typ": "i32",
+ "value": "35724",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_COMPRESSED_RGB_S3TC_DXT1_EXT",
+ "typ": "i32",
+ "value": "33776",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT",
+ "typ": "i32",
+ "value": "33777",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA_S3TC_DXT3_EXT",
+ "typ": "i32",
+ "value": "33778",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA_S3TC_DXT5_EXT",
+ "typ": "i32",
+ "value": "33779",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_ETC1_RGB8_OES",
+ "typ": "i32",
+ "value": "36196",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_COMPRESSED_RGB8_ETC2",
+ "typ": "i32",
+ "value": "37492",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA8_ETC2_EAC",
+ "typ": "i32",
+ "value": "37496",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG",
+ "typ": "i32",
+ "value": "35840",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",
+ "typ": "i32",
+ "value": "35842",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA_ASTC_4x4_KHR",
+ "typ": "i32",
+ "value": "37808",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA_ASTC_8x8_KHR",
+ "typ": "i32",
+ "value": "37815",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT",
+ "typ": "i32",
+ "value": "34047",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_TEXTURE_MAX_ANISOTROPY_EXT",
+ "typ": "i32",
+ "value": "34046",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_UNSIGNED_SHORT_5_6_5",
+ "typ": "i32",
+ "value": "33635",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_UNSIGNED_SHORT_5_5_5_1",
+ "typ": "i32",
+ "value": "32820",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_UNSIGNED_SHORT_4_4_4_4",
+ "typ": "i32",
+ "value": "32819",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_LUMINANCE",
+ "typ": "i32",
+ "value": "6409",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "GL_LUMINANCE_ALPHA",
+ "typ": "i32",
+ "value": "6410",
+ "description": "",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION",
+ "typ": "[]const u8",
+ "value": "\"vertexPosition\"",
+ "description": "Bound by default to shader location: 0",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD",
+ "typ": "[]const u8",
+ "value": "\"vertexTexCoord\"",
+ "description": "Bound by default to shader location: 1",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL",
+ "typ": "[]const u8",
+ "value": "\"vertexNormal\"",
+ "description": "Bound by default to shader location: 2",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR",
+ "typ": "[]const u8",
+ "value": "\"vertexColor\"",
+ "description": "Bound by default to shader location: 3",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT",
+ "typ": "[]const u8",
+ "value": "\"vertexTangent\"",
+ "description": "Bound by default to shader location: 4",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2",
+ "typ": "[]const u8",
+ "value": "\"vertexTexCoord2\"",
+ "description": "Bound by default to shader location: 5",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_UNIFORM_NAME_MVP",
+ "typ": "[]const u8",
+ "value": "\"mvp\"",
+ "description": "model-view-projection matrix",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW",
+ "typ": "[]const u8",
+ "value": "\"matView\"",
+ "description": "view matrix",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION",
+ "typ": "[]const u8",
+ "value": "\"matProjection\"",
+ "description": "projection matrix",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL",
+ "typ": "[]const u8",
+ "value": "\"matModel\"",
+ "description": "model matrix",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL",
+ "typ": "[]const u8",
+ "value": "\"matNormal\"",
+ "description": "normal matrix (transpose(inverse(matModelView))",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR",
+ "typ": "[]const u8",
+ "value": "\"colDiffuse\"",
+ "description": "color diffuse (base tint color, multiplied by texture color)",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0",
+ "typ": "[]const u8",
+ "value": "\"texture0\"",
+ "description": "texture0 (texture slot active 0)",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1",
+ "typ": "[]const u8",
+ "value": "\"texture1\"",
+ "description": "texture1 (texture slot active 1)",
+ "custom": false
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2",
+ "typ": "[]const u8",
+ "value": "\"texture2\"",
+ "description": "texture2 (texture slot active 2)",
+ "custom": false
+ },
+ {
+ "name": "EPSILON",
+ "typ": "f32",
+ "value": "0.000001",
+ "description": "",
+ "custom": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/libs/raylib/build.zig b/libs/raylib/build.zig
new file mode 100644
index 0000000..c38f6a9
--- /dev/null
+++ b/libs/raylib/build.zig
@@ -0,0 +1,144 @@
+const std = @import("std");
+const generate = @import("generate.zig");
+
+pub fn build(b: *std.Build) !void {
+ const raylibSrc = "raylib/src/";
+
+ const target = b.standardTargetOptions(.{});
+
+ //--- parse raylib and generate JSONs for all signatures --------------------------------------
+ const jsons = b.step("parse", "parse raylib headers and generate raylib jsons");
+ const raylib_parser_build = b.addExecutable(.{
+ .name = "raylib_parser",
+ .root_source_file = std.build.FileSource.relative("raylib_parser.zig"),
+ .target = target,
+ .optimize = .ReleaseFast,
+ });
+ raylib_parser_build.addCSourceFile(.{ .file = .{ .path = "raylib/parser/raylib_parser.c" }, .flags = &.{} });
+ raylib_parser_build.linkLibC();
+
+ //raylib
+ const raylib_H = b.addRunArtifact(raylib_parser_build);
+ raylib_H.addArgs(&.{
+ "-i", raylibSrc ++ "raylib.h",
+ "-o", "raylib.json",
+ "-f", "JSON",
+ "-d", "RLAPI",
+ });
+ jsons.dependOn(&raylib_H.step);
+
+ //raymath
+ const raymath_H = b.addRunArtifact(raylib_parser_build);
+ raymath_H.addArgs(&.{
+ "-i", raylibSrc ++ "raymath.h",
+ "-o", "raymath.json",
+ "-f", "JSON",
+ "-d", "RMAPI",
+ });
+ jsons.dependOn(&raymath_H.step);
+
+ //rlgl
+ const rlgl_H = b.addRunArtifact(raylib_parser_build);
+ rlgl_H.addArgs(&.{
+ "-i", raylibSrc ++ "rlgl.h",
+ "-o", "rlgl.json",
+ "-f", "JSON",
+ "-d", "RLAPI",
+ });
+ jsons.dependOn(&rlgl_H.step);
+
+ //--- Generate intermediate -------------------------------------------------------------------
+ const intermediate = b.step("intermediate", "generate intermediate representation of the results from 'zig build parse' (keep custom=true)");
+ var intermediateZigStep = b.addRunArtifact(b.addExecutable(.{
+ .name = "intermediate",
+ .root_source_file = std.build.FileSource.relative("intermediate.zig"),
+ .target = target,
+ }));
+ intermediate.dependOn(&intermediateZigStep.step);
+
+ //--- Generate bindings -----------------------------------------------------------------------
+ const bindings = b.step("bindings", "generate bindings in from bindings.json");
+ var generateZigStep = b.addRunArtifact(b.addExecutable(.{
+ .name = "generate",
+ .root_source_file = std.build.FileSource.relative("generate.zig"),
+ .target = target,
+ }));
+ const fmt = b.addFmt(.{ .paths = &.{generate.outputFile} });
+ fmt.step.dependOn(&generateZigStep.step);
+ bindings.dependOn(&fmt.step);
+
+ //--- just build raylib_parser.exe ------------------------------------------------------------
+ const raylib_parser_install = b.step("raylib_parser", "build ./zig-out/bin/raylib_parser.exe");
+ const generateBindings_install = b.addInstallArtifact(raylib_parser_build, .{});
+ raylib_parser_install.dependOn(&generateBindings_install.step);
+}
+
+// above: generate library
+// below: linking (use as dependency)
+
+fn current_file() []const u8 {
+ return @src().file;
+}
+
+const cwd = std.fs.path.dirname(current_file()).?;
+const sep = std.fs.path.sep_str;
+const dir_raylib = cwd ++ sep ++ "raylib/src";
+
+const raylib_build = @import("raylib/src/build.zig");
+
+fn linkThisLibrary(b: *std.Build, target: std.zig.CrossTarget, optimize: std.builtin.Mode) *std.build.LibExeObjStep {
+ const lib = b.addStaticLibrary(.{ .name = "raylib-zig", .target = target, .optimize = optimize });
+ lib.addIncludePath(.{ .path = dir_raylib });
+ lib.addIncludePath(.{ .path = cwd });
+ lib.linkLibC();
+ lib.addCSourceFile(.{ .file = .{ .path = cwd ++ sep ++ "marshal.c" }, .flags = &.{} });
+ return lib;
+}
+
+/// add this package to exe
+pub fn addTo(b: *std.Build, exe: *std.build.Step.Compile, target: std.zig.CrossTarget, optimize: std.builtin.Mode, raylibOptions: raylib_build.Options) void {
+ exe.addAnonymousModule("raylib", .{ .source_file = .{ .path = cwd ++ sep ++ "raylib.zig" } });
+ exe.addIncludePath(.{ .path = dir_raylib });
+ exe.addIncludePath(.{ .path = cwd });
+ const lib = linkThisLibrary(b, target, optimize);
+ const lib_raylib = raylib_build.addRaylib(b, target, optimize, raylibOptions);
+ exe.linkLibrary(lib_raylib);
+ exe.linkLibrary(lib);
+}
+
+pub fn linkSystemDependencies(exe: *std.build.Step.Compile) void {
+ switch (exe.target.getOsTag()) {
+ .macos => {
+ exe.linkFramework("Foundation");
+ exe.linkFramework("Cocoa");
+ exe.linkFramework("OpenGL");
+ exe.linkFramework("CoreAudio");
+ exe.linkFramework("CoreVideo");
+ exe.linkFramework("IOKit");
+ },
+ .linux => {
+ exe.addLibraryPath(.{ .path = "/usr/lib" });
+ exe.addIncludePath(.{ .path = "/usr/include" });
+ exe.linkSystemLibrary("GL");
+ exe.linkSystemLibrary("rt");
+ exe.linkSystemLibrary("dl");
+ exe.linkSystemLibrary("m");
+ exe.linkSystemLibrary("X11");
+ },
+ .freebsd, .openbsd, .netbsd, .dragonfly => {
+ exe.linkSystemLibrary("GL");
+ exe.linkSystemLibrary("rt");
+ exe.linkSystemLibrary("dl");
+ exe.linkSystemLibrary("m");
+ exe.linkSystemLibrary("X11");
+ exe.linkSystemLibrary("Xrandr");
+ exe.linkSystemLibrary("Xinerama");
+ exe.linkSystemLibrary("Xi");
+ exe.linkSystemLibrary("Xxf86vm");
+ exe.linkSystemLibrary("Xcursor");
+ },
+ else => {},
+ }
+
+ exe.linkLibC();
+}
diff --git a/libs/raylib/emscripten/entry.c b/libs/raylib/emscripten/entry.c
new file mode 100644
index 0000000..245e9e5
--- /dev/null
+++ b/libs/raylib/emscripten/entry.c
@@ -0,0 +1,24 @@
+#include
+#include
+
+#include "emscripten/emscripten.h"
+#include "raylib.h"
+
+// Zig compiles C code with -fstack-protector-strong which requires the following two symbols
+// which don't seem to be provided by the emscripten toolchain(?)
+void *__stack_chk_guard = (void *)0xdeadbeef;
+void __stack_chk_fail(void)
+{
+ exit(1);
+}
+
+
+// emsc_main() is the Zig entry function in main.zig
+extern int emsc_main(void);
+
+extern void emsc_set_window_size(int width, int height);
+
+int main()
+{
+ return emsc_main();
+}
diff --git a/libs/raylib/emscripten/minshell.html b/libs/raylib/emscripten/minshell.html
new file mode 100644
index 0000000..5095ad8
--- /dev/null
+++ b/libs/raylib/emscripten/minshell.html
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+ demo
+
+
+
+
+
+
+
+
+
+
+
+
+ {{{ SCRIPT }}}
+
+
+
\ No newline at end of file
diff --git a/libs/raylib/emscripten/shell.html b/libs/raylib/emscripten/shell.html
new file mode 100644
index 0000000..3ab8c3a
--- /dev/null
+++ b/libs/raylib/emscripten/shell.html
@@ -0,0 +1,328 @@
+
+
+
+
+
+
+ raylib web game
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{{ SCRIPT }}}
+
+
diff --git a/libs/raylib/generate.zig b/libs/raylib/generate.zig
new file mode 100644
index 0000000..3071531
--- /dev/null
+++ b/libs/raylib/generate.zig
@@ -0,0 +1,529 @@
+const std = @import("std");
+const fs = std.fs;
+const json = std.json;
+const allocPrint = std.fmt.allocPrint;
+const mapping = @import("type_mapping.zig");
+const intermediate = @import("intermediate.zig");
+
+pub const outputFile = "raylib.zig";
+pub const injectFile = "inject.zig";
+
+fn trim(s: []const u8) []const u8 {
+ return std.mem.trim(u8, s, &[_]u8{ ' ', '\t', '\n' });
+}
+
+pub fn main() !void {
+ std.log.info("generating raylib.zig ...", .{});
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ defer {
+ if (gpa.deinit() == .leak) {
+ std.log.err("memory leak detected", .{});
+ }
+ }
+ const allocator = gpa.allocator();
+ var arena = std.heap.ArenaAllocator.init(allocator);
+ defer arena.deinit();
+
+ const bindingsData = try fs.cwd().readFileAlloc(arena.allocator(), intermediate.bindingsJSON, std.math.maxInt(usize));
+
+ const bindings = try json.parseFromSliceLeaky(mapping.Intermediate, arena.allocator(), bindingsData, .{
+ .ignore_unknown_fields = true,
+ });
+
+ var file = try fs.cwd().createFile(outputFile, .{});
+ defer file.close();
+
+ try file.writeAll("\n\n");
+
+ const inject = try Injections.load(arena.allocator());
+ try writeInjections(arena.allocator(), &file, inject);
+
+ try writeFunctions(arena.allocator(), &file, bindings, inject);
+ var h = try fs.cwd().createFile("marshal.h", .{});
+ defer h.close();
+ var c = try fs.cwd().createFile("marshal.c", .{});
+ defer c.close();
+ const raylib: mapping.CombinedRaylib = try mapping.CombinedRaylib.load(arena.allocator(), intermediate.jsonFiles);
+ try writeCFunctions(arena.allocator(), &h, &c, inject, raylib);
+
+ try writeStructs(arena.allocator(), &file, bindings, inject);
+ try writeEnums(arena.allocator(), &file, bindings, inject);
+ try writeDefines(arena.allocator(), &file, bindings, inject);
+
+ std.log.info("... done", .{});
+}
+
+const Injections = struct {
+ lines: []const []const u8,
+ symbols: []const []const u8,
+
+ pub fn load(allocator: std.mem.Allocator) !@This() {
+ var injectZigLines = std.ArrayList([]const u8).init(allocator);
+ var symbols = std.ArrayList([]const u8).init(allocator);
+
+ var file = try fs.cwd().openFile(injectFile, .{});
+ var reader = file.reader();
+ while (try reader.readUntilDelimiterOrEofAlloc(allocator, '\n', std.math.maxInt(usize))) |line| {
+ if (std.mem.indexOf(u8, line, "pub const ")) |startIndex| {
+ if (std.mem.indexOf(u8, line, " = extern struct {")) |endIndex| {
+ const s = line["pub const ".len + startIndex .. endIndex];
+ try symbols.append(s);
+ std.log.debug("inject symbol: {s}", .{s});
+ } else if (std.mem.indexOf(u8, line, " = packed struct(u32) {")) |endIndex| {
+ const s = line["pub const ".len + startIndex .. endIndex];
+ try symbols.append(s);
+ std.log.debug("inject symbol: {s}", .{s});
+ }
+ }
+ if (std.mem.indexOf(u8, line, "pub fn ")) |startIndex| {
+ if (std.mem.indexOf(u8, line, "(")) |endIndex| {
+ const s = line["pub fn ".len + startIndex .. endIndex];
+ try symbols.append(s);
+ std.log.debug("inject symbol: {s}", .{s});
+ }
+ }
+ try injectZigLines.append(line);
+ }
+
+ return @This(){
+ .lines = try injectZigLines.toOwnedSlice(),
+ .symbols = try symbols.toOwnedSlice(),
+ };
+ }
+
+ pub fn containsSymbol(self: @This(), name: []const u8) bool {
+ for (self.symbols) |s| {
+ if (eql(s, name)) return true;
+ }
+ return false;
+ }
+};
+
+fn writeFunctions(
+ allocator: std.mem.Allocator,
+ file: *fs.File,
+ bindings: mapping.Intermediate,
+ inject: Injections,
+) !void {
+ var buf: [51200]u8 = undefined;
+ var fba = std.heap.FixedBufferAllocator.init(&buf);
+
+ for (bindings.functions) |func| {
+ if (inject.containsSymbol(func.name)) continue;
+ defer fba.reset();
+
+ //--- signature -------------------------
+ const funcDescription: []const u8 = func.description orelse "";
+ try file.writeAll(
+ try allocPrint(
+ allocator,
+ "\n/// {s}\npub fn {s} (\n",
+ .{ funcDescription, func.name },
+ ),
+ );
+
+ for (func.params) |param| {
+ if (param.description) |description| {
+ try file.writeAll(try allocPrint(
+ allocator,
+ "/// {s}\n",
+ .{description},
+ ));
+ }
+ try file.writeAll(try allocPrint(
+ allocator,
+ "{s}: {s},\n",
+ .{ param.name, param.typ },
+ ));
+ }
+
+ if (func.custom) {
+ try file.writeAll(
+ try allocPrint(
+ allocator,
+ ") {s} {{\n",
+ .{func.returnType},
+ ),
+ );
+ } else if (isPointer(func.returnType)) {
+ if (eql("u8", (stripType(func.returnType)))) {
+ try file.writeAll(
+ try allocPrint(
+ allocator,
+ ") [*:0]const {s} {{\n",
+ .{stripType(func.returnType)},
+ ),
+ );
+ } else {
+ try file.writeAll(
+ try allocPrint(
+ allocator,
+ ") {s} {{\n",
+ .{func.returnType},
+ ),
+ );
+ }
+ } else {
+ try file.writeAll(
+ try allocPrint(
+ allocator,
+ ") {s} {{\n",
+ .{func.returnType},
+ ),
+ );
+ }
+ const returnTypeIsVoid = eql(func.returnType, "void");
+
+ //--- body ------------------------------
+ if (isPointer(func.returnType)) {
+ try file.writeAll(try allocPrint(allocator, "return @ptrCast({s},\n", .{func.returnType}));
+ } else if (isPrimitiveOrPointer(func.returnType)) {
+ try file.writeAll("return ");
+ } else if (!returnTypeIsVoid) {
+ try file.writeAll(try allocPrint(allocator, "var out: {s} = undefined;\n", .{func.returnType}));
+ }
+ try file.writeAll(try allocPrint(allocator, "raylib.m{s}(\n", .{func.name}));
+
+ if (!isPrimitiveOrPointer(func.returnType)) {
+ if (bindings.containsStruct(stripType(func.returnType))) {
+ try file.writeAll(try allocPrint(allocator, "@ptrCast([*c]raylib.{s}, &out),\n", .{func.returnType}));
+ } else if (!returnTypeIsVoid) {
+ try file.writeAll(try allocPrint(allocator, "@ptrCast([*c]{s}, &out),\n", .{func.returnType}));
+ }
+ }
+
+ for (func.params) |param| {
+ if (isFunctionPointer(param.typ)) {
+ try file.writeAll(try allocPrint(allocator, "@ptrCast({s}),\n", .{param.name}));
+ } else if (bindings.containsStruct(stripType(param.typ)) and isPointer(param.typ)) {
+ try file.writeAll(try allocPrint(allocator, "@intToPtr([*c]raylib.{s}, @ptrToInt({s})),\n", .{ stripType(param.typ), param.name }));
+ } else if (bindings.containsEnum(param.typ)) {
+ try file.writeAll(try allocPrint(allocator, "@enumToInt({s}),\n", .{param.name}));
+ } else if (bindings.containsStruct(stripType(param.typ))) {
+ try file.writeAll(try allocPrint(allocator, "@intToPtr([*c]raylib.{s}, @ptrToInt(&{s})),\n", .{ stripType(param.typ), param.name }));
+ } else if (isPointer(param.typ)) {
+ if (std.mem.endsWith(u8, param.typ, "anyopaque")) {
+ try file.writeAll(try allocPrint(allocator, "{s},\n", .{param.name}));
+ } else if (isConst(param.typ)) {
+ try file.writeAll(try allocPrint(allocator, "@intToPtr([*c]const {s}, @ptrToInt({s})),\n", .{ stripType(param.typ), param.name }));
+ } else {
+ try file.writeAll(try allocPrint(allocator, "@ptrCast([*c]{s}, {s}),\n", .{ stripType(param.typ), param.name }));
+ }
+ } else {
+ try file.writeAll(try allocPrint(allocator, "{s},\n", .{param.name}));
+ }
+ }
+
+ if (isPointer(func.returnType)) {
+ try file.writeAll("),\n);\n");
+ } else {
+ try file.writeAll(");\n");
+ }
+
+ if (!isPrimitiveOrPointer(func.returnType) and !returnTypeIsVoid) {
+ try file.writeAll("return out;\n");
+ }
+
+ try file.writeAll("}\n");
+ }
+
+ std.log.info("generated functions", .{});
+}
+
+/// write: RETURN NAME(PARAMS...)
+/// or: void NAME(RETURN*, PARAMS...)
+fn writeCSignature(
+ allocator: std.mem.Allocator,
+ file: *fs.File,
+ func: mapping.RaylibFunction,
+) !void {
+ const returnType = func.returnType;
+
+ //return directly
+ if (mapping.isPrimitiveOrPointer(returnType)) {
+ try file.writeAll(try allocPrint(allocator, "{s} m{s}(", .{ returnType, func.name }));
+ if (func.params == null or func.params.?.len == 0) {
+ try file.writeAll("void");
+ }
+ }
+ //wrap return type and put as first function parameter
+ else {
+ try file.writeAll(try allocPrint(allocator, "void m{s}({s} *out", .{ func.name, returnType }));
+ if (func.params != null and func.params.?.len > 0) {
+ try file.writeAll(", ");
+ }
+ }
+
+ if (func.params) |params| {
+ for (params, 0..) |param, i| {
+ const paramType = param.type;
+ if (mapping.isPrimitiveOrPointer(paramType) or isFunctionPointer(paramType)) {
+ try file.writeAll(try allocPrint(allocator, "{s} {s}", .{ paramType, param.name }));
+ } else {
+ try file.writeAll(try allocPrint(allocator, "{s} *{s}", .{ paramType, param.name }));
+ }
+
+ if (i < params.len - 1) {
+ try file.writeAll(", ");
+ }
+ }
+ }
+
+ try file.writeAll(")");
+}
+
+fn writeCFunctions(
+ allocator: std.mem.Allocator,
+ h: *fs.File,
+ c: *fs.File,
+ inject: Injections,
+ rl: mapping.CombinedRaylib,
+) !void {
+ var hInject = try fs.cwd().openFile("inject.h", .{});
+ defer hInject.close();
+ try h.writeFileAll(hInject, .{});
+ var cInject = try fs.cwd().openFile("inject.c", .{});
+ defer cInject.close();
+ try c.writeFileAll(cInject, .{});
+
+ for (rl.functions.values()) |func| {
+ if (inject.containsSymbol(func.name)) continue;
+
+ //--- C-HEADER -----------------------------
+
+ try h.writeAll(try allocPrint(allocator, "// {s}\n", .{func.description}));
+ try writeCSignature(allocator, h, func);
+ try h.writeAll(";\n\n");
+
+ try writeCSignature(allocator, c, func);
+ try c.writeAll("\n{\n");
+
+ //--- C-IMPLEMENT -----------------------------
+
+ if (eql(func.returnType, "void")) {
+ try c.writeAll("\t");
+ } else if (mapping.isPrimitiveOrPointer(func.returnType)) {
+ try c.writeAll("\treturn ");
+ } else {
+ try c.writeAll("\t*out = ");
+ }
+
+ try c.writeAll(
+ try allocPrint(
+ allocator,
+ "{s}(",
+ .{func.name},
+ ),
+ );
+
+ if (func.params) |params| {
+ for (params, 0..) |param, i| {
+ if (mapping.isPrimitiveOrPointer(param.type) or isFunctionPointer(param.type)) {
+ try c.writeAll(
+ try allocPrint(
+ allocator,
+ "{s}",
+ .{param.name},
+ ),
+ );
+ } else {
+ try c.writeAll(
+ try allocPrint(
+ allocator,
+ "*{s}",
+ .{param.name},
+ ),
+ );
+ }
+
+ if (i < params.len - 1) {
+ try c.writeAll(", ");
+ }
+ }
+ }
+
+ try c.writeAll(");\n}\n\n");
+ }
+}
+
+fn writeStructs(
+ allocator: std.mem.Allocator,
+ file: *fs.File,
+ bindings: mapping.Intermediate,
+ inject: Injections,
+) !void {
+ var buf: [51200]u8 = undefined;
+ var fba = std.heap.FixedBufferAllocator.init(&buf);
+
+ for (bindings.structs) |s| {
+ if (inject.containsSymbol(s.name)) continue;
+ defer fba.reset();
+
+ try file.writeAll(
+ try allocPrint(
+ allocator,
+ "\n/// {?s}\npub const {s} = extern struct {{\n",
+ .{ s.description, s.name },
+ ),
+ );
+
+ for (s.fields) |field| {
+ try file.writeAll(try allocPrint(allocator, "/// {?s}\n\t{s}: {s},\n", .{
+ field.description,
+ field.name,
+ field.typ,
+ }));
+ }
+
+ try file.writeAll("\n};\n");
+ }
+
+ std.log.info("generated structs", .{});
+}
+
+fn writeEnums(
+ allocator: std.mem.Allocator,
+ file: *fs.File,
+ bindings: mapping.Intermediate,
+ inject: Injections,
+) !void {
+ var buf: [51200]u8 = undefined;
+ var fba = std.heap.FixedBufferAllocator.init(&buf);
+
+ for (bindings.enums) |e| {
+ if (inject.containsSymbol(e.name)) continue;
+ defer fba.reset();
+
+ try file.writeAll(
+ try allocPrint(
+ allocator,
+ "\n/// {?s}\npub const {s} = enum(i32) {{\n",
+ .{ e.description, e.name },
+ ),
+ );
+
+ for (e.values) |value| {
+ try file.writeAll(try allocPrint(allocator, "/// {?s}\n{s} = {d},\n", .{
+ value.description,
+ value.name,
+ value.value,
+ }));
+ }
+
+ try file.writeAll("\n};\n");
+ }
+
+ std.log.info("generated enums", .{});
+}
+
+fn writeDefines(
+ allocator: std.mem.Allocator,
+ file: *fs.File,
+ bindings: mapping.Intermediate,
+ inject: Injections,
+) !void {
+ var buf: [51200]u8 = undefined;
+ var fba = std.heap.FixedBufferAllocator.init(&buf);
+
+ for (bindings.defines) |d| {
+ if (inject.containsSymbol(d.name)) continue;
+ defer fba.reset();
+
+ try file.writeAll(
+ try allocPrint(
+ allocator,
+ "\n/// {?s}\npub const {s}: {s} = {s};\n",
+ .{ d.description, d.name, d.typ, d.value },
+ ),
+ );
+ }
+
+ std.log.info("generated defines", .{});
+}
+
+fn writeInjections(
+ _: std.mem.Allocator,
+ file: *fs.File,
+ inject: Injections,
+) !void {
+ var buf: [51200]u8 = undefined;
+ var fba = std.heap.FixedBufferAllocator.init(&buf);
+
+ for (inject.lines) |line| {
+ defer fba.reset();
+
+ try file.writeAll(try allocPrint(fba.allocator(), "{s}\n", .{line}));
+ }
+
+ std.log.info("written inject.zig", .{});
+}
+
+fn eql(a: []const u8, b: []const u8) bool {
+ return std.mem.eql(u8, a, b);
+}
+
+fn startsWith(haystack: []const u8, needle: []const u8) bool {
+ return std.mem.startsWith(u8, haystack, needle);
+}
+
+fn endsWith(haystack: []const u8, needle: []const u8) bool {
+ return std.mem.endsWith(u8, haystack, needle);
+}
+
+/// is pointer type
+fn isPointer(z: []const u8) bool {
+ return pointerOffset(z) > 0;
+}
+
+fn isFunctionPointer(z: []const u8) bool {
+ return std.mem.indexOf(u8, z, "fn(") != null or std.mem.endsWith(u8, z, "Callback");
+}
+
+fn pointerOffset(z: []const u8) usize {
+ if (startsWith(z, "*")) return 1;
+ if (startsWith(z, "?*")) return 2;
+ if (startsWith(z, "[*]")) return 3;
+ if (startsWith(z, "?[*]")) return 4;
+ if (startsWith(z, "[*c]")) return 4;
+ if (startsWith(z, "[*:0]")) return 5;
+ if (startsWith(z, "?[*:0]")) return 6;
+
+ return 0;
+}
+
+fn isConst(z: []const u8) bool {
+ return startsWith(z[pointerOffset(z)..], "const ");
+}
+
+fn isVoid(z: []const u8) bool {
+ return eql(stripType(z), "void");
+}
+
+/// strips const and pointer annotations
+/// *const TName -> TName
+fn stripType(z: []const u8) []const u8 {
+ var name = z[pointerOffset(z)..];
+ name = if (startsWith(name, "const ")) name["const ".len..] else name;
+
+ return std.mem.trim(u8, name, " \t\n");
+}
+
+/// true if Zig type is primitive or a pointer to anything
+/// this means we don't need to wrap it in a pointer
+pub fn isPrimitiveOrPointer(z: []const u8) bool {
+ const primitiveTypes = std.ComptimeStringMap(void, .{
+ // .{ "void", {} }, // zig void is zero sized while C void is >= 1 byte
+ .{ "bool", {} },
+ .{ "u8", {} },
+ .{ "i8", {} },
+ .{ "i16", {} },
+ .{ "u16", {} },
+ .{ "i32", {} },
+ .{ "u32", {} },
+ .{ "i64", {} },
+ .{ "u64", {} },
+ .{ "f32", {} },
+ .{ "f64", {} },
+ });
+ return primitiveTypes.has(stripType(z)) or pointerOffset(z) > 0;
+}
diff --git a/libs/raylib/gui_icons.h b/libs/raylib/gui_icons.h
new file mode 100644
index 0000000..d8a9e45
--- /dev/null
+++ b/libs/raylib/gui_icons.h
@@ -0,0 +1,547 @@
+//////////////////////////////////////////////////////////////////////////////////
+// //
+// raygui Icons exporter v1.1 - Icons data exported as a values array //
+// //
+// more info and bugs-report: github.com/raysan5/raygui //
+// feedback and support: ray[at]raylibtech.com //
+// //
+// Copyright (c) 2019-2021 raylib technologies (@raylibtech) //
+// //
+//////////////////////////////////////////////////////////////////////////////////
+
+//----------------------------------------------------------------------------------
+// Defines and Macros
+//----------------------------------------------------------------------------------
+#define RAYGUI_ICON_SIZE 16 // Size of icons (squared)
+#define RAYGUI_ICON_MAX_ICONS 256 // Maximum number of icons
+#define RAYGUI_ICON_MAX_NAME_LENGTH 32 // Maximum length of icon name id
+
+// Icons data is defined by bit array (every bit represents one pixel)
+// Those arrays are stored as unsigned int data arrays, so every array
+// element defines 32 pixels (bits) of information
+// Number of elemens depend on RAYGUI_ICON_SIZE (by default 16x16 pixels)
+#define RAYGUI_ICON_DATA_ELEMENTS (RAYGUI_ICON_SIZE*RAYGUI_ICON_SIZE/32)
+
+//----------------------------------------------------------------------------------
+// Icons enumeration
+//----------------------------------------------------------------------------------
+typedef enum {
+ RAYGUI_ICON_NONE = 0,
+ RAYGUI_ICON_FOLDER_FILE_OPEN = 1,
+ RAYGUI_ICON_FILE_SAVE_CLASSIC = 2,
+ RAYGUI_ICON_FOLDER_OPEN = 3,
+ RAYGUI_ICON_FOLDER_SAVE = 4,
+ RAYGUI_ICON_FILE_OPEN = 5,
+ RAYGUI_ICON_FILE_SAVE = 6,
+ RAYGUI_ICON_FILE_EXPORT = 7,
+ RAYGUI_ICON_FILE_NEW = 8,
+ RAYGUI_ICON_FILE_DELETE = 9,
+ RAYGUI_ICON_FILETYPE_TEXT = 10,
+ RAYGUI_ICON_FILETYPE_AUDIO = 11,
+ RAYGUI_ICON_FILETYPE_IMAGE = 12,
+ RAYGUI_ICON_FILETYPE_PLAY = 13,
+ RAYGUI_ICON_FILETYPE_VIDEO = 14,
+ RAYGUI_ICON_FILETYPE_INFO = 15,
+ RAYGUI_ICON_FILE_COPY = 16,
+ RAYGUI_ICON_FILE_CUT = 17,
+ RAYGUI_ICON_FILE_PASTE = 18,
+ RAYGUI_ICON_CURSOR_HAND = 19,
+ RAYGUI_ICON_CURSOR_POINTER = 20,
+ RAYGUI_ICON_CURSOR_CLASSIC = 21,
+ RAYGUI_ICON_PENCIL = 22,
+ RAYGUI_ICON_PENCIL_BIG = 23,
+ RAYGUI_ICON_BRUSH_CLASSIC = 24,
+ RAYGUI_ICON_BRUSH_PAINTER = 25,
+ RAYGUI_ICON_WATER_DROP = 26,
+ RAYGUI_ICON_COLOR_PICKER = 27,
+ RAYGUI_ICON_RUBBER = 28,
+ RAYGUI_ICON_COLOR_BUCKET = 29,
+ RAYGUI_ICON_TEXT_T = 30,
+ RAYGUI_ICON_TEXT_A = 31,
+ RAYGUI_ICON_SCALE = 32,
+ RAYGUI_ICON_RESIZE = 33,
+ RAYGUI_ICON_FILTER_POINT = 34,
+ RAYGUI_ICON_FILTER_BILINEAR = 35,
+ RAYGUI_ICON_CROP = 36,
+ RAYGUI_ICON_CROP_ALPHA = 37,
+ RAYGUI_ICON_SQUARE_TOGGLE = 38,
+ RAYGUI_ICON_SIMMETRY = 39,
+ RAYGUI_ICON_SIMMETRY_HORIZONTAL = 40,
+ RAYGUI_ICON_SIMMETRY_VERTICAL = 41,
+ RAYGUI_ICON_LENS = 42,
+ RAYGUI_ICON_LENS_BIG = 43,
+ RAYGUI_ICON_EYE_ON = 44,
+ RAYGUI_ICON_EYE_OFF = 45,
+ RAYGUI_ICON_FILTER_TOP = 46,
+ RAYGUI_ICON_FILTER = 47,
+ RAYGUI_ICON_TARGET_POINT = 48,
+ RAYGUI_ICON_TARGET_SMALL = 49,
+ RAYGUI_ICON_TARGET_BIG = 50,
+ RAYGUI_ICON_TARGET_MOVE = 51,
+ RAYGUI_ICON_CURSOR_MOVE = 52,
+ RAYGUI_ICON_CURSOR_SCALE = 53,
+ RAYGUI_ICON_CURSOR_SCALE_RIGHT = 54,
+ RAYGUI_ICON_CURSOR_SCALE_LEFT = 55,
+ RAYGUI_ICON_UNDO = 56,
+ RAYGUI_ICON_REDO = 57,
+ RAYGUI_ICON_REREDO = 58,
+ RAYGUI_ICON_MUTATE = 59,
+ RAYGUI_ICON_ROTATE = 60,
+ RAYGUI_ICON_REPEAT = 61,
+ RAYGUI_ICON_SHUFFLE = 62,
+ RAYGUI_ICON_EMPTYBOX = 63,
+ RAYGUI_ICON_TARGET = 64,
+ RAYGUI_ICON_TARGET_SMALL_FILL = 65,
+ RAYGUI_ICON_TARGET_BIG_FILL = 66,
+ RAYGUI_ICON_TARGET_MOVE_FILL = 67,
+ RAYGUI_ICON_CURSOR_MOVE_FILL = 68,
+ RAYGUI_ICON_CURSOR_SCALE_FILL = 69,
+ RAYGUI_ICON_CURSOR_SCALE_RIGHT_FILL = 70,
+ RAYGUI_ICON_CURSOR_SCALE_LEFT_FILL = 71,
+ RAYGUI_ICON_UNDO_FILL = 72,
+ RAYGUI_ICON_REDO_FILL = 73,
+ RAYGUI_ICON_REREDO_FILL = 74,
+ RAYGUI_ICON_MUTATE_FILL = 75,
+ RAYGUI_ICON_ROTATE_FILL = 76,
+ RAYGUI_ICON_REPEAT_FILL = 77,
+ RAYGUI_ICON_SHUFFLE_FILL = 78,
+ RAYGUI_ICON_EMPTYBOX_SMALL = 79,
+ RAYGUI_ICON_BOX = 80,
+ RAYGUI_ICON_BOX_TOP = 81,
+ RAYGUI_ICON_BOX_TOP_RIGHT = 82,
+ RAYGUI_ICON_BOX_RIGHT = 83,
+ RAYGUI_ICON_BOX_BOTTOM_RIGHT = 84,
+ RAYGUI_ICON_BOX_BOTTOM = 85,
+ RAYGUI_ICON_BOX_BOTTOM_LEFT = 86,
+ RAYGUI_ICON_BOX_LEFT = 87,
+ RAYGUI_ICON_BOX_TOP_LEFT = 88,
+ RAYGUI_ICON_BOX_CENTER = 89,
+ RAYGUI_ICON_BOX_CIRCLE_MASK = 90,
+ RAYGUI_ICON_POT = 91,
+ RAYGUI_ICON_ALPHA_MULTIPLY = 92,
+ RAYGUI_ICON_ALPHA_CLEAR = 93,
+ RAYGUI_ICON_DITHERING = 94,
+ RAYGUI_ICON_MIPMAPS = 95,
+ RAYGUI_ICON_BOX_GRID = 96,
+ RAYGUI_ICON_GRID = 97,
+ RAYGUI_ICON_BOX_CORNERS_SMALL = 98,
+ RAYGUI_ICON_BOX_CORNERS_BIG = 99,
+ RAYGUI_ICON_FOUR_BOXES = 100,
+ RAYGUI_ICON_GRID_FILL = 101,
+ RAYGUI_ICON_BOX_MULTISIZE = 102,
+ RAYGUI_ICON_ZOOM_SMALL = 103,
+ RAYGUI_ICON_ZOOM_MEDIUM = 104,
+ RAYGUI_ICON_ZOOM_BIG = 105,
+ RAYGUI_ICON_ZOOM_ALL = 106,
+ RAYGUI_ICON_ZOOM_CENTER = 107,
+ RAYGUI_ICON_BOX_DOTS_SMALL = 108,
+ RAYGUI_ICON_BOX_DOTS_BIG = 109,
+ RAYGUI_ICON_BOX_CONCENTRIC = 110,
+ RAYGUI_ICON_BOX_GRID_BIG = 111,
+ RAYGUI_ICON_OK_TICK = 112,
+ RAYGUI_ICON_CROSS = 113,
+ RAYGUI_ICON_ARROW_LEFT = 114,
+ RAYGUI_ICON_ARROW_RIGHT = 115,
+ RAYGUI_ICON_ARROW_BOTTOM = 116,
+ RAYGUI_ICON_ARROW_TOP = 117,
+ RAYGUI_ICON_ARROW_LEFT_FILL = 118,
+ RAYGUI_ICON_ARROW_RIGHT_FILL = 119,
+ RAYGUI_ICON_ARROW_BOTTOM_FILL = 120,
+ RAYGUI_ICON_ARROW_TOP_FILL = 121,
+ RAYGUI_ICON_AUDIO = 122,
+ RAYGUI_ICON_FX = 123,
+ RAYGUI_ICON_WAVE = 124,
+ RAYGUI_ICON_WAVE_SINUS = 125,
+ RAYGUI_ICON_WAVE_SQUARE = 126,
+ RAYGUI_ICON_WAVE_TRIANGULAR = 127,
+ RAYGUI_ICON_CROSS_SMALL = 128,
+ RAYGUI_ICON_PLAYER_PREVIOUS = 129,
+ RAYGUI_ICON_PLAYER_PLAY_BACK = 130,
+ RAYGUI_ICON_PLAYER_PLAY = 131,
+ RAYGUI_ICON_PLAYER_PAUSE = 132,
+ RAYGUI_ICON_PLAYER_STOP = 133,
+ RAYGUI_ICON_PLAYER_NEXT = 134,
+ RAYGUI_ICON_PLAYER_RECORD = 135,
+ RAYGUI_ICON_MAGNET = 136,
+ RAYGUI_ICON_LOCK_CLOSE = 137,
+ RAYGUI_ICON_LOCK_OPEN = 138,
+ RAYGUI_ICON_CLOCK = 139,
+ RAYGUI_ICON_TOOLS = 140,
+ RAYGUI_ICON_GEAR = 141,
+ RAYGUI_ICON_GEAR_BIG = 142,
+ RAYGUI_ICON_BIN = 143,
+ RAYGUI_ICON_HAND_POINTER = 144,
+ RAYGUI_ICON_LASER = 145,
+ RAYGUI_ICON_COIN = 146,
+ RAYGUI_ICON_EXPLOSION = 147,
+ RAYGUI_ICON_1UP = 148,
+ RAYGUI_ICON_PLAYER = 149,
+ RAYGUI_ICON_PLAYER_JUMP = 150,
+ RAYGUI_ICON_KEY = 151,
+ RAYGUI_ICON_DEMON = 152,
+ RAYGUI_ICON_TEXT_POPUP = 153,
+ RAYGUI_ICON_GEAR_EX = 154,
+ RAYGUI_ICON_CRACK = 155,
+ RAYGUI_ICON_CRACK_POINTS = 156,
+ RAYGUI_ICON_STAR = 157,
+ RAYGUI_ICON_DOOR = 158,
+ RAYGUI_ICON_EXIT = 159,
+ RAYGUI_ICON_MODE_2D = 160,
+ RAYGUI_ICON_MODE_3D = 161,
+ RAYGUI_ICON_CUBE = 162,
+ RAYGUI_ICON_CUBE_FACE_TOP = 163,
+ RAYGUI_ICON_CUBE_FACE_LEFT = 164,
+ RAYGUI_ICON_CUBE_FACE_FRONT = 165,
+ RAYGUI_ICON_CUBE_FACE_BOTTOM = 166,
+ RAYGUI_ICON_CUBE_FACE_RIGHT = 167,
+ RAYGUI_ICON_CUBE_FACE_BACK = 168,
+ RAYGUI_ICON_CAMERA = 169,
+ RAYGUI_ICON_SPECIAL = 170,
+ RAYGUI_ICON_LINK_NET = 171,
+ RAYGUI_ICON_LINK_BOXES = 172,
+ RAYGUI_ICON_LINK_MULTI = 173,
+ RAYGUI_ICON_LINK = 174,
+ RAYGUI_ICON_LINK_BROKE = 175,
+ RAYGUI_ICON_TEXT_NOTES = 176,
+ RAYGUI_ICON_NOTEBOOK = 177,
+ RAYGUI_ICON_SUITCASE = 178,
+ RAYGUI_ICON_SUITCASE_ZIP = 179,
+ RAYGUI_ICON_MAILBOX = 180,
+ RAYGUI_ICON_MONITOR = 181,
+ RAYGUI_ICON_PRINTER = 182,
+ RAYGUI_ICON_PHOTO_CAMERA = 183,
+ RAYGUI_ICON_PHOTO_CAMERA_FLASH = 184,
+ RAYGUI_ICON_HOUSE = 185,
+ RAYGUI_ICON_HEART = 186,
+ RAYGUI_ICON_CORNER = 187,
+ RAYGUI_ICON_VERTICAL_BARS = 188,
+ RAYGUI_ICON_VERTICAL_BARS_FILL = 189,
+ RAYGUI_ICON_LIFE_BARS = 190,
+ RAYGUI_ICON_INFO = 191,
+ RAYGUI_ICON_CROSSLINE = 192,
+ RAYGUI_ICON_HELP = 193,
+ RAYGUI_ICON_FILETYPE_ALPHA = 194,
+ RAYGUI_ICON_FILETYPE_HOME = 195,
+ RAYGUI_ICON_LAYERS_VISIBLE = 196,
+ RAYGUI_ICON_LAYERS = 197,
+ RAYGUI_ICON_WINDOW = 198,
+ RAYGUI_ICON_199 = 199,
+ RAYGUI_ICON_200 = 200,
+ RAYGUI_ICON_201 = 201,
+ RAYGUI_ICON_202 = 202,
+ RAYGUI_ICON_203 = 203,
+ RAYGUI_ICON_204 = 204,
+ RAYGUI_ICON_205 = 205,
+ RAYGUI_ICON_206 = 206,
+ RAYGUI_ICON_207 = 207,
+ RAYGUI_ICON_208 = 208,
+ RAYGUI_ICON_209 = 209,
+ RAYGUI_ICON_210 = 210,
+ RAYGUI_ICON_211 = 211,
+ RAYGUI_ICON_212 = 212,
+ RAYGUI_ICON_213 = 213,
+ RAYGUI_ICON_214 = 214,
+ RAYGUI_ICON_215 = 215,
+ RAYGUI_ICON_216 = 216,
+ RAYGUI_ICON_217 = 217,
+ RAYGUI_ICON_218 = 218,
+ RAYGUI_ICON_219 = 219,
+ RAYGUI_ICON_220 = 220,
+ RAYGUI_ICON_221 = 221,
+ RAYGUI_ICON_222 = 222,
+ RAYGUI_ICON_223 = 223,
+ RAYGUI_ICON_224 = 224,
+ RAYGUI_ICON_225 = 225,
+ RAYGUI_ICON_226 = 226,
+ RAYGUI_ICON_227 = 227,
+ RAYGUI_ICON_228 = 228,
+ RAYGUI_ICON_229 = 229,
+ RAYGUI_ICON_230 = 230,
+ RAYGUI_ICON_231 = 231,
+ RAYGUI_ICON_232 = 232,
+ RAYGUI_ICON_233 = 233,
+ RAYGUI_ICON_234 = 234,
+ RAYGUI_ICON_235 = 235,
+ RAYGUI_ICON_236 = 236,
+ RAYGUI_ICON_237 = 237,
+ RAYGUI_ICON_238 = 238,
+ RAYGUI_ICON_239 = 239,
+ RAYGUI_ICON_240 = 240,
+ RAYGUI_ICON_241 = 241,
+ RAYGUI_ICON_242 = 242,
+ RAYGUI_ICON_243 = 243,
+ RAYGUI_ICON_244 = 244,
+ RAYGUI_ICON_245 = 245,
+ RAYGUI_ICON_246 = 246,
+ RAYGUI_ICON_247 = 247,
+ RAYGUI_ICON_248 = 248,
+ RAYGUI_ICON_249 = 249,
+ RAYGUI_ICON_250 = 250,
+ RAYGUI_ICON_251 = 251,
+ RAYGUI_ICON_252 = 252,
+ RAYGUI_ICON_253 = 253,
+ RAYGUI_ICON_254 = 254,
+ RAYGUI_ICON_255 = 255,
+} guiIconName;
+
+//----------------------------------------------------------------------------------
+// Icons data
+//----------------------------------------------------------------------------------
+static unsigned int guiIcons[RAYGUI_ICON_MAX_ICONS*RAYGUI_ICON_DATA_ELEMENTS] = {
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_NONE
+ 0x3ff80000, 0x2f082008, 0x2042207e, 0x40027fc2, 0x40024002, 0x40024002, 0x40024002, 0x00007ffe, // RAYGUI_ICON_FOLDER_FILE_OPEN
+ 0x3ffe0000, 0x44226422, 0x400247e2, 0x5ffa4002, 0x57ea500a, 0x500a500a, 0x40025ffa, 0x00007ffe, // RAYGUI_ICON_FILE_SAVE_CLASSIC
+ 0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x41024002, 0x44424282, 0x793e4102, 0x00000100, // RAYGUI_ICON_FOLDER_OPEN
+ 0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x41024102, 0x44424102, 0x793e4282, 0x00000000, // RAYGUI_ICON_FOLDER_SAVE
+ 0x3ff00000, 0x201c2010, 0x20042004, 0x21042004, 0x24442284, 0x21042104, 0x20042104, 0x00003ffc, // RAYGUI_ICON_FILE_OPEN
+ 0x3ff00000, 0x201c2010, 0x20042004, 0x21042004, 0x21042104, 0x22842444, 0x20042104, 0x00003ffc, // RAYGUI_ICON_FILE_SAVE
+ 0x3ff00000, 0x201c2010, 0x00042004, 0x20041004, 0x20844784, 0x00841384, 0x20042784, 0x00003ffc, // RAYGUI_ICON_FILE_EXPORT
+ 0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x22042204, 0x22042f84, 0x20042204, 0x00003ffc, // RAYGUI_ICON_FILE_NEW
+ 0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x25042884, 0x25042204, 0x20042884, 0x00003ffc, // RAYGUI_ICON_FILE_DELETE
+ 0x3ff00000, 0x201c2010, 0x20042004, 0x20042ff4, 0x20042ff4, 0x20042ff4, 0x20042004, 0x00003ffc, // RAYGUI_ICON_FILETYPE_TEXT
+ 0x3ff00000, 0x201c2010, 0x27042004, 0x244424c4, 0x26442444, 0x20642664, 0x20042004, 0x00003ffc, // RAYGUI_ICON_FILETYPE_AUDIO
+ 0x3ff00000, 0x201c2010, 0x26042604, 0x20042004, 0x35442884, 0x2414222c, 0x20042004, 0x00003ffc, // RAYGUI_ICON_FILETYPE_IMAGE
+ 0x3ff00000, 0x201c2010, 0x20c42004, 0x22442144, 0x22442444, 0x20c42144, 0x20042004, 0x00003ffc, // RAYGUI_ICON_FILETYPE_PLAY
+ 0x3ff00000, 0x3ffc2ff0, 0x3f3c2ff4, 0x3dbc2eb4, 0x3dbc2bb4, 0x3f3c2eb4, 0x3ffc2ff4, 0x00002ff4, // RAYGUI_ICON_FILETYPE_VIDEO
+ 0x3ff00000, 0x201c2010, 0x21842184, 0x21842004, 0x21842184, 0x21842184, 0x20042184, 0x00003ffc, // RAYGUI_ICON_FILETYPE_INFO
+ 0x0ff00000, 0x381c0810, 0x28042804, 0x28042804, 0x28042804, 0x28042804, 0x20102ffc, 0x00003ff0, // RAYGUI_ICON_FILE_COPY
+ 0x00000000, 0x701c0000, 0x079c1e14, 0x55a000f0, 0x079c00f0, 0x701c1e14, 0x00000000, 0x00000000, // RAYGUI_ICON_FILE_CUT
+ 0x01c00000, 0x13e41bec, 0x3f841004, 0x204420c4, 0x20442044, 0x20442044, 0x207c2044, 0x00003fc0, // RAYGUI_ICON_FILE_PASTE
+ 0x00000000, 0x3aa00fe0, 0x2abc2aa0, 0x2aa42aa4, 0x20042aa4, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_CURSOR_HAND
+ 0x00000000, 0x003c000c, 0x030800c8, 0x30100c10, 0x10202020, 0x04400840, 0x01800280, 0x00000000, // RAYGUI_ICON_CURSOR_POINTER
+ 0x00000000, 0x00180000, 0x01f00078, 0x03e007f0, 0x07c003e0, 0x04000e40, 0x00000000, 0x00000000, // RAYGUI_ICON_CURSOR_CLASSIC
+ 0x00000000, 0x04000000, 0x11000a00, 0x04400a80, 0x01100220, 0x00580088, 0x00000038, 0x00000000, // RAYGUI_ICON_PENCIL
+ 0x04000000, 0x15000a00, 0x50402880, 0x14102820, 0x05040a08, 0x015c028c, 0x007c00bc, 0x00000000, // RAYGUI_ICON_PENCIL_BIG
+ 0x01c00000, 0x01400140, 0x01400140, 0x0ff80140, 0x0ff80808, 0x0aa80808, 0x0aa80aa8, 0x00000ff8, // RAYGUI_ICON_BRUSH_CLASSIC
+ 0x1ffc0000, 0x5ffc7ffe, 0x40004000, 0x00807f80, 0x01c001c0, 0x01c001c0, 0x01c001c0, 0x00000080, // RAYGUI_ICON_BRUSH_PAINTER
+ 0x00000000, 0x00800000, 0x01c00080, 0x03e001c0, 0x07f003e0, 0x036006f0, 0x000001c0, 0x00000000, // RAYGUI_ICON_WATER_DROP
+ 0x00000000, 0x3e003800, 0x1f803f80, 0x0c201e40, 0x02080c10, 0x00840104, 0x00380044, 0x00000000, // RAYGUI_ICON_COLOR_PICKER
+ 0x00000000, 0x07800300, 0x1fe00fc0, 0x3f883fd0, 0x0e021f04, 0x02040402, 0x00f00108, 0x00000000, // RAYGUI_ICON_RUBBER
+ 0x00c00000, 0x02800140, 0x08200440, 0x20081010, 0x2ffe3004, 0x03f807fc, 0x00e001f0, 0x00000040, // RAYGUI_ICON_COLOR_BUCKET
+ 0x00000000, 0x21843ffc, 0x01800180, 0x01800180, 0x01800180, 0x01800180, 0x03c00180, 0x00000000, // RAYGUI_ICON_TEXT_T
+ 0x00800000, 0x01400180, 0x06200340, 0x0c100620, 0x1ff80c10, 0x380c1808, 0x70067004, 0x0000f80f, // RAYGUI_ICON_TEXT_A
+ 0x78000000, 0x50004000, 0x00004800, 0x03c003c0, 0x03c003c0, 0x00100000, 0x0002000a, 0x0000000e, // RAYGUI_ICON_SCALE
+ 0x75560000, 0x5e004002, 0x54001002, 0x41001202, 0x408200fe, 0x40820082, 0x40820082, 0x00006afe, // RAYGUI_ICON_RESIZE
+ 0x00000000, 0x3f003f00, 0x3f003f00, 0x3f003f00, 0x00400080, 0x001c0020, 0x001c001c, 0x00000000, // RAYGUI_ICON_FILTER_POINT
+ 0x6d800000, 0x00004080, 0x40804080, 0x40800000, 0x00406d80, 0x001c0020, 0x001c001c, 0x00000000, // RAYGUI_ICON_FILTER_BILINEAR
+ 0x40080000, 0x1ffe2008, 0x14081008, 0x11081208, 0x10481088, 0x10081028, 0x10047ff8, 0x00001002, // RAYGUI_ICON_CROP
+ 0x00100000, 0x3ffc0010, 0x2ab03550, 0x22b02550, 0x20b02150, 0x20302050, 0x2000fff0, 0x00002000, // RAYGUI_ICON_CROP_ALPHA
+ 0x40000000, 0x1ff82000, 0x04082808, 0x01082208, 0x00482088, 0x00182028, 0x35542008, 0x00000002, // RAYGUI_ICON_SQUARE_TOGGLE
+ 0x00000000, 0x02800280, 0x06c006c0, 0x0ea00ee0, 0x1e901eb0, 0x3e883e98, 0x7efc7e8c, 0x00000000, // RAYGUI_ICON_SIMMETRY
+ 0x01000000, 0x05600100, 0x1d480d50, 0x7d423d44, 0x3d447d42, 0x0d501d48, 0x01000560, 0x00000100, // RAYGUI_ICON_SIMMETRY_HORIZONTAL
+ 0x01800000, 0x04200240, 0x10080810, 0x00001ff8, 0x00007ffe, 0x0ff01ff8, 0x03c007e0, 0x00000180, // RAYGUI_ICON_SIMMETRY_VERTICAL
+ 0x00000000, 0x010800f0, 0x02040204, 0x02040204, 0x07f00308, 0x1c000e00, 0x30003800, 0x00000000, // RAYGUI_ICON_LENS
+ 0x00000000, 0x061803f0, 0x08240c0c, 0x08040814, 0x0c0c0804, 0x23f01618, 0x18002400, 0x00000000, // RAYGUI_ICON_LENS_BIG
+ 0x00000000, 0x00000000, 0x1c7007c0, 0x638e3398, 0x1c703398, 0x000007c0, 0x00000000, 0x00000000, // RAYGUI_ICON_EYE_ON
+ 0x00000000, 0x10002000, 0x04700fc0, 0x610e3218, 0x1c703098, 0x001007a0, 0x00000008, 0x00000000, // RAYGUI_ICON_EYE_OFF
+ 0x00000000, 0x00007ffc, 0x40047ffc, 0x10102008, 0x04400820, 0x02800280, 0x02800280, 0x00000100, // RAYGUI_ICON_FILTER_TOP
+ 0x00000000, 0x40027ffe, 0x10082004, 0x04200810, 0x02400240, 0x02400240, 0x01400240, 0x000000c0, // RAYGUI_ICON_FILTER
+ 0x00800000, 0x00800080, 0x00000080, 0x3c9e0000, 0x00000000, 0x00800080, 0x00800080, 0x00000000, // RAYGUI_ICON_TARGET_POINT
+ 0x00800000, 0x00800080, 0x00800080, 0x3f7e01c0, 0x008001c0, 0x00800080, 0x00800080, 0x00000000, // RAYGUI_ICON_TARGET_SMALL
+ 0x00800000, 0x00800080, 0x03e00080, 0x3e3e0220, 0x03e00220, 0x00800080, 0x00800080, 0x00000000, // RAYGUI_ICON_TARGET_BIG
+ 0x01000000, 0x04400280, 0x01000100, 0x43842008, 0x43849ab2, 0x01002008, 0x04400100, 0x01000280, // RAYGUI_ICON_TARGET_MOVE
+ 0x01000000, 0x04400280, 0x01000100, 0x41042108, 0x41049ff2, 0x01002108, 0x04400100, 0x01000280, // RAYGUI_ICON_CURSOR_MOVE
+ 0x781e0000, 0x500a4002, 0x04204812, 0x00000240, 0x02400000, 0x48120420, 0x4002500a, 0x0000781e, // RAYGUI_ICON_CURSOR_SCALE
+ 0x00000000, 0x20003c00, 0x24002800, 0x01000200, 0x00400080, 0x00140024, 0x003c0004, 0x00000000, // RAYGUI_ICON_CURSOR_SCALE_RIGHT
+ 0x00000000, 0x0004003c, 0x00240014, 0x00800040, 0x02000100, 0x28002400, 0x3c002000, 0x00000000, // RAYGUI_ICON_CURSOR_SCALE_LEFT
+ 0x00000000, 0x00100020, 0x10101fc8, 0x10001020, 0x10001000, 0x10001000, 0x00001fc0, 0x00000000, // RAYGUI_ICON_UNDO
+ 0x00000000, 0x08000400, 0x080813f8, 0x00080408, 0x00080008, 0x00080008, 0x000003f8, 0x00000000, // RAYGUI_ICON_REDO
+ 0x00000000, 0x3ffc0000, 0x20042004, 0x20002000, 0x20402000, 0x3f902020, 0x00400020, 0x00000000, // RAYGUI_ICON_REREDO
+ 0x00000000, 0x3ffc0000, 0x20042004, 0x27fc2004, 0x20202000, 0x3fc82010, 0x00200010, 0x00000000, // RAYGUI_ICON_MUTATE
+ 0x00000000, 0x0ff00000, 0x10081818, 0x11801008, 0x10001180, 0x18101020, 0x00100fc8, 0x00000020, // RAYGUI_ICON_ROTATE
+ 0x00000000, 0x04000200, 0x240429fc, 0x20042204, 0x20442004, 0x3f942024, 0x00400020, 0x00000000, // RAYGUI_ICON_REPEAT
+ 0x00000000, 0x20001000, 0x22104c0e, 0x00801120, 0x11200040, 0x4c0e2210, 0x10002000, 0x00000000, // RAYGUI_ICON_SHUFFLE
+ 0x7ffe0000, 0x50024002, 0x44024802, 0x41024202, 0x40424082, 0x40124022, 0x4002400a, 0x00007ffe, // RAYGUI_ICON_EMPTYBOX
+ 0x00800000, 0x03e00080, 0x08080490, 0x3c9e0808, 0x08080808, 0x03e00490, 0x00800080, 0x00000000, // RAYGUI_ICON_TARGET
+ 0x00800000, 0x00800080, 0x00800080, 0x3ffe01c0, 0x008001c0, 0x00800080, 0x00800080, 0x00000000, // RAYGUI_ICON_TARGET_SMALL_FILL
+ 0x00800000, 0x00800080, 0x03e00080, 0x3ffe03e0, 0x03e003e0, 0x00800080, 0x00800080, 0x00000000, // RAYGUI_ICON_TARGET_BIG_FILL
+ 0x01000000, 0x07c00380, 0x01000100, 0x638c2008, 0x638cfbbe, 0x01002008, 0x07c00100, 0x01000380, // RAYGUI_ICON_TARGET_MOVE_FILL
+ 0x01000000, 0x07c00380, 0x01000100, 0x610c2108, 0x610cfffe, 0x01002108, 0x07c00100, 0x01000380, // RAYGUI_ICON_CURSOR_MOVE_FILL
+ 0x781e0000, 0x6006700e, 0x04204812, 0x00000240, 0x02400000, 0x48120420, 0x700e6006, 0x0000781e, // RAYGUI_ICON_CURSOR_SCALE_FILL
+ 0x00000000, 0x38003c00, 0x24003000, 0x01000200, 0x00400080, 0x000c0024, 0x003c001c, 0x00000000, // RAYGUI_ICON_CURSOR_SCALE_RIGHT_FILL
+ 0x00000000, 0x001c003c, 0x0024000c, 0x00800040, 0x02000100, 0x30002400, 0x3c003800, 0x00000000, // RAYGUI_ICON_CURSOR_SCALE_LEFT_FILL
+ 0x00000000, 0x00300020, 0x10301ff8, 0x10001020, 0x10001000, 0x10001000, 0x00001fc0, 0x00000000, // RAYGUI_ICON_UNDO_FILL
+ 0x00000000, 0x0c000400, 0x0c081ff8, 0x00080408, 0x00080008, 0x00080008, 0x000003f8, 0x00000000, // RAYGUI_ICON_REDO_FILL
+ 0x00000000, 0x3ffc0000, 0x20042004, 0x20002000, 0x20402000, 0x3ff02060, 0x00400060, 0x00000000, // RAYGUI_ICON_REREDO_FILL
+ 0x00000000, 0x3ffc0000, 0x20042004, 0x27fc2004, 0x20202000, 0x3ff82030, 0x00200030, 0x00000000, // RAYGUI_ICON_MUTATE_FILL
+ 0x00000000, 0x0ff00000, 0x10081818, 0x11801008, 0x10001180, 0x18301020, 0x00300ff8, 0x00000020, // RAYGUI_ICON_ROTATE_FILL
+ 0x00000000, 0x06000200, 0x26042ffc, 0x20042204, 0x20442004, 0x3ff42064, 0x00400060, 0x00000000, // RAYGUI_ICON_REPEAT_FILL
+ 0x00000000, 0x30001000, 0x32107c0e, 0x00801120, 0x11200040, 0x7c0e3210, 0x10003000, 0x00000000, // RAYGUI_ICON_SHUFFLE_FILL
+ 0x00000000, 0x30043ffc, 0x24042804, 0x21042204, 0x20442084, 0x20142024, 0x3ffc200c, 0x00000000, // RAYGUI_ICON_EMPTYBOX_SMALL
+ 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX
+ 0x00000000, 0x23c43ffc, 0x23c423c4, 0x200423c4, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX_TOP
+ 0x00000000, 0x3e043ffc, 0x3e043e04, 0x20043e04, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX_TOP_RIGHT
+ 0x00000000, 0x20043ffc, 0x20042004, 0x3e043e04, 0x3e043e04, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX_RIGHT
+ 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x3e042004, 0x3e043e04, 0x3ffc3e04, 0x00000000, // RAYGUI_ICON_BOX_BOTTOM_RIGHT
+ 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x23c42004, 0x23c423c4, 0x3ffc23c4, 0x00000000, // RAYGUI_ICON_BOX_BOTTOM
+ 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x207c2004, 0x207c207c, 0x3ffc207c, 0x00000000, // RAYGUI_ICON_BOX_BOTTOM_LEFT
+ 0x00000000, 0x20043ffc, 0x20042004, 0x207c207c, 0x207c207c, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX_LEFT
+ 0x00000000, 0x207c3ffc, 0x207c207c, 0x2004207c, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX_TOP_LEFT
+ 0x00000000, 0x20043ffc, 0x20042004, 0x23c423c4, 0x23c423c4, 0x20042004, 0x3ffc2004, 0x00000000, // RAYGUI_ICON_BOX_CENTER
+ 0x7ffe0000, 0x40024002, 0x47e24182, 0x4ff247e2, 0x47e24ff2, 0x418247e2, 0x40024002, 0x00007ffe, // RAYGUI_ICON_BOX_CIRCLE_MASK
+ 0x7fff0000, 0x40014001, 0x40014001, 0x49555ddd, 0x4945495d, 0x400149c5, 0x40014001, 0x00007fff, // RAYGUI_ICON_POT
+ 0x7ffe0000, 0x53327332, 0x44ce4cce, 0x41324332, 0x404e40ce, 0x48125432, 0x4006540e, 0x00007ffe, // RAYGUI_ICON_ALPHA_MULTIPLY
+ 0x7ffe0000, 0x53327332, 0x44ce4cce, 0x41324332, 0x5c4e40ce, 0x44124432, 0x40065c0e, 0x00007ffe, // RAYGUI_ICON_ALPHA_CLEAR
+ 0x7ffe0000, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x00007ffe, // RAYGUI_ICON_DITHERING
+ 0x07fe0000, 0x1ffa0002, 0x7fea000a, 0x402a402a, 0x5b2a512a, 0x5128552a, 0x40205128, 0x00007fe0, // RAYGUI_ICON_MIPMAPS
+ 0x00000000, 0x1ff80000, 0x12481248, 0x12481ff8, 0x1ff81248, 0x12481248, 0x00001ff8, 0x00000000, // RAYGUI_ICON_BOX_GRID
+ 0x12480000, 0x7ffe1248, 0x12481248, 0x12487ffe, 0x7ffe1248, 0x12481248, 0x12487ffe, 0x00001248, // RAYGUI_ICON_GRID
+ 0x00000000, 0x1c380000, 0x1c3817e8, 0x08100810, 0x08100810, 0x17e81c38, 0x00001c38, 0x00000000, // RAYGUI_ICON_BOX_CORNERS_SMALL
+ 0x700e0000, 0x700e5ffa, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x5ffa700e, 0x0000700e, // RAYGUI_ICON_BOX_CORNERS_BIG
+ 0x3f7e0000, 0x21422142, 0x21422142, 0x00003f7e, 0x21423f7e, 0x21422142, 0x3f7e2142, 0x00000000, // RAYGUI_ICON_FOUR_BOXES
+ 0x00000000, 0x3bb80000, 0x3bb83bb8, 0x3bb80000, 0x3bb83bb8, 0x3bb80000, 0x3bb83bb8, 0x00000000, // RAYGUI_ICON_GRID_FILL
+ 0x7ffe0000, 0x7ffe7ffe, 0x77fe7000, 0x77fe77fe, 0x777e7700, 0x777e777e, 0x777e777e, 0x0000777e, // RAYGUI_ICON_BOX_MULTISIZE
+ 0x781e0000, 0x40024002, 0x00004002, 0x01800000, 0x00000180, 0x40020000, 0x40024002, 0x0000781e, // RAYGUI_ICON_ZOOM_SMALL
+ 0x781e0000, 0x40024002, 0x00004002, 0x03c003c0, 0x03c003c0, 0x40020000, 0x40024002, 0x0000781e, // RAYGUI_ICON_ZOOM_MEDIUM
+ 0x781e0000, 0x40024002, 0x07e04002, 0x07e007e0, 0x07e007e0, 0x400207e0, 0x40024002, 0x0000781e, // RAYGUI_ICON_ZOOM_BIG
+ 0x781e0000, 0x5ffa4002, 0x1ff85ffa, 0x1ff81ff8, 0x1ff81ff8, 0x5ffa1ff8, 0x40025ffa, 0x0000781e, // RAYGUI_ICON_ZOOM_ALL
+ 0x00000000, 0x2004381c, 0x00002004, 0x00000000, 0x00000000, 0x20040000, 0x381c2004, 0x00000000, // RAYGUI_ICON_ZOOM_CENTER
+ 0x00000000, 0x1db80000, 0x10081008, 0x10080000, 0x00001008, 0x10081008, 0x00001db8, 0x00000000, // RAYGUI_ICON_BOX_DOTS_SMALL
+ 0x35560000, 0x00002002, 0x00002002, 0x00002002, 0x00002002, 0x00002002, 0x35562002, 0x00000000, // RAYGUI_ICON_BOX_DOTS_BIG
+ 0x7ffe0000, 0x40024002, 0x48124ff2, 0x49924812, 0x48124992, 0x4ff24812, 0x40024002, 0x00007ffe, // RAYGUI_ICON_BOX_CONCENTRIC
+ 0x00000000, 0x10841ffc, 0x10841084, 0x1ffc1084, 0x10841084, 0x10841084, 0x00001ffc, 0x00000000, // RAYGUI_ICON_BOX_GRID_BIG
+ 0x00000000, 0x00000000, 0x10000000, 0x04000800, 0x01040200, 0x00500088, 0x00000020, 0x00000000, // RAYGUI_ICON_OK_TICK
+ 0x00000000, 0x10080000, 0x04200810, 0x01800240, 0x02400180, 0x08100420, 0x00001008, 0x00000000, // RAYGUI_ICON_CROSS
+ 0x00000000, 0x02000000, 0x00800100, 0x00200040, 0x00200010, 0x00800040, 0x02000100, 0x00000000, // RAYGUI_ICON_ARROW_LEFT
+ 0x00000000, 0x00400000, 0x01000080, 0x04000200, 0x04000800, 0x01000200, 0x00400080, 0x00000000, // RAYGUI_ICON_ARROW_RIGHT
+ 0x00000000, 0x00000000, 0x00000000, 0x08081004, 0x02200410, 0x00800140, 0x00000000, 0x00000000, // RAYGUI_ICON_ARROW_BOTTOM
+ 0x00000000, 0x00000000, 0x01400080, 0x04100220, 0x10040808, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_ARROW_TOP
+ 0x00000000, 0x02000000, 0x03800300, 0x03e003c0, 0x03e003f0, 0x038003c0, 0x02000300, 0x00000000, // RAYGUI_ICON_ARROW_LEFT_FILL
+ 0x00000000, 0x00400000, 0x01c000c0, 0x07c003c0, 0x07c00fc0, 0x01c003c0, 0x004000c0, 0x00000000, // RAYGUI_ICON_ARROW_RIGHT_FILL
+ 0x00000000, 0x00000000, 0x00000000, 0x0ff81ffc, 0x03e007f0, 0x008001c0, 0x00000000, 0x00000000, // RAYGUI_ICON_ARROW_BOTTOM_FILL
+ 0x00000000, 0x00000000, 0x01c00080, 0x07f003e0, 0x1ffc0ff8, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_ARROW_TOP_FILL
+ 0x00000000, 0x18a008c0, 0x32881290, 0x24822686, 0x26862482, 0x12903288, 0x08c018a0, 0x00000000, // RAYGUI_ICON_AUDIO
+ 0x00000000, 0x04800780, 0x004000c0, 0x662000f0, 0x08103c30, 0x130a0e18, 0x0000318e, 0x00000000, // RAYGUI_ICON_FX
+ 0x00000000, 0x00800000, 0x08880888, 0x2aaa0a8a, 0x0a8a2aaa, 0x08880888, 0x00000080, 0x00000000, // RAYGUI_ICON_WAVE
+ 0x00000000, 0x00600000, 0x01080090, 0x02040108, 0x42044204, 0x24022402, 0x00001800, 0x00000000, // RAYGUI_ICON_WAVE_SINUS
+ 0x00000000, 0x07f80000, 0x04080408, 0x04080408, 0x04080408, 0x7c0e0408, 0x00000000, 0x00000000, // RAYGUI_ICON_WAVE_SQUARE
+ 0x00000000, 0x00000000, 0x00a00040, 0x22084110, 0x08021404, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_WAVE_TRIANGULAR
+ 0x00000000, 0x00000000, 0x04200000, 0x01800240, 0x02400180, 0x00000420, 0x00000000, 0x00000000, // RAYGUI_ICON_CROSS_SMALL
+ 0x00000000, 0x18380000, 0x12281428, 0x10a81128, 0x112810a8, 0x14281228, 0x00001838, 0x00000000, // RAYGUI_ICON_PLAYER_PREVIOUS
+ 0x00000000, 0x18000000, 0x11801600, 0x10181060, 0x10601018, 0x16001180, 0x00001800, 0x00000000, // RAYGUI_ICON_PLAYER_PLAY_BACK
+ 0x00000000, 0x00180000, 0x01880068, 0x18080608, 0x06081808, 0x00680188, 0x00000018, 0x00000000, // RAYGUI_ICON_PLAYER_PLAY
+ 0x00000000, 0x1e780000, 0x12481248, 0x12481248, 0x12481248, 0x12481248, 0x00001e78, 0x00000000, // RAYGUI_ICON_PLAYER_PAUSE
+ 0x00000000, 0x1ff80000, 0x10081008, 0x10081008, 0x10081008, 0x10081008, 0x00001ff8, 0x00000000, // RAYGUI_ICON_PLAYER_STOP
+ 0x00000000, 0x1c180000, 0x14481428, 0x15081488, 0x14881508, 0x14281448, 0x00001c18, 0x00000000, // RAYGUI_ICON_PLAYER_NEXT
+ 0x00000000, 0x03c00000, 0x08100420, 0x10081008, 0x10081008, 0x04200810, 0x000003c0, 0x00000000, // RAYGUI_ICON_PLAYER_RECORD
+ 0x00000000, 0x0c3007e0, 0x13c81818, 0x14281668, 0x14281428, 0x1c381c38, 0x08102244, 0x00000000, // RAYGUI_ICON_MAGNET
+ 0x07c00000, 0x08200820, 0x3ff80820, 0x23882008, 0x21082388, 0x20082108, 0x1ff02008, 0x00000000, // RAYGUI_ICON_LOCK_CLOSE
+ 0x07c00000, 0x08000800, 0x3ff80800, 0x23882008, 0x21082388, 0x20082108, 0x1ff02008, 0x00000000, // RAYGUI_ICON_LOCK_OPEN
+ 0x01c00000, 0x0c180770, 0x3086188c, 0x60832082, 0x60034781, 0x30062002, 0x0c18180c, 0x01c00770, // RAYGUI_ICON_CLOCK
+ 0x0a200000, 0x1b201b20, 0x04200e20, 0x04200420, 0x04700420, 0x0e700e70, 0x0e700e70, 0x04200e70, // RAYGUI_ICON_TOOLS
+ 0x01800000, 0x3bdc318c, 0x0ff01ff8, 0x7c3e1e78, 0x1e787c3e, 0x1ff80ff0, 0x318c3bdc, 0x00000180, // RAYGUI_ICON_GEAR
+ 0x01800000, 0x3ffc318c, 0x1c381ff8, 0x781e1818, 0x1818781e, 0x1ff81c38, 0x318c3ffc, 0x00000180, // RAYGUI_ICON_GEAR_BIG
+ 0x00000000, 0x08080ff8, 0x08081ffc, 0x0aa80aa8, 0x0aa80aa8, 0x0aa80aa8, 0x08080aa8, 0x00000ff8, // RAYGUI_ICON_BIN
+ 0x00000000, 0x00000000, 0x20043ffc, 0x08043f84, 0x04040f84, 0x04040784, 0x000007fc, 0x00000000, // RAYGUI_ICON_HAND_POINTER
+ 0x00000000, 0x24400400, 0x00001480, 0x6efe0e00, 0x00000e00, 0x24401480, 0x00000400, 0x00000000, // RAYGUI_ICON_LASER
+ 0x00000000, 0x03c00000, 0x08300460, 0x11181118, 0x11181118, 0x04600830, 0x000003c0, 0x00000000, // RAYGUI_ICON_COIN
+ 0x00000000, 0x10880080, 0x06c00810, 0x366c07e0, 0x07e00240, 0x00001768, 0x04200240, 0x00000000, // RAYGUI_ICON_EXPLOSION
+ 0x00000000, 0x3d280000, 0x2528252c, 0x3d282528, 0x05280528, 0x05e80528, 0x00000000, 0x00000000, // RAYGUI_ICON_1UP
+ 0x01800000, 0x03c003c0, 0x018003c0, 0x0ff007e0, 0x0bd00bd0, 0x0a500bd0, 0x02400240, 0x02400240, // RAYGUI_ICON_PLAYER
+ 0x01800000, 0x03c003c0, 0x118013c0, 0x03c81ff8, 0x07c003c8, 0x04400440, 0x0c080478, 0x00000000, // RAYGUI_ICON_PLAYER_JUMP
+ 0x3ff80000, 0x30183ff8, 0x30183018, 0x3ff83ff8, 0x03000300, 0x03c003c0, 0x03e00300, 0x000003e0, // RAYGUI_ICON_KEY
+ 0x3ff80000, 0x3ff83ff8, 0x33983ff8, 0x3ff83398, 0x3ff83ff8, 0x00000540, 0x0fe00aa0, 0x00000fe0, // RAYGUI_ICON_DEMON
+ 0x00000000, 0x0ff00000, 0x20041008, 0x25442004, 0x10082004, 0x06000bf0, 0x00000300, 0x00000000, // RAYGUI_ICON_TEXT_POPUP
+ 0x00000000, 0x11440000, 0x07f00be8, 0x1c1c0e38, 0x1c1c0c18, 0x07f00e38, 0x11440be8, 0x00000000, // RAYGUI_ICON_GEAR_EX
+ 0x00000000, 0x20080000, 0x0c601010, 0x07c00fe0, 0x07c007c0, 0x0c600fe0, 0x20081010, 0x00000000, // RAYGUI_ICON_CRACK
+ 0x00000000, 0x20080000, 0x0c601010, 0x04400fe0, 0x04405554, 0x0c600fe0, 0x20081010, 0x00000000, // RAYGUI_ICON_CRACK_POINTS
+ 0x00000000, 0x00800080, 0x01c001c0, 0x1ffc3ffe, 0x03e007f0, 0x07f003e0, 0x0c180770, 0x00000808, // RAYGUI_ICON_STAR
+ 0x0ff00000, 0x08180810, 0x08100818, 0x0a100810, 0x08180810, 0x08100818, 0x08100810, 0x00001ff8, // RAYGUI_ICON_DOOR
+ 0x0ff00000, 0x08100810, 0x08100810, 0x10100010, 0x4f902010, 0x10102010, 0x08100010, 0x00000ff0, // RAYGUI_ICON_EXIT
+ 0x00040000, 0x001f000e, 0x0ef40004, 0x12f41284, 0x0ef41214, 0x10040004, 0x7ffc3004, 0x10003000, // RAYGUI_ICON_MODE_2D
+ 0x78040000, 0x501f600e, 0x0ef44004, 0x12f41284, 0x0ef41284, 0x10140004, 0x7ffc300c, 0x10003000, // RAYGUI_ICON_MODE_3D
+ 0x7fe00000, 0x50286030, 0x47fe4804, 0x44224402, 0x44224422, 0x241275e2, 0x0c06140a, 0x000007fe, // RAYGUI_ICON_CUBE
+ 0x7fe00000, 0x5ff87ff0, 0x47fe4ffc, 0x44224402, 0x44224422, 0x241275e2, 0x0c06140a, 0x000007fe, // RAYGUI_ICON_CUBE_FACE_TOP
+ 0x7fe00000, 0x50386030, 0x47fe483c, 0x443e443e, 0x443e443e, 0x241e75fe, 0x0c06140e, 0x000007fe, // RAYGUI_ICON_CUBE_FACE_LEFT
+ 0x7fe00000, 0x50286030, 0x47fe4804, 0x47fe47fe, 0x47fe47fe, 0x27fe77fe, 0x0ffe17fe, 0x000007fe, // RAYGUI_ICON_CUBE_FACE_FRONT
+ 0x7fe00000, 0x50286030, 0x47fe4804, 0x44224402, 0x44224422, 0x3ff27fe2, 0x0ffe1ffa, 0x000007fe, // RAYGUI_ICON_CUBE_FACE_BOTTOM
+ 0x7fe00000, 0x70286030, 0x7ffe7804, 0x7c227c02, 0x7c227c22, 0x3c127de2, 0x0c061c0a, 0x000007fe, // RAYGUI_ICON_CUBE_FACE_RIGHT
+ 0x7fe00000, 0x7fe87ff0, 0x7ffe7fe4, 0x7fe27fe2, 0x7fe27fe2, 0x24127fe2, 0x0c06140a, 0x000007fe, // RAYGUI_ICON_CUBE_FACE_BACK
+ 0x00000000, 0x2a0233fe, 0x22022602, 0x22022202, 0x2a022602, 0x00a033fe, 0x02080110, 0x00000000, // RAYGUI_ICON_CAMERA
+ 0x00000000, 0x200c3ffc, 0x000c000c, 0x3ffc000c, 0x30003000, 0x30003000, 0x3ffc3004, 0x00000000, // RAYGUI_ICON_SPECIAL
+ 0x00000000, 0x0022003e, 0x012201e2, 0x0100013e, 0x01000100, 0x79000100, 0x4f004900, 0x00007800, // RAYGUI_ICON_LINK_NET
+ 0x00000000, 0x44007c00, 0x45004600, 0x00627cbe, 0x00620022, 0x45007cbe, 0x44004600, 0x00007c00, // RAYGUI_ICON_LINK_BOXES
+ 0x00000000, 0x0044007c, 0x0010007c, 0x3f100010, 0x3f1021f0, 0x3f100010, 0x3f0021f0, 0x00000000, // RAYGUI_ICON_LINK_MULTI
+ 0x00000000, 0x0044007c, 0x00440044, 0x0010007c, 0x00100010, 0x44107c10, 0x440047f0, 0x00007c00, // RAYGUI_ICON_LINK
+ 0x00000000, 0x0044007c, 0x00440044, 0x0000007c, 0x00000010, 0x44007c10, 0x44004550, 0x00007c00, // RAYGUI_ICON_LINK_BROKE
+ 0x02a00000, 0x22a43ffc, 0x20042004, 0x20042ff4, 0x20042ff4, 0x20042ff4, 0x20042004, 0x00003ffc, // RAYGUI_ICON_TEXT_NOTES
+ 0x3ffc0000, 0x20042004, 0x245e27c4, 0x27c42444, 0x2004201e, 0x201e2004, 0x20042004, 0x00003ffc, // RAYGUI_ICON_NOTEBOOK
+ 0x00000000, 0x07e00000, 0x04200420, 0x24243ffc, 0x24242424, 0x24242424, 0x3ffc2424, 0x00000000, // RAYGUI_ICON_SUITCASE
+ 0x00000000, 0x0fe00000, 0x08200820, 0x40047ffc, 0x7ffc5554, 0x40045554, 0x7ffc4004, 0x00000000, // RAYGUI_ICON_SUITCASE_ZIP
+ 0x00000000, 0x20043ffc, 0x3ffc2004, 0x13c81008, 0x100813c8, 0x10081008, 0x1ff81008, 0x00000000, // RAYGUI_ICON_MAILBOX
+ 0x00000000, 0x40027ffe, 0x5ffa5ffa, 0x5ffa5ffa, 0x40025ffa, 0x03c07ffe, 0x1ff81ff8, 0x00000000, // RAYGUI_ICON_MONITOR
+ 0x0ff00000, 0x6bfe7ffe, 0x7ffe7ffe, 0x68167ffe, 0x08106816, 0x08100810, 0x0ff00810, 0x00000000, // RAYGUI_ICON_PRINTER
+ 0x3ff80000, 0xfffe2008, 0x870a8002, 0x904a888a, 0x904a904a, 0x870a888a, 0xfffe8002, 0x00000000, // RAYGUI_ICON_PHOTO_CAMERA
+ 0x0fc00000, 0xfcfe0cd8, 0x8002fffe, 0x84428382, 0x84428442, 0x80028382, 0xfffe8002, 0x00000000, // RAYGUI_ICON_PHOTO_CAMERA_FLASH
+ 0x00000000, 0x02400180, 0x08100420, 0x20041008, 0x23c42004, 0x22442244, 0x3ffc2244, 0x00000000, // RAYGUI_ICON_HOUSE
+ 0x00000000, 0x1c700000, 0x3ff83ef8, 0x3ff83ff8, 0x0fe01ff0, 0x038007c0, 0x00000100, 0x00000000, // RAYGUI_ICON_HEART
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0xe000c000, // RAYGUI_ICON_CORNER
+ 0x00000000, 0x14001c00, 0x15c01400, 0x15401540, 0x155c1540, 0x15541554, 0x1ddc1554, 0x00000000, // RAYGUI_ICON_VERTICAL_BARS
+ 0x00000000, 0x03000300, 0x1b001b00, 0x1b601b60, 0x1b6c1b60, 0x1b6c1b6c, 0x1b6c1b6c, 0x00000000, // RAYGUI_ICON_VERTICAL_BARS_FILL
+ 0x00000000, 0x00000000, 0x403e7ffe, 0x7ffe403e, 0x7ffe0000, 0x43fe43fe, 0x00007ffe, 0x00000000, // RAYGUI_ICON_LIFE_BARS
+ 0x7ffc0000, 0x43844004, 0x43844284, 0x43844004, 0x42844284, 0x42844284, 0x40044384, 0x00007ffc, // RAYGUI_ICON_INFO
+ 0x40008000, 0x10002000, 0x04000800, 0x01000200, 0x00400080, 0x00100020, 0x00040008, 0x00010002, // RAYGUI_ICON_CROSSLINE
+ 0x00000000, 0x1ff01ff0, 0x18301830, 0x1f001830, 0x03001f00, 0x00000300, 0x03000300, 0x00000000, // RAYGUI_ICON_HELP
+ 0x3ff00000, 0x2abc3550, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x00003ffc, // RAYGUI_ICON_FILETYPE_ALPHA
+ 0x3ff00000, 0x201c2010, 0x22442184, 0x28142424, 0x29942814, 0x2ff42994, 0x20042004, 0x00003ffc, // RAYGUI_ICON_FILETYPE_HOME
+ 0x07fe0000, 0x04020402, 0x7fe20402, 0x44224422, 0x44224422, 0x402047fe, 0x40204020, 0x00007fe0, // RAYGUI_ICON_LAYERS_VISIBLE
+ 0x07fe0000, 0x04020402, 0x7c020402, 0x44024402, 0x44024402, 0x402047fe, 0x40204020, 0x00007fe0, // RAYGUI_ICON_LAYERS
+ 0x00000000, 0x40027ffe, 0x7ffe4002, 0x40024002, 0x40024002, 0x40024002, 0x7ffe4002, 0x00000000, // RAYGUI_ICON_WINDOW
+ 0x09100000, 0x09f00910, 0x09100910, 0x00000910, 0x24a2779e, 0x27a224a2, 0x709e20a2, 0x00000000, // RAYGUI_ICON_199
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_200
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_201
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_202
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_203
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_204
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_205
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_206
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_207
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_208
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_209
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_210
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_211
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_212
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_213
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_214
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_215
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_216
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_217
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_218
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_219
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_220
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_221
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_222
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_223
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_224
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_225
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_226
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_227
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_228
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_229
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_230
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_231
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_232
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_233
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_234
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_235
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_236
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_237
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_238
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_239
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_240
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_241
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_242
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_243
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_244
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_245
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_246
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_247
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_248
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_249
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_250
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_251
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_252
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_253
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_254
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RAYGUI_ICON_255
+};
diff --git a/libs/raylib/inject.c b/libs/raylib/inject.c
new file mode 100644
index 0000000..45a38fa
--- /dev/null
+++ b/libs/raylib/inject.c
@@ -0,0 +1,5 @@
+#define GRAPHICS_API_OPENGL_11
+// #define RLGL_IMPLEMENTATION
+#include "raylib.h"
+#include "rlgl.h"
+#include "raymath.h"
diff --git a/libs/raylib/inject.h b/libs/raylib/inject.h
new file mode 100644
index 0000000..7249d2b
--- /dev/null
+++ b/libs/raylib/inject.h
@@ -0,0 +1,12 @@
+//--- CORE ----------------------------------------------------------------------------------------
+#define GRAPHICS_API_OPENGL_11
+// #define RLGL_IMPLEMENTATION
+#include "raylib.h"
+#include "rlgl.h"
+#include "raymath.h"
+
+// Enable vertex state pointer
+void rlEnableStatePointer(int vertexAttribType, void *buffer);
+
+// Disable vertex state pointer
+void rlDisableStatePointer(int vertexAttribType);
\ No newline at end of file
diff --git a/libs/raylib/inject.zig b/libs/raylib/inject.zig
new file mode 100644
index 0000000..444436f
--- /dev/null
+++ b/libs/raylib/inject.zig
@@ -0,0 +1,999 @@
+const std = @import("std");
+const raylib = @cImport({
+ @cInclude("raylib.h");
+
+ @cDefine("GRAPHICS_API_OPENGL_11", {});
+ // @cDefine("RLGL_IMPLEMENTATION", {});
+ @cInclude("rlgl.h");
+
+ @cDefine("RAYMATH_IMPLEMENTATION", {});
+ @cInclude("raymath.h");
+
+ @cInclude("marshal.h");
+});
+
+//--- structs -------------------------------------------------------------------------------------
+
+/// System/Window config flags
+pub const ConfigFlags = packed struct(u32) {
+ FLAG_UNKNOWN_1: bool = false, // 0x0001
+ /// Set to run program in fullscreen
+ FLAG_FULLSCREEN_MODE: bool = false, // 0x0002,
+ /// Set to allow resizable window
+ FLAG_WINDOW_RESIZABLE: bool = false, // 0x0004,
+ /// Set to disable window decoration (frame and buttons)
+ FLAG_WINDOW_UNDECORATED: bool = false, // 0x0008,
+ /// Set to allow transparent framebuffer
+ FLAG_WINDOW_TRANSPARENT: bool = false, // 0x0010,
+ /// Set to try enabling MSAA 4X
+ FLAG_MSAA_4X_HINT: bool = false, // 0x0020,
+ /// Set to try enabling V-Sync on GPU
+ FLAG_VSYNC_HINT: bool = false, // 0x0040,
+ /// Set to hide window
+ FLAG_WINDOW_HIDDEN: bool = false, // 0x0080,
+ /// Set to allow windows running while minimized
+ FLAG_WINDOW_ALWAYS_RUN: bool = false, // 0x0100,
+ /// Set to minimize window (iconify)
+ FLAG_WINDOW_MINIMIZED: bool = false, // 0x0200,
+ /// Set to maximize window (expanded to monitor)
+ FLAG_WINDOW_MAXIMIZED: bool = false, // 0x0400,
+ /// Set to window non focused
+ FLAG_WINDOW_UNFOCUSED: bool = false, // 0x0800,
+ /// Set to window always on top
+ FLAG_WINDOW_TOPMOST: bool = false, // 0x1000,
+ /// Set to support HighDPI
+ FLAG_WINDOW_HIGHDPI: bool = false, // 0x2000,
+ /// Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED
+ FLAG_WINDOW_MOUSE_PASSTHROUGH: bool = false, // 0x4000,
+ FLAG_UNKNOWN_2: bool = false, // 0x8000
+ /// Set to try enabling interlaced video format (for V3D)
+ FLAG_INTERLACED_HINT: bool = false, // 0x10000
+ FLAG_PADDING: u15 = 0, // 0xFFFE0000
+};
+
+/// Transform, vectex transformation data
+pub const Transform = extern struct {
+ /// Translation
+ translation: Vector3,
+ /// Rotation
+ rotation: Vector4,
+ /// Scale
+ scale: Vector3,
+};
+
+/// Matrix, 4x4 components, column major, OpenGL style, right handed
+pub const Matrix = extern struct {
+ /// Matrix first row (4 components) [m0, m4, m8, m12]
+ m0: f32,
+ m4: f32,
+ m8: f32,
+ m12: f32,
+ /// Matrix second row (4 components) [m1, m5, m9, m13]
+ m1: f32,
+ m5: f32,
+ m9: f32,
+ m13: f32,
+ /// Matrix third row (4 components) [m2, m6, m10, m14]
+ m2: f32,
+ m6: f32,
+ m10: f32,
+ m14: f32,
+ /// Matrix fourth row (4 components) [m3, m7, m11, m15]
+ m3: f32,
+ m7: f32,
+ m11: f32,
+ m15: f32,
+
+ pub fn zero() @This() {
+ return @This(){
+ .m0 = 0,
+ .m1 = 0,
+ .m2 = 0,
+ .m3 = 0,
+ .m4 = 0,
+ .m5 = 0,
+ .m6 = 0,
+ .m7 = 0,
+ .m8 = 0,
+ .m9 = 0,
+ .m10 = 0,
+ .m11 = 0,
+ .m12 = 0,
+ .m13 = 0,
+ .m14 = 0,
+ .m15 = 0,
+ };
+ }
+
+ pub fn identity() @This() {
+ return MatrixIdentity();
+ }
+};
+
+pub const Rectangle = extern struct {
+ x: f32 = 0,
+ y: f32 = 0,
+ width: f32 = 0,
+ height: f32 = 0,
+
+ pub fn toI32(self: @This()) RectangleI {
+ return .{
+ .x = @as(i32, @intFromFloat(self.x)),
+ .y = @as(i32, @intFromFloat(self.y)),
+ .width = @as(i32, @intFromFloat(self.width)),
+ .height = @as(i32, @intFromFloat(self.height)),
+ };
+ }
+
+ pub fn pos(self: @This()) Vector2 {
+ return .{
+ .x = self.x,
+ .y = self.y,
+ };
+ }
+
+ pub fn size(self: @This()) Vector2 {
+ return .{
+ .x = self.width,
+ .y = self.height,
+ };
+ }
+
+ pub fn topLeft(self: @This()) Vector2 {
+ return .{
+ .x = self.x,
+ .y = self.y,
+ };
+ }
+
+ pub fn topCenter(self: @This()) Vector2 {
+ return .{
+ .x = self.x + self.width / 2,
+ .y = self.y,
+ };
+ }
+
+ pub fn topRight(self: @This()) Vector2 {
+ return .{
+ .x = self.x + self.width,
+ .y = self.y,
+ };
+ }
+
+ pub fn centerLeft(self: @This()) Vector2 {
+ return .{
+ .x = self.x,
+ .y = self.y + self.height / 2,
+ };
+ }
+
+ pub fn center(self: @This()) Vector2 {
+ return .{
+ .x = self.x + self.width / 2,
+ .y = self.y + self.height / 2,
+ };
+ }
+
+ pub fn centerRight(self: @This()) Vector2 {
+ return .{
+ .x = self.x + self.width,
+ .y = self.y + self.height / 2,
+ };
+ }
+
+ pub fn bottomLeft(self: @This()) Vector2 {
+ return .{
+ .x = self.x + 0,
+ .y = self.y + self.height,
+ };
+ }
+
+ pub fn bottomCenter(self: @This()) Vector2 {
+ return .{
+ .x = self.x + self.width / 2,
+ .y = self.y + self.height,
+ };
+ }
+
+ pub fn bottomRight(self: @This()) Vector2 {
+ return .{
+ .x = self.x + self.width,
+ .y = self.y + self.height,
+ };
+ }
+
+ pub fn area(self: @This()) f32 {
+ return self.width * self.height;
+ }
+
+ pub fn include(self: @This(), other: @This()) @This() {
+ return self.includePoint(other.topLeft()).includePoint(other.bottomRight());
+ }
+
+ pub fn includePoint(self: @This(), point: Vector2) @This() {
+ const minX = @min(self.x, point.x);
+ const minY = @min(self.y, point.y);
+ const maxX = @max(self.x + self.width, point.x);
+ const maxY = @max(self.y + self.height, point.y);
+
+ return .{
+ .x = minX,
+ .y = minY,
+ .width = maxX - minX,
+ .height = maxY - minY,
+ };
+ }
+};
+
+pub const RectangleI = extern struct {
+ x: i32 = 0,
+ y: i32 = 0,
+ width: i32 = 0,
+ height: i32 = 0,
+
+ pub fn toF32(self: @This()) Rectangle {
+ return .{
+ .x = @as(f32, @floatFromInt(self.x)),
+ .y = @as(f32, @floatFromInt(self.y)),
+ .width = @as(f32, @floatFromInt(self.width)),
+ .height = @as(f32, @floatFromInt(self.height)),
+ };
+ }
+
+ pub fn pos(self: @This()) Vector2i {
+ return .{
+ .x = self.x,
+ .y = self.y,
+ };
+ }
+};
+
+pub const Vector2 = extern struct {
+ x: f32 = 0,
+ y: f32 = 0,
+
+ pub fn zero() @This() {
+ return .{ .x = 0, .y = 0 };
+ }
+
+ pub fn setZero(self: *@This()) void {
+ self.x = 0;
+ self.y = 0;
+ }
+
+ pub fn one() @This() {
+ return @This(){ .x = 1, .y = 1 };
+ }
+
+ pub fn neg(self: @This()) @This() {
+ return @This(){ .x = -self.x, .y = -self.y };
+ }
+
+ pub fn length2(self: @This()) f32 {
+ var sum = self.x * self.x;
+ sum += self.y * self.y;
+ return sum;
+ }
+
+ pub fn length(self: @This()) f32 {
+ return std.math.sqrt(self.length2());
+ }
+
+ pub fn distanceTo(self: @This(), other: @This()) f32 {
+ return self.sub(other).length();
+ }
+
+ pub fn distanceToSquared(self: @This(), other: @This()) f32 {
+ return self.sub(other).length2();
+ }
+
+ pub fn normalize(self: @This()) @This() {
+ const l = self.length();
+ if (l == 0.0) return @This().zero();
+ return self.scale(1.0 / l);
+ }
+
+ pub fn scale(self: @This(), factor: f32) @This() {
+ return @This(){
+ .x = self.x * factor,
+ .y = self.y * factor,
+ };
+ }
+
+ pub fn add(self: @This(), other: @This()) @This() {
+ return @This(){
+ .x = self.x + other.x,
+ .y = self.y + other.y,
+ };
+ }
+
+ /// same as add but assign result directly to this
+ pub fn addSet(self: *@This(), other: @This()) void {
+ self.x += other.x;
+ self.y += other.y;
+ }
+
+ pub fn sub(self: @This(), other: @This()) @This() {
+ return @This(){
+ .x = self.x - other.x,
+ .y = self.y - other.y,
+ };
+ }
+
+ pub fn lerp(self: @This(), other: @This(), t: f32) @This() {
+ return self.scale(1 - t).add(other.scale(t));
+ }
+
+ pub fn randomInUnitCircle(rng: std.rand.Random) @This() {
+ return randomOnUnitCircle(rng).scale(randomF32(rng, 0, 1));
+ }
+
+ pub fn randomOnUnitCircle(rng: std.rand.Random) @This() {
+ return (Vector2{ .x = 1 }).rotate(randomF32(rng, -PI, PI));
+ }
+
+ pub fn clampX(self: @This(), minX: f32, maxX: f32) @This() {
+ return .{
+ .x = std.math.clamp(self.x, minX, maxX),
+ .y = self.y,
+ };
+ }
+ pub fn clampY(self: @This(), minY: f32, maxY: f32) @This() {
+ return .{
+ .x = self.x,
+ .y = std.math.clamp(self.y, minY, maxY),
+ };
+ }
+
+ pub fn int(self: @This()) Vector2i {
+ return .{ .x = @as(i32, @intFromFloat(self.x)), .y = @as(i32, @intFromFloat(self.y)) };
+ }
+
+ /// Cross product
+ pub fn cross(self: @This(), other: @This()) f32 {
+ return self.x * other.y - self.y * other.x;
+ }
+
+ /// Dot product.
+ pub fn dot(self: @This(), other: @This()) f32 {
+ return self.x * other.x + self.y * other.y;
+ }
+
+ pub fn rotate(self: @This(), a: f32) @This() {
+ return Vector2Rotate(self, a);
+ }
+
+ pub fn fromAngle(a: f32) @This() {
+ return Vector2Rotate(.{ .x = 1 }, a);
+ }
+
+ pub fn angle(this: @This()) f32 {
+ const zeroRotation: Vector2 = .{ .x = 1, .y = 0 };
+ if (this.x == zeroRotation.x and this.y == zeroRotation.y) return 0;
+
+ const c = zeroRotation.cross(this);
+ const d = zeroRotation.dot(this);
+ return std.math.atan2(f32, c, d);
+ }
+
+ pub fn xy0(self: @This()) Vector3 {
+ return .{ .x = self.x, .y = self.y };
+ }
+
+ pub fn x0z(self: @This()) Vector3 {
+ return .{ .x = self.x, .z = self.y };
+ }
+
+ pub fn set(self: @This(), setter: struct { x: ?f32 = null, y: ?f32 = null }) Vector2 {
+ var copy = self;
+ if (setter.x) |x| copy.x = x;
+ if (setter.y) |y| copy.y = y;
+ return copy;
+ }
+};
+
+pub const Vector2i = extern struct {
+ x: i32 = 0,
+ y: i32 = 0,
+
+ pub fn float(self: @This()) Vector2 {
+ return .{ .x = @as(f32, @floatFromInt(self.x)), .y = @as(f32, @floatFromInt(self.y)) };
+ }
+};
+
+pub const Vector3 = extern struct {
+ x: f32 = 0,
+ y: f32 = 0,
+ z: f32 = 0,
+
+ pub fn new(x: f32, y: f32, z: f32) @This() {
+ return @This(){ .x = x, .y = y, .z = z };
+ }
+
+ pub fn zero() @This() {
+ return @This(){ .x = 0, .y = 0, .z = 0 };
+ }
+
+ pub fn one() @This() {
+ return @This(){ .x = 1, .y = 1, .z = 1 };
+ }
+
+ pub fn length2(self: @This()) f32 {
+ var sum = self.x * self.x;
+ sum += self.y * self.y;
+ sum += self.z * self.z;
+ return sum;
+ }
+
+ pub fn length(self: @This()) f32 {
+ return std.math.sqrt(self.length2());
+ }
+
+ pub fn normalize(self: @This()) @This() {
+ const l = self.length();
+ if (l == 0.0) return @This().zero();
+ return self.scale(1.0 / l);
+ }
+
+ pub fn scale(self: @This(), factor: f32) @This() {
+ return @This(){
+ .x = self.x * factor,
+ .y = self.y * factor,
+ .z = self.z * factor,
+ };
+ }
+
+ pub fn add(self: @This(), other: @This()) @This() {
+ return @This(){
+ .x = self.x + other.x,
+ .y = self.y + other.y,
+ .z = self.z + other.z,
+ };
+ }
+ pub fn sub(self: @This(), other: @This()) @This() {
+ return @This(){
+ .x = self.x - other.x,
+ .y = self.y - other.y,
+ .z = self.z - other.z,
+ };
+ }
+
+ pub fn neg(this: @This()) @This() {
+ return .{
+ .x = -this.x,
+ .y = -this.y,
+ .z = -this.z,
+ };
+ }
+
+ pub fn lerp(self: @This(), other: @This(), t: f32) @This() {
+ return self.scale(1 - t).add(other.scale(t));
+ }
+
+ pub fn forward() @This() {
+ return @This().new(0, 0, 1);
+ }
+
+ pub fn rotate(self: @This(), quaternion: Vector4) @This() {
+ return Vector3RotateByQuaternion(self, quaternion);
+ }
+
+ pub fn angleBetween(self: @This(), other: Vector3) f32 {
+ return Vector3Angle(self, other);
+ // return std.math.acos(self.dot(other) / (self.length() * other.length()));
+ }
+
+ /// Dot product.
+ pub fn dot(self: @This(), other: @This()) f32 {
+ return self.x * other.x + self.y * other.y + self.z * other.z;
+ }
+
+ pub fn xy(self: @This()) Vector2 {
+ return .{ .x = self.x, .y = self.y };
+ }
+
+ pub fn set(self: @This(), setter: struct { x: ?f32 = null, y: ?f32 = null, z: ?f32 = null }) Vector3 {
+ var copy = self;
+ if (setter.x) |x| copy.x = x;
+ if (setter.y) |y| copy.y = y;
+ if (setter.z) |z| copy.z = z;
+ return copy;
+ }
+};
+
+pub const Vector4 = extern struct {
+ x: f32 = 0,
+ y: f32 = 0,
+ z: f32 = 0,
+ w: f32 = 0,
+
+ pub fn zero() @This() {
+ return @This(){ .x = 0, .y = 0, .z = 0 };
+ }
+
+ pub fn one() @This() {
+ return @This(){ .x = 1, .y = 1, .z = 1 };
+ }
+
+ pub fn length2(self: @This()) f32 {
+ var sum = self.x * self.x;
+ sum += self.y * self.y;
+ sum += self.z * self.z;
+ sum += self.w * self.w;
+ return sum;
+ }
+
+ pub fn length(self: @This()) f32 {
+ return std.math.sqrt(self.length2());
+ }
+
+ pub fn normalize(self: @This()) @This() {
+ const l = self.length();
+ if (l == 0.0) return @This().zero();
+ return self.scale(1.0 / l);
+ }
+
+ pub fn scale(self: @This(), factor: f32) @This() {
+ return @This(){
+ .x = self.x * factor,
+ .y = self.y * factor,
+ .z = self.z * factor,
+ .w = self.w * factor,
+ };
+ }
+
+ pub fn add(self: @This(), other: @This()) @This() {
+ return @This(){
+ .x = self.x + other.x,
+ .y = self.y + other.y,
+ .z = self.z + other.z,
+ .w = self.w + other.w,
+ };
+ }
+ pub fn sub(self: @This(), other: @This()) @This() {
+ return @This(){
+ .x = self.x - other.x,
+ .y = self.y - other.y,
+ .z = self.z - other.z,
+ .w = self.w - other.w,
+ };
+ }
+
+ pub fn lerp(self: @This(), other: @This(), t: f32) @This() {
+ return self.scale(1 - t).add(other.scale(t));
+ }
+
+ pub fn toColor(self: @This()) Color {
+ return .{
+ .r = @as(u8, @intFromFloat(std.math.clamp(self.x * 255, 0, 255))),
+ .g = @as(u8, @intFromFloat(std.math.clamp(self.y * 255, 0, 255))),
+ .b = @as(u8, @intFromFloat(std.math.clamp(self.z * 255, 0, 255))),
+ .a = @as(u8, @intFromFloat(std.math.clamp(self.w * 255, 0, 255))),
+ };
+ }
+
+ pub fn fromAngleAxis(axis: Vector3, angle: f32) @This() {
+ return QuaternionFromAxisAngle(axis, angle);
+ }
+};
+
+/// Color type, RGBA (32bit)
+pub const Color = extern struct {
+ r: u8 = 0,
+ g: u8 = 0,
+ b: u8 = 0,
+ a: u8 = 255,
+
+ pub const ColorChangeConfig = struct {
+ r: ?u8 = null,
+ g: ?u8 = null,
+ b: ?u8 = null,
+ a: ?u8 = null,
+ };
+
+ pub fn set(self: @This(), c: ColorChangeConfig) Color {
+ return .{
+ .r = if (c.r) |_r| _r else self.r,
+ .g = if (c.g) |_g| _g else self.g,
+ .b = if (c.b) |_b| _b else self.b,
+ .a = if (c.a) |_a| _a else self.a,
+ };
+ }
+
+ pub fn lerp(self: @This(), other: @This(), t: f32) @This() {
+ return self.toVector4().lerp(other.toVector4(), t).toColor();
+ }
+
+ pub fn lerpA(self: @This(), targetAlpha: u8, t: f32) @This() {
+ var copy = self;
+ const a = @as(f32, @floatFromInt(self.a));
+ copy.a = @as(u8, @intFromFloat(a * (1 - t) + @as(f32, @floatFromInt(targetAlpha)) * t));
+ return copy;
+ }
+
+ pub fn toVector4(self: @This()) Vector4 {
+ return .{
+ .x = @as(f32, @floatFromInt(self.r)) / 255.0,
+ .y = @as(f32, @floatFromInt(self.g)) / 255.0,
+ .z = @as(f32, @floatFromInt(self.b)) / 255.0,
+ .w = @as(f32, @floatFromInt(self.a)) / 255.0,
+ };
+ }
+
+ /// negate color (keep alpha)
+ pub fn neg(self: @This()) @This() {
+ return .{
+ .r = 255 - self.r,
+ .g = 255 - self.g,
+ .b = 255 - self.b,
+ .a = self.a,
+ };
+ }
+};
+
+/// Camera2D, defines position/orientation in 2d space
+pub const Camera2D = extern struct {
+ /// Camera offset (displacement from target)
+ offset: Vector2 = Vector2.zero(),
+ /// Camera target (rotation and zoom origin)
+ target: Vector2,
+ /// Camera rotation in degrees
+ rotation: f32 = 0,
+ /// Camera zoom (scaling), should be 1.0f by default
+ zoom: f32 = 1,
+};
+
+pub const MATERIAL_MAP_DIFFUSE = @as(usize, @intCast(@intFromEnum(MaterialMapIndex.MATERIAL_MAP_ALBEDO)));
+pub const MATERIAL_MAP_SPECULAR = @as(usize, @intCast(@intFromEnum(MaterialMapIndex.MATERIAL_MAP_METALNESS)));
+
+//--- callbacks -----------------------------------------------------------------------------------
+
+/// Logging: Redirect trace log messages
+pub const TraceLogCallback = *const fn (logLevel: c_int, text: [*c]const u8, args: ?*anyopaque) void;
+
+/// FileIO: Load binary data
+pub const LoadFileDataCallback = *const fn (fileName: [*c]const u8, bytesRead: [*c]c_uint) [*c]u8;
+
+/// FileIO: Save binary data
+pub const SaveFileDataCallback = *const fn (fileName: [*c]const u8, data: ?*anyopaque, bytesToWrite: c_uint) bool;
+
+/// FileIO: Load text data
+pub const LoadFileTextCallback = *const fn (fileName: [*c]const u8) [*c]u8;
+
+/// FileIO: Save text data
+pub const SaveFileTextCallback = *const fn (fileName: [*c]const u8, text: [*c]const u8) bool;
+
+/// Audio Loading and Playing Functions (Module: audio)
+pub const AudioCallback = *const fn (bufferData: ?*anyopaque, frames: u32) void;
+
+//--- utils ---------------------------------------------------------------------------------------
+
+// Camera global state context data [56 bytes]
+pub const CameraData = extern struct {
+ /// Current camera mode
+ mode: u32,
+ /// Camera distance from position to target
+ targetDistance: f32,
+ /// Player eyes position from ground (in meters)
+ playerEyesPosition: f32,
+ /// Camera angle in plane XZ
+ angle: Vector2,
+ /// Previous mouse position
+ previousMousePosition: Vector2,
+
+ // Camera movement control keys
+
+ /// Move controls (CAMERA_FIRST_PERSON)
+ moveControl: i32[6],
+ /// Smooth zoom control key
+ smoothZoomControl: i32,
+ /// Alternative control key
+ altControl: i32,
+ /// Pan view control key
+ panControl: i32,
+};
+
+pub fn randomF32(rng: std.rand.Random, min: f32, max: f32) f32 {
+ return rng.float(f32) * (max - min) + min;
+}
+
+//--- functions -----------------------------------------------------------------------------------
+
+/// Setup init configuration flags (view FLAGS)
+pub fn SetConfigFlags(
+ flags: ConfigFlags,
+) void {
+ raylib.SetConfigFlags(@as(c_uint, @bitCast(flags)));
+}
+
+/// Load file data as byte array (read)
+pub fn LoadFileData(fileName: [*:0]const u8) ![]const u8 {
+ var bytesRead: u32 = undefined;
+ const data = raylib.LoadFileData(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ @as([*c]c_int, @ptrCast(&bytesRead)),
+ );
+
+ if (data == null) return error.FileNotFound;
+
+ return data[0..bytesRead];
+}
+
+/// Unload file data allocated by LoadFileData()
+pub fn UnloadFileData(
+ data: []const u8,
+) void {
+ raylib.UnloadFileData(
+ @as([*c]u8, @ptrFromInt(@intFromPtr(data.ptr))),
+ );
+}
+
+/// Set custom trace log
+pub fn SetTraceLogCallback(
+ _: TraceLogCallback,
+) void {
+ @panic("use log.zig for that");
+}
+
+/// Generate image font atlas using chars info
+pub fn GenImageFontAtlas(
+ chars: [*]const GlyphInfo,
+ recs: [*]const [*]const Rectangle,
+ glyphCount: i32,
+ fontSize: i32,
+ padding: i32,
+ packMethod: i32,
+) Image {
+ var out: Image = undefined;
+ mGenImageFontAtlas(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]raylib.GlyphInfo, @ptrCast(chars)),
+ @as([*c][*c]raylib.Rectangle, @ptrCast(recs)),
+ glyphCount,
+ fontSize,
+ padding,
+ packMethod,
+ );
+ return out;
+}
+export fn mGenImageFontAtlas(
+ out: [*c]raylib.Image,
+ chars: [*c]raylib.GlyphInfo,
+ recs: [*c][*c]raylib.Rectangle,
+ glyphCount: i32,
+ fontSize: i32,
+ padding: i32,
+ packMethod: i32,
+) void {
+ out.* = raylib.GenImageFontAtlas(
+ chars,
+ recs,
+ glyphCount,
+ fontSize,
+ padding,
+ packMethod,
+ );
+}
+
+/// Get native window handle
+pub fn GetWindowHandle() ?*anyopaque {
+ return raylib.GetWindowHandle();
+}
+
+/// Internal memory allocator
+pub fn MemAlloc(
+ size: i32,
+) ?*anyopaque {
+ return raylib.MemAlloc(size);
+}
+
+/// Internal memory reallocator
+pub fn MemRealloc(
+ ptr: ?*anyopaque,
+ size: i32,
+) ?*anyopaque {
+ return raylib.MemRealloc(ptr, size);
+}
+
+/// Internal memory free
+pub fn MemFree(
+ ptr: ?*anyopaque,
+) void {
+ raylib.MemFree(ptr);
+}
+
+/// Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...)
+pub fn TraceLog(
+ logLevel: i32,
+ text: [*:0]const u8,
+) void {
+ raylib.TraceLog(logLevel, text);
+}
+
+/// Text formatting with variables (sprintf() style)
+/// caller owns memory
+pub fn TextFormat(allocator: std.mem.Allocator, comptime fmt: []const u8, args: anytype) std.fmt.AllocPrintError![*:0]const u8 {
+ return (try std.fmt.allocPrintZ(allocator, fmt, args)).ptr;
+}
+
+/// Split text into multiple strings
+pub fn TextSplit(allocator: std.mem.Allocator, text: []const u8, delimiter: []const u8, count: i32) ![]const []const u8 {
+ var list = std.ArrayList([]const u8).init(allocator);
+ var it = std.mem.split(u8, text, delimiter);
+ var i = 0;
+ var n = 0;
+ while (it.next()) |slice| : (i += 1) {
+ if (i >= count) {
+ break;
+ }
+
+ try list.append(slice);
+ n += slice.len;
+ }
+ if (n < text.len) {
+ try list.append(text[n..]);
+ }
+ return list.toOwnedSlice();
+}
+
+/// Join text strings with delimiter
+pub fn TextJoin(allocator: std.mem.Allocator, textList: []const []const u8, delimiter: []const u8) ![:0]const u8 {
+ return (try std.mem.joinZ(allocator, delimiter, textList)).ptr;
+}
+
+/// Append text at specific position and move cursor!
+pub fn TextAppend(allocator: std.mem.Allocator, text: []const u8, append: []const u8, position: i32) std.fmt.AllocPrintError![:0]u8 {
+ return (try std.fmt.allocPrintZ(allocator, "{s}{s}{s}", .{
+ text[0..position],
+ append,
+ text[position..],
+ })).ptr;
+}
+
+//--- RLGL ----------------------------------------------------------------------------------------
+
+pub const DEG2RAD: f32 = PI / 180;
+pub const RAD2DEG: f32 = 180 / PI;
+
+///
+pub const rlglData = extern struct {
+ /// Current render batch
+ currentBatch: ?*rlRenderBatch,
+ /// Default internal render batch
+ defaultBatch: rlRenderBatch,
+
+ pub const State = extern struct {
+ /// Current active render batch vertex counter (generic, used for all batches)
+ vertexCounter: i32,
+ /// Current active texture coordinate X (added on glVertex*())
+ texcoordx: f32,
+ /// Current active texture coordinate Y (added on glVertex*())
+ texcoordy: f32,
+ /// Current active normal X (added on glVertex*())
+ normalx: f32,
+ /// Current active normal Y (added on glVertex*())
+ normaly: f32,
+ /// Current active normal Z (added on glVertex*())
+ normalz: f32,
+ /// Current active color R (added on glVertex*())
+ colorr: u8,
+ /// Current active color G (added on glVertex*())
+ colorg: u8,
+ /// Current active color B (added on glVertex*())
+ colorb: u8,
+ /// Current active color A (added on glVertex*())
+ colora: u8,
+ /// Current matrix mode
+ currentMatrixMode: i32,
+ /// Current matrix pointer
+ currentMatrix: ?*Matrix,
+ /// Default modelview matrix
+ modelview: Matrix,
+ /// Default projection matrix
+ projection: Matrix,
+ /// Transform matrix to be used with rlTranslate, rlRotate, rlScale
+ transform: Matrix,
+ /// Require transform matrix application to current draw-call vertex (if required)
+ transformRequired: bool,
+ /// Matrix stack for push/pop
+ stack: [RL_MAX_MATRIX_STACK_SIZE]Matrix,
+ /// Matrix stack counter
+ stackCounter: i32,
+ /// Default texture used on shapes/poly drawing (required by shader)
+ defaultTextureId: u32,
+ /// Active texture ids to be enabled on batch drawing (0 active by default)
+ activeTextureId: [RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS]u32,
+ /// Default vertex shader id (used by default shader program)
+ defaultVShaderId: u32,
+ /// Default fragment shader id (used by default shader program)
+ defaultFShaderId: u32,
+ /// Default shader program id, supports vertex color and diffuse texture
+ defaultShaderId: u32,
+ /// Default shader locations pointer to be used on rendering
+ defaultShaderLocs: [*]i32,
+ /// Current shader id to be used on rendering (by default, defaultShaderId)
+ currentShaderId: u32,
+ /// Current shader locations pointer to be used on rendering (by default, defaultShaderLocs)
+ currentShaderLocs: [*]i32,
+ /// Stereo rendering flag
+ stereoRender: bool,
+ /// VR stereo rendering eyes projection matrices
+ projectionStereo: [2]Matrix,
+ /// VR stereo rendering eyes view offset matrices
+ viewOffsetStereo: [2]Matrix,
+ /// Blending mode active
+ currentBlendMode: i32,
+ /// Blending source factor
+ glBlendSrcFactor: i32,
+ /// Blending destination factor
+ glBlendDstFactor: i32,
+ /// Blending equation
+ glBlendEquation: i32,
+ /// Current framebuffer width
+ framebufferWidth: i32,
+ /// Current framebuffer height
+ framebufferHeight: i32,
+ };
+
+ pub const ExtSupported = extern struct {
+ /// VAO support (OpenGL ES2 could not support VAO extension) (GL_ARB_vertex_array_object)
+ vao: bool,
+ /// Instancing supported (GL_ANGLE_instanced_arrays, GL_EXT_draw_instanced + GL_EXT_instanced_arrays)
+ instancing: bool,
+ /// NPOT textures full support (GL_ARB_texture_non_power_of_two, GL_OES_texture_npot)
+ texNPOT: bool,
+ /// Depth textures supported (GL_ARB_depth_texture, GL_WEBGL_depth_texture, GL_OES_depth_texture)
+ texDepth: bool,
+ /// float textures support (32 bit per channel) (GL_OES_texture_float)
+ texFloat32: bool,
+ /// DDS texture compression support (GL_EXT_texture_compression_s3tc, GL_WEBGL_compressed_texture_s3tc, GL_WEBKIT_WEBGL_compressed_texture_s3tc)
+ texCompDXT: bool,
+ /// ETC1 texture compression support (GL_OES_compressed_ETC1_RGB8_texture, GL_WEBGL_compressed_texture_etc1)
+ texCompETC1: bool,
+ /// ETC2/EAC texture compression support (GL_ARB_ES3_compatibility)
+ texCompETC2: bool,
+ /// PVR texture compression support (GL_IMG_texture_compression_pvrtc)
+ texCompPVRT: bool,
+ /// ASTC texture compression support (GL_KHR_texture_compression_astc_hdr, GL_KHR_texture_compression_astc_ldr)
+ texCompASTC: bool,
+ /// Clamp mirror wrap mode supported (GL_EXT_texture_mirror_clamp)
+ texMirrorClamp: bool,
+ /// Anisotropic texture filtering support (GL_EXT_texture_filter_anisotropic)
+ texAnisoFilter: bool,
+ /// Compute shaders support (GL_ARB_compute_shader)
+ computeShader: bool,
+ /// Shader storage buffer object support (GL_ARB_shader_storage_buffer_object)
+ ssbo: bool,
+ /// Maximum anisotropy level supported (minimum is 2.0f)
+ maxAnisotropyLevel: f32,
+ /// Maximum bits for depth component
+ maxDepthBits: i32,
+ };
+};
+
+/// Enable attribute state pointer
+pub fn rlEnableStatePointer(
+ vertexAttribType: i32,
+ buffer: *anyopaque,
+) void {
+ raylib.rlEnableStatePointer(
+ vertexAttribType,
+ @as([*c]anyopaque, @ptrCast(buffer)),
+ );
+}
+
+/// Disable attribute state pointer
+pub fn rlDisableStatePointer(
+ vertexAttribType: i32,
+) void {
+ raylib.rlDisableStatePointer(
+ vertexAttribType,
+ );
+}
+
+/// Get the last gamepad button pressed
+pub fn GetGamepadButtonPressed() ?GamepadButton {
+ if (raylib.GetGamepadButtonPressed() == -1) return null;
+
+ return @as(GamepadButton, @enumFromInt(raylib.GetGamepadButtonPressed()));
+}
diff --git a/libs/raylib/intermediate.zig b/libs/raylib/intermediate.zig
new file mode 100644
index 0000000..6a9d5db
--- /dev/null
+++ b/libs/raylib/intermediate.zig
@@ -0,0 +1,48 @@
+const std = @import("std");
+const fs = std.fs;
+const mapping = @import("type_mapping.zig");
+const json = std.json;
+
+pub const jsonFiles: []const []const u8 = &.{
+ "raylib.json",
+ "rlgl.json",
+ "raymath.json",
+};
+pub const bindingsJSON = "bindings.json";
+
+pub fn main() !void {
+ std.log.info("updating bindings.json ...", .{});
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ defer {
+ if (gpa.deinit() == .leak) {
+ std.log.err("memory leak detected", .{});
+ }
+ }
+ const allocator = gpa.allocator();
+ var arena = std.heap.ArenaAllocator.init(allocator);
+ defer arena.deinit();
+
+ const raylib: mapping.CombinedRaylib = try mapping.CombinedRaylib.load(arena.allocator(), jsonFiles);
+
+ var bindings: mapping.Intermediate = mapping.Intermediate.loadCustoms(arena.allocator(), bindingsJSON) catch |err| Catch: {
+ std.log.warn("could not open {s}: {?}\n", .{ bindingsJSON, err });
+ break :Catch mapping.Intermediate{
+ .enums = &[_]mapping.Enum{},
+ .structs = &[_]mapping.Struct{},
+ .functions = &[_]mapping.Function{},
+ .defines = &[_]mapping.Define{},
+ };
+ };
+
+ try bindings.addNonCustom(arena.allocator(), raylib);
+
+ var file = try fs.cwd().createFile(bindingsJSON, .{});
+ defer file.close();
+
+ try json.stringify(bindings, .{
+ .emit_null_optional_fields = false,
+ .whitespace = .indent_2,
+ }, file.writer());
+
+ std.log.info("... done", .{});
+}
diff --git a/libs/raylib/logo.png b/libs/raylib/logo.png
new file mode 100644
index 0000000..e0464dc
Binary files /dev/null and b/libs/raylib/logo.png differ
diff --git a/libs/raylib/marshal.c b/libs/raylib/marshal.c
new file mode 100644
index 0000000..3894598
--- /dev/null
+++ b/libs/raylib/marshal.c
@@ -0,0 +1,4035 @@
+#define GRAPHICS_API_OPENGL_11
+// #define RLGL_IMPLEMENTATION
+#include "raylib.h"
+#include "rlgl.h"
+#include "raymath.h"
+void mInitWindow(int width, int height, const char * title)
+{
+ InitWindow(width, height, title);
+}
+
+void mCloseWindow(void)
+{
+ CloseWindow();
+}
+
+bool mWindowShouldClose(void)
+{
+ return WindowShouldClose();
+}
+
+bool mIsWindowReady(void)
+{
+ return IsWindowReady();
+}
+
+bool mIsWindowFullscreen(void)
+{
+ return IsWindowFullscreen();
+}
+
+bool mIsWindowHidden(void)
+{
+ return IsWindowHidden();
+}
+
+bool mIsWindowMinimized(void)
+{
+ return IsWindowMinimized();
+}
+
+bool mIsWindowMaximized(void)
+{
+ return IsWindowMaximized();
+}
+
+bool mIsWindowFocused(void)
+{
+ return IsWindowFocused();
+}
+
+bool mIsWindowResized(void)
+{
+ return IsWindowResized();
+}
+
+bool mIsWindowState(unsigned int flag)
+{
+ return IsWindowState(flag);
+}
+
+void mSetWindowState(unsigned int flags)
+{
+ SetWindowState(flags);
+}
+
+void mClearWindowState(unsigned int flags)
+{
+ ClearWindowState(flags);
+}
+
+void mToggleFullscreen(void)
+{
+ ToggleFullscreen();
+}
+
+void mToggleBorderlessWindowed(void)
+{
+ ToggleBorderlessWindowed();
+}
+
+void mMaximizeWindow(void)
+{
+ MaximizeWindow();
+}
+
+void mMinimizeWindow(void)
+{
+ MinimizeWindow();
+}
+
+void mRestoreWindow(void)
+{
+ RestoreWindow();
+}
+
+void mSetWindowIcon(Image *image)
+{
+ SetWindowIcon(*image);
+}
+
+void mSetWindowIcons(Image * images, int count)
+{
+ SetWindowIcons(images, count);
+}
+
+void mSetWindowTitle(const char * title)
+{
+ SetWindowTitle(title);
+}
+
+void mSetWindowPosition(int x, int y)
+{
+ SetWindowPosition(x, y);
+}
+
+void mSetWindowMonitor(int monitor)
+{
+ SetWindowMonitor(monitor);
+}
+
+void mSetWindowMinSize(int width, int height)
+{
+ SetWindowMinSize(width, height);
+}
+
+void mSetWindowMaxSize(int width, int height)
+{
+ SetWindowMaxSize(width, height);
+}
+
+void mSetWindowSize(int width, int height)
+{
+ SetWindowSize(width, height);
+}
+
+void mSetWindowOpacity(float opacity)
+{
+ SetWindowOpacity(opacity);
+}
+
+void mSetWindowFocused(void)
+{
+ SetWindowFocused();
+}
+
+int mGetScreenWidth(void)
+{
+ return GetScreenWidth();
+}
+
+int mGetScreenHeight(void)
+{
+ return GetScreenHeight();
+}
+
+int mGetRenderWidth(void)
+{
+ return GetRenderWidth();
+}
+
+int mGetRenderHeight(void)
+{
+ return GetRenderHeight();
+}
+
+int mGetMonitorCount(void)
+{
+ return GetMonitorCount();
+}
+
+int mGetCurrentMonitor(void)
+{
+ return GetCurrentMonitor();
+}
+
+void mGetMonitorPosition(Vector2 *out, int monitor)
+{
+ *out = GetMonitorPosition(monitor);
+}
+
+int mGetMonitorWidth(int monitor)
+{
+ return GetMonitorWidth(monitor);
+}
+
+int mGetMonitorHeight(int monitor)
+{
+ return GetMonitorHeight(monitor);
+}
+
+int mGetMonitorPhysicalWidth(int monitor)
+{
+ return GetMonitorPhysicalWidth(monitor);
+}
+
+int mGetMonitorPhysicalHeight(int monitor)
+{
+ return GetMonitorPhysicalHeight(monitor);
+}
+
+int mGetMonitorRefreshRate(int monitor)
+{
+ return GetMonitorRefreshRate(monitor);
+}
+
+void mGetWindowPosition(Vector2 *out)
+{
+ *out = GetWindowPosition();
+}
+
+void mGetWindowScaleDPI(Vector2 *out)
+{
+ *out = GetWindowScaleDPI();
+}
+
+const char * mGetMonitorName(int monitor)
+{
+ return GetMonitorName(monitor);
+}
+
+void mSetClipboardText(const char * text)
+{
+ SetClipboardText(text);
+}
+
+const char * mGetClipboardText(void)
+{
+ return GetClipboardText();
+}
+
+void mEnableEventWaiting(void)
+{
+ EnableEventWaiting();
+}
+
+void mDisableEventWaiting(void)
+{
+ DisableEventWaiting();
+}
+
+void mShowCursor(void)
+{
+ ShowCursor();
+}
+
+void mHideCursor(void)
+{
+ HideCursor();
+}
+
+bool mIsCursorHidden(void)
+{
+ return IsCursorHidden();
+}
+
+void mEnableCursor(void)
+{
+ EnableCursor();
+}
+
+void mDisableCursor(void)
+{
+ DisableCursor();
+}
+
+bool mIsCursorOnScreen(void)
+{
+ return IsCursorOnScreen();
+}
+
+void mClearBackground(Color *color)
+{
+ ClearBackground(*color);
+}
+
+void mBeginDrawing(void)
+{
+ BeginDrawing();
+}
+
+void mEndDrawing(void)
+{
+ EndDrawing();
+}
+
+void mBeginMode2D(Camera2D *camera)
+{
+ BeginMode2D(*camera);
+}
+
+void mEndMode2D(void)
+{
+ EndMode2D();
+}
+
+void mBeginMode3D(Camera3D *camera)
+{
+ BeginMode3D(*camera);
+}
+
+void mEndMode3D(void)
+{
+ EndMode3D();
+}
+
+void mBeginTextureMode(RenderTexture2D *target)
+{
+ BeginTextureMode(*target);
+}
+
+void mEndTextureMode(void)
+{
+ EndTextureMode();
+}
+
+void mBeginShaderMode(Shader *shader)
+{
+ BeginShaderMode(*shader);
+}
+
+void mEndShaderMode(void)
+{
+ EndShaderMode();
+}
+
+void mBeginBlendMode(int mode)
+{
+ BeginBlendMode(mode);
+}
+
+void mEndBlendMode(void)
+{
+ EndBlendMode();
+}
+
+void mBeginScissorMode(int x, int y, int width, int height)
+{
+ BeginScissorMode(x, y, width, height);
+}
+
+void mEndScissorMode(void)
+{
+ EndScissorMode();
+}
+
+void mBeginVrStereoMode(VrStereoConfig *config)
+{
+ BeginVrStereoMode(*config);
+}
+
+void mEndVrStereoMode(void)
+{
+ EndVrStereoMode();
+}
+
+void mLoadVrStereoConfig(VrStereoConfig *out, VrDeviceInfo *device)
+{
+ *out = LoadVrStereoConfig(*device);
+}
+
+void mUnloadVrStereoConfig(VrStereoConfig *config)
+{
+ UnloadVrStereoConfig(*config);
+}
+
+void mLoadShader(Shader *out, const char * vsFileName, const char * fsFileName)
+{
+ *out = LoadShader(vsFileName, fsFileName);
+}
+
+void mLoadShaderFromMemory(Shader *out, const char * vsCode, const char * fsCode)
+{
+ *out = LoadShaderFromMemory(vsCode, fsCode);
+}
+
+bool mIsShaderReady(Shader *shader)
+{
+ return IsShaderReady(*shader);
+}
+
+int mGetShaderLocation(Shader *shader, const char * uniformName)
+{
+ return GetShaderLocation(*shader, uniformName);
+}
+
+int mGetShaderLocationAttrib(Shader *shader, const char * attribName)
+{
+ return GetShaderLocationAttrib(*shader, attribName);
+}
+
+void mSetShaderValue(Shader *shader, int locIndex, const void * value, int uniformType)
+{
+ SetShaderValue(*shader, locIndex, value, uniformType);
+}
+
+void mSetShaderValueV(Shader *shader, int locIndex, const void * value, int uniformType, int count)
+{
+ SetShaderValueV(*shader, locIndex, value, uniformType, count);
+}
+
+void mSetShaderValueMatrix(Shader *shader, int locIndex, Matrix *mat)
+{
+ SetShaderValueMatrix(*shader, locIndex, *mat);
+}
+
+void mSetShaderValueTexture(Shader *shader, int locIndex, Texture2D *texture)
+{
+ SetShaderValueTexture(*shader, locIndex, *texture);
+}
+
+void mUnloadShader(Shader *shader)
+{
+ UnloadShader(*shader);
+}
+
+void mGetMouseRay(Ray *out, Vector2 *mousePosition, Camera3D *camera)
+{
+ *out = GetMouseRay(*mousePosition, *camera);
+}
+
+void mGetCameraMatrix(Matrix *out, Camera3D *camera)
+{
+ *out = GetCameraMatrix(*camera);
+}
+
+void mGetCameraMatrix2D(Matrix *out, Camera2D *camera)
+{
+ *out = GetCameraMatrix2D(*camera);
+}
+
+void mGetWorldToScreen(Vector2 *out, Vector3 *position, Camera3D *camera)
+{
+ *out = GetWorldToScreen(*position, *camera);
+}
+
+void mGetScreenToWorld2D(Vector2 *out, Vector2 *position, Camera2D *camera)
+{
+ *out = GetScreenToWorld2D(*position, *camera);
+}
+
+void mGetWorldToScreenEx(Vector2 *out, Vector3 *position, Camera3D *camera, int width, int height)
+{
+ *out = GetWorldToScreenEx(*position, *camera, width, height);
+}
+
+void mGetWorldToScreen2D(Vector2 *out, Vector2 *position, Camera2D *camera)
+{
+ *out = GetWorldToScreen2D(*position, *camera);
+}
+
+void mSetTargetFPS(int fps)
+{
+ SetTargetFPS(fps);
+}
+
+float mGetFrameTime(void)
+{
+ return GetFrameTime();
+}
+
+double mGetTime(void)
+{
+ return GetTime();
+}
+
+int mGetFPS(void)
+{
+ return GetFPS();
+}
+
+void mSwapScreenBuffer(void)
+{
+ SwapScreenBuffer();
+}
+
+void mPollInputEvents(void)
+{
+ PollInputEvents();
+}
+
+void mWaitTime(double seconds)
+{
+ WaitTime(seconds);
+}
+
+void mSetRandomSeed(unsigned int seed)
+{
+ SetRandomSeed(seed);
+}
+
+int mGetRandomValue(int min, int max)
+{
+ return GetRandomValue(min, max);
+}
+
+int * mLoadRandomSequence(unsigned int count, int min, int max)
+{
+ return LoadRandomSequence(count, min, max);
+}
+
+void mUnloadRandomSequence(int * sequence)
+{
+ UnloadRandomSequence(sequence);
+}
+
+void mTakeScreenshot(const char * fileName)
+{
+ TakeScreenshot(fileName);
+}
+
+void mOpenURL(const char * url)
+{
+ OpenURL(url);
+}
+
+void mSetTraceLogLevel(int logLevel)
+{
+ SetTraceLogLevel(logLevel);
+}
+
+void mSetLoadFileDataCallback(LoadFileDataCallback callback)
+{
+ SetLoadFileDataCallback(callback);
+}
+
+void mSetSaveFileDataCallback(SaveFileDataCallback callback)
+{
+ SetSaveFileDataCallback(callback);
+}
+
+void mSetLoadFileTextCallback(LoadFileTextCallback callback)
+{
+ SetLoadFileTextCallback(callback);
+}
+
+void mSetSaveFileTextCallback(SaveFileTextCallback callback)
+{
+ SetSaveFileTextCallback(callback);
+}
+
+bool mSaveFileData(const char * fileName, void * data, int dataSize)
+{
+ return SaveFileData(fileName, data, dataSize);
+}
+
+bool mExportDataAsCode(const unsigned char * data, int dataSize, const char * fileName)
+{
+ return ExportDataAsCode(data, dataSize, fileName);
+}
+
+char * mLoadFileText(const char * fileName)
+{
+ return LoadFileText(fileName);
+}
+
+void mUnloadFileText(char * text)
+{
+ UnloadFileText(text);
+}
+
+bool mSaveFileText(const char * fileName, char * text)
+{
+ return SaveFileText(fileName, text);
+}
+
+bool mFileExists(const char * fileName)
+{
+ return FileExists(fileName);
+}
+
+bool mDirectoryExists(const char * dirPath)
+{
+ return DirectoryExists(dirPath);
+}
+
+bool mIsFileExtension(const char * fileName, const char * ext)
+{
+ return IsFileExtension(fileName, ext);
+}
+
+int mGetFileLength(const char * fileName)
+{
+ return GetFileLength(fileName);
+}
+
+const char * mGetFileExtension(const char * fileName)
+{
+ return GetFileExtension(fileName);
+}
+
+const char * mGetFileName(const char * filePath)
+{
+ return GetFileName(filePath);
+}
+
+const char * mGetFileNameWithoutExt(const char * filePath)
+{
+ return GetFileNameWithoutExt(filePath);
+}
+
+const char * mGetDirectoryPath(const char * filePath)
+{
+ return GetDirectoryPath(filePath);
+}
+
+const char * mGetPrevDirectoryPath(const char * dirPath)
+{
+ return GetPrevDirectoryPath(dirPath);
+}
+
+const char * mGetWorkingDirectory(void)
+{
+ return GetWorkingDirectory();
+}
+
+const char * mGetApplicationDirectory(void)
+{
+ return GetApplicationDirectory();
+}
+
+bool mChangeDirectory(const char * dir)
+{
+ return ChangeDirectory(dir);
+}
+
+bool mIsPathFile(const char * path)
+{
+ return IsPathFile(path);
+}
+
+void mLoadDirectoryFiles(FilePathList *out, const char * dirPath)
+{
+ *out = LoadDirectoryFiles(dirPath);
+}
+
+void mLoadDirectoryFilesEx(FilePathList *out, const char * basePath, const char * filter, bool scanSubdirs)
+{
+ *out = LoadDirectoryFilesEx(basePath, filter, scanSubdirs);
+}
+
+void mUnloadDirectoryFiles(FilePathList *files)
+{
+ UnloadDirectoryFiles(*files);
+}
+
+bool mIsFileDropped(void)
+{
+ return IsFileDropped();
+}
+
+void mLoadDroppedFiles(FilePathList *out)
+{
+ *out = LoadDroppedFiles();
+}
+
+void mUnloadDroppedFiles(FilePathList *files)
+{
+ UnloadDroppedFiles(*files);
+}
+
+long mGetFileModTime(const char * fileName)
+{
+ return GetFileModTime(fileName);
+}
+
+unsigned char * mCompressData(const unsigned char * data, int dataSize, int * compDataSize)
+{
+ return CompressData(data, dataSize, compDataSize);
+}
+
+unsigned char * mDecompressData(const unsigned char * compData, int compDataSize, int * dataSize)
+{
+ return DecompressData(compData, compDataSize, dataSize);
+}
+
+char * mEncodeDataBase64(const unsigned char * data, int dataSize, int * outputSize)
+{
+ return EncodeDataBase64(data, dataSize, outputSize);
+}
+
+unsigned char * mDecodeDataBase64(const unsigned char * data, int * outputSize)
+{
+ return DecodeDataBase64(data, outputSize);
+}
+
+void mLoadAutomationEventList(AutomationEventList *out, const char * fileName)
+{
+ *out = LoadAutomationEventList(fileName);
+}
+
+void mUnloadAutomationEventList(AutomationEventList *list)
+{
+ UnloadAutomationEventList(*list);
+}
+
+bool mExportAutomationEventList(AutomationEventList *list, const char * fileName)
+{
+ return ExportAutomationEventList(*list, fileName);
+}
+
+void mSetAutomationEventList(AutomationEventList * list)
+{
+ SetAutomationEventList(list);
+}
+
+void mSetAutomationEventBaseFrame(int frame)
+{
+ SetAutomationEventBaseFrame(frame);
+}
+
+void mStartAutomationEventRecording(void)
+{
+ StartAutomationEventRecording();
+}
+
+void mStopAutomationEventRecording(void)
+{
+ StopAutomationEventRecording();
+}
+
+void mPlayAutomationEvent(AutomationEvent *event)
+{
+ PlayAutomationEvent(*event);
+}
+
+bool mIsKeyPressed(int key)
+{
+ return IsKeyPressed(key);
+}
+
+bool mIsKeyPressedRepeat(int key)
+{
+ return IsKeyPressedRepeat(key);
+}
+
+bool mIsKeyDown(int key)
+{
+ return IsKeyDown(key);
+}
+
+bool mIsKeyReleased(int key)
+{
+ return IsKeyReleased(key);
+}
+
+bool mIsKeyUp(int key)
+{
+ return IsKeyUp(key);
+}
+
+int mGetKeyPressed(void)
+{
+ return GetKeyPressed();
+}
+
+int mGetCharPressed(void)
+{
+ return GetCharPressed();
+}
+
+void mSetExitKey(int key)
+{
+ SetExitKey(key);
+}
+
+bool mIsGamepadAvailable(int gamepad)
+{
+ return IsGamepadAvailable(gamepad);
+}
+
+const char * mGetGamepadName(int gamepad)
+{
+ return GetGamepadName(gamepad);
+}
+
+bool mIsGamepadButtonPressed(int gamepad, int button)
+{
+ return IsGamepadButtonPressed(gamepad, button);
+}
+
+bool mIsGamepadButtonDown(int gamepad, int button)
+{
+ return IsGamepadButtonDown(gamepad, button);
+}
+
+bool mIsGamepadButtonReleased(int gamepad, int button)
+{
+ return IsGamepadButtonReleased(gamepad, button);
+}
+
+bool mIsGamepadButtonUp(int gamepad, int button)
+{
+ return IsGamepadButtonUp(gamepad, button);
+}
+
+int mGetGamepadAxisCount(int gamepad)
+{
+ return GetGamepadAxisCount(gamepad);
+}
+
+float mGetGamepadAxisMovement(int gamepad, int axis)
+{
+ return GetGamepadAxisMovement(gamepad, axis);
+}
+
+int mSetGamepadMappings(const char * mappings)
+{
+ return SetGamepadMappings(mappings);
+}
+
+bool mIsMouseButtonPressed(int button)
+{
+ return IsMouseButtonPressed(button);
+}
+
+bool mIsMouseButtonDown(int button)
+{
+ return IsMouseButtonDown(button);
+}
+
+bool mIsMouseButtonReleased(int button)
+{
+ return IsMouseButtonReleased(button);
+}
+
+bool mIsMouseButtonUp(int button)
+{
+ return IsMouseButtonUp(button);
+}
+
+int mGetMouseX(void)
+{
+ return GetMouseX();
+}
+
+int mGetMouseY(void)
+{
+ return GetMouseY();
+}
+
+void mGetMousePosition(Vector2 *out)
+{
+ *out = GetMousePosition();
+}
+
+void mGetMouseDelta(Vector2 *out)
+{
+ *out = GetMouseDelta();
+}
+
+void mSetMousePosition(int x, int y)
+{
+ SetMousePosition(x, y);
+}
+
+void mSetMouseOffset(int offsetX, int offsetY)
+{
+ SetMouseOffset(offsetX, offsetY);
+}
+
+void mSetMouseScale(float scaleX, float scaleY)
+{
+ SetMouseScale(scaleX, scaleY);
+}
+
+float mGetMouseWheelMove(void)
+{
+ return GetMouseWheelMove();
+}
+
+void mGetMouseWheelMoveV(Vector2 *out)
+{
+ *out = GetMouseWheelMoveV();
+}
+
+void mSetMouseCursor(int cursor)
+{
+ SetMouseCursor(cursor);
+}
+
+int mGetTouchX(void)
+{
+ return GetTouchX();
+}
+
+int mGetTouchY(void)
+{
+ return GetTouchY();
+}
+
+void mGetTouchPosition(Vector2 *out, int index)
+{
+ *out = GetTouchPosition(index);
+}
+
+int mGetTouchPointId(int index)
+{
+ return GetTouchPointId(index);
+}
+
+int mGetTouchPointCount(void)
+{
+ return GetTouchPointCount();
+}
+
+void mSetGesturesEnabled(unsigned int flags)
+{
+ SetGesturesEnabled(flags);
+}
+
+bool mIsGestureDetected(unsigned int gesture)
+{
+ return IsGestureDetected(gesture);
+}
+
+int mGetGestureDetected(void)
+{
+ return GetGestureDetected();
+}
+
+float mGetGestureHoldDuration(void)
+{
+ return GetGestureHoldDuration();
+}
+
+void mGetGestureDragVector(Vector2 *out)
+{
+ *out = GetGestureDragVector();
+}
+
+float mGetGestureDragAngle(void)
+{
+ return GetGestureDragAngle();
+}
+
+void mGetGesturePinchVector(Vector2 *out)
+{
+ *out = GetGesturePinchVector();
+}
+
+float mGetGesturePinchAngle(void)
+{
+ return GetGesturePinchAngle();
+}
+
+void mUpdateCamera(Camera * camera, int mode)
+{
+ UpdateCamera(camera, mode);
+}
+
+void mUpdateCameraPro(Camera * camera, Vector3 *movement, Vector3 *rotation, float zoom)
+{
+ UpdateCameraPro(camera, *movement, *rotation, zoom);
+}
+
+void mSetShapesTexture(Texture2D *texture, Rectangle *source)
+{
+ SetShapesTexture(*texture, *source);
+}
+
+void mGetShapesTexture(Texture2D *out)
+{
+ *out = GetShapesTexture();
+}
+
+void mGetShapesTextureRectangle(Rectangle *out)
+{
+ *out = GetShapesTextureRectangle();
+}
+
+void mDrawPixel(int posX, int posY, Color *color)
+{
+ DrawPixel(posX, posY, *color);
+}
+
+void mDrawPixelV(Vector2 *position, Color *color)
+{
+ DrawPixelV(*position, *color);
+}
+
+void mDrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color *color)
+{
+ DrawLine(startPosX, startPosY, endPosX, endPosY, *color);
+}
+
+void mDrawLineV(Vector2 *startPos, Vector2 *endPos, Color *color)
+{
+ DrawLineV(*startPos, *endPos, *color);
+}
+
+void mDrawLineEx(Vector2 *startPos, Vector2 *endPos, float thick, Color *color)
+{
+ DrawLineEx(*startPos, *endPos, thick, *color);
+}
+
+void mDrawLineStrip(Vector2 * points, int pointCount, Color *color)
+{
+ DrawLineStrip(points, pointCount, *color);
+}
+
+void mDrawLineBezier(Vector2 *startPos, Vector2 *endPos, float thick, Color *color)
+{
+ DrawLineBezier(*startPos, *endPos, thick, *color);
+}
+
+void mDrawCircle(int centerX, int centerY, float radius, Color *color)
+{
+ DrawCircle(centerX, centerY, radius, *color);
+}
+
+void mDrawCircleSector(Vector2 *center, float radius, float startAngle, float endAngle, int segments, Color *color)
+{
+ DrawCircleSector(*center, radius, startAngle, endAngle, segments, *color);
+}
+
+void mDrawCircleSectorLines(Vector2 *center, float radius, float startAngle, float endAngle, int segments, Color *color)
+{
+ DrawCircleSectorLines(*center, radius, startAngle, endAngle, segments, *color);
+}
+
+void mDrawCircleGradient(int centerX, int centerY, float radius, Color *color1, Color *color2)
+{
+ DrawCircleGradient(centerX, centerY, radius, *color1, *color2);
+}
+
+void mDrawCircleV(Vector2 *center, float radius, Color *color)
+{
+ DrawCircleV(*center, radius, *color);
+}
+
+void mDrawCircleLines(int centerX, int centerY, float radius, Color *color)
+{
+ DrawCircleLines(centerX, centerY, radius, *color);
+}
+
+void mDrawCircleLinesV(Vector2 *center, float radius, Color *color)
+{
+ DrawCircleLinesV(*center, radius, *color);
+}
+
+void mDrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color *color)
+{
+ DrawEllipse(centerX, centerY, radiusH, radiusV, *color);
+}
+
+void mDrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color *color)
+{
+ DrawEllipseLines(centerX, centerY, radiusH, radiusV, *color);
+}
+
+void mDrawRing(Vector2 *center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color *color)
+{
+ DrawRing(*center, innerRadius, outerRadius, startAngle, endAngle, segments, *color);
+}
+
+void mDrawRingLines(Vector2 *center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color *color)
+{
+ DrawRingLines(*center, innerRadius, outerRadius, startAngle, endAngle, segments, *color);
+}
+
+void mDrawRectangle(int posX, int posY, int width, int height, Color *color)
+{
+ DrawRectangle(posX, posY, width, height, *color);
+}
+
+void mDrawRectangleV(Vector2 *position, Vector2 *size, Color *color)
+{
+ DrawRectangleV(*position, *size, *color);
+}
+
+void mDrawRectangleRec(Rectangle *rec, Color *color)
+{
+ DrawRectangleRec(*rec, *color);
+}
+
+void mDrawRectanglePro(Rectangle *rec, Vector2 *origin, float rotation, Color *color)
+{
+ DrawRectanglePro(*rec, *origin, rotation, *color);
+}
+
+void mDrawRectangleGradientV(int posX, int posY, int width, int height, Color *color1, Color *color2)
+{
+ DrawRectangleGradientV(posX, posY, width, height, *color1, *color2);
+}
+
+void mDrawRectangleGradientH(int posX, int posY, int width, int height, Color *color1, Color *color2)
+{
+ DrawRectangleGradientH(posX, posY, width, height, *color1, *color2);
+}
+
+void mDrawRectangleGradientEx(Rectangle *rec, Color *col1, Color *col2, Color *col3, Color *col4)
+{
+ DrawRectangleGradientEx(*rec, *col1, *col2, *col3, *col4);
+}
+
+void mDrawRectangleLines(int posX, int posY, int width, int height, Color *color)
+{
+ DrawRectangleLines(posX, posY, width, height, *color);
+}
+
+void mDrawRectangleLinesEx(Rectangle *rec, float lineThick, Color *color)
+{
+ DrawRectangleLinesEx(*rec, lineThick, *color);
+}
+
+void mDrawRectangleRounded(Rectangle *rec, float roundness, int segments, Color *color)
+{
+ DrawRectangleRounded(*rec, roundness, segments, *color);
+}
+
+void mDrawRectangleRoundedLines(Rectangle *rec, float roundness, int segments, float lineThick, Color *color)
+{
+ DrawRectangleRoundedLines(*rec, roundness, segments, lineThick, *color);
+}
+
+void mDrawTriangle(Vector2 *v1, Vector2 *v2, Vector2 *v3, Color *color)
+{
+ DrawTriangle(*v1, *v2, *v3, *color);
+}
+
+void mDrawTriangleLines(Vector2 *v1, Vector2 *v2, Vector2 *v3, Color *color)
+{
+ DrawTriangleLines(*v1, *v2, *v3, *color);
+}
+
+void mDrawTriangleFan(Vector2 * points, int pointCount, Color *color)
+{
+ DrawTriangleFan(points, pointCount, *color);
+}
+
+void mDrawTriangleStrip(Vector2 * points, int pointCount, Color *color)
+{
+ DrawTriangleStrip(points, pointCount, *color);
+}
+
+void mDrawPoly(Vector2 *center, int sides, float radius, float rotation, Color *color)
+{
+ DrawPoly(*center, sides, radius, rotation, *color);
+}
+
+void mDrawPolyLines(Vector2 *center, int sides, float radius, float rotation, Color *color)
+{
+ DrawPolyLines(*center, sides, radius, rotation, *color);
+}
+
+void mDrawPolyLinesEx(Vector2 *center, int sides, float radius, float rotation, float lineThick, Color *color)
+{
+ DrawPolyLinesEx(*center, sides, radius, rotation, lineThick, *color);
+}
+
+void mDrawSplineLinear(Vector2 * points, int pointCount, float thick, Color *color)
+{
+ DrawSplineLinear(points, pointCount, thick, *color);
+}
+
+void mDrawSplineBasis(Vector2 * points, int pointCount, float thick, Color *color)
+{
+ DrawSplineBasis(points, pointCount, thick, *color);
+}
+
+void mDrawSplineCatmullRom(Vector2 * points, int pointCount, float thick, Color *color)
+{
+ DrawSplineCatmullRom(points, pointCount, thick, *color);
+}
+
+void mDrawSplineBezierQuadratic(Vector2 * points, int pointCount, float thick, Color *color)
+{
+ DrawSplineBezierQuadratic(points, pointCount, thick, *color);
+}
+
+void mDrawSplineBezierCubic(Vector2 * points, int pointCount, float thick, Color *color)
+{
+ DrawSplineBezierCubic(points, pointCount, thick, *color);
+}
+
+void mDrawSplineSegmentLinear(Vector2 *p1, Vector2 *p2, float thick, Color *color)
+{
+ DrawSplineSegmentLinear(*p1, *p2, thick, *color);
+}
+
+void mDrawSplineSegmentBasis(Vector2 *p1, Vector2 *p2, Vector2 *p3, Vector2 *p4, float thick, Color *color)
+{
+ DrawSplineSegmentBasis(*p1, *p2, *p3, *p4, thick, *color);
+}
+
+void mDrawSplineSegmentCatmullRom(Vector2 *p1, Vector2 *p2, Vector2 *p3, Vector2 *p4, float thick, Color *color)
+{
+ DrawSplineSegmentCatmullRom(*p1, *p2, *p3, *p4, thick, *color);
+}
+
+void mDrawSplineSegmentBezierQuadratic(Vector2 *p1, Vector2 *c2, Vector2 *p3, float thick, Color *color)
+{
+ DrawSplineSegmentBezierQuadratic(*p1, *c2, *p3, thick, *color);
+}
+
+void mDrawSplineSegmentBezierCubic(Vector2 *p1, Vector2 *c2, Vector2 *c3, Vector2 *p4, float thick, Color *color)
+{
+ DrawSplineSegmentBezierCubic(*p1, *c2, *c3, *p4, thick, *color);
+}
+
+void mGetSplinePointLinear(Vector2 *out, Vector2 *startPos, Vector2 *endPos, float t)
+{
+ *out = GetSplinePointLinear(*startPos, *endPos, t);
+}
+
+void mGetSplinePointBasis(Vector2 *out, Vector2 *p1, Vector2 *p2, Vector2 *p3, Vector2 *p4, float t)
+{
+ *out = GetSplinePointBasis(*p1, *p2, *p3, *p4, t);
+}
+
+void mGetSplinePointCatmullRom(Vector2 *out, Vector2 *p1, Vector2 *p2, Vector2 *p3, Vector2 *p4, float t)
+{
+ *out = GetSplinePointCatmullRom(*p1, *p2, *p3, *p4, t);
+}
+
+void mGetSplinePointBezierQuad(Vector2 *out, Vector2 *p1, Vector2 *c2, Vector2 *p3, float t)
+{
+ *out = GetSplinePointBezierQuad(*p1, *c2, *p3, t);
+}
+
+void mGetSplinePointBezierCubic(Vector2 *out, Vector2 *p1, Vector2 *c2, Vector2 *c3, Vector2 *p4, float t)
+{
+ *out = GetSplinePointBezierCubic(*p1, *c2, *c3, *p4, t);
+}
+
+bool mCheckCollisionRecs(Rectangle *rec1, Rectangle *rec2)
+{
+ return CheckCollisionRecs(*rec1, *rec2);
+}
+
+bool mCheckCollisionCircles(Vector2 *center1, float radius1, Vector2 *center2, float radius2)
+{
+ return CheckCollisionCircles(*center1, radius1, *center2, radius2);
+}
+
+bool mCheckCollisionCircleRec(Vector2 *center, float radius, Rectangle *rec)
+{
+ return CheckCollisionCircleRec(*center, radius, *rec);
+}
+
+bool mCheckCollisionPointRec(Vector2 *point, Rectangle *rec)
+{
+ return CheckCollisionPointRec(*point, *rec);
+}
+
+bool mCheckCollisionPointCircle(Vector2 *point, Vector2 *center, float radius)
+{
+ return CheckCollisionPointCircle(*point, *center, radius);
+}
+
+bool mCheckCollisionPointTriangle(Vector2 *point, Vector2 *p1, Vector2 *p2, Vector2 *p3)
+{
+ return CheckCollisionPointTriangle(*point, *p1, *p2, *p3);
+}
+
+bool mCheckCollisionPointPoly(Vector2 *point, Vector2 * points, int pointCount)
+{
+ return CheckCollisionPointPoly(*point, points, pointCount);
+}
+
+bool mCheckCollisionLines(Vector2 *startPos1, Vector2 *endPos1, Vector2 *startPos2, Vector2 *endPos2, Vector2 * collisionPoint)
+{
+ return CheckCollisionLines(*startPos1, *endPos1, *startPos2, *endPos2, collisionPoint);
+}
+
+bool mCheckCollisionPointLine(Vector2 *point, Vector2 *p1, Vector2 *p2, int threshold)
+{
+ return CheckCollisionPointLine(*point, *p1, *p2, threshold);
+}
+
+void mGetCollisionRec(Rectangle *out, Rectangle *rec1, Rectangle *rec2)
+{
+ *out = GetCollisionRec(*rec1, *rec2);
+}
+
+void mLoadImage(Image *out, const char * fileName)
+{
+ *out = LoadImage(fileName);
+}
+
+void mLoadImageRaw(Image *out, const char * fileName, int width, int height, int format, int headerSize)
+{
+ *out = LoadImageRaw(fileName, width, height, format, headerSize);
+}
+
+void mLoadImageSvg(Image *out, const char * fileNameOrString, int width, int height)
+{
+ *out = LoadImageSvg(fileNameOrString, width, height);
+}
+
+void mLoadImageAnim(Image *out, const char * fileName, int * frames)
+{
+ *out = LoadImageAnim(fileName, frames);
+}
+
+void mLoadImageAnimFromMemory(Image *out, const char * fileType, const unsigned char * fileData, int dataSize, int * frames)
+{
+ *out = LoadImageAnimFromMemory(fileType, fileData, dataSize, frames);
+}
+
+void mLoadImageFromMemory(Image *out, const char * fileType, const unsigned char * fileData, int dataSize)
+{
+ *out = LoadImageFromMemory(fileType, fileData, dataSize);
+}
+
+void mLoadImageFromTexture(Image *out, Texture2D *texture)
+{
+ *out = LoadImageFromTexture(*texture);
+}
+
+void mLoadImageFromScreen(Image *out)
+{
+ *out = LoadImageFromScreen();
+}
+
+bool mIsImageReady(Image *image)
+{
+ return IsImageReady(*image);
+}
+
+void mUnloadImage(Image *image)
+{
+ UnloadImage(*image);
+}
+
+bool mExportImage(Image *image, const char * fileName)
+{
+ return ExportImage(*image, fileName);
+}
+
+unsigned char * mExportImageToMemory(Image *image, const char * fileType, int * fileSize)
+{
+ return ExportImageToMemory(*image, fileType, fileSize);
+}
+
+bool mExportImageAsCode(Image *image, const char * fileName)
+{
+ return ExportImageAsCode(*image, fileName);
+}
+
+void mGenImageColor(Image *out, int width, int height, Color *color)
+{
+ *out = GenImageColor(width, height, *color);
+}
+
+void mGenImageGradientLinear(Image *out, int width, int height, int direction, Color *start, Color *end)
+{
+ *out = GenImageGradientLinear(width, height, direction, *start, *end);
+}
+
+void mGenImageGradientRadial(Image *out, int width, int height, float density, Color *inner, Color *outer)
+{
+ *out = GenImageGradientRadial(width, height, density, *inner, *outer);
+}
+
+void mGenImageGradientSquare(Image *out, int width, int height, float density, Color *inner, Color *outer)
+{
+ *out = GenImageGradientSquare(width, height, density, *inner, *outer);
+}
+
+void mGenImageChecked(Image *out, int width, int height, int checksX, int checksY, Color *col1, Color *col2)
+{
+ *out = GenImageChecked(width, height, checksX, checksY, *col1, *col2);
+}
+
+void mGenImageWhiteNoise(Image *out, int width, int height, float factor)
+{
+ *out = GenImageWhiteNoise(width, height, factor);
+}
+
+void mGenImagePerlinNoise(Image *out, int width, int height, int offsetX, int offsetY, float scale)
+{
+ *out = GenImagePerlinNoise(width, height, offsetX, offsetY, scale);
+}
+
+void mGenImageCellular(Image *out, int width, int height, int tileSize)
+{
+ *out = GenImageCellular(width, height, tileSize);
+}
+
+void mGenImageText(Image *out, int width, int height, const char * text)
+{
+ *out = GenImageText(width, height, text);
+}
+
+void mImageCopy(Image *out, Image *image)
+{
+ *out = ImageCopy(*image);
+}
+
+void mImageFromImage(Image *out, Image *image, Rectangle *rec)
+{
+ *out = ImageFromImage(*image, *rec);
+}
+
+void mImageText(Image *out, const char * text, int fontSize, Color *color)
+{
+ *out = ImageText(text, fontSize, *color);
+}
+
+void mImageTextEx(Image *out, Font *font, const char * text, float fontSize, float spacing, Color *tint)
+{
+ *out = ImageTextEx(*font, text, fontSize, spacing, *tint);
+}
+
+void mImageFormat(Image * image, int newFormat)
+{
+ ImageFormat(image, newFormat);
+}
+
+void mImageToPOT(Image * image, Color *fill)
+{
+ ImageToPOT(image, *fill);
+}
+
+void mImageCrop(Image * image, Rectangle *crop)
+{
+ ImageCrop(image, *crop);
+}
+
+void mImageAlphaCrop(Image * image, float threshold)
+{
+ ImageAlphaCrop(image, threshold);
+}
+
+void mImageAlphaClear(Image * image, Color *color, float threshold)
+{
+ ImageAlphaClear(image, *color, threshold);
+}
+
+void mImageAlphaMask(Image * image, Image *alphaMask)
+{
+ ImageAlphaMask(image, *alphaMask);
+}
+
+void mImageAlphaPremultiply(Image * image)
+{
+ ImageAlphaPremultiply(image);
+}
+
+void mImageBlurGaussian(Image * image, int blurSize)
+{
+ ImageBlurGaussian(image, blurSize);
+}
+
+void mImageKernelConvolution(Image * image, float* kernel, int kernelSize)
+{
+ ImageKernelConvolution(image, kernel, kernelSize);
+}
+
+void mImageResize(Image * image, int newWidth, int newHeight)
+{
+ ImageResize(image, newWidth, newHeight);
+}
+
+void mImageResizeNN(Image * image, int newWidth, int newHeight)
+{
+ ImageResizeNN(image, newWidth, newHeight);
+}
+
+void mImageResizeCanvas(Image * image, int newWidth, int newHeight, int offsetX, int offsetY, Color *fill)
+{
+ ImageResizeCanvas(image, newWidth, newHeight, offsetX, offsetY, *fill);
+}
+
+void mImageMipmaps(Image * image)
+{
+ ImageMipmaps(image);
+}
+
+void mImageDither(Image * image, int rBpp, int gBpp, int bBpp, int aBpp)
+{
+ ImageDither(image, rBpp, gBpp, bBpp, aBpp);
+}
+
+void mImageFlipVertical(Image * image)
+{
+ ImageFlipVertical(image);
+}
+
+void mImageFlipHorizontal(Image * image)
+{
+ ImageFlipHorizontal(image);
+}
+
+void mImageRotate(Image * image, int degrees)
+{
+ ImageRotate(image, degrees);
+}
+
+void mImageRotateCW(Image * image)
+{
+ ImageRotateCW(image);
+}
+
+void mImageRotateCCW(Image * image)
+{
+ ImageRotateCCW(image);
+}
+
+void mImageColorTint(Image * image, Color *color)
+{
+ ImageColorTint(image, *color);
+}
+
+void mImageColorInvert(Image * image)
+{
+ ImageColorInvert(image);
+}
+
+void mImageColorGrayscale(Image * image)
+{
+ ImageColorGrayscale(image);
+}
+
+void mImageColorContrast(Image * image, float contrast)
+{
+ ImageColorContrast(image, contrast);
+}
+
+void mImageColorBrightness(Image * image, int brightness)
+{
+ ImageColorBrightness(image, brightness);
+}
+
+void mImageColorReplace(Image * image, Color *color, Color *replace)
+{
+ ImageColorReplace(image, *color, *replace);
+}
+
+Color * mLoadImageColors(Image *image)
+{
+ return LoadImageColors(*image);
+}
+
+Color * mLoadImagePalette(Image *image, int maxPaletteSize, int * colorCount)
+{
+ return LoadImagePalette(*image, maxPaletteSize, colorCount);
+}
+
+void mUnloadImageColors(Color * colors)
+{
+ UnloadImageColors(colors);
+}
+
+void mUnloadImagePalette(Color * colors)
+{
+ UnloadImagePalette(colors);
+}
+
+void mGetImageAlphaBorder(Rectangle *out, Image *image, float threshold)
+{
+ *out = GetImageAlphaBorder(*image, threshold);
+}
+
+void mGetImageColor(Color *out, Image *image, int x, int y)
+{
+ *out = GetImageColor(*image, x, y);
+}
+
+void mImageClearBackground(Image * dst, Color *color)
+{
+ ImageClearBackground(dst, *color);
+}
+
+void mImageDrawPixel(Image * dst, int posX, int posY, Color *color)
+{
+ ImageDrawPixel(dst, posX, posY, *color);
+}
+
+void mImageDrawPixelV(Image * dst, Vector2 *position, Color *color)
+{
+ ImageDrawPixelV(dst, *position, *color);
+}
+
+void mImageDrawLine(Image * dst, int startPosX, int startPosY, int endPosX, int endPosY, Color *color)
+{
+ ImageDrawLine(dst, startPosX, startPosY, endPosX, endPosY, *color);
+}
+
+void mImageDrawLineV(Image * dst, Vector2 *start, Vector2 *end, Color *color)
+{
+ ImageDrawLineV(dst, *start, *end, *color);
+}
+
+void mImageDrawCircle(Image * dst, int centerX, int centerY, int radius, Color *color)
+{
+ ImageDrawCircle(dst, centerX, centerY, radius, *color);
+}
+
+void mImageDrawCircleV(Image * dst, Vector2 *center, int radius, Color *color)
+{
+ ImageDrawCircleV(dst, *center, radius, *color);
+}
+
+void mImageDrawCircleLines(Image * dst, int centerX, int centerY, int radius, Color *color)
+{
+ ImageDrawCircleLines(dst, centerX, centerY, radius, *color);
+}
+
+void mImageDrawCircleLinesV(Image * dst, Vector2 *center, int radius, Color *color)
+{
+ ImageDrawCircleLinesV(dst, *center, radius, *color);
+}
+
+void mImageDrawRectangle(Image * dst, int posX, int posY, int width, int height, Color *color)
+{
+ ImageDrawRectangle(dst, posX, posY, width, height, *color);
+}
+
+void mImageDrawRectangleV(Image * dst, Vector2 *position, Vector2 *size, Color *color)
+{
+ ImageDrawRectangleV(dst, *position, *size, *color);
+}
+
+void mImageDrawRectangleRec(Image * dst, Rectangle *rec, Color *color)
+{
+ ImageDrawRectangleRec(dst, *rec, *color);
+}
+
+void mImageDrawRectangleLines(Image * dst, Rectangle *rec, int thick, Color *color)
+{
+ ImageDrawRectangleLines(dst, *rec, thick, *color);
+}
+
+void mImageDraw(Image * dst, Image *src, Rectangle *srcRec, Rectangle *dstRec, Color *tint)
+{
+ ImageDraw(dst, *src, *srcRec, *dstRec, *tint);
+}
+
+void mImageDrawText(Image * dst, const char * text, int posX, int posY, int fontSize, Color *color)
+{
+ ImageDrawText(dst, text, posX, posY, fontSize, *color);
+}
+
+void mImageDrawTextEx(Image * dst, Font *font, const char * text, Vector2 *position, float fontSize, float spacing, Color *tint)
+{
+ ImageDrawTextEx(dst, *font, text, *position, fontSize, spacing, *tint);
+}
+
+void mLoadTexture(Texture2D *out, const char * fileName)
+{
+ *out = LoadTexture(fileName);
+}
+
+void mLoadTextureFromImage(Texture2D *out, Image *image)
+{
+ *out = LoadTextureFromImage(*image);
+}
+
+void mLoadTextureCubemap(Texture2D *out, Image *image, int layout)
+{
+ *out = LoadTextureCubemap(*image, layout);
+}
+
+void mLoadRenderTexture(RenderTexture2D *out, int width, int height)
+{
+ *out = LoadRenderTexture(width, height);
+}
+
+bool mIsTextureReady(Texture2D *texture)
+{
+ return IsTextureReady(*texture);
+}
+
+void mUnloadTexture(Texture2D *texture)
+{
+ UnloadTexture(*texture);
+}
+
+bool mIsRenderTextureReady(RenderTexture2D *target)
+{
+ return IsRenderTextureReady(*target);
+}
+
+void mUnloadRenderTexture(RenderTexture2D *target)
+{
+ UnloadRenderTexture(*target);
+}
+
+void mUpdateTexture(Texture2D *texture, const void * pixels)
+{
+ UpdateTexture(*texture, pixels);
+}
+
+void mUpdateTextureRec(Texture2D *texture, Rectangle *rec, const void * pixels)
+{
+ UpdateTextureRec(*texture, *rec, pixels);
+}
+
+void mGenTextureMipmaps(Texture2D * texture)
+{
+ GenTextureMipmaps(texture);
+}
+
+void mSetTextureFilter(Texture2D *texture, int filter)
+{
+ SetTextureFilter(*texture, filter);
+}
+
+void mSetTextureWrap(Texture2D *texture, int wrap)
+{
+ SetTextureWrap(*texture, wrap);
+}
+
+void mDrawTexture(Texture2D *texture, int posX, int posY, Color *tint)
+{
+ DrawTexture(*texture, posX, posY, *tint);
+}
+
+void mDrawTextureV(Texture2D *texture, Vector2 *position, Color *tint)
+{
+ DrawTextureV(*texture, *position, *tint);
+}
+
+void mDrawTextureEx(Texture2D *texture, Vector2 *position, float rotation, float scale, Color *tint)
+{
+ DrawTextureEx(*texture, *position, rotation, scale, *tint);
+}
+
+void mDrawTextureRec(Texture2D *texture, Rectangle *source, Vector2 *position, Color *tint)
+{
+ DrawTextureRec(*texture, *source, *position, *tint);
+}
+
+void mDrawTexturePro(Texture2D *texture, Rectangle *source, Rectangle *dest, Vector2 *origin, float rotation, Color *tint)
+{
+ DrawTexturePro(*texture, *source, *dest, *origin, rotation, *tint);
+}
+
+void mDrawTextureNPatch(Texture2D *texture, NPatchInfo *nPatchInfo, Rectangle *dest, Vector2 *origin, float rotation, Color *tint)
+{
+ DrawTextureNPatch(*texture, *nPatchInfo, *dest, *origin, rotation, *tint);
+}
+
+void mFade(Color *out, Color *color, float alpha)
+{
+ *out = Fade(*color, alpha);
+}
+
+int mColorToInt(Color *color)
+{
+ return ColorToInt(*color);
+}
+
+void mColorNormalize(Vector4 *out, Color *color)
+{
+ *out = ColorNormalize(*color);
+}
+
+void mColorFromNormalized(Color *out, Vector4 *normalized)
+{
+ *out = ColorFromNormalized(*normalized);
+}
+
+void mColorToHSV(Vector3 *out, Color *color)
+{
+ *out = ColorToHSV(*color);
+}
+
+void mColorFromHSV(Color *out, float hue, float saturation, float value)
+{
+ *out = ColorFromHSV(hue, saturation, value);
+}
+
+void mColorTint(Color *out, Color *color, Color *tint)
+{
+ *out = ColorTint(*color, *tint);
+}
+
+void mColorBrightness(Color *out, Color *color, float factor)
+{
+ *out = ColorBrightness(*color, factor);
+}
+
+void mColorContrast(Color *out, Color *color, float contrast)
+{
+ *out = ColorContrast(*color, contrast);
+}
+
+void mColorAlpha(Color *out, Color *color, float alpha)
+{
+ *out = ColorAlpha(*color, alpha);
+}
+
+void mColorAlphaBlend(Color *out, Color *dst, Color *src, Color *tint)
+{
+ *out = ColorAlphaBlend(*dst, *src, *tint);
+}
+
+void mGetColor(Color *out, unsigned int hexValue)
+{
+ *out = GetColor(hexValue);
+}
+
+void mGetPixelColor(Color *out, void * srcPtr, int format)
+{
+ *out = GetPixelColor(srcPtr, format);
+}
+
+void mSetPixelColor(void * dstPtr, Color *color, int format)
+{
+ SetPixelColor(dstPtr, *color, format);
+}
+
+int mGetPixelDataSize(int width, int height, int format)
+{
+ return GetPixelDataSize(width, height, format);
+}
+
+void mGetFontDefault(Font *out)
+{
+ *out = GetFontDefault();
+}
+
+void mLoadFont(Font *out, const char * fileName)
+{
+ *out = LoadFont(fileName);
+}
+
+void mLoadFontEx(Font *out, const char * fileName, int fontSize, int * codepoints, int codepointCount)
+{
+ *out = LoadFontEx(fileName, fontSize, codepoints, codepointCount);
+}
+
+void mLoadFontFromImage(Font *out, Image *image, Color *key, int firstChar)
+{
+ *out = LoadFontFromImage(*image, *key, firstChar);
+}
+
+void mLoadFontFromMemory(Font *out, const char * fileType, const unsigned char * fileData, int dataSize, int fontSize, int * codepoints, int codepointCount)
+{
+ *out = LoadFontFromMemory(fileType, fileData, dataSize, fontSize, codepoints, codepointCount);
+}
+
+bool mIsFontReady(Font *font)
+{
+ return IsFontReady(*font);
+}
+
+GlyphInfo * mLoadFontData(const unsigned char * fileData, int dataSize, int fontSize, int * codepoints, int codepointCount, int type)
+{
+ return LoadFontData(fileData, dataSize, fontSize, codepoints, codepointCount, type);
+}
+
+void mUnloadFontData(GlyphInfo * glyphs, int glyphCount)
+{
+ UnloadFontData(glyphs, glyphCount);
+}
+
+void mUnloadFont(Font *font)
+{
+ UnloadFont(*font);
+}
+
+bool mExportFontAsCode(Font *font, const char * fileName)
+{
+ return ExportFontAsCode(*font, fileName);
+}
+
+void mDrawFPS(int posX, int posY)
+{
+ DrawFPS(posX, posY);
+}
+
+void mDrawText(const char * text, int posX, int posY, int fontSize, Color *color)
+{
+ DrawText(text, posX, posY, fontSize, *color);
+}
+
+void mDrawTextEx(Font *font, const char * text, Vector2 *position, float fontSize, float spacing, Color *tint)
+{
+ DrawTextEx(*font, text, *position, fontSize, spacing, *tint);
+}
+
+void mDrawTextPro(Font *font, const char * text, Vector2 *position, Vector2 *origin, float rotation, float fontSize, float spacing, Color *tint)
+{
+ DrawTextPro(*font, text, *position, *origin, rotation, fontSize, spacing, *tint);
+}
+
+void mDrawTextCodepoint(Font *font, int codepoint, Vector2 *position, float fontSize, Color *tint)
+{
+ DrawTextCodepoint(*font, codepoint, *position, fontSize, *tint);
+}
+
+void mDrawTextCodepoints(Font *font, const int * codepoints, int codepointCount, Vector2 *position, float fontSize, float spacing, Color *tint)
+{
+ DrawTextCodepoints(*font, codepoints, codepointCount, *position, fontSize, spacing, *tint);
+}
+
+void mSetTextLineSpacing(int spacing)
+{
+ SetTextLineSpacing(spacing);
+}
+
+int mMeasureText(const char * text, int fontSize)
+{
+ return MeasureText(text, fontSize);
+}
+
+void mMeasureTextEx(Vector2 *out, Font *font, const char * text, float fontSize, float spacing)
+{
+ *out = MeasureTextEx(*font, text, fontSize, spacing);
+}
+
+int mGetGlyphIndex(Font *font, int codepoint)
+{
+ return GetGlyphIndex(*font, codepoint);
+}
+
+void mGetGlyphInfo(GlyphInfo *out, Font *font, int codepoint)
+{
+ *out = GetGlyphInfo(*font, codepoint);
+}
+
+void mGetGlyphAtlasRec(Rectangle *out, Font *font, int codepoint)
+{
+ *out = GetGlyphAtlasRec(*font, codepoint);
+}
+
+char * mLoadUTF8(const int * codepoints, int length)
+{
+ return LoadUTF8(codepoints, length);
+}
+
+void mUnloadUTF8(char * text)
+{
+ UnloadUTF8(text);
+}
+
+int * mLoadCodepoints(const char * text, int * count)
+{
+ return LoadCodepoints(text, count);
+}
+
+void mUnloadCodepoints(int * codepoints)
+{
+ UnloadCodepoints(codepoints);
+}
+
+int mGetCodepointCount(const char * text)
+{
+ return GetCodepointCount(text);
+}
+
+int mGetCodepoint(const char * text, int * codepointSize)
+{
+ return GetCodepoint(text, codepointSize);
+}
+
+int mGetCodepointNext(const char * text, int * codepointSize)
+{
+ return GetCodepointNext(text, codepointSize);
+}
+
+int mGetCodepointPrevious(const char * text, int * codepointSize)
+{
+ return GetCodepointPrevious(text, codepointSize);
+}
+
+const char * mCodepointToUTF8(int codepoint, int * utf8Size)
+{
+ return CodepointToUTF8(codepoint, utf8Size);
+}
+
+int mTextCopy(char * dst, const char * src)
+{
+ return TextCopy(dst, src);
+}
+
+bool mTextIsEqual(const char * text1, const char * text2)
+{
+ return TextIsEqual(text1, text2);
+}
+
+unsigned int mTextLength(const char * text)
+{
+ return TextLength(text);
+}
+
+const char * mTextSubtext(const char * text, int position, int length)
+{
+ return TextSubtext(text, position, length);
+}
+
+char * mTextReplace(const char * text, const char * replace, const char * by)
+{
+ return TextReplace(text, replace, by);
+}
+
+char * mTextInsert(const char * text, const char * insert, int position)
+{
+ return TextInsert(text, insert, position);
+}
+
+int mTextFindIndex(const char * text, const char * find)
+{
+ return TextFindIndex(text, find);
+}
+
+const char * mTextToUpper(const char * text)
+{
+ return TextToUpper(text);
+}
+
+const char * mTextToLower(const char * text)
+{
+ return TextToLower(text);
+}
+
+const char * mTextToPascal(const char * text)
+{
+ return TextToPascal(text);
+}
+
+int mTextToInteger(const char * text)
+{
+ return TextToInteger(text);
+}
+
+float mTextToFloat(const char * text)
+{
+ return TextToFloat(text);
+}
+
+void mDrawLine3D(Vector3 *startPos, Vector3 *endPos, Color *color)
+{
+ DrawLine3D(*startPos, *endPos, *color);
+}
+
+void mDrawPoint3D(Vector3 *position, Color *color)
+{
+ DrawPoint3D(*position, *color);
+}
+
+void mDrawCircle3D(Vector3 *center, float radius, Vector3 *rotationAxis, float rotationAngle, Color *color)
+{
+ DrawCircle3D(*center, radius, *rotationAxis, rotationAngle, *color);
+}
+
+void mDrawTriangle3D(Vector3 *v1, Vector3 *v2, Vector3 *v3, Color *color)
+{
+ DrawTriangle3D(*v1, *v2, *v3, *color);
+}
+
+void mDrawTriangleStrip3D(Vector3 * points, int pointCount, Color *color)
+{
+ DrawTriangleStrip3D(points, pointCount, *color);
+}
+
+void mDrawCube(Vector3 *position, float width, float height, float length, Color *color)
+{
+ DrawCube(*position, width, height, length, *color);
+}
+
+void mDrawCubeV(Vector3 *position, Vector3 *size, Color *color)
+{
+ DrawCubeV(*position, *size, *color);
+}
+
+void mDrawCubeWires(Vector3 *position, float width, float height, float length, Color *color)
+{
+ DrawCubeWires(*position, width, height, length, *color);
+}
+
+void mDrawCubeWiresV(Vector3 *position, Vector3 *size, Color *color)
+{
+ DrawCubeWiresV(*position, *size, *color);
+}
+
+void mDrawSphere(Vector3 *centerPos, float radius, Color *color)
+{
+ DrawSphere(*centerPos, radius, *color);
+}
+
+void mDrawSphereEx(Vector3 *centerPos, float radius, int rings, int slices, Color *color)
+{
+ DrawSphereEx(*centerPos, radius, rings, slices, *color);
+}
+
+void mDrawSphereWires(Vector3 *centerPos, float radius, int rings, int slices, Color *color)
+{
+ DrawSphereWires(*centerPos, radius, rings, slices, *color);
+}
+
+void mDrawCylinder(Vector3 *position, float radiusTop, float radiusBottom, float height, int slices, Color *color)
+{
+ DrawCylinder(*position, radiusTop, radiusBottom, height, slices, *color);
+}
+
+void mDrawCylinderEx(Vector3 *startPos, Vector3 *endPos, float startRadius, float endRadius, int sides, Color *color)
+{
+ DrawCylinderEx(*startPos, *endPos, startRadius, endRadius, sides, *color);
+}
+
+void mDrawCylinderWires(Vector3 *position, float radiusTop, float radiusBottom, float height, int slices, Color *color)
+{
+ DrawCylinderWires(*position, radiusTop, radiusBottom, height, slices, *color);
+}
+
+void mDrawCylinderWiresEx(Vector3 *startPos, Vector3 *endPos, float startRadius, float endRadius, int sides, Color *color)
+{
+ DrawCylinderWiresEx(*startPos, *endPos, startRadius, endRadius, sides, *color);
+}
+
+void mDrawCapsule(Vector3 *startPos, Vector3 *endPos, float radius, int slices, int rings, Color *color)
+{
+ DrawCapsule(*startPos, *endPos, radius, slices, rings, *color);
+}
+
+void mDrawCapsuleWires(Vector3 *startPos, Vector3 *endPos, float radius, int slices, int rings, Color *color)
+{
+ DrawCapsuleWires(*startPos, *endPos, radius, slices, rings, *color);
+}
+
+void mDrawPlane(Vector3 *centerPos, Vector2 *size, Color *color)
+{
+ DrawPlane(*centerPos, *size, *color);
+}
+
+void mDrawRay(Ray *ray, Color *color)
+{
+ DrawRay(*ray, *color);
+}
+
+void mDrawGrid(int slices, float spacing)
+{
+ DrawGrid(slices, spacing);
+}
+
+void mLoadModel(Model *out, const char * fileName)
+{
+ *out = LoadModel(fileName);
+}
+
+void mLoadModelFromMesh(Model *out, Mesh *mesh)
+{
+ *out = LoadModelFromMesh(*mesh);
+}
+
+bool mIsModelReady(Model *model)
+{
+ return IsModelReady(*model);
+}
+
+void mUnloadModel(Model *model)
+{
+ UnloadModel(*model);
+}
+
+void mGetModelBoundingBox(BoundingBox *out, Model *model)
+{
+ *out = GetModelBoundingBox(*model);
+}
+
+void mDrawModel(Model *model, Vector3 *position, float scale, Color *tint)
+{
+ DrawModel(*model, *position, scale, *tint);
+}
+
+void mDrawModelEx(Model *model, Vector3 *position, Vector3 *rotationAxis, float rotationAngle, Vector3 *scale, Color *tint)
+{
+ DrawModelEx(*model, *position, *rotationAxis, rotationAngle, *scale, *tint);
+}
+
+void mDrawModelWires(Model *model, Vector3 *position, float scale, Color *tint)
+{
+ DrawModelWires(*model, *position, scale, *tint);
+}
+
+void mDrawModelWiresEx(Model *model, Vector3 *position, Vector3 *rotationAxis, float rotationAngle, Vector3 *scale, Color *tint)
+{
+ DrawModelWiresEx(*model, *position, *rotationAxis, rotationAngle, *scale, *tint);
+}
+
+void mDrawBoundingBox(BoundingBox *box, Color *color)
+{
+ DrawBoundingBox(*box, *color);
+}
+
+void mDrawBillboard(Camera3D *camera, Texture2D *texture, Vector3 *position, float size, Color *tint)
+{
+ DrawBillboard(*camera, *texture, *position, size, *tint);
+}
+
+void mDrawBillboardRec(Camera3D *camera, Texture2D *texture, Rectangle *source, Vector3 *position, Vector2 *size, Color *tint)
+{
+ DrawBillboardRec(*camera, *texture, *source, *position, *size, *tint);
+}
+
+void mDrawBillboardPro(Camera3D *camera, Texture2D *texture, Rectangle *source, Vector3 *position, Vector3 *up, Vector2 *size, Vector2 *origin, float rotation, Color *tint)
+{
+ DrawBillboardPro(*camera, *texture, *source, *position, *up, *size, *origin, rotation, *tint);
+}
+
+void mUploadMesh(Mesh * mesh, bool dynamic)
+{
+ UploadMesh(mesh, dynamic);
+}
+
+void mUpdateMeshBuffer(Mesh *mesh, int index, const void * data, int dataSize, int offset)
+{
+ UpdateMeshBuffer(*mesh, index, data, dataSize, offset);
+}
+
+void mUnloadMesh(Mesh *mesh)
+{
+ UnloadMesh(*mesh);
+}
+
+void mDrawMesh(Mesh *mesh, Material *material, Matrix *transform)
+{
+ DrawMesh(*mesh, *material, *transform);
+}
+
+void mDrawMeshInstanced(Mesh *mesh, Material *material, const Matrix * transforms, int instances)
+{
+ DrawMeshInstanced(*mesh, *material, transforms, instances);
+}
+
+void mGetMeshBoundingBox(BoundingBox *out, Mesh *mesh)
+{
+ *out = GetMeshBoundingBox(*mesh);
+}
+
+void mGenMeshTangents(Mesh * mesh)
+{
+ GenMeshTangents(mesh);
+}
+
+bool mExportMesh(Mesh *mesh, const char * fileName)
+{
+ return ExportMesh(*mesh, fileName);
+}
+
+bool mExportMeshAsCode(Mesh *mesh, const char * fileName)
+{
+ return ExportMeshAsCode(*mesh, fileName);
+}
+
+void mGenMeshPoly(Mesh *out, int sides, float radius)
+{
+ *out = GenMeshPoly(sides, radius);
+}
+
+void mGenMeshPlane(Mesh *out, float width, float length, int resX, int resZ)
+{
+ *out = GenMeshPlane(width, length, resX, resZ);
+}
+
+void mGenMeshCube(Mesh *out, float width, float height, float length)
+{
+ *out = GenMeshCube(width, height, length);
+}
+
+void mGenMeshSphere(Mesh *out, float radius, int rings, int slices)
+{
+ *out = GenMeshSphere(radius, rings, slices);
+}
+
+void mGenMeshHemiSphere(Mesh *out, float radius, int rings, int slices)
+{
+ *out = GenMeshHemiSphere(radius, rings, slices);
+}
+
+void mGenMeshCylinder(Mesh *out, float radius, float height, int slices)
+{
+ *out = GenMeshCylinder(radius, height, slices);
+}
+
+void mGenMeshCone(Mesh *out, float radius, float height, int slices)
+{
+ *out = GenMeshCone(radius, height, slices);
+}
+
+void mGenMeshTorus(Mesh *out, float radius, float size, int radSeg, int sides)
+{
+ *out = GenMeshTorus(radius, size, radSeg, sides);
+}
+
+void mGenMeshKnot(Mesh *out, float radius, float size, int radSeg, int sides)
+{
+ *out = GenMeshKnot(radius, size, radSeg, sides);
+}
+
+void mGenMeshHeightmap(Mesh *out, Image *heightmap, Vector3 *size)
+{
+ *out = GenMeshHeightmap(*heightmap, *size);
+}
+
+void mGenMeshCubicmap(Mesh *out, Image *cubicmap, Vector3 *cubeSize)
+{
+ *out = GenMeshCubicmap(*cubicmap, *cubeSize);
+}
+
+Material * mLoadMaterials(const char * fileName, int * materialCount)
+{
+ return LoadMaterials(fileName, materialCount);
+}
+
+void mLoadMaterialDefault(Material *out)
+{
+ *out = LoadMaterialDefault();
+}
+
+bool mIsMaterialReady(Material *material)
+{
+ return IsMaterialReady(*material);
+}
+
+void mUnloadMaterial(Material *material)
+{
+ UnloadMaterial(*material);
+}
+
+void mSetMaterialTexture(Material * material, int mapType, Texture2D *texture)
+{
+ SetMaterialTexture(material, mapType, *texture);
+}
+
+void mSetModelMeshMaterial(Model * model, int meshId, int materialId)
+{
+ SetModelMeshMaterial(model, meshId, materialId);
+}
+
+ModelAnimation * mLoadModelAnimations(const char * fileName, int * animCount)
+{
+ return LoadModelAnimations(fileName, animCount);
+}
+
+void mUpdateModelAnimation(Model *model, ModelAnimation *anim, int frame)
+{
+ UpdateModelAnimation(*model, *anim, frame);
+}
+
+void mUnloadModelAnimation(ModelAnimation *anim)
+{
+ UnloadModelAnimation(*anim);
+}
+
+void mUnloadModelAnimations(ModelAnimation * animations, int animCount)
+{
+ UnloadModelAnimations(animations, animCount);
+}
+
+bool mIsModelAnimationValid(Model *model, ModelAnimation *anim)
+{
+ return IsModelAnimationValid(*model, *anim);
+}
+
+bool mCheckCollisionSpheres(Vector3 *center1, float radius1, Vector3 *center2, float radius2)
+{
+ return CheckCollisionSpheres(*center1, radius1, *center2, radius2);
+}
+
+bool mCheckCollisionBoxes(BoundingBox *box1, BoundingBox *box2)
+{
+ return CheckCollisionBoxes(*box1, *box2);
+}
+
+bool mCheckCollisionBoxSphere(BoundingBox *box, Vector3 *center, float radius)
+{
+ return CheckCollisionBoxSphere(*box, *center, radius);
+}
+
+void mGetRayCollisionSphere(RayCollision *out, Ray *ray, Vector3 *center, float radius)
+{
+ *out = GetRayCollisionSphere(*ray, *center, radius);
+}
+
+void mGetRayCollisionBox(RayCollision *out, Ray *ray, BoundingBox *box)
+{
+ *out = GetRayCollisionBox(*ray, *box);
+}
+
+void mGetRayCollisionMesh(RayCollision *out, Ray *ray, Mesh *mesh, Matrix *transform)
+{
+ *out = GetRayCollisionMesh(*ray, *mesh, *transform);
+}
+
+void mGetRayCollisionTriangle(RayCollision *out, Ray *ray, Vector3 *p1, Vector3 *p2, Vector3 *p3)
+{
+ *out = GetRayCollisionTriangle(*ray, *p1, *p2, *p3);
+}
+
+void mGetRayCollisionQuad(RayCollision *out, Ray *ray, Vector3 *p1, Vector3 *p2, Vector3 *p3, Vector3 *p4)
+{
+ *out = GetRayCollisionQuad(*ray, *p1, *p2, *p3, *p4);
+}
+
+void mInitAudioDevice(void)
+{
+ InitAudioDevice();
+}
+
+void mCloseAudioDevice(void)
+{
+ CloseAudioDevice();
+}
+
+bool mIsAudioDeviceReady(void)
+{
+ return IsAudioDeviceReady();
+}
+
+void mSetMasterVolume(float volume)
+{
+ SetMasterVolume(volume);
+}
+
+float mGetMasterVolume(void)
+{
+ return GetMasterVolume();
+}
+
+void mLoadWave(Wave *out, const char * fileName)
+{
+ *out = LoadWave(fileName);
+}
+
+void mLoadWaveFromMemory(Wave *out, const char * fileType, const unsigned char * fileData, int dataSize)
+{
+ *out = LoadWaveFromMemory(fileType, fileData, dataSize);
+}
+
+bool mIsWaveReady(Wave *wave)
+{
+ return IsWaveReady(*wave);
+}
+
+void mLoadSound(Sound *out, const char * fileName)
+{
+ *out = LoadSound(fileName);
+}
+
+void mLoadSoundFromWave(Sound *out, Wave *wave)
+{
+ *out = LoadSoundFromWave(*wave);
+}
+
+void mLoadSoundAlias(Sound *out, Sound *source)
+{
+ *out = LoadSoundAlias(*source);
+}
+
+bool mIsSoundReady(Sound *sound)
+{
+ return IsSoundReady(*sound);
+}
+
+void mUpdateSound(Sound *sound, const void * data, int sampleCount)
+{
+ UpdateSound(*sound, data, sampleCount);
+}
+
+void mUnloadWave(Wave *wave)
+{
+ UnloadWave(*wave);
+}
+
+void mUnloadSound(Sound *sound)
+{
+ UnloadSound(*sound);
+}
+
+void mUnloadSoundAlias(Sound *alias)
+{
+ UnloadSoundAlias(*alias);
+}
+
+bool mExportWave(Wave *wave, const char * fileName)
+{
+ return ExportWave(*wave, fileName);
+}
+
+bool mExportWaveAsCode(Wave *wave, const char * fileName)
+{
+ return ExportWaveAsCode(*wave, fileName);
+}
+
+void mPlaySound(Sound *sound)
+{
+ PlaySound(*sound);
+}
+
+void mStopSound(Sound *sound)
+{
+ StopSound(*sound);
+}
+
+void mPauseSound(Sound *sound)
+{
+ PauseSound(*sound);
+}
+
+void mResumeSound(Sound *sound)
+{
+ ResumeSound(*sound);
+}
+
+bool mIsSoundPlaying(Sound *sound)
+{
+ return IsSoundPlaying(*sound);
+}
+
+void mSetSoundVolume(Sound *sound, float volume)
+{
+ SetSoundVolume(*sound, volume);
+}
+
+void mSetSoundPitch(Sound *sound, float pitch)
+{
+ SetSoundPitch(*sound, pitch);
+}
+
+void mSetSoundPan(Sound *sound, float pan)
+{
+ SetSoundPan(*sound, pan);
+}
+
+void mWaveCopy(Wave *out, Wave *wave)
+{
+ *out = WaveCopy(*wave);
+}
+
+void mWaveCrop(Wave * wave, int initSample, int finalSample)
+{
+ WaveCrop(wave, initSample, finalSample);
+}
+
+void mWaveFormat(Wave * wave, int sampleRate, int sampleSize, int channels)
+{
+ WaveFormat(wave, sampleRate, sampleSize, channels);
+}
+
+float * mLoadWaveSamples(Wave *wave)
+{
+ return LoadWaveSamples(*wave);
+}
+
+void mUnloadWaveSamples(float * samples)
+{
+ UnloadWaveSamples(samples);
+}
+
+void mLoadMusicStream(Music *out, const char * fileName)
+{
+ *out = LoadMusicStream(fileName);
+}
+
+void mLoadMusicStreamFromMemory(Music *out, const char * fileType, const unsigned char * data, int dataSize)
+{
+ *out = LoadMusicStreamFromMemory(fileType, data, dataSize);
+}
+
+bool mIsMusicReady(Music *music)
+{
+ return IsMusicReady(*music);
+}
+
+void mUnloadMusicStream(Music *music)
+{
+ UnloadMusicStream(*music);
+}
+
+void mPlayMusicStream(Music *music)
+{
+ PlayMusicStream(*music);
+}
+
+bool mIsMusicStreamPlaying(Music *music)
+{
+ return IsMusicStreamPlaying(*music);
+}
+
+void mUpdateMusicStream(Music *music)
+{
+ UpdateMusicStream(*music);
+}
+
+void mStopMusicStream(Music *music)
+{
+ StopMusicStream(*music);
+}
+
+void mPauseMusicStream(Music *music)
+{
+ PauseMusicStream(*music);
+}
+
+void mResumeMusicStream(Music *music)
+{
+ ResumeMusicStream(*music);
+}
+
+void mSeekMusicStream(Music *music, float position)
+{
+ SeekMusicStream(*music, position);
+}
+
+void mSetMusicVolume(Music *music, float volume)
+{
+ SetMusicVolume(*music, volume);
+}
+
+void mSetMusicPitch(Music *music, float pitch)
+{
+ SetMusicPitch(*music, pitch);
+}
+
+void mSetMusicPan(Music *music, float pan)
+{
+ SetMusicPan(*music, pan);
+}
+
+float mGetMusicTimeLength(Music *music)
+{
+ return GetMusicTimeLength(*music);
+}
+
+float mGetMusicTimePlayed(Music *music)
+{
+ return GetMusicTimePlayed(*music);
+}
+
+void mLoadAudioStream(AudioStream *out, unsigned int sampleRate, unsigned int sampleSize, unsigned int channels)
+{
+ *out = LoadAudioStream(sampleRate, sampleSize, channels);
+}
+
+bool mIsAudioStreamReady(AudioStream *stream)
+{
+ return IsAudioStreamReady(*stream);
+}
+
+void mUnloadAudioStream(AudioStream *stream)
+{
+ UnloadAudioStream(*stream);
+}
+
+void mUpdateAudioStream(AudioStream *stream, const void * data, int frameCount)
+{
+ UpdateAudioStream(*stream, data, frameCount);
+}
+
+bool mIsAudioStreamProcessed(AudioStream *stream)
+{
+ return IsAudioStreamProcessed(*stream);
+}
+
+void mPlayAudioStream(AudioStream *stream)
+{
+ PlayAudioStream(*stream);
+}
+
+void mPauseAudioStream(AudioStream *stream)
+{
+ PauseAudioStream(*stream);
+}
+
+void mResumeAudioStream(AudioStream *stream)
+{
+ ResumeAudioStream(*stream);
+}
+
+bool mIsAudioStreamPlaying(AudioStream *stream)
+{
+ return IsAudioStreamPlaying(*stream);
+}
+
+void mStopAudioStream(AudioStream *stream)
+{
+ StopAudioStream(*stream);
+}
+
+void mSetAudioStreamVolume(AudioStream *stream, float volume)
+{
+ SetAudioStreamVolume(*stream, volume);
+}
+
+void mSetAudioStreamPitch(AudioStream *stream, float pitch)
+{
+ SetAudioStreamPitch(*stream, pitch);
+}
+
+void mSetAudioStreamPan(AudioStream *stream, float pan)
+{
+ SetAudioStreamPan(*stream, pan);
+}
+
+void mSetAudioStreamBufferSizeDefault(int size)
+{
+ SetAudioStreamBufferSizeDefault(size);
+}
+
+void mSetAudioStreamCallback(AudioStream *stream, AudioCallback callback)
+{
+ SetAudioStreamCallback(*stream, callback);
+}
+
+void mAttachAudioStreamProcessor(AudioStream *stream, AudioCallback processor)
+{
+ AttachAudioStreamProcessor(*stream, processor);
+}
+
+void mDetachAudioStreamProcessor(AudioStream *stream, AudioCallback processor)
+{
+ DetachAudioStreamProcessor(*stream, processor);
+}
+
+void mAttachAudioMixedProcessor(AudioCallback processor)
+{
+ AttachAudioMixedProcessor(processor);
+}
+
+void mDetachAudioMixedProcessor(AudioCallback processor)
+{
+ DetachAudioMixedProcessor(processor);
+}
+
+void mrlMatrixMode(int mode)
+{
+ rlMatrixMode(mode);
+}
+
+void mrlPushMatrix(void)
+{
+ rlPushMatrix();
+}
+
+void mrlPopMatrix(void)
+{
+ rlPopMatrix();
+}
+
+void mrlLoadIdentity(void)
+{
+ rlLoadIdentity();
+}
+
+void mrlTranslatef(float x, float y, float z)
+{
+ rlTranslatef(x, y, z);
+}
+
+void mrlRotatef(float angle, float x, float y, float z)
+{
+ rlRotatef(angle, x, y, z);
+}
+
+void mrlScalef(float x, float y, float z)
+{
+ rlScalef(x, y, z);
+}
+
+void mrlMultMatrixf(const float * matf)
+{
+ rlMultMatrixf(matf);
+}
+
+void mrlFrustum(double left, double right, double bottom, double top, double znear, double zfar)
+{
+ rlFrustum(left, right, bottom, top, znear, zfar);
+}
+
+void mrlOrtho(double left, double right, double bottom, double top, double znear, double zfar)
+{
+ rlOrtho(left, right, bottom, top, znear, zfar);
+}
+
+void mrlViewport(int x, int y, int width, int height)
+{
+ rlViewport(x, y, width, height);
+}
+
+void mrlBegin(int mode)
+{
+ rlBegin(mode);
+}
+
+void mrlEnd(void)
+{
+ rlEnd();
+}
+
+void mrlVertex2i(int x, int y)
+{
+ rlVertex2i(x, y);
+}
+
+void mrlVertex2f(float x, float y)
+{
+ rlVertex2f(x, y);
+}
+
+void mrlVertex3f(float x, float y, float z)
+{
+ rlVertex3f(x, y, z);
+}
+
+void mrlTexCoord2f(float x, float y)
+{
+ rlTexCoord2f(x, y);
+}
+
+void mrlNormal3f(float x, float y, float z)
+{
+ rlNormal3f(x, y, z);
+}
+
+void mrlColor4ub(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+ rlColor4ub(r, g, b, a);
+}
+
+void mrlColor3f(float x, float y, float z)
+{
+ rlColor3f(x, y, z);
+}
+
+void mrlColor4f(float x, float y, float z, float w)
+{
+ rlColor4f(x, y, z, w);
+}
+
+bool mrlEnableVertexArray(unsigned int vaoId)
+{
+ return rlEnableVertexArray(vaoId);
+}
+
+void mrlDisableVertexArray(void)
+{
+ rlDisableVertexArray();
+}
+
+void mrlEnableVertexBuffer(unsigned int id)
+{
+ rlEnableVertexBuffer(id);
+}
+
+void mrlDisableVertexBuffer(void)
+{
+ rlDisableVertexBuffer();
+}
+
+void mrlEnableVertexBufferElement(unsigned int id)
+{
+ rlEnableVertexBufferElement(id);
+}
+
+void mrlDisableVertexBufferElement(void)
+{
+ rlDisableVertexBufferElement();
+}
+
+void mrlEnableVertexAttribute(unsigned int index)
+{
+ rlEnableVertexAttribute(index);
+}
+
+void mrlDisableVertexAttribute(unsigned int index)
+{
+ rlDisableVertexAttribute(index);
+}
+
+void mrlActiveTextureSlot(int slot)
+{
+ rlActiveTextureSlot(slot);
+}
+
+void mrlEnableTexture(unsigned int id)
+{
+ rlEnableTexture(id);
+}
+
+void mrlDisableTexture(void)
+{
+ rlDisableTexture();
+}
+
+void mrlEnableTextureCubemap(unsigned int id)
+{
+ rlEnableTextureCubemap(id);
+}
+
+void mrlDisableTextureCubemap(void)
+{
+ rlDisableTextureCubemap();
+}
+
+void mrlTextureParameters(unsigned int id, int param, int value)
+{
+ rlTextureParameters(id, param, value);
+}
+
+void mrlCubemapParameters(unsigned int id, int param, int value)
+{
+ rlCubemapParameters(id, param, value);
+}
+
+void mrlEnableShader(unsigned int id)
+{
+ rlEnableShader(id);
+}
+
+void mrlDisableShader(void)
+{
+ rlDisableShader();
+}
+
+void mrlEnableFramebuffer(unsigned int id)
+{
+ rlEnableFramebuffer(id);
+}
+
+void mrlDisableFramebuffer(void)
+{
+ rlDisableFramebuffer();
+}
+
+void mrlActiveDrawBuffers(int count)
+{
+ rlActiveDrawBuffers(count);
+}
+
+void mrlBlitFramebuffer(int srcX, int srcY, int srcWidth, int srcHeight, int dstX, int dstY, int dstWidth, int dstHeight, int bufferMask)
+{
+ rlBlitFramebuffer(srcX, srcY, srcWidth, srcHeight, dstX, dstY, dstWidth, dstHeight, bufferMask);
+}
+
+void mrlBindFramebuffer(unsigned int target, unsigned int framebuffer)
+{
+ rlBindFramebuffer(target, framebuffer);
+}
+
+void mrlEnableColorBlend(void)
+{
+ rlEnableColorBlend();
+}
+
+void mrlDisableColorBlend(void)
+{
+ rlDisableColorBlend();
+}
+
+void mrlEnableDepthTest(void)
+{
+ rlEnableDepthTest();
+}
+
+void mrlDisableDepthTest(void)
+{
+ rlDisableDepthTest();
+}
+
+void mrlEnableDepthMask(void)
+{
+ rlEnableDepthMask();
+}
+
+void mrlDisableDepthMask(void)
+{
+ rlDisableDepthMask();
+}
+
+void mrlEnableBackfaceCulling(void)
+{
+ rlEnableBackfaceCulling();
+}
+
+void mrlDisableBackfaceCulling(void)
+{
+ rlDisableBackfaceCulling();
+}
+
+void mrlColorMask(bool r, bool g, bool b, bool a)
+{
+ rlColorMask(r, g, b, a);
+}
+
+void mrlSetCullFace(int mode)
+{
+ rlSetCullFace(mode);
+}
+
+void mrlEnableScissorTest(void)
+{
+ rlEnableScissorTest();
+}
+
+void mrlDisableScissorTest(void)
+{
+ rlDisableScissorTest();
+}
+
+void mrlScissor(int x, int y, int width, int height)
+{
+ rlScissor(x, y, width, height);
+}
+
+void mrlEnableWireMode(void)
+{
+ rlEnableWireMode();
+}
+
+void mrlEnablePointMode(void)
+{
+ rlEnablePointMode();
+}
+
+void mrlDisableWireMode(void)
+{
+ rlDisableWireMode();
+}
+
+void mrlSetLineWidth(float width)
+{
+ rlSetLineWidth(width);
+}
+
+float mrlGetLineWidth(void)
+{
+ return rlGetLineWidth();
+}
+
+void mrlEnableSmoothLines(void)
+{
+ rlEnableSmoothLines();
+}
+
+void mrlDisableSmoothLines(void)
+{
+ rlDisableSmoothLines();
+}
+
+void mrlEnableStereoRender(void)
+{
+ rlEnableStereoRender();
+}
+
+void mrlDisableStereoRender(void)
+{
+ rlDisableStereoRender();
+}
+
+bool mrlIsStereoRenderEnabled(void)
+{
+ return rlIsStereoRenderEnabled();
+}
+
+void mrlClearColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+ rlClearColor(r, g, b, a);
+}
+
+void mrlClearScreenBuffers(void)
+{
+ rlClearScreenBuffers();
+}
+
+void mrlCheckErrors(void)
+{
+ rlCheckErrors();
+}
+
+void mrlSetBlendMode(int mode)
+{
+ rlSetBlendMode(mode);
+}
+
+void mrlSetBlendFactors(int glSrcFactor, int glDstFactor, int glEquation)
+{
+ rlSetBlendFactors(glSrcFactor, glDstFactor, glEquation);
+}
+
+void mrlSetBlendFactorsSeparate(int glSrcRGB, int glDstRGB, int glSrcAlpha, int glDstAlpha, int glEqRGB, int glEqAlpha)
+{
+ rlSetBlendFactorsSeparate(glSrcRGB, glDstRGB, glSrcAlpha, glDstAlpha, glEqRGB, glEqAlpha);
+}
+
+void mrlglInit(int width, int height)
+{
+ rlglInit(width, height);
+}
+
+void mrlglClose(void)
+{
+ rlglClose();
+}
+
+void mrlLoadExtensions(void * loader)
+{
+ rlLoadExtensions(loader);
+}
+
+int mrlGetVersion(void)
+{
+ return rlGetVersion();
+}
+
+void mrlSetFramebufferWidth(int width)
+{
+ rlSetFramebufferWidth(width);
+}
+
+int mrlGetFramebufferWidth(void)
+{
+ return rlGetFramebufferWidth();
+}
+
+void mrlSetFramebufferHeight(int height)
+{
+ rlSetFramebufferHeight(height);
+}
+
+int mrlGetFramebufferHeight(void)
+{
+ return rlGetFramebufferHeight();
+}
+
+unsigned int mrlGetTextureIdDefault(void)
+{
+ return rlGetTextureIdDefault();
+}
+
+unsigned int mrlGetShaderIdDefault(void)
+{
+ return rlGetShaderIdDefault();
+}
+
+int * mrlGetShaderLocsDefault(void)
+{
+ return rlGetShaderLocsDefault();
+}
+
+void mrlLoadRenderBatch(rlRenderBatch *out, int numBuffers, int bufferElements)
+{
+ *out = rlLoadRenderBatch(numBuffers, bufferElements);
+}
+
+void mrlUnloadRenderBatch(rlRenderBatch *batch)
+{
+ rlUnloadRenderBatch(*batch);
+}
+
+void mrlDrawRenderBatch(rlRenderBatch * batch)
+{
+ rlDrawRenderBatch(batch);
+}
+
+void mrlSetRenderBatchActive(rlRenderBatch * batch)
+{
+ rlSetRenderBatchActive(batch);
+}
+
+void mrlDrawRenderBatchActive(void)
+{
+ rlDrawRenderBatchActive();
+}
+
+bool mrlCheckRenderBatchLimit(int vCount)
+{
+ return rlCheckRenderBatchLimit(vCount);
+}
+
+void mrlSetTexture(unsigned int id)
+{
+ rlSetTexture(id);
+}
+
+unsigned int mrlLoadVertexArray(void)
+{
+ return rlLoadVertexArray();
+}
+
+unsigned int mrlLoadVertexBuffer(const void * buffer, int size, bool dynamic)
+{
+ return rlLoadVertexBuffer(buffer, size, dynamic);
+}
+
+unsigned int mrlLoadVertexBufferElement(const void * buffer, int size, bool dynamic)
+{
+ return rlLoadVertexBufferElement(buffer, size, dynamic);
+}
+
+void mrlUpdateVertexBuffer(unsigned int bufferId, const void * data, int dataSize, int offset)
+{
+ rlUpdateVertexBuffer(bufferId, data, dataSize, offset);
+}
+
+void mrlUpdateVertexBufferElements(unsigned int id, const void * data, int dataSize, int offset)
+{
+ rlUpdateVertexBufferElements(id, data, dataSize, offset);
+}
+
+void mrlUnloadVertexArray(unsigned int vaoId)
+{
+ rlUnloadVertexArray(vaoId);
+}
+
+void mrlUnloadVertexBuffer(unsigned int vboId)
+{
+ rlUnloadVertexBuffer(vboId);
+}
+
+void mrlSetVertexAttribute(unsigned int index, int compSize, int type, bool normalized, int stride, const void * pointer)
+{
+ rlSetVertexAttribute(index, compSize, type, normalized, stride, pointer);
+}
+
+void mrlSetVertexAttributeDivisor(unsigned int index, int divisor)
+{
+ rlSetVertexAttributeDivisor(index, divisor);
+}
+
+void mrlSetVertexAttributeDefault(int locIndex, const void * value, int attribType, int count)
+{
+ rlSetVertexAttributeDefault(locIndex, value, attribType, count);
+}
+
+void mrlDrawVertexArray(int offset, int count)
+{
+ rlDrawVertexArray(offset, count);
+}
+
+void mrlDrawVertexArrayElements(int offset, int count, const void * buffer)
+{
+ rlDrawVertexArrayElements(offset, count, buffer);
+}
+
+void mrlDrawVertexArrayInstanced(int offset, int count, int instances)
+{
+ rlDrawVertexArrayInstanced(offset, count, instances);
+}
+
+void mrlDrawVertexArrayElementsInstanced(int offset, int count, const void * buffer, int instances)
+{
+ rlDrawVertexArrayElementsInstanced(offset, count, buffer, instances);
+}
+
+unsigned int mrlLoadTexture(const void * data, int width, int height, int format, int mipmapCount)
+{
+ return rlLoadTexture(data, width, height, format, mipmapCount);
+}
+
+unsigned int mrlLoadTextureDepth(int width, int height, bool useRenderBuffer)
+{
+ return rlLoadTextureDepth(width, height, useRenderBuffer);
+}
+
+unsigned int mrlLoadTextureCubemap(const void * data, int size, int format)
+{
+ return rlLoadTextureCubemap(data, size, format);
+}
+
+void mrlUpdateTexture(unsigned int id, int offsetX, int offsetY, int width, int height, int format, const void * data)
+{
+ rlUpdateTexture(id, offsetX, offsetY, width, height, format, data);
+}
+
+void mrlGetGlTextureFormats(int format, unsigned int * glInternalFormat, unsigned int * glFormat, unsigned int * glType)
+{
+ rlGetGlTextureFormats(format, glInternalFormat, glFormat, glType);
+}
+
+const char * mrlGetPixelFormatName(unsigned int format)
+{
+ return rlGetPixelFormatName(format);
+}
+
+void mrlUnloadTexture(unsigned int id)
+{
+ rlUnloadTexture(id);
+}
+
+void mrlGenTextureMipmaps(unsigned int id, int width, int height, int format, int * mipmaps)
+{
+ rlGenTextureMipmaps(id, width, height, format, mipmaps);
+}
+
+void * mrlReadTexturePixels(unsigned int id, int width, int height, int format)
+{
+ return rlReadTexturePixels(id, width, height, format);
+}
+
+unsigned char * mrlReadScreenPixels(int width, int height)
+{
+ return rlReadScreenPixels(width, height);
+}
+
+unsigned int mrlLoadFramebuffer(int width, int height)
+{
+ return rlLoadFramebuffer(width, height);
+}
+
+void mrlFramebufferAttach(unsigned int fboId, unsigned int texId, int attachType, int texType, int mipLevel)
+{
+ rlFramebufferAttach(fboId, texId, attachType, texType, mipLevel);
+}
+
+bool mrlFramebufferComplete(unsigned int id)
+{
+ return rlFramebufferComplete(id);
+}
+
+void mrlUnloadFramebuffer(unsigned int id)
+{
+ rlUnloadFramebuffer(id);
+}
+
+unsigned int mrlLoadShaderCode(const char * vsCode, const char * fsCode)
+{
+ return rlLoadShaderCode(vsCode, fsCode);
+}
+
+unsigned int mrlCompileShader(const char * shaderCode, int type)
+{
+ return rlCompileShader(shaderCode, type);
+}
+
+unsigned int mrlLoadShaderProgram(unsigned int vShaderId, unsigned int fShaderId)
+{
+ return rlLoadShaderProgram(vShaderId, fShaderId);
+}
+
+void mrlUnloadShaderProgram(unsigned int id)
+{
+ rlUnloadShaderProgram(id);
+}
+
+int mrlGetLocationUniform(unsigned int shaderId, const char * uniformName)
+{
+ return rlGetLocationUniform(shaderId, uniformName);
+}
+
+int mrlGetLocationAttrib(unsigned int shaderId, const char * attribName)
+{
+ return rlGetLocationAttrib(shaderId, attribName);
+}
+
+void mrlSetUniform(int locIndex, const void * value, int uniformType, int count)
+{
+ rlSetUniform(locIndex, value, uniformType, count);
+}
+
+void mrlSetUniformMatrix(int locIndex, Matrix *mat)
+{
+ rlSetUniformMatrix(locIndex, *mat);
+}
+
+void mrlSetUniformSampler(int locIndex, unsigned int textureId)
+{
+ rlSetUniformSampler(locIndex, textureId);
+}
+
+void mrlSetShader(unsigned int id, int * locs)
+{
+ rlSetShader(id, locs);
+}
+
+unsigned int mrlLoadComputeShaderProgram(unsigned int shaderId)
+{
+ return rlLoadComputeShaderProgram(shaderId);
+}
+
+void mrlComputeShaderDispatch(unsigned int groupX, unsigned int groupY, unsigned int groupZ)
+{
+ rlComputeShaderDispatch(groupX, groupY, groupZ);
+}
+
+unsigned int mrlLoadShaderBuffer(unsigned int size, const void * data, int usageHint)
+{
+ return rlLoadShaderBuffer(size, data, usageHint);
+}
+
+void mrlUnloadShaderBuffer(unsigned int ssboId)
+{
+ rlUnloadShaderBuffer(ssboId);
+}
+
+void mrlUpdateShaderBuffer(unsigned int id, const void * data, unsigned int dataSize, unsigned int offset)
+{
+ rlUpdateShaderBuffer(id, data, dataSize, offset);
+}
+
+void mrlBindShaderBuffer(unsigned int id, unsigned int index)
+{
+ rlBindShaderBuffer(id, index);
+}
+
+void mrlReadShaderBuffer(unsigned int id, void * dest, unsigned int count, unsigned int offset)
+{
+ rlReadShaderBuffer(id, dest, count, offset);
+}
+
+void mrlCopyShaderBuffer(unsigned int destId, unsigned int srcId, unsigned int destOffset, unsigned int srcOffset, unsigned int count)
+{
+ rlCopyShaderBuffer(destId, srcId, destOffset, srcOffset, count);
+}
+
+unsigned int mrlGetShaderBufferSize(unsigned int id)
+{
+ return rlGetShaderBufferSize(id);
+}
+
+void mrlBindImageTexture(unsigned int id, unsigned int index, int format, bool readonly)
+{
+ rlBindImageTexture(id, index, format, readonly);
+}
+
+void mrlGetMatrixModelview(Matrix *out)
+{
+ *out = rlGetMatrixModelview();
+}
+
+void mrlGetMatrixProjection(Matrix *out)
+{
+ *out = rlGetMatrixProjection();
+}
+
+void mrlGetMatrixTransform(Matrix *out)
+{
+ *out = rlGetMatrixTransform();
+}
+
+void mrlGetMatrixProjectionStereo(Matrix *out, int eye)
+{
+ *out = rlGetMatrixProjectionStereo(eye);
+}
+
+void mrlGetMatrixViewOffsetStereo(Matrix *out, int eye)
+{
+ *out = rlGetMatrixViewOffsetStereo(eye);
+}
+
+void mrlSetMatrixProjection(Matrix *proj)
+{
+ rlSetMatrixProjection(*proj);
+}
+
+void mrlSetMatrixModelview(Matrix *view)
+{
+ rlSetMatrixModelview(*view);
+}
+
+void mrlSetMatrixProjectionStereo(Matrix *right, Matrix *left)
+{
+ rlSetMatrixProjectionStereo(*right, *left);
+}
+
+void mrlSetMatrixViewOffsetStereo(Matrix *right, Matrix *left)
+{
+ rlSetMatrixViewOffsetStereo(*right, *left);
+}
+
+void mrlLoadDrawCube(void)
+{
+ rlLoadDrawCube();
+}
+
+void mrlLoadDrawQuad(void)
+{
+ rlLoadDrawQuad();
+}
+
+float mClamp(float value, float min, float max)
+{
+ return Clamp(value, min, max);
+}
+
+float mLerp(float start, float end, float amount)
+{
+ return Lerp(start, end, amount);
+}
+
+float mNormalize(float value, float start, float end)
+{
+ return Normalize(value, start, end);
+}
+
+float mRemap(float value, float inputStart, float inputEnd, float outputStart, float outputEnd)
+{
+ return Remap(value, inputStart, inputEnd, outputStart, outputEnd);
+}
+
+float mWrap(float value, float min, float max)
+{
+ return Wrap(value, min, max);
+}
+
+int mFloatEquals(float x, float y)
+{
+ return FloatEquals(x, y);
+}
+
+void mVector2Zero(Vector2 *out)
+{
+ *out = Vector2Zero();
+}
+
+void mVector2One(Vector2 *out)
+{
+ *out = Vector2One();
+}
+
+void mVector2Add(Vector2 *out, Vector2 *v1, Vector2 *v2)
+{
+ *out = Vector2Add(*v1, *v2);
+}
+
+void mVector2AddValue(Vector2 *out, Vector2 *v, float add)
+{
+ *out = Vector2AddValue(*v, add);
+}
+
+void mVector2Subtract(Vector2 *out, Vector2 *v1, Vector2 *v2)
+{
+ *out = Vector2Subtract(*v1, *v2);
+}
+
+void mVector2SubtractValue(Vector2 *out, Vector2 *v, float sub)
+{
+ *out = Vector2SubtractValue(*v, sub);
+}
+
+float mVector2Length(Vector2 *v)
+{
+ return Vector2Length(*v);
+}
+
+float mVector2LengthSqr(Vector2 *v)
+{
+ return Vector2LengthSqr(*v);
+}
+
+float mVector2DotProduct(Vector2 *v1, Vector2 *v2)
+{
+ return Vector2DotProduct(*v1, *v2);
+}
+
+float mVector2Distance(Vector2 *v1, Vector2 *v2)
+{
+ return Vector2Distance(*v1, *v2);
+}
+
+float mVector2DistanceSqr(Vector2 *v1, Vector2 *v2)
+{
+ return Vector2DistanceSqr(*v1, *v2);
+}
+
+float mVector2Angle(Vector2 *v1, Vector2 *v2)
+{
+ return Vector2Angle(*v1, *v2);
+}
+
+float mVector2LineAngle(Vector2 *start, Vector2 *end)
+{
+ return Vector2LineAngle(*start, *end);
+}
+
+void mVector2Scale(Vector2 *out, Vector2 *v, float scale)
+{
+ *out = Vector2Scale(*v, scale);
+}
+
+void mVector2Multiply(Vector2 *out, Vector2 *v1, Vector2 *v2)
+{
+ *out = Vector2Multiply(*v1, *v2);
+}
+
+void mVector2Negate(Vector2 *out, Vector2 *v)
+{
+ *out = Vector2Negate(*v);
+}
+
+void mVector2Divide(Vector2 *out, Vector2 *v1, Vector2 *v2)
+{
+ *out = Vector2Divide(*v1, *v2);
+}
+
+void mVector2Normalize(Vector2 *out, Vector2 *v)
+{
+ *out = Vector2Normalize(*v);
+}
+
+void mVector2Transform(Vector2 *out, Vector2 *v, Matrix *mat)
+{
+ *out = Vector2Transform(*v, *mat);
+}
+
+void mVector2Lerp(Vector2 *out, Vector2 *v1, Vector2 *v2, float amount)
+{
+ *out = Vector2Lerp(*v1, *v2, amount);
+}
+
+void mVector2Reflect(Vector2 *out, Vector2 *v, Vector2 *normal)
+{
+ *out = Vector2Reflect(*v, *normal);
+}
+
+void mVector2Rotate(Vector2 *out, Vector2 *v, float angle)
+{
+ *out = Vector2Rotate(*v, angle);
+}
+
+void mVector2MoveTowards(Vector2 *out, Vector2 *v, Vector2 *target, float maxDistance)
+{
+ *out = Vector2MoveTowards(*v, *target, maxDistance);
+}
+
+void mVector2Invert(Vector2 *out, Vector2 *v)
+{
+ *out = Vector2Invert(*v);
+}
+
+void mVector2Clamp(Vector2 *out, Vector2 *v, Vector2 *min, Vector2 *max)
+{
+ *out = Vector2Clamp(*v, *min, *max);
+}
+
+void mVector2ClampValue(Vector2 *out, Vector2 *v, float min, float max)
+{
+ *out = Vector2ClampValue(*v, min, max);
+}
+
+int mVector2Equals(Vector2 *p, Vector2 *q)
+{
+ return Vector2Equals(*p, *q);
+}
+
+void mVector3Zero(Vector3 *out)
+{
+ *out = Vector3Zero();
+}
+
+void mVector3One(Vector3 *out)
+{
+ *out = Vector3One();
+}
+
+void mVector3Add(Vector3 *out, Vector3 *v1, Vector3 *v2)
+{
+ *out = Vector3Add(*v1, *v2);
+}
+
+void mVector3AddValue(Vector3 *out, Vector3 *v, float add)
+{
+ *out = Vector3AddValue(*v, add);
+}
+
+void mVector3Subtract(Vector3 *out, Vector3 *v1, Vector3 *v2)
+{
+ *out = Vector3Subtract(*v1, *v2);
+}
+
+void mVector3SubtractValue(Vector3 *out, Vector3 *v, float sub)
+{
+ *out = Vector3SubtractValue(*v, sub);
+}
+
+void mVector3Scale(Vector3 *out, Vector3 *v, float scalar)
+{
+ *out = Vector3Scale(*v, scalar);
+}
+
+void mVector3Multiply(Vector3 *out, Vector3 *v1, Vector3 *v2)
+{
+ *out = Vector3Multiply(*v1, *v2);
+}
+
+void mVector3CrossProduct(Vector3 *out, Vector3 *v1, Vector3 *v2)
+{
+ *out = Vector3CrossProduct(*v1, *v2);
+}
+
+void mVector3Perpendicular(Vector3 *out, Vector3 *v)
+{
+ *out = Vector3Perpendicular(*v);
+}
+
+float mVector3Length(const Vector3 *v)
+{
+ return Vector3Length(*v);
+}
+
+float mVector3LengthSqr(const Vector3 *v)
+{
+ return Vector3LengthSqr(*v);
+}
+
+float mVector3DotProduct(Vector3 *v1, Vector3 *v2)
+{
+ return Vector3DotProduct(*v1, *v2);
+}
+
+float mVector3Distance(Vector3 *v1, Vector3 *v2)
+{
+ return Vector3Distance(*v1, *v2);
+}
+
+float mVector3DistanceSqr(Vector3 *v1, Vector3 *v2)
+{
+ return Vector3DistanceSqr(*v1, *v2);
+}
+
+float mVector3Angle(Vector3 *v1, Vector3 *v2)
+{
+ return Vector3Angle(*v1, *v2);
+}
+
+void mVector3Negate(Vector3 *out, Vector3 *v)
+{
+ *out = Vector3Negate(*v);
+}
+
+void mVector3Divide(Vector3 *out, Vector3 *v1, Vector3 *v2)
+{
+ *out = Vector3Divide(*v1, *v2);
+}
+
+void mVector3Normalize(Vector3 *out, Vector3 *v)
+{
+ *out = Vector3Normalize(*v);
+}
+
+void mVector3Project(Vector3 *out, Vector3 *v1, Vector3 *v2)
+{
+ *out = Vector3Project(*v1, *v2);
+}
+
+void mVector3Reject(Vector3 *out, Vector3 *v1, Vector3 *v2)
+{
+ *out = Vector3Reject(*v1, *v2);
+}
+
+void mVector3OrthoNormalize(Vector3 * v1, Vector3 * v2)
+{
+ Vector3OrthoNormalize(v1, v2);
+}
+
+void mVector3Transform(Vector3 *out, Vector3 *v, Matrix *mat)
+{
+ *out = Vector3Transform(*v, *mat);
+}
+
+void mVector3RotateByQuaternion(Vector3 *out, Vector3 *v, Vector4 *q)
+{
+ *out = Vector3RotateByQuaternion(*v, *q);
+}
+
+void mVector3RotateByAxisAngle(Vector3 *out, Vector3 *v, Vector3 *axis, float angle)
+{
+ *out = Vector3RotateByAxisAngle(*v, *axis, angle);
+}
+
+void mVector3Lerp(Vector3 *out, Vector3 *v1, Vector3 *v2, float amount)
+{
+ *out = Vector3Lerp(*v1, *v2, amount);
+}
+
+void mVector3Reflect(Vector3 *out, Vector3 *v, Vector3 *normal)
+{
+ *out = Vector3Reflect(*v, *normal);
+}
+
+void mVector3Min(Vector3 *out, Vector3 *v1, Vector3 *v2)
+{
+ *out = Vector3Min(*v1, *v2);
+}
+
+void mVector3Max(Vector3 *out, Vector3 *v1, Vector3 *v2)
+{
+ *out = Vector3Max(*v1, *v2);
+}
+
+void mVector3Barycenter(Vector3 *out, Vector3 *p, Vector3 *a, Vector3 *b, Vector3 *c)
+{
+ *out = Vector3Barycenter(*p, *a, *b, *c);
+}
+
+void mVector3Unproject(Vector3 *out, Vector3 *source, Matrix *projection, Matrix *view)
+{
+ *out = Vector3Unproject(*source, *projection, *view);
+}
+
+void mVector3ToFloatV(float3 *out, Vector3 *v)
+{
+ *out = Vector3ToFloatV(*v);
+}
+
+void mVector3Invert(Vector3 *out, Vector3 *v)
+{
+ *out = Vector3Invert(*v);
+}
+
+void mVector3Clamp(Vector3 *out, Vector3 *v, Vector3 *min, Vector3 *max)
+{
+ *out = Vector3Clamp(*v, *min, *max);
+}
+
+void mVector3ClampValue(Vector3 *out, Vector3 *v, float min, float max)
+{
+ *out = Vector3ClampValue(*v, min, max);
+}
+
+int mVector3Equals(Vector3 *p, Vector3 *q)
+{
+ return Vector3Equals(*p, *q);
+}
+
+void mVector3Refract(Vector3 *out, Vector3 *v, Vector3 *n, float r)
+{
+ *out = Vector3Refract(*v, *n, r);
+}
+
+float mMatrixDeterminant(Matrix *mat)
+{
+ return MatrixDeterminant(*mat);
+}
+
+float mMatrixTrace(Matrix *mat)
+{
+ return MatrixTrace(*mat);
+}
+
+void mMatrixTranspose(Matrix *out, Matrix *mat)
+{
+ *out = MatrixTranspose(*mat);
+}
+
+void mMatrixInvert(Matrix *out, Matrix *mat)
+{
+ *out = MatrixInvert(*mat);
+}
+
+void mMatrixIdentity(Matrix *out)
+{
+ *out = MatrixIdentity();
+}
+
+void mMatrixAdd(Matrix *out, Matrix *left, Matrix *right)
+{
+ *out = MatrixAdd(*left, *right);
+}
+
+void mMatrixSubtract(Matrix *out, Matrix *left, Matrix *right)
+{
+ *out = MatrixSubtract(*left, *right);
+}
+
+void mMatrixMultiply(Matrix *out, Matrix *left, Matrix *right)
+{
+ *out = MatrixMultiply(*left, *right);
+}
+
+void mMatrixTranslate(Matrix *out, float x, float y, float z)
+{
+ *out = MatrixTranslate(x, y, z);
+}
+
+void mMatrixRotate(Matrix *out, Vector3 *axis, float angle)
+{
+ *out = MatrixRotate(*axis, angle);
+}
+
+void mMatrixRotateX(Matrix *out, float angle)
+{
+ *out = MatrixRotateX(angle);
+}
+
+void mMatrixRotateY(Matrix *out, float angle)
+{
+ *out = MatrixRotateY(angle);
+}
+
+void mMatrixRotateZ(Matrix *out, float angle)
+{
+ *out = MatrixRotateZ(angle);
+}
+
+void mMatrixRotateXYZ(Matrix *out, Vector3 *angle)
+{
+ *out = MatrixRotateXYZ(*angle);
+}
+
+void mMatrixRotateZYX(Matrix *out, Vector3 *angle)
+{
+ *out = MatrixRotateZYX(*angle);
+}
+
+void mMatrixScale(Matrix *out, float x, float y, float z)
+{
+ *out = MatrixScale(x, y, z);
+}
+
+void mMatrixFrustum(Matrix *out, double left, double right, double bottom, double top, double near, double far)
+{
+ *out = MatrixFrustum(left, right, bottom, top, near, far);
+}
+
+void mMatrixPerspective(Matrix *out, double fovY, double aspect, double nearPlane, double farPlane)
+{
+ *out = MatrixPerspective(fovY, aspect, nearPlane, farPlane);
+}
+
+void mMatrixOrtho(Matrix *out, double left, double right, double bottom, double top, double nearPlane, double farPlane)
+{
+ *out = MatrixOrtho(left, right, bottom, top, nearPlane, farPlane);
+}
+
+void mMatrixLookAt(Matrix *out, Vector3 *eye, Vector3 *target, Vector3 *up)
+{
+ *out = MatrixLookAt(*eye, *target, *up);
+}
+
+void mMatrixToFloatV(float16 *out, Matrix *mat)
+{
+ *out = MatrixToFloatV(*mat);
+}
+
+void mQuaternionAdd(Vector4 *out, Vector4 *q1, Vector4 *q2)
+{
+ *out = QuaternionAdd(*q1, *q2);
+}
+
+void mQuaternionAddValue(Vector4 *out, Vector4 *q, float add)
+{
+ *out = QuaternionAddValue(*q, add);
+}
+
+void mQuaternionSubtract(Vector4 *out, Vector4 *q1, Vector4 *q2)
+{
+ *out = QuaternionSubtract(*q1, *q2);
+}
+
+void mQuaternionSubtractValue(Vector4 *out, Vector4 *q, float sub)
+{
+ *out = QuaternionSubtractValue(*q, sub);
+}
+
+void mQuaternionIdentity(Vector4 *out)
+{
+ *out = QuaternionIdentity();
+}
+
+float mQuaternionLength(Vector4 *q)
+{
+ return QuaternionLength(*q);
+}
+
+void mQuaternionNormalize(Vector4 *out, Vector4 *q)
+{
+ *out = QuaternionNormalize(*q);
+}
+
+void mQuaternionInvert(Vector4 *out, Vector4 *q)
+{
+ *out = QuaternionInvert(*q);
+}
+
+void mQuaternionMultiply(Vector4 *out, Vector4 *q1, Vector4 *q2)
+{
+ *out = QuaternionMultiply(*q1, *q2);
+}
+
+void mQuaternionScale(Vector4 *out, Vector4 *q, float mul)
+{
+ *out = QuaternionScale(*q, mul);
+}
+
+void mQuaternionDivide(Vector4 *out, Vector4 *q1, Vector4 *q2)
+{
+ *out = QuaternionDivide(*q1, *q2);
+}
+
+void mQuaternionLerp(Vector4 *out, Vector4 *q1, Vector4 *q2, float amount)
+{
+ *out = QuaternionLerp(*q1, *q2, amount);
+}
+
+void mQuaternionNlerp(Vector4 *out, Vector4 *q1, Vector4 *q2, float amount)
+{
+ *out = QuaternionNlerp(*q1, *q2, amount);
+}
+
+void mQuaternionSlerp(Vector4 *out, Vector4 *q1, Vector4 *q2, float amount)
+{
+ *out = QuaternionSlerp(*q1, *q2, amount);
+}
+
+void mQuaternionFromVector3ToVector3(Vector4 *out, Vector3 *from, Vector3 *to)
+{
+ *out = QuaternionFromVector3ToVector3(*from, *to);
+}
+
+void mQuaternionFromMatrix(Vector4 *out, Matrix *mat)
+{
+ *out = QuaternionFromMatrix(*mat);
+}
+
+void mQuaternionToMatrix(Matrix *out, Vector4 *q)
+{
+ *out = QuaternionToMatrix(*q);
+}
+
+void mQuaternionFromAxisAngle(Vector4 *out, Vector3 *axis, float angle)
+{
+ *out = QuaternionFromAxisAngle(*axis, angle);
+}
+
+void mQuaternionToAxisAngle(Vector4 *q, Vector3 * outAxis, float * outAngle)
+{
+ QuaternionToAxisAngle(*q, outAxis, outAngle);
+}
+
+void mQuaternionFromEuler(Vector4 *out, float pitch, float yaw, float roll)
+{
+ *out = QuaternionFromEuler(pitch, yaw, roll);
+}
+
+void mQuaternionToEuler(Vector3 *out, Vector4 *q)
+{
+ *out = QuaternionToEuler(*q);
+}
+
+void mQuaternionTransform(Vector4 *out, Vector4 *q, Matrix *mat)
+{
+ *out = QuaternionTransform(*q, *mat);
+}
+
+int mQuaternionEquals(Vector4 *p, Vector4 *q)
+{
+ return QuaternionEquals(*p, *q);
+}
+
diff --git a/libs/raylib/marshal.h b/libs/raylib/marshal.h
new file mode 100644
index 0000000..5efb6ef
--- /dev/null
+++ b/libs/raylib/marshal.h
@@ -0,0 +1,2429 @@
+//--- CORE ----------------------------------------------------------------------------------------
+#define GRAPHICS_API_OPENGL_11
+// #define RLGL_IMPLEMENTATION
+#include "raylib.h"
+#include "rlgl.h"
+#include "raymath.h"
+
+// Enable vertex state pointer
+void rlEnableStatePointer(int vertexAttribType, void *buffer);
+
+// Disable vertex state pointer
+void rlDisableStatePointer(int vertexAttribType);// Initialize window and OpenGL context
+void mInitWindow(int width, int height, const char * title);
+
+// Close window and unload OpenGL context
+void mCloseWindow(void);
+
+// Check if application should close (KEY_ESCAPE pressed or windows close icon clicked)
+bool mWindowShouldClose(void);
+
+// Check if window has been initialized successfully
+bool mIsWindowReady(void);
+
+// Check if window is currently fullscreen
+bool mIsWindowFullscreen(void);
+
+// Check if window is currently hidden (only PLATFORM_DESKTOP)
+bool mIsWindowHidden(void);
+
+// Check if window is currently minimized (only PLATFORM_DESKTOP)
+bool mIsWindowMinimized(void);
+
+// Check if window is currently maximized (only PLATFORM_DESKTOP)
+bool mIsWindowMaximized(void);
+
+// Check if window is currently focused (only PLATFORM_DESKTOP)
+bool mIsWindowFocused(void);
+
+// Check if window has been resized last frame
+bool mIsWindowResized(void);
+
+// Check if one specific window flag is enabled
+bool mIsWindowState(unsigned int flag);
+
+// Set window configuration state using flags (only PLATFORM_DESKTOP)
+void mSetWindowState(unsigned int flags);
+
+// Clear window configuration state flags
+void mClearWindowState(unsigned int flags);
+
+// Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)
+void mToggleFullscreen(void);
+
+// Toggle window state: borderless windowed (only PLATFORM_DESKTOP)
+void mToggleBorderlessWindowed(void);
+
+// Set window state: maximized, if resizable (only PLATFORM_DESKTOP)
+void mMaximizeWindow(void);
+
+// Set window state: minimized, if resizable (only PLATFORM_DESKTOP)
+void mMinimizeWindow(void);
+
+// Set window state: not minimized/maximized (only PLATFORM_DESKTOP)
+void mRestoreWindow(void);
+
+// Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP)
+void mSetWindowIcon(Image *image);
+
+// Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP)
+void mSetWindowIcons(Image * images, int count);
+
+// Set title for window (only PLATFORM_DESKTOP and PLATFORM_WEB)
+void mSetWindowTitle(const char * title);
+
+// Set window position on screen (only PLATFORM_DESKTOP)
+void mSetWindowPosition(int x, int y);
+
+// Set monitor for the current window
+void mSetWindowMonitor(int monitor);
+
+// Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
+void mSetWindowMinSize(int width, int height);
+
+// Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)
+void mSetWindowMaxSize(int width, int height);
+
+// Set window dimensions
+void mSetWindowSize(int width, int height);
+
+// Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)
+void mSetWindowOpacity(float opacity);
+
+// Set window focused (only PLATFORM_DESKTOP)
+void mSetWindowFocused(void);
+
+// Get current screen width
+int mGetScreenWidth(void);
+
+// Get current screen height
+int mGetScreenHeight(void);
+
+// Get current render width (it considers HiDPI)
+int mGetRenderWidth(void);
+
+// Get current render height (it considers HiDPI)
+int mGetRenderHeight(void);
+
+// Get number of connected monitors
+int mGetMonitorCount(void);
+
+// Get current connected monitor
+int mGetCurrentMonitor(void);
+
+// Get specified monitor position
+void mGetMonitorPosition(Vector2 *out, int monitor);
+
+// Get specified monitor width (current video mode used by monitor)
+int mGetMonitorWidth(int monitor);
+
+// Get specified monitor height (current video mode used by monitor)
+int mGetMonitorHeight(int monitor);
+
+// Get specified monitor physical width in millimetres
+int mGetMonitorPhysicalWidth(int monitor);
+
+// Get specified monitor physical height in millimetres
+int mGetMonitorPhysicalHeight(int monitor);
+
+// Get specified monitor refresh rate
+int mGetMonitorRefreshRate(int monitor);
+
+// Get window position XY on monitor
+void mGetWindowPosition(Vector2 *out);
+
+// Get window scale DPI factor
+void mGetWindowScaleDPI(Vector2 *out);
+
+// Get the human-readable, UTF-8 encoded name of the specified monitor
+const char * mGetMonitorName(int monitor);
+
+// Set clipboard text content
+void mSetClipboardText(const char * text);
+
+// Get clipboard text content
+const char * mGetClipboardText(void);
+
+// Enable waiting for events on EndDrawing(), no automatic event polling
+void mEnableEventWaiting(void);
+
+// Disable waiting for events on EndDrawing(), automatic events polling
+void mDisableEventWaiting(void);
+
+// Shows cursor
+void mShowCursor(void);
+
+// Hides cursor
+void mHideCursor(void);
+
+// Check if cursor is not visible
+bool mIsCursorHidden(void);
+
+// Enables cursor (unlock cursor)
+void mEnableCursor(void);
+
+// Disables cursor (lock cursor)
+void mDisableCursor(void);
+
+// Check if cursor is on the screen
+bool mIsCursorOnScreen(void);
+
+// Set background color (framebuffer clear color)
+void mClearBackground(Color *color);
+
+// Setup canvas (framebuffer) to start drawing
+void mBeginDrawing(void);
+
+// End canvas drawing and swap buffers (double buffering)
+void mEndDrawing(void);
+
+// Begin 2D mode with custom camera (2D)
+void mBeginMode2D(Camera2D *camera);
+
+// Ends 2D mode with custom camera
+void mEndMode2D(void);
+
+// Begin 3D mode with custom camera (3D)
+void mBeginMode3D(Camera3D *camera);
+
+// Ends 3D mode and returns to default 2D orthographic mode
+void mEndMode3D(void);
+
+// Begin drawing to render texture
+void mBeginTextureMode(RenderTexture2D *target);
+
+// Ends drawing to render texture
+void mEndTextureMode(void);
+
+// Begin custom shader drawing
+void mBeginShaderMode(Shader *shader);
+
+// End custom shader drawing (use default shader)
+void mEndShaderMode(void);
+
+// Begin blending mode (alpha, additive, multiplied, subtract, custom)
+void mBeginBlendMode(int mode);
+
+// End blending mode (reset to default: alpha blending)
+void mEndBlendMode(void);
+
+// Begin scissor mode (define screen area for following drawing)
+void mBeginScissorMode(int x, int y, int width, int height);
+
+// End scissor mode
+void mEndScissorMode(void);
+
+// Begin stereo rendering (requires VR simulator)
+void mBeginVrStereoMode(VrStereoConfig *config);
+
+// End stereo rendering (requires VR simulator)
+void mEndVrStereoMode(void);
+
+// Load VR stereo config for VR simulator device parameters
+void mLoadVrStereoConfig(VrStereoConfig *out, VrDeviceInfo *device);
+
+// Unload VR stereo config
+void mUnloadVrStereoConfig(VrStereoConfig *config);
+
+// Load shader from files and bind default locations
+void mLoadShader(Shader *out, const char * vsFileName, const char * fsFileName);
+
+// Load shader from code strings and bind default locations
+void mLoadShaderFromMemory(Shader *out, const char * vsCode, const char * fsCode);
+
+// Check if a shader is ready
+bool mIsShaderReady(Shader *shader);
+
+// Get shader uniform location
+int mGetShaderLocation(Shader *shader, const char * uniformName);
+
+// Get shader attribute location
+int mGetShaderLocationAttrib(Shader *shader, const char * attribName);
+
+// Set shader uniform value
+void mSetShaderValue(Shader *shader, int locIndex, const void * value, int uniformType);
+
+// Set shader uniform value vector
+void mSetShaderValueV(Shader *shader, int locIndex, const void * value, int uniformType, int count);
+
+// Set shader uniform value (matrix 4x4)
+void mSetShaderValueMatrix(Shader *shader, int locIndex, Matrix *mat);
+
+// Set shader uniform value for texture (sampler2d)
+void mSetShaderValueTexture(Shader *shader, int locIndex, Texture2D *texture);
+
+// Unload shader from GPU memory (VRAM)
+void mUnloadShader(Shader *shader);
+
+// Get a ray trace from mouse position
+void mGetMouseRay(Ray *out, Vector2 *mousePosition, Camera3D *camera);
+
+// Get camera transform matrix (view matrix)
+void mGetCameraMatrix(Matrix *out, Camera3D *camera);
+
+// Get camera 2d transform matrix
+void mGetCameraMatrix2D(Matrix *out, Camera2D *camera);
+
+// Get the screen space position for a 3d world space position
+void mGetWorldToScreen(Vector2 *out, Vector3 *position, Camera3D *camera);
+
+// Get the world space position for a 2d camera screen space position
+void mGetScreenToWorld2D(Vector2 *out, Vector2 *position, Camera2D *camera);
+
+// Get size position for a 3d world space position
+void mGetWorldToScreenEx(Vector2 *out, Vector3 *position, Camera3D *camera, int width, int height);
+
+// Get the screen space position for a 2d camera world space position
+void mGetWorldToScreen2D(Vector2 *out, Vector2 *position, Camera2D *camera);
+
+// Set target FPS (maximum)
+void mSetTargetFPS(int fps);
+
+// Get time in seconds for last frame drawn (delta time)
+float mGetFrameTime(void);
+
+// Get elapsed time in seconds since InitWindow()
+double mGetTime(void);
+
+// Get current FPS
+int mGetFPS(void);
+
+// Swap back buffer with front buffer (screen drawing)
+void mSwapScreenBuffer(void);
+
+// Register all input events
+void mPollInputEvents(void);
+
+// Wait for some time (halt program execution)
+void mWaitTime(double seconds);
+
+// Set the seed for the random number generator
+void mSetRandomSeed(unsigned int seed);
+
+// Get a random value between min and max (both included)
+int mGetRandomValue(int min, int max);
+
+// Load random values sequence, no values repeated
+int * mLoadRandomSequence(unsigned int count, int min, int max);
+
+// Unload random values sequence
+void mUnloadRandomSequence(int * sequence);
+
+// Takes a screenshot of current screen (filename extension defines format)
+void mTakeScreenshot(const char * fileName);
+
+// Open URL with default system browser (if available)
+void mOpenURL(const char * url);
+
+// Set the current threshold (minimum) log level
+void mSetTraceLogLevel(int logLevel);
+
+// Set custom file binary data loader
+void mSetLoadFileDataCallback(LoadFileDataCallback callback);
+
+// Set custom file binary data saver
+void mSetSaveFileDataCallback(SaveFileDataCallback callback);
+
+// Set custom file text data loader
+void mSetLoadFileTextCallback(LoadFileTextCallback callback);
+
+// Set custom file text data saver
+void mSetSaveFileTextCallback(SaveFileTextCallback callback);
+
+// Save data to file from byte array (write), returns true on success
+bool mSaveFileData(const char * fileName, void * data, int dataSize);
+
+// Export data to code (.h), returns true on success
+bool mExportDataAsCode(const unsigned char * data, int dataSize, const char * fileName);
+
+// Load text data from file (read), returns a '\0' terminated string
+char * mLoadFileText(const char * fileName);
+
+// Unload file text data allocated by LoadFileText()
+void mUnloadFileText(char * text);
+
+// Save text data to file (write), string must be '\0' terminated, returns true on success
+bool mSaveFileText(const char * fileName, char * text);
+
+// Check if file exists
+bool mFileExists(const char * fileName);
+
+// Check if a directory path exists
+bool mDirectoryExists(const char * dirPath);
+
+// Check file extension (including point: .png, .wav)
+bool mIsFileExtension(const char * fileName, const char * ext);
+
+// Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h)
+int mGetFileLength(const char * fileName);
+
+// Get pointer to extension for a filename string (includes dot: '.png')
+const char * mGetFileExtension(const char * fileName);
+
+// Get pointer to filename for a path string
+const char * mGetFileName(const char * filePath);
+
+// Get filename string without extension (uses static string)
+const char * mGetFileNameWithoutExt(const char * filePath);
+
+// Get full path for a given fileName with path (uses static string)
+const char * mGetDirectoryPath(const char * filePath);
+
+// Get previous directory path for a given path (uses static string)
+const char * mGetPrevDirectoryPath(const char * dirPath);
+
+// Get current working directory (uses static string)
+const char * mGetWorkingDirectory(void);
+
+// Get the directory of the running application (uses static string)
+const char * mGetApplicationDirectory(void);
+
+// Change working directory, return true on success
+bool mChangeDirectory(const char * dir);
+
+// Check if a given path is a file or a directory
+bool mIsPathFile(const char * path);
+
+// Load directory filepaths
+void mLoadDirectoryFiles(FilePathList *out, const char * dirPath);
+
+// Load directory filepaths with extension filtering and recursive directory scan
+void mLoadDirectoryFilesEx(FilePathList *out, const char * basePath, const char * filter, bool scanSubdirs);
+
+// Unload filepaths
+void mUnloadDirectoryFiles(FilePathList *files);
+
+// Check if a file has been dropped into window
+bool mIsFileDropped(void);
+
+// Load dropped filepaths
+void mLoadDroppedFiles(FilePathList *out);
+
+// Unload dropped filepaths
+void mUnloadDroppedFiles(FilePathList *files);
+
+// Get file modification time (last write time)
+long mGetFileModTime(const char * fileName);
+
+// Compress data (DEFLATE algorithm), memory must be MemFree()
+unsigned char * mCompressData(const unsigned char * data, int dataSize, int * compDataSize);
+
+// Decompress data (DEFLATE algorithm), memory must be MemFree()
+unsigned char * mDecompressData(const unsigned char * compData, int compDataSize, int * dataSize);
+
+// Encode data to Base64 string, memory must be MemFree()
+char * mEncodeDataBase64(const unsigned char * data, int dataSize, int * outputSize);
+
+// Decode Base64 string data, memory must be MemFree()
+unsigned char * mDecodeDataBase64(const unsigned char * data, int * outputSize);
+
+// Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS
+void mLoadAutomationEventList(AutomationEventList *out, const char * fileName);
+
+// Unload automation events list from file
+void mUnloadAutomationEventList(AutomationEventList *list);
+
+// Export automation events list as text file
+bool mExportAutomationEventList(AutomationEventList *list, const char * fileName);
+
+// Set automation event list to record to
+void mSetAutomationEventList(AutomationEventList * list);
+
+// Set automation event internal base frame to start recording
+void mSetAutomationEventBaseFrame(int frame);
+
+// Start recording automation events (AutomationEventList must be set)
+void mStartAutomationEventRecording(void);
+
+// Stop recording automation events
+void mStopAutomationEventRecording(void);
+
+// Play a recorded automation event
+void mPlayAutomationEvent(AutomationEvent *event);
+
+// Check if a key has been pressed once
+bool mIsKeyPressed(int key);
+
+// Check if a key has been pressed again (Only PLATFORM_DESKTOP)
+bool mIsKeyPressedRepeat(int key);
+
+// Check if a key is being pressed
+bool mIsKeyDown(int key);
+
+// Check if a key has been released once
+bool mIsKeyReleased(int key);
+
+// Check if a key is NOT being pressed
+bool mIsKeyUp(int key);
+
+// Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty
+int mGetKeyPressed(void);
+
+// Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty
+int mGetCharPressed(void);
+
+// Set a custom key to exit program (default is ESC)
+void mSetExitKey(int key);
+
+// Check if a gamepad is available
+bool mIsGamepadAvailable(int gamepad);
+
+// Get gamepad internal name id
+const char * mGetGamepadName(int gamepad);
+
+// Check if a gamepad button has been pressed once
+bool mIsGamepadButtonPressed(int gamepad, int button);
+
+// Check if a gamepad button is being pressed
+bool mIsGamepadButtonDown(int gamepad, int button);
+
+// Check if a gamepad button has been released once
+bool mIsGamepadButtonReleased(int gamepad, int button);
+
+// Check if a gamepad button is NOT being pressed
+bool mIsGamepadButtonUp(int gamepad, int button);
+
+// Get gamepad axis count for a gamepad
+int mGetGamepadAxisCount(int gamepad);
+
+// Get axis movement value for a gamepad axis
+float mGetGamepadAxisMovement(int gamepad, int axis);
+
+// Set internal gamepad mappings (SDL_GameControllerDB)
+int mSetGamepadMappings(const char * mappings);
+
+// Check if a mouse button has been pressed once
+bool mIsMouseButtonPressed(int button);
+
+// Check if a mouse button is being pressed
+bool mIsMouseButtonDown(int button);
+
+// Check if a mouse button has been released once
+bool mIsMouseButtonReleased(int button);
+
+// Check if a mouse button is NOT being pressed
+bool mIsMouseButtonUp(int button);
+
+// Get mouse position X
+int mGetMouseX(void);
+
+// Get mouse position Y
+int mGetMouseY(void);
+
+// Get mouse position XY
+void mGetMousePosition(Vector2 *out);
+
+// Get mouse delta between frames
+void mGetMouseDelta(Vector2 *out);
+
+// Set mouse position XY
+void mSetMousePosition(int x, int y);
+
+// Set mouse offset
+void mSetMouseOffset(int offsetX, int offsetY);
+
+// Set mouse scaling
+void mSetMouseScale(float scaleX, float scaleY);
+
+// Get mouse wheel movement for X or Y, whichever is larger
+float mGetMouseWheelMove(void);
+
+// Get mouse wheel movement for both X and Y
+void mGetMouseWheelMoveV(Vector2 *out);
+
+// Set mouse cursor
+void mSetMouseCursor(int cursor);
+
+// Get touch position X for touch point 0 (relative to screen size)
+int mGetTouchX(void);
+
+// Get touch position Y for touch point 0 (relative to screen size)
+int mGetTouchY(void);
+
+// Get touch position XY for a touch point index (relative to screen size)
+void mGetTouchPosition(Vector2 *out, int index);
+
+// Get touch point identifier for given index
+int mGetTouchPointId(int index);
+
+// Get number of touch points
+int mGetTouchPointCount(void);
+
+// Enable a set of gestures using flags
+void mSetGesturesEnabled(unsigned int flags);
+
+// Check if a gesture have been detected
+bool mIsGestureDetected(unsigned int gesture);
+
+// Get latest detected gesture
+int mGetGestureDetected(void);
+
+// Get gesture hold time in milliseconds
+float mGetGestureHoldDuration(void);
+
+// Get gesture drag vector
+void mGetGestureDragVector(Vector2 *out);
+
+// Get gesture drag angle
+float mGetGestureDragAngle(void);
+
+// Get gesture pinch delta
+void mGetGesturePinchVector(Vector2 *out);
+
+// Get gesture pinch angle
+float mGetGesturePinchAngle(void);
+
+// Update camera position for selected mode
+void mUpdateCamera(Camera * camera, int mode);
+
+// Update camera movement/rotation
+void mUpdateCameraPro(Camera * camera, Vector3 *movement, Vector3 *rotation, float zoom);
+
+// Set texture and rectangle to be used on shapes drawing
+void mSetShapesTexture(Texture2D *texture, Rectangle *source);
+
+// Get texture that is used for shapes drawing
+void mGetShapesTexture(Texture2D *out);
+
+// Get texture source rectangle that is used for shapes drawing
+void mGetShapesTextureRectangle(Rectangle *out);
+
+// Draw a pixel
+void mDrawPixel(int posX, int posY, Color *color);
+
+// Draw a pixel (Vector version)
+void mDrawPixelV(Vector2 *position, Color *color);
+
+// Draw a line
+void mDrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color *color);
+
+// Draw a line (using gl lines)
+void mDrawLineV(Vector2 *startPos, Vector2 *endPos, Color *color);
+
+// Draw a line (using triangles/quads)
+void mDrawLineEx(Vector2 *startPos, Vector2 *endPos, float thick, Color *color);
+
+// Draw lines sequence (using gl lines)
+void mDrawLineStrip(Vector2 * points, int pointCount, Color *color);
+
+// Draw line segment cubic-bezier in-out interpolation
+void mDrawLineBezier(Vector2 *startPos, Vector2 *endPos, float thick, Color *color);
+
+// Draw a color-filled circle
+void mDrawCircle(int centerX, int centerY, float radius, Color *color);
+
+// Draw a piece of a circle
+void mDrawCircleSector(Vector2 *center, float radius, float startAngle, float endAngle, int segments, Color *color);
+
+// Draw circle sector outline
+void mDrawCircleSectorLines(Vector2 *center, float radius, float startAngle, float endAngle, int segments, Color *color);
+
+// Draw a gradient-filled circle
+void mDrawCircleGradient(int centerX, int centerY, float radius, Color *color1, Color *color2);
+
+// Draw a color-filled circle (Vector version)
+void mDrawCircleV(Vector2 *center, float radius, Color *color);
+
+// Draw circle outline
+void mDrawCircleLines(int centerX, int centerY, float radius, Color *color);
+
+// Draw circle outline (Vector version)
+void mDrawCircleLinesV(Vector2 *center, float radius, Color *color);
+
+// Draw ellipse
+void mDrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color *color);
+
+// Draw ellipse outline
+void mDrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color *color);
+
+// Draw ring
+void mDrawRing(Vector2 *center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color *color);
+
+// Draw ring outline
+void mDrawRingLines(Vector2 *center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color *color);
+
+// Draw a color-filled rectangle
+void mDrawRectangle(int posX, int posY, int width, int height, Color *color);
+
+// Draw a color-filled rectangle (Vector version)
+void mDrawRectangleV(Vector2 *position, Vector2 *size, Color *color);
+
+// Draw a color-filled rectangle
+void mDrawRectangleRec(Rectangle *rec, Color *color);
+
+// Draw a color-filled rectangle with pro parameters
+void mDrawRectanglePro(Rectangle *rec, Vector2 *origin, float rotation, Color *color);
+
+// Draw a vertical-gradient-filled rectangle
+void mDrawRectangleGradientV(int posX, int posY, int width, int height, Color *color1, Color *color2);
+
+// Draw a horizontal-gradient-filled rectangle
+void mDrawRectangleGradientH(int posX, int posY, int width, int height, Color *color1, Color *color2);
+
+// Draw a gradient-filled rectangle with custom vertex colors
+void mDrawRectangleGradientEx(Rectangle *rec, Color *col1, Color *col2, Color *col3, Color *col4);
+
+// Draw rectangle outline
+void mDrawRectangleLines(int posX, int posY, int width, int height, Color *color);
+
+// Draw rectangle outline with extended parameters
+void mDrawRectangleLinesEx(Rectangle *rec, float lineThick, Color *color);
+
+// Draw rectangle with rounded edges
+void mDrawRectangleRounded(Rectangle *rec, float roundness, int segments, Color *color);
+
+// Draw rectangle with rounded edges outline
+void mDrawRectangleRoundedLines(Rectangle *rec, float roundness, int segments, float lineThick, Color *color);
+
+// Draw a color-filled triangle (vertex in counter-clockwise order!)
+void mDrawTriangle(Vector2 *v1, Vector2 *v2, Vector2 *v3, Color *color);
+
+// Draw triangle outline (vertex in counter-clockwise order!)
+void mDrawTriangleLines(Vector2 *v1, Vector2 *v2, Vector2 *v3, Color *color);
+
+// Draw a triangle fan defined by points (first vertex is the center)
+void mDrawTriangleFan(Vector2 * points, int pointCount, Color *color);
+
+// Draw a triangle strip defined by points
+void mDrawTriangleStrip(Vector2 * points, int pointCount, Color *color);
+
+// Draw a regular polygon (Vector version)
+void mDrawPoly(Vector2 *center, int sides, float radius, float rotation, Color *color);
+
+// Draw a polygon outline of n sides
+void mDrawPolyLines(Vector2 *center, int sides, float radius, float rotation, Color *color);
+
+// Draw a polygon outline of n sides with extended parameters
+void mDrawPolyLinesEx(Vector2 *center, int sides, float radius, float rotation, float lineThick, Color *color);
+
+// Draw spline: Linear, minimum 2 points
+void mDrawSplineLinear(Vector2 * points, int pointCount, float thick, Color *color);
+
+// Draw spline: B-Spline, minimum 4 points
+void mDrawSplineBasis(Vector2 * points, int pointCount, float thick, Color *color);
+
+// Draw spline: Catmull-Rom, minimum 4 points
+void mDrawSplineCatmullRom(Vector2 * points, int pointCount, float thick, Color *color);
+
+// Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]
+void mDrawSplineBezierQuadratic(Vector2 * points, int pointCount, float thick, Color *color);
+
+// Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]
+void mDrawSplineBezierCubic(Vector2 * points, int pointCount, float thick, Color *color);
+
+// Draw spline segment: Linear, 2 points
+void mDrawSplineSegmentLinear(Vector2 *p1, Vector2 *p2, float thick, Color *color);
+
+// Draw spline segment: B-Spline, 4 points
+void mDrawSplineSegmentBasis(Vector2 *p1, Vector2 *p2, Vector2 *p3, Vector2 *p4, float thick, Color *color);
+
+// Draw spline segment: Catmull-Rom, 4 points
+void mDrawSplineSegmentCatmullRom(Vector2 *p1, Vector2 *p2, Vector2 *p3, Vector2 *p4, float thick, Color *color);
+
+// Draw spline segment: Quadratic Bezier, 2 points, 1 control point
+void mDrawSplineSegmentBezierQuadratic(Vector2 *p1, Vector2 *c2, Vector2 *p3, float thick, Color *color);
+
+// Draw spline segment: Cubic Bezier, 2 points, 2 control points
+void mDrawSplineSegmentBezierCubic(Vector2 *p1, Vector2 *c2, Vector2 *c3, Vector2 *p4, float thick, Color *color);
+
+// Get (evaluate) spline point: Linear
+void mGetSplinePointLinear(Vector2 *out, Vector2 *startPos, Vector2 *endPos, float t);
+
+// Get (evaluate) spline point: B-Spline
+void mGetSplinePointBasis(Vector2 *out, Vector2 *p1, Vector2 *p2, Vector2 *p3, Vector2 *p4, float t);
+
+// Get (evaluate) spline point: Catmull-Rom
+void mGetSplinePointCatmullRom(Vector2 *out, Vector2 *p1, Vector2 *p2, Vector2 *p3, Vector2 *p4, float t);
+
+// Get (evaluate) spline point: Quadratic Bezier
+void mGetSplinePointBezierQuad(Vector2 *out, Vector2 *p1, Vector2 *c2, Vector2 *p3, float t);
+
+// Get (evaluate) spline point: Cubic Bezier
+void mGetSplinePointBezierCubic(Vector2 *out, Vector2 *p1, Vector2 *c2, Vector2 *c3, Vector2 *p4, float t);
+
+// Check collision between two rectangles
+bool mCheckCollisionRecs(Rectangle *rec1, Rectangle *rec2);
+
+// Check collision between two circles
+bool mCheckCollisionCircles(Vector2 *center1, float radius1, Vector2 *center2, float radius2);
+
+// Check collision between circle and rectangle
+bool mCheckCollisionCircleRec(Vector2 *center, float radius, Rectangle *rec);
+
+// Check if point is inside rectangle
+bool mCheckCollisionPointRec(Vector2 *point, Rectangle *rec);
+
+// Check if point is inside circle
+bool mCheckCollisionPointCircle(Vector2 *point, Vector2 *center, float radius);
+
+// Check if point is inside a triangle
+bool mCheckCollisionPointTriangle(Vector2 *point, Vector2 *p1, Vector2 *p2, Vector2 *p3);
+
+// Check if point is within a polygon described by array of vertices
+bool mCheckCollisionPointPoly(Vector2 *point, Vector2 * points, int pointCount);
+
+// Check the collision between two lines defined by two points each, returns collision point by reference
+bool mCheckCollisionLines(Vector2 *startPos1, Vector2 *endPos1, Vector2 *startPos2, Vector2 *endPos2, Vector2 * collisionPoint);
+
+// Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold]
+bool mCheckCollisionPointLine(Vector2 *point, Vector2 *p1, Vector2 *p2, int threshold);
+
+// Get collision rectangle for two rectangles collision
+void mGetCollisionRec(Rectangle *out, Rectangle *rec1, Rectangle *rec2);
+
+// Load image from file into CPU memory (RAM)
+void mLoadImage(Image *out, const char * fileName);
+
+// Load image from RAW file data
+void mLoadImageRaw(Image *out, const char * fileName, int width, int height, int format, int headerSize);
+
+// Load image from SVG file data or string with specified size
+void mLoadImageSvg(Image *out, const char * fileNameOrString, int width, int height);
+
+// Load image sequence from file (frames appended to image.data)
+void mLoadImageAnim(Image *out, const char * fileName, int * frames);
+
+// Load image sequence from memory buffer
+void mLoadImageAnimFromMemory(Image *out, const char * fileType, const unsigned char * fileData, int dataSize, int * frames);
+
+// Load image from memory buffer, fileType refers to extension: i.e. '.png'
+void mLoadImageFromMemory(Image *out, const char * fileType, const unsigned char * fileData, int dataSize);
+
+// Load image from GPU texture data
+void mLoadImageFromTexture(Image *out, Texture2D *texture);
+
+// Load image from screen buffer and (screenshot)
+void mLoadImageFromScreen(Image *out);
+
+// Check if an image is ready
+bool mIsImageReady(Image *image);
+
+// Unload image from CPU memory (RAM)
+void mUnloadImage(Image *image);
+
+// Export image data to file, returns true on success
+bool mExportImage(Image *image, const char * fileName);
+
+// Export image to memory buffer
+unsigned char * mExportImageToMemory(Image *image, const char * fileType, int * fileSize);
+
+// Export image as code file defining an array of bytes, returns true on success
+bool mExportImageAsCode(Image *image, const char * fileName);
+
+// Generate image: plain color
+void mGenImageColor(Image *out, int width, int height, Color *color);
+
+// Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient
+void mGenImageGradientLinear(Image *out, int width, int height, int direction, Color *start, Color *end);
+
+// Generate image: radial gradient
+void mGenImageGradientRadial(Image *out, int width, int height, float density, Color *inner, Color *outer);
+
+// Generate image: square gradient
+void mGenImageGradientSquare(Image *out, int width, int height, float density, Color *inner, Color *outer);
+
+// Generate image: checked
+void mGenImageChecked(Image *out, int width, int height, int checksX, int checksY, Color *col1, Color *col2);
+
+// Generate image: white noise
+void mGenImageWhiteNoise(Image *out, int width, int height, float factor);
+
+// Generate image: perlin noise
+void mGenImagePerlinNoise(Image *out, int width, int height, int offsetX, int offsetY, float scale);
+
+// Generate image: cellular algorithm, bigger tileSize means bigger cells
+void mGenImageCellular(Image *out, int width, int height, int tileSize);
+
+// Generate image: grayscale image from text data
+void mGenImageText(Image *out, int width, int height, const char * text);
+
+// Create an image duplicate (useful for transformations)
+void mImageCopy(Image *out, Image *image);
+
+// Create an image from another image piece
+void mImageFromImage(Image *out, Image *image, Rectangle *rec);
+
+// Create an image from text (default font)
+void mImageText(Image *out, const char * text, int fontSize, Color *color);
+
+// Create an image from text (custom sprite font)
+void mImageTextEx(Image *out, Font *font, const char * text, float fontSize, float spacing, Color *tint);
+
+// Convert image data to desired format
+void mImageFormat(Image * image, int newFormat);
+
+// Convert image to POT (power-of-two)
+void mImageToPOT(Image * image, Color *fill);
+
+// Crop an image to a defined rectangle
+void mImageCrop(Image * image, Rectangle *crop);
+
+// Crop image depending on alpha value
+void mImageAlphaCrop(Image * image, float threshold);
+
+// Clear alpha channel to desired color
+void mImageAlphaClear(Image * image, Color *color, float threshold);
+
+// Apply alpha mask to image
+void mImageAlphaMask(Image * image, Image *alphaMask);
+
+// Premultiply alpha channel
+void mImageAlphaPremultiply(Image * image);
+
+// Apply Gaussian blur using a box blur approximation
+void mImageBlurGaussian(Image * image, int blurSize);
+
+// Apply Custom Square image convolution kernel
+void mImageKernelConvolution(Image * image, float* kernel, int kernelSize);
+
+// Resize image (Bicubic scaling algorithm)
+void mImageResize(Image * image, int newWidth, int newHeight);
+
+// Resize image (Nearest-Neighbor scaling algorithm)
+void mImageResizeNN(Image * image, int newWidth, int newHeight);
+
+// Resize canvas and fill with color
+void mImageResizeCanvas(Image * image, int newWidth, int newHeight, int offsetX, int offsetY, Color *fill);
+
+// Compute all mipmap levels for a provided image
+void mImageMipmaps(Image * image);
+
+// Dither image data to 16bpp or lower (Floyd-Steinberg dithering)
+void mImageDither(Image * image, int rBpp, int gBpp, int bBpp, int aBpp);
+
+// Flip image vertically
+void mImageFlipVertical(Image * image);
+
+// Flip image horizontally
+void mImageFlipHorizontal(Image * image);
+
+// Rotate image by input angle in degrees (-359 to 359)
+void mImageRotate(Image * image, int degrees);
+
+// Rotate image clockwise 90deg
+void mImageRotateCW(Image * image);
+
+// Rotate image counter-clockwise 90deg
+void mImageRotateCCW(Image * image);
+
+// Modify image color: tint
+void mImageColorTint(Image * image, Color *color);
+
+// Modify image color: invert
+void mImageColorInvert(Image * image);
+
+// Modify image color: grayscale
+void mImageColorGrayscale(Image * image);
+
+// Modify image color: contrast (-100 to 100)
+void mImageColorContrast(Image * image, float contrast);
+
+// Modify image color: brightness (-255 to 255)
+void mImageColorBrightness(Image * image, int brightness);
+
+// Modify image color: replace color
+void mImageColorReplace(Image * image, Color *color, Color *replace);
+
+// Load color data from image as a Color array (RGBA - 32bit)
+Color * mLoadImageColors(Image *image);
+
+// Load colors palette from image as a Color array (RGBA - 32bit)
+Color * mLoadImagePalette(Image *image, int maxPaletteSize, int * colorCount);
+
+// Unload color data loaded with LoadImageColors()
+void mUnloadImageColors(Color * colors);
+
+// Unload colors palette loaded with LoadImagePalette()
+void mUnloadImagePalette(Color * colors);
+
+// Get image alpha border rectangle
+void mGetImageAlphaBorder(Rectangle *out, Image *image, float threshold);
+
+// Get image pixel color at (x, y) position
+void mGetImageColor(Color *out, Image *image, int x, int y);
+
+// Clear image background with given color
+void mImageClearBackground(Image * dst, Color *color);
+
+// Draw pixel within an image
+void mImageDrawPixel(Image * dst, int posX, int posY, Color *color);
+
+// Draw pixel within an image (Vector version)
+void mImageDrawPixelV(Image * dst, Vector2 *position, Color *color);
+
+// Draw line within an image
+void mImageDrawLine(Image * dst, int startPosX, int startPosY, int endPosX, int endPosY, Color *color);
+
+// Draw line within an image (Vector version)
+void mImageDrawLineV(Image * dst, Vector2 *start, Vector2 *end, Color *color);
+
+// Draw a filled circle within an image
+void mImageDrawCircle(Image * dst, int centerX, int centerY, int radius, Color *color);
+
+// Draw a filled circle within an image (Vector version)
+void mImageDrawCircleV(Image * dst, Vector2 *center, int radius, Color *color);
+
+// Draw circle outline within an image
+void mImageDrawCircleLines(Image * dst, int centerX, int centerY, int radius, Color *color);
+
+// Draw circle outline within an image (Vector version)
+void mImageDrawCircleLinesV(Image * dst, Vector2 *center, int radius, Color *color);
+
+// Draw rectangle within an image
+void mImageDrawRectangle(Image * dst, int posX, int posY, int width, int height, Color *color);
+
+// Draw rectangle within an image (Vector version)
+void mImageDrawRectangleV(Image * dst, Vector2 *position, Vector2 *size, Color *color);
+
+// Draw rectangle within an image
+void mImageDrawRectangleRec(Image * dst, Rectangle *rec, Color *color);
+
+// Draw rectangle lines within an image
+void mImageDrawRectangleLines(Image * dst, Rectangle *rec, int thick, Color *color);
+
+// Draw a source image within a destination image (tint applied to source)
+void mImageDraw(Image * dst, Image *src, Rectangle *srcRec, Rectangle *dstRec, Color *tint);
+
+// Draw text (using default font) within an image (destination)
+void mImageDrawText(Image * dst, const char * text, int posX, int posY, int fontSize, Color *color);
+
+// Draw text (custom sprite font) within an image (destination)
+void mImageDrawTextEx(Image * dst, Font *font, const char * text, Vector2 *position, float fontSize, float spacing, Color *tint);
+
+// Load texture from file into GPU memory (VRAM)
+void mLoadTexture(Texture2D *out, const char * fileName);
+
+// Load texture from image data
+void mLoadTextureFromImage(Texture2D *out, Image *image);
+
+// Load cubemap from image, multiple image cubemap layouts supported
+void mLoadTextureCubemap(Texture2D *out, Image *image, int layout);
+
+// Load texture for rendering (framebuffer)
+void mLoadRenderTexture(RenderTexture2D *out, int width, int height);
+
+// Check if a texture is ready
+bool mIsTextureReady(Texture2D *texture);
+
+// Unload texture from GPU memory (VRAM)
+void mUnloadTexture(Texture2D *texture);
+
+// Check if a render texture is ready
+bool mIsRenderTextureReady(RenderTexture2D *target);
+
+// Unload render texture from GPU memory (VRAM)
+void mUnloadRenderTexture(RenderTexture2D *target);
+
+// Update GPU texture with new data
+void mUpdateTexture(Texture2D *texture, const void * pixels);
+
+// Update GPU texture rectangle with new data
+void mUpdateTextureRec(Texture2D *texture, Rectangle *rec, const void * pixels);
+
+// Generate GPU mipmaps for a texture
+void mGenTextureMipmaps(Texture2D * texture);
+
+// Set texture scaling filter mode
+void mSetTextureFilter(Texture2D *texture, int filter);
+
+// Set texture wrapping mode
+void mSetTextureWrap(Texture2D *texture, int wrap);
+
+// Draw a Texture2D
+void mDrawTexture(Texture2D *texture, int posX, int posY, Color *tint);
+
+// Draw a Texture2D with position defined as Vector2
+void mDrawTextureV(Texture2D *texture, Vector2 *position, Color *tint);
+
+// Draw a Texture2D with extended parameters
+void mDrawTextureEx(Texture2D *texture, Vector2 *position, float rotation, float scale, Color *tint);
+
+// Draw a part of a texture defined by a rectangle
+void mDrawTextureRec(Texture2D *texture, Rectangle *source, Vector2 *position, Color *tint);
+
+// Draw a part of a texture defined by a rectangle with 'pro' parameters
+void mDrawTexturePro(Texture2D *texture, Rectangle *source, Rectangle *dest, Vector2 *origin, float rotation, Color *tint);
+
+// Draws a texture (or part of it) that stretches or shrinks nicely
+void mDrawTextureNPatch(Texture2D *texture, NPatchInfo *nPatchInfo, Rectangle *dest, Vector2 *origin, float rotation, Color *tint);
+
+// Get color with alpha applied, alpha goes from 0.0f to 1.0f
+void mFade(Color *out, Color *color, float alpha);
+
+// Get hexadecimal value for a Color
+int mColorToInt(Color *color);
+
+// Get Color normalized as float [0..1]
+void mColorNormalize(Vector4 *out, Color *color);
+
+// Get Color from normalized values [0..1]
+void mColorFromNormalized(Color *out, Vector4 *normalized);
+
+// Get HSV values for a Color, hue [0..360], saturation/value [0..1]
+void mColorToHSV(Vector3 *out, Color *color);
+
+// Get a Color from HSV values, hue [0..360], saturation/value [0..1]
+void mColorFromHSV(Color *out, float hue, float saturation, float value);
+
+// Get color multiplied with another color
+void mColorTint(Color *out, Color *color, Color *tint);
+
+// Get color with brightness correction, brightness factor goes from -1.0f to 1.0f
+void mColorBrightness(Color *out, Color *color, float factor);
+
+// Get color with contrast correction, contrast values between -1.0f and 1.0f
+void mColorContrast(Color *out, Color *color, float contrast);
+
+// Get color with alpha applied, alpha goes from 0.0f to 1.0f
+void mColorAlpha(Color *out, Color *color, float alpha);
+
+// Get src alpha-blended into dst color with tint
+void mColorAlphaBlend(Color *out, Color *dst, Color *src, Color *tint);
+
+// Get Color structure from hexadecimal value
+void mGetColor(Color *out, unsigned int hexValue);
+
+// Get Color from a source pixel pointer of certain format
+void mGetPixelColor(Color *out, void * srcPtr, int format);
+
+// Set color formatted into destination pixel pointer
+void mSetPixelColor(void * dstPtr, Color *color, int format);
+
+// Get pixel data size in bytes for certain format
+int mGetPixelDataSize(int width, int height, int format);
+
+// Get the default Font
+void mGetFontDefault(Font *out);
+
+// Load font from file into GPU memory (VRAM)
+void mLoadFont(Font *out, const char * fileName);
+
+// Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character setFont
+void mLoadFontEx(Font *out, const char * fileName, int fontSize, int * codepoints, int codepointCount);
+
+// Load font from Image (XNA style)
+void mLoadFontFromImage(Font *out, Image *image, Color *key, int firstChar);
+
+// Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
+void mLoadFontFromMemory(Font *out, const char * fileType, const unsigned char * fileData, int dataSize, int fontSize, int * codepoints, int codepointCount);
+
+// Check if a font is ready
+bool mIsFontReady(Font *font);
+
+// Load font data for further use
+GlyphInfo * mLoadFontData(const unsigned char * fileData, int dataSize, int fontSize, int * codepoints, int codepointCount, int type);
+
+// Unload font chars info data (RAM)
+void mUnloadFontData(GlyphInfo * glyphs, int glyphCount);
+
+// Unload font from GPU memory (VRAM)
+void mUnloadFont(Font *font);
+
+// Export font as code file, returns true on success
+bool mExportFontAsCode(Font *font, const char * fileName);
+
+// Draw current FPS
+void mDrawFPS(int posX, int posY);
+
+// Draw text (using default font)
+void mDrawText(const char * text, int posX, int posY, int fontSize, Color *color);
+
+// Draw text using font and additional parameters
+void mDrawTextEx(Font *font, const char * text, Vector2 *position, float fontSize, float spacing, Color *tint);
+
+// Draw text using Font and pro parameters (rotation)
+void mDrawTextPro(Font *font, const char * text, Vector2 *position, Vector2 *origin, float rotation, float fontSize, float spacing, Color *tint);
+
+// Draw one character (codepoint)
+void mDrawTextCodepoint(Font *font, int codepoint, Vector2 *position, float fontSize, Color *tint);
+
+// Draw multiple character (codepoint)
+void mDrawTextCodepoints(Font *font, const int * codepoints, int codepointCount, Vector2 *position, float fontSize, float spacing, Color *tint);
+
+// Set vertical line spacing when drawing with line-breaks
+void mSetTextLineSpacing(int spacing);
+
+// Measure string width for default font
+int mMeasureText(const char * text, int fontSize);
+
+// Measure string size for Font
+void mMeasureTextEx(Vector2 *out, Font *font, const char * text, float fontSize, float spacing);
+
+// Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found
+int mGetGlyphIndex(Font *font, int codepoint);
+
+// Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found
+void mGetGlyphInfo(GlyphInfo *out, Font *font, int codepoint);
+
+// Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found
+void mGetGlyphAtlasRec(Rectangle *out, Font *font, int codepoint);
+
+// Load UTF-8 text encoded from codepoints array
+char * mLoadUTF8(const int * codepoints, int length);
+
+// Unload UTF-8 text encoded from codepoints array
+void mUnloadUTF8(char * text);
+
+// Load all codepoints from a UTF-8 text string, codepoints count returned by parameter
+int * mLoadCodepoints(const char * text, int * count);
+
+// Unload codepoints data from memory
+void mUnloadCodepoints(int * codepoints);
+
+// Get total number of codepoints in a UTF-8 encoded string
+int mGetCodepointCount(const char * text);
+
+// Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
+int mGetCodepoint(const char * text, int * codepointSize);
+
+// Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
+int mGetCodepointNext(const char * text, int * codepointSize);
+
+// Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
+int mGetCodepointPrevious(const char * text, int * codepointSize);
+
+// Encode one codepoint into UTF-8 byte array (array length returned as parameter)
+const char * mCodepointToUTF8(int codepoint, int * utf8Size);
+
+// Copy one string to another, returns bytes copied
+int mTextCopy(char * dst, const char * src);
+
+// Check if two text string are equal
+bool mTextIsEqual(const char * text1, const char * text2);
+
+// Get text length, checks for '\0' ending
+unsigned int mTextLength(const char * text);
+
+// Get a piece of a text string
+const char * mTextSubtext(const char * text, int position, int length);
+
+// Replace text string (WARNING: memory must be freed!)
+char * mTextReplace(const char * text, const char * replace, const char * by);
+
+// Insert text in a position (WARNING: memory must be freed!)
+char * mTextInsert(const char * text, const char * insert, int position);
+
+// Find first text occurrence within a string
+int mTextFindIndex(const char * text, const char * find);
+
+// Get upper case version of provided string
+const char * mTextToUpper(const char * text);
+
+// Get lower case version of provided string
+const char * mTextToLower(const char * text);
+
+// Get Pascal case notation version of provided string
+const char * mTextToPascal(const char * text);
+
+// Get integer value from text (negative values not supported)
+int mTextToInteger(const char * text);
+
+// Get float value from text (negative values not supported)
+float mTextToFloat(const char * text);
+
+// Draw a line in 3D world space
+void mDrawLine3D(Vector3 *startPos, Vector3 *endPos, Color *color);
+
+// Draw a point in 3D space, actually a small line
+void mDrawPoint3D(Vector3 *position, Color *color);
+
+// Draw a circle in 3D world space
+void mDrawCircle3D(Vector3 *center, float radius, Vector3 *rotationAxis, float rotationAngle, Color *color);
+
+// Draw a color-filled triangle (vertex in counter-clockwise order!)
+void mDrawTriangle3D(Vector3 *v1, Vector3 *v2, Vector3 *v3, Color *color);
+
+// Draw a triangle strip defined by points
+void mDrawTriangleStrip3D(Vector3 * points, int pointCount, Color *color);
+
+// Draw cube
+void mDrawCube(Vector3 *position, float width, float height, float length, Color *color);
+
+// Draw cube (Vector version)
+void mDrawCubeV(Vector3 *position, Vector3 *size, Color *color);
+
+// Draw cube wires
+void mDrawCubeWires(Vector3 *position, float width, float height, float length, Color *color);
+
+// Draw cube wires (Vector version)
+void mDrawCubeWiresV(Vector3 *position, Vector3 *size, Color *color);
+
+// Draw sphere
+void mDrawSphere(Vector3 *centerPos, float radius, Color *color);
+
+// Draw sphere with extended parameters
+void mDrawSphereEx(Vector3 *centerPos, float radius, int rings, int slices, Color *color);
+
+// Draw sphere wires
+void mDrawSphereWires(Vector3 *centerPos, float radius, int rings, int slices, Color *color);
+
+// Draw a cylinder/cone
+void mDrawCylinder(Vector3 *position, float radiusTop, float radiusBottom, float height, int slices, Color *color);
+
+// Draw a cylinder with base at startPos and top at endPos
+void mDrawCylinderEx(Vector3 *startPos, Vector3 *endPos, float startRadius, float endRadius, int sides, Color *color);
+
+// Draw a cylinder/cone wires
+void mDrawCylinderWires(Vector3 *position, float radiusTop, float radiusBottom, float height, int slices, Color *color);
+
+// Draw a cylinder wires with base at startPos and top at endPos
+void mDrawCylinderWiresEx(Vector3 *startPos, Vector3 *endPos, float startRadius, float endRadius, int sides, Color *color);
+
+// Draw a capsule with the center of its sphere caps at startPos and endPos
+void mDrawCapsule(Vector3 *startPos, Vector3 *endPos, float radius, int slices, int rings, Color *color);
+
+// Draw capsule wireframe with the center of its sphere caps at startPos and endPos
+void mDrawCapsuleWires(Vector3 *startPos, Vector3 *endPos, float radius, int slices, int rings, Color *color);
+
+// Draw a plane XZ
+void mDrawPlane(Vector3 *centerPos, Vector2 *size, Color *color);
+
+// Draw a ray line
+void mDrawRay(Ray *ray, Color *color);
+
+// Draw a grid (centered at (0, 0, 0))
+void mDrawGrid(int slices, float spacing);
+
+// Load model from files (meshes and materials)
+void mLoadModel(Model *out, const char * fileName);
+
+// Load model from generated mesh (default material)
+void mLoadModelFromMesh(Model *out, Mesh *mesh);
+
+// Check if a model is ready
+bool mIsModelReady(Model *model);
+
+// Unload model (including meshes) from memory (RAM and/or VRAM)
+void mUnloadModel(Model *model);
+
+// Compute model bounding box limits (considers all meshes)
+void mGetModelBoundingBox(BoundingBox *out, Model *model);
+
+// Draw a model (with texture if set)
+void mDrawModel(Model *model, Vector3 *position, float scale, Color *tint);
+
+// Draw a model with extended parameters
+void mDrawModelEx(Model *model, Vector3 *position, Vector3 *rotationAxis, float rotationAngle, Vector3 *scale, Color *tint);
+
+// Draw a model wires (with texture if set)
+void mDrawModelWires(Model *model, Vector3 *position, float scale, Color *tint);
+
+// Draw a model wires (with texture if set) with extended parameters
+void mDrawModelWiresEx(Model *model, Vector3 *position, Vector3 *rotationAxis, float rotationAngle, Vector3 *scale, Color *tint);
+
+// Draw bounding box (wires)
+void mDrawBoundingBox(BoundingBox *box, Color *color);
+
+// Draw a billboard texture
+void mDrawBillboard(Camera3D *camera, Texture2D *texture, Vector3 *position, float size, Color *tint);
+
+// Draw a billboard texture defined by source
+void mDrawBillboardRec(Camera3D *camera, Texture2D *texture, Rectangle *source, Vector3 *position, Vector2 *size, Color *tint);
+
+// Draw a billboard texture defined by source and rotation
+void mDrawBillboardPro(Camera3D *camera, Texture2D *texture, Rectangle *source, Vector3 *position, Vector3 *up, Vector2 *size, Vector2 *origin, float rotation, Color *tint);
+
+// Upload mesh vertex data in GPU and provide VAO/VBO ids
+void mUploadMesh(Mesh * mesh, bool dynamic);
+
+// Update mesh vertex data in GPU for a specific buffer index
+void mUpdateMeshBuffer(Mesh *mesh, int index, const void * data, int dataSize, int offset);
+
+// Unload mesh data from CPU and GPU
+void mUnloadMesh(Mesh *mesh);
+
+// Draw a 3d mesh with material and transform
+void mDrawMesh(Mesh *mesh, Material *material, Matrix *transform);
+
+// Draw multiple mesh instances with material and different transforms
+void mDrawMeshInstanced(Mesh *mesh, Material *material, const Matrix * transforms, int instances);
+
+// Compute mesh bounding box limits
+void mGetMeshBoundingBox(BoundingBox *out, Mesh *mesh);
+
+// Compute mesh tangents
+void mGenMeshTangents(Mesh * mesh);
+
+// Export mesh data to file, returns true on success
+bool mExportMesh(Mesh *mesh, const char * fileName);
+
+// Export mesh as code file (.h) defining multiple arrays of vertex attributes
+bool mExportMeshAsCode(Mesh *mesh, const char * fileName);
+
+// Generate polygonal mesh
+void mGenMeshPoly(Mesh *out, int sides, float radius);
+
+// Generate plane mesh (with subdivisions)
+void mGenMeshPlane(Mesh *out, float width, float length, int resX, int resZ);
+
+// Generate cuboid mesh
+void mGenMeshCube(Mesh *out, float width, float height, float length);
+
+// Generate sphere mesh (standard sphere)
+void mGenMeshSphere(Mesh *out, float radius, int rings, int slices);
+
+// Generate half-sphere mesh (no bottom cap)
+void mGenMeshHemiSphere(Mesh *out, float radius, int rings, int slices);
+
+// Generate cylinder mesh
+void mGenMeshCylinder(Mesh *out, float radius, float height, int slices);
+
+// Generate cone/pyramid mesh
+void mGenMeshCone(Mesh *out, float radius, float height, int slices);
+
+// Generate torus mesh
+void mGenMeshTorus(Mesh *out, float radius, float size, int radSeg, int sides);
+
+// Generate trefoil knot mesh
+void mGenMeshKnot(Mesh *out, float radius, float size, int radSeg, int sides);
+
+// Generate heightmap mesh from image data
+void mGenMeshHeightmap(Mesh *out, Image *heightmap, Vector3 *size);
+
+// Generate cubes-based map mesh from image data
+void mGenMeshCubicmap(Mesh *out, Image *cubicmap, Vector3 *cubeSize);
+
+// Load materials from model file
+Material * mLoadMaterials(const char * fileName, int * materialCount);
+
+// Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)
+void mLoadMaterialDefault(Material *out);
+
+// Check if a material is ready
+bool mIsMaterialReady(Material *material);
+
+// Unload material from GPU memory (VRAM)
+void mUnloadMaterial(Material *material);
+
+// Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)
+void mSetMaterialTexture(Material * material, int mapType, Texture2D *texture);
+
+// Set material for a mesh
+void mSetModelMeshMaterial(Model * model, int meshId, int materialId);
+
+// Load model animations from file
+ModelAnimation * mLoadModelAnimations(const char * fileName, int * animCount);
+
+// Update model animation pose
+void mUpdateModelAnimation(Model *model, ModelAnimation *anim, int frame);
+
+// Unload animation data
+void mUnloadModelAnimation(ModelAnimation *anim);
+
+// Unload animation array data
+void mUnloadModelAnimations(ModelAnimation * animations, int animCount);
+
+// Check model animation skeleton match
+bool mIsModelAnimationValid(Model *model, ModelAnimation *anim);
+
+// Check collision between two spheres
+bool mCheckCollisionSpheres(Vector3 *center1, float radius1, Vector3 *center2, float radius2);
+
+// Check collision between two bounding boxes
+bool mCheckCollisionBoxes(BoundingBox *box1, BoundingBox *box2);
+
+// Check collision between box and sphere
+bool mCheckCollisionBoxSphere(BoundingBox *box, Vector3 *center, float radius);
+
+// Get collision info between ray and sphere
+void mGetRayCollisionSphere(RayCollision *out, Ray *ray, Vector3 *center, float radius);
+
+// Get collision info between ray and box
+void mGetRayCollisionBox(RayCollision *out, Ray *ray, BoundingBox *box);
+
+// Get collision info between ray and mesh
+void mGetRayCollisionMesh(RayCollision *out, Ray *ray, Mesh *mesh, Matrix *transform);
+
+// Get collision info between ray and triangle
+void mGetRayCollisionTriangle(RayCollision *out, Ray *ray, Vector3 *p1, Vector3 *p2, Vector3 *p3);
+
+// Get collision info between ray and quad
+void mGetRayCollisionQuad(RayCollision *out, Ray *ray, Vector3 *p1, Vector3 *p2, Vector3 *p3, Vector3 *p4);
+
+// Initialize audio device and context
+void mInitAudioDevice(void);
+
+// Close the audio device and context
+void mCloseAudioDevice(void);
+
+// Check if audio device has been initialized successfully
+bool mIsAudioDeviceReady(void);
+
+// Set master volume (listener)
+void mSetMasterVolume(float volume);
+
+// Get master volume (listener)
+float mGetMasterVolume(void);
+
+// Load wave data from file
+void mLoadWave(Wave *out, const char * fileName);
+
+// Load wave from memory buffer, fileType refers to extension: i.e. '.wav'
+void mLoadWaveFromMemory(Wave *out, const char * fileType, const unsigned char * fileData, int dataSize);
+
+// Checks if wave data is ready
+bool mIsWaveReady(Wave *wave);
+
+// Load sound from file
+void mLoadSound(Sound *out, const char * fileName);
+
+// Load sound from wave data
+void mLoadSoundFromWave(Sound *out, Wave *wave);
+
+// Create a new sound that shares the same sample data as the source sound, does not own the sound data
+void mLoadSoundAlias(Sound *out, Sound *source);
+
+// Checks if a sound is ready
+bool mIsSoundReady(Sound *sound);
+
+// Update sound buffer with new data
+void mUpdateSound(Sound *sound, const void * data, int sampleCount);
+
+// Unload wave data
+void mUnloadWave(Wave *wave);
+
+// Unload sound
+void mUnloadSound(Sound *sound);
+
+// Unload a sound alias (does not deallocate sample data)
+void mUnloadSoundAlias(Sound *alias);
+
+// Export wave data to file, returns true on success
+bool mExportWave(Wave *wave, const char * fileName);
+
+// Export wave sample data to code (.h), returns true on success
+bool mExportWaveAsCode(Wave *wave, const char * fileName);
+
+// Play a sound
+void mPlaySound(Sound *sound);
+
+// Stop playing a sound
+void mStopSound(Sound *sound);
+
+// Pause a sound
+void mPauseSound(Sound *sound);
+
+// Resume a paused sound
+void mResumeSound(Sound *sound);
+
+// Check if a sound is currently playing
+bool mIsSoundPlaying(Sound *sound);
+
+// Set volume for a sound (1.0 is max level)
+void mSetSoundVolume(Sound *sound, float volume);
+
+// Set pitch for a sound (1.0 is base level)
+void mSetSoundPitch(Sound *sound, float pitch);
+
+// Set pan for a sound (0.5 is center)
+void mSetSoundPan(Sound *sound, float pan);
+
+// Copy a wave to a new wave
+void mWaveCopy(Wave *out, Wave *wave);
+
+// Crop a wave to defined samples range
+void mWaveCrop(Wave * wave, int initSample, int finalSample);
+
+// Convert wave data to desired format
+void mWaveFormat(Wave * wave, int sampleRate, int sampleSize, int channels);
+
+// Load samples data from wave as a 32bit float data array
+float * mLoadWaveSamples(Wave *wave);
+
+// Unload samples data loaded with LoadWaveSamples()
+void mUnloadWaveSamples(float * samples);
+
+// Load music stream from file
+void mLoadMusicStream(Music *out, const char * fileName);
+
+// Load music stream from data
+void mLoadMusicStreamFromMemory(Music *out, const char * fileType, const unsigned char * data, int dataSize);
+
+// Checks if a music stream is ready
+bool mIsMusicReady(Music *music);
+
+// Unload music stream
+void mUnloadMusicStream(Music *music);
+
+// Start music playing
+void mPlayMusicStream(Music *music);
+
+// Check if music is playing
+bool mIsMusicStreamPlaying(Music *music);
+
+// Updates buffers for music streaming
+void mUpdateMusicStream(Music *music);
+
+// Stop music playing
+void mStopMusicStream(Music *music);
+
+// Pause music playing
+void mPauseMusicStream(Music *music);
+
+// Resume playing paused music
+void mResumeMusicStream(Music *music);
+
+// Seek music to a position (in seconds)
+void mSeekMusicStream(Music *music, float position);
+
+// Set volume for music (1.0 is max level)
+void mSetMusicVolume(Music *music, float volume);
+
+// Set pitch for a music (1.0 is base level)
+void mSetMusicPitch(Music *music, float pitch);
+
+// Set pan for a music (0.5 is center)
+void mSetMusicPan(Music *music, float pan);
+
+// Get music time length (in seconds)
+float mGetMusicTimeLength(Music *music);
+
+// Get current music time played (in seconds)
+float mGetMusicTimePlayed(Music *music);
+
+// Load audio stream (to stream raw audio pcm data)
+void mLoadAudioStream(AudioStream *out, unsigned int sampleRate, unsigned int sampleSize, unsigned int channels);
+
+// Checks if an audio stream is ready
+bool mIsAudioStreamReady(AudioStream *stream);
+
+// Unload audio stream and free memory
+void mUnloadAudioStream(AudioStream *stream);
+
+// Update audio stream buffers with data
+void mUpdateAudioStream(AudioStream *stream, const void * data, int frameCount);
+
+// Check if any audio stream buffers requires refill
+bool mIsAudioStreamProcessed(AudioStream *stream);
+
+// Play audio stream
+void mPlayAudioStream(AudioStream *stream);
+
+// Pause audio stream
+void mPauseAudioStream(AudioStream *stream);
+
+// Resume audio stream
+void mResumeAudioStream(AudioStream *stream);
+
+// Check if audio stream is playing
+bool mIsAudioStreamPlaying(AudioStream *stream);
+
+// Stop audio stream
+void mStopAudioStream(AudioStream *stream);
+
+// Set volume for audio stream (1.0 is max level)
+void mSetAudioStreamVolume(AudioStream *stream, float volume);
+
+// Set pitch for audio stream (1.0 is base level)
+void mSetAudioStreamPitch(AudioStream *stream, float pitch);
+
+// Set pan for audio stream (0.5 is centered)
+void mSetAudioStreamPan(AudioStream *stream, float pan);
+
+// Default size for new audio streams
+void mSetAudioStreamBufferSizeDefault(int size);
+
+// Audio thread callback to request new data
+void mSetAudioStreamCallback(AudioStream *stream, AudioCallback callback);
+
+// Attach audio stream processor to stream, receives the samples as s
+void mAttachAudioStreamProcessor(AudioStream *stream, AudioCallback processor);
+
+// Detach audio stream processor from stream
+void mDetachAudioStreamProcessor(AudioStream *stream, AudioCallback processor);
+
+// Attach audio stream processor to the entire audio pipeline, receives the samples as s
+void mAttachAudioMixedProcessor(AudioCallback processor);
+
+// Detach audio stream processor from the entire audio pipeline
+void mDetachAudioMixedProcessor(AudioCallback processor);
+
+// Choose the current matrix to be transformed
+void mrlMatrixMode(int mode);
+
+// Push the current matrix to stack
+void mrlPushMatrix(void);
+
+// Pop latest inserted matrix from stack
+void mrlPopMatrix(void);
+
+// Reset current matrix to identity matrix
+void mrlLoadIdentity(void);
+
+// Multiply the current matrix by a translation matrix
+void mrlTranslatef(float x, float y, float z);
+
+// Multiply the current matrix by a rotation matrix
+void mrlRotatef(float angle, float x, float y, float z);
+
+// Multiply the current matrix by a scaling matrix
+void mrlScalef(float x, float y, float z);
+
+// Multiply the current matrix by another matrix
+void mrlMultMatrixf(const float * matf);
+
+//
+void mrlFrustum(double left, double right, double bottom, double top, double znear, double zfar);
+
+//
+void mrlOrtho(double left, double right, double bottom, double top, double znear, double zfar);
+
+// Set the viewport area
+void mrlViewport(int x, int y, int width, int height);
+
+// Initialize drawing mode (how to organize vertex)
+void mrlBegin(int mode);
+
+// Finish vertex providing
+void mrlEnd(void);
+
+// Define one vertex (position) - 2 int
+void mrlVertex2i(int x, int y);
+
+// Define one vertex (position) - 2 float
+void mrlVertex2f(float x, float y);
+
+// Define one vertex (position) - 3 float
+void mrlVertex3f(float x, float y, float z);
+
+// Define one vertex (texture coordinate) - 2 float
+void mrlTexCoord2f(float x, float y);
+
+// Define one vertex (normal) - 3 float
+void mrlNormal3f(float x, float y, float z);
+
+// Define one vertex (color) - 4 byte
+void mrlColor4ub(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
+
+// Define one vertex (color) - 3 float
+void mrlColor3f(float x, float y, float z);
+
+// Define one vertex (color) - 4 float
+void mrlColor4f(float x, float y, float z, float w);
+
+// Enable vertex array (VAO, if supported)
+bool mrlEnableVertexArray(unsigned int vaoId);
+
+// Disable vertex array (VAO, if supported)
+void mrlDisableVertexArray(void);
+
+// Enable vertex buffer (VBO)
+void mrlEnableVertexBuffer(unsigned int id);
+
+// Disable vertex buffer (VBO)
+void mrlDisableVertexBuffer(void);
+
+// Enable vertex buffer element (VBO element)
+void mrlEnableVertexBufferElement(unsigned int id);
+
+// Disable vertex buffer element (VBO element)
+void mrlDisableVertexBufferElement(void);
+
+// Enable vertex attribute index
+void mrlEnableVertexAttribute(unsigned int index);
+
+// Disable vertex attribute index
+void mrlDisableVertexAttribute(unsigned int index);
+
+// Select and active a texture slot
+void mrlActiveTextureSlot(int slot);
+
+// Enable texture
+void mrlEnableTexture(unsigned int id);
+
+// Disable texture
+void mrlDisableTexture(void);
+
+// Enable texture cubemap
+void mrlEnableTextureCubemap(unsigned int id);
+
+// Disable texture cubemap
+void mrlDisableTextureCubemap(void);
+
+// Set texture parameters (filter, wrap)
+void mrlTextureParameters(unsigned int id, int param, int value);
+
+// Set cubemap parameters (filter, wrap)
+void mrlCubemapParameters(unsigned int id, int param, int value);
+
+// Enable shader program
+void mrlEnableShader(unsigned int id);
+
+// Disable shader program
+void mrlDisableShader(void);
+
+// Enable render texture (fbo)
+void mrlEnableFramebuffer(unsigned int id);
+
+// Disable render texture (fbo), return to default framebuffer
+void mrlDisableFramebuffer(void);
+
+// Activate multiple draw color buffers
+void mrlActiveDrawBuffers(int count);
+
+// Blit active framebuffer to main framebuffer
+void mrlBlitFramebuffer(int srcX, int srcY, int srcWidth, int srcHeight, int dstX, int dstY, int dstWidth, int dstHeight, int bufferMask);
+
+// Bind framebuffer (FBO)
+void mrlBindFramebuffer(unsigned int target, unsigned int framebuffer);
+
+// Enable color blending
+void mrlEnableColorBlend(void);
+
+// Disable color blending
+void mrlDisableColorBlend(void);
+
+// Enable depth test
+void mrlEnableDepthTest(void);
+
+// Disable depth test
+void mrlDisableDepthTest(void);
+
+// Enable depth write
+void mrlEnableDepthMask(void);
+
+// Disable depth write
+void mrlDisableDepthMask(void);
+
+// Enable backface culling
+void mrlEnableBackfaceCulling(void);
+
+// Disable backface culling
+void mrlDisableBackfaceCulling(void);
+
+// Color mask control
+void mrlColorMask(bool r, bool g, bool b, bool a);
+
+// Set face culling mode
+void mrlSetCullFace(int mode);
+
+// Enable scissor test
+void mrlEnableScissorTest(void);
+
+// Disable scissor test
+void mrlDisableScissorTest(void);
+
+// Scissor test
+void mrlScissor(int x, int y, int width, int height);
+
+// Enable wire mode
+void mrlEnableWireMode(void);
+
+// Enable point mode
+void mrlEnablePointMode(void);
+
+// Disable wire mode ( and point ) maybe rename
+void mrlDisableWireMode(void);
+
+// Set the line drawing width
+void mrlSetLineWidth(float width);
+
+// Get the line drawing width
+float mrlGetLineWidth(void);
+
+// Enable line aliasing
+void mrlEnableSmoothLines(void);
+
+// Disable line aliasing
+void mrlDisableSmoothLines(void);
+
+// Enable stereo rendering
+void mrlEnableStereoRender(void);
+
+// Disable stereo rendering
+void mrlDisableStereoRender(void);
+
+// Check if stereo render is enabled
+bool mrlIsStereoRenderEnabled(void);
+
+// Clear color buffer with color
+void mrlClearColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
+
+// Clear used screen buffers (color and depth)
+void mrlClearScreenBuffers(void);
+
+// Check and log OpenGL error codes
+void mrlCheckErrors(void);
+
+// Set blending mode
+void mrlSetBlendMode(int mode);
+
+// Set blending mode factor and equation (using OpenGL factors)
+void mrlSetBlendFactors(int glSrcFactor, int glDstFactor, int glEquation);
+
+// Set blending mode factors and equations separately (using OpenGL factors)
+void mrlSetBlendFactorsSeparate(int glSrcRGB, int glDstRGB, int glSrcAlpha, int glDstAlpha, int glEqRGB, int glEqAlpha);
+
+// Initialize rlgl (buffers, shaders, textures, states)
+void mrlglInit(int width, int height);
+
+// De-initialize rlgl (buffers, shaders, textures)
+void mrlglClose(void);
+
+// Load OpenGL extensions (loader function required)
+void mrlLoadExtensions(void * loader);
+
+// Get current OpenGL version
+int mrlGetVersion(void);
+
+// Set current framebuffer width
+void mrlSetFramebufferWidth(int width);
+
+// Get default framebuffer width
+int mrlGetFramebufferWidth(void);
+
+// Set current framebuffer height
+void mrlSetFramebufferHeight(int height);
+
+// Get default framebuffer height
+int mrlGetFramebufferHeight(void);
+
+// Get default texture id
+unsigned int mrlGetTextureIdDefault(void);
+
+// Get default shader id
+unsigned int mrlGetShaderIdDefault(void);
+
+// Get default shader locations
+int * mrlGetShaderLocsDefault(void);
+
+// Load a render batch system
+void mrlLoadRenderBatch(rlRenderBatch *out, int numBuffers, int bufferElements);
+
+// Unload render batch system
+void mrlUnloadRenderBatch(rlRenderBatch *batch);
+
+// Draw render batch data (Update->Draw->Reset)
+void mrlDrawRenderBatch(rlRenderBatch * batch);
+
+// Set the active render batch for rlgl (NULL for default internal)
+void mrlSetRenderBatchActive(rlRenderBatch * batch);
+
+// Update and draw internal render batch
+void mrlDrawRenderBatchActive(void);
+
+// Check internal buffer overflow for a given number of vertex
+bool mrlCheckRenderBatchLimit(int vCount);
+
+// Set current texture for render batch and check buffers limits
+void mrlSetTexture(unsigned int id);
+
+// Load vertex array (vao) if supported
+unsigned int mrlLoadVertexArray(void);
+
+// Load a vertex buffer object
+unsigned int mrlLoadVertexBuffer(const void * buffer, int size, bool dynamic);
+
+// Load vertex buffer elements object
+unsigned int mrlLoadVertexBufferElement(const void * buffer, int size, bool dynamic);
+
+// Update vertex buffer object data on GPU buffer
+void mrlUpdateVertexBuffer(unsigned int bufferId, const void * data, int dataSize, int offset);
+
+// Update vertex buffer elements data on GPU buffer
+void mrlUpdateVertexBufferElements(unsigned int id, const void * data, int dataSize, int offset);
+
+// Unload vertex array (vao)
+void mrlUnloadVertexArray(unsigned int vaoId);
+
+// Unload vertex buffer object
+void mrlUnloadVertexBuffer(unsigned int vboId);
+
+// Set vertex attribute data configuration
+void mrlSetVertexAttribute(unsigned int index, int compSize, int type, bool normalized, int stride, const void * pointer);
+
+// Set vertex attribute data divisor
+void mrlSetVertexAttributeDivisor(unsigned int index, int divisor);
+
+// Set vertex attribute default value, when attribute to provided
+void mrlSetVertexAttributeDefault(int locIndex, const void * value, int attribType, int count);
+
+// Draw vertex array (currently active vao)
+void mrlDrawVertexArray(int offset, int count);
+
+// Draw vertex array elements
+void mrlDrawVertexArrayElements(int offset, int count, const void * buffer);
+
+// Draw vertex array (currently active vao) with instancing
+void mrlDrawVertexArrayInstanced(int offset, int count, int instances);
+
+// Draw vertex array elements with instancing
+void mrlDrawVertexArrayElementsInstanced(int offset, int count, const void * buffer, int instances);
+
+// Load texture data
+unsigned int mrlLoadTexture(const void * data, int width, int height, int format, int mipmapCount);
+
+// Load depth texture/renderbuffer (to be attached to fbo)
+unsigned int mrlLoadTextureDepth(int width, int height, bool useRenderBuffer);
+
+// Load texture cubemap data
+unsigned int mrlLoadTextureCubemap(const void * data, int size, int format);
+
+// Update texture with new data on GPU
+void mrlUpdateTexture(unsigned int id, int offsetX, int offsetY, int width, int height, int format, const void * data);
+
+// Get OpenGL internal formats
+void mrlGetGlTextureFormats(int format, unsigned int * glInternalFormat, unsigned int * glFormat, unsigned int * glType);
+
+// Get name string for pixel format
+const char * mrlGetPixelFormatName(unsigned int format);
+
+// Unload texture from GPU memory
+void mrlUnloadTexture(unsigned int id);
+
+// Generate mipmap data for selected texture
+void mrlGenTextureMipmaps(unsigned int id, int width, int height, int format, int * mipmaps);
+
+// Read texture pixel data
+void * mrlReadTexturePixels(unsigned int id, int width, int height, int format);
+
+// Read screen pixel data (color buffer)
+unsigned char * mrlReadScreenPixels(int width, int height);
+
+// Load an empty framebuffer
+unsigned int mrlLoadFramebuffer(int width, int height);
+
+// Attach texture/renderbuffer to a framebuffer
+void mrlFramebufferAttach(unsigned int fboId, unsigned int texId, int attachType, int texType, int mipLevel);
+
+// Verify framebuffer is complete
+bool mrlFramebufferComplete(unsigned int id);
+
+// Delete framebuffer from GPU
+void mrlUnloadFramebuffer(unsigned int id);
+
+// Load shader from code strings
+unsigned int mrlLoadShaderCode(const char * vsCode, const char * fsCode);
+
+// Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER)
+unsigned int mrlCompileShader(const char * shaderCode, int type);
+
+// Load custom shader program
+unsigned int mrlLoadShaderProgram(unsigned int vShaderId, unsigned int fShaderId);
+
+// Unload shader program
+void mrlUnloadShaderProgram(unsigned int id);
+
+// Get shader location uniform
+int mrlGetLocationUniform(unsigned int shaderId, const char * uniformName);
+
+// Get shader location attribute
+int mrlGetLocationAttrib(unsigned int shaderId, const char * attribName);
+
+// Set shader value uniform
+void mrlSetUniform(int locIndex, const void * value, int uniformType, int count);
+
+// Set shader value matrix
+void mrlSetUniformMatrix(int locIndex, Matrix *mat);
+
+// Set shader value sampler
+void mrlSetUniformSampler(int locIndex, unsigned int textureId);
+
+// Set shader currently active (id and locations)
+void mrlSetShader(unsigned int id, int * locs);
+
+// Load compute shader program
+unsigned int mrlLoadComputeShaderProgram(unsigned int shaderId);
+
+// Dispatch compute shader (equivalent to *draw* for graphics pipeline)
+void mrlComputeShaderDispatch(unsigned int groupX, unsigned int groupY, unsigned int groupZ);
+
+// Load shader storage buffer object (SSBO)
+unsigned int mrlLoadShaderBuffer(unsigned int size, const void * data, int usageHint);
+
+// Unload shader storage buffer object (SSBO)
+void mrlUnloadShaderBuffer(unsigned int ssboId);
+
+// Update SSBO buffer data
+void mrlUpdateShaderBuffer(unsigned int id, const void * data, unsigned int dataSize, unsigned int offset);
+
+// Bind SSBO buffer
+void mrlBindShaderBuffer(unsigned int id, unsigned int index);
+
+// Read SSBO buffer data (GPU->CPU)
+void mrlReadShaderBuffer(unsigned int id, void * dest, unsigned int count, unsigned int offset);
+
+// Copy SSBO data between buffers
+void mrlCopyShaderBuffer(unsigned int destId, unsigned int srcId, unsigned int destOffset, unsigned int srcOffset, unsigned int count);
+
+// Get SSBO buffer size
+unsigned int mrlGetShaderBufferSize(unsigned int id);
+
+// Bind image texture
+void mrlBindImageTexture(unsigned int id, unsigned int index, int format, bool readonly);
+
+// Get internal modelview matrix
+void mrlGetMatrixModelview(Matrix *out);
+
+// Get internal projection matrix
+void mrlGetMatrixProjection(Matrix *out);
+
+// Get internal accumulated transform matrix
+void mrlGetMatrixTransform(Matrix *out);
+
+//
+void mrlGetMatrixProjectionStereo(Matrix *out, int eye);
+
+//
+void mrlGetMatrixViewOffsetStereo(Matrix *out, int eye);
+
+// Set a custom projection matrix (replaces internal projection matrix)
+void mrlSetMatrixProjection(Matrix *proj);
+
+// Set a custom modelview matrix (replaces internal modelview matrix)
+void mrlSetMatrixModelview(Matrix *view);
+
+// Set eyes projection matrices for stereo rendering
+void mrlSetMatrixProjectionStereo(Matrix *right, Matrix *left);
+
+// Set eyes view offsets matrices for stereo rendering
+void mrlSetMatrixViewOffsetStereo(Matrix *right, Matrix *left);
+
+// Load and draw a cube
+void mrlLoadDrawCube(void);
+
+// Load and draw a quad
+void mrlLoadDrawQuad(void);
+
+//
+float mClamp(float value, float min, float max);
+
+//
+float mLerp(float start, float end, float amount);
+
+//
+float mNormalize(float value, float start, float end);
+
+//
+float mRemap(float value, float inputStart, float inputEnd, float outputStart, float outputEnd);
+
+//
+float mWrap(float value, float min, float max);
+
+//
+int mFloatEquals(float x, float y);
+
+//
+void mVector2Zero(Vector2 *out);
+
+//
+void mVector2One(Vector2 *out);
+
+//
+void mVector2Add(Vector2 *out, Vector2 *v1, Vector2 *v2);
+
+//
+void mVector2AddValue(Vector2 *out, Vector2 *v, float add);
+
+//
+void mVector2Subtract(Vector2 *out, Vector2 *v1, Vector2 *v2);
+
+//
+void mVector2SubtractValue(Vector2 *out, Vector2 *v, float sub);
+
+//
+float mVector2Length(Vector2 *v);
+
+//
+float mVector2LengthSqr(Vector2 *v);
+
+//
+float mVector2DotProduct(Vector2 *v1, Vector2 *v2);
+
+//
+float mVector2Distance(Vector2 *v1, Vector2 *v2);
+
+//
+float mVector2DistanceSqr(Vector2 *v1, Vector2 *v2);
+
+//
+float mVector2Angle(Vector2 *v1, Vector2 *v2);
+
+//
+float mVector2LineAngle(Vector2 *start, Vector2 *end);
+
+//
+void mVector2Scale(Vector2 *out, Vector2 *v, float scale);
+
+//
+void mVector2Multiply(Vector2 *out, Vector2 *v1, Vector2 *v2);
+
+//
+void mVector2Negate(Vector2 *out, Vector2 *v);
+
+//
+void mVector2Divide(Vector2 *out, Vector2 *v1, Vector2 *v2);
+
+//
+void mVector2Normalize(Vector2 *out, Vector2 *v);
+
+//
+void mVector2Transform(Vector2 *out, Vector2 *v, Matrix *mat);
+
+//
+void mVector2Lerp(Vector2 *out, Vector2 *v1, Vector2 *v2, float amount);
+
+//
+void mVector2Reflect(Vector2 *out, Vector2 *v, Vector2 *normal);
+
+//
+void mVector2Rotate(Vector2 *out, Vector2 *v, float angle);
+
+//
+void mVector2MoveTowards(Vector2 *out, Vector2 *v, Vector2 *target, float maxDistance);
+
+//
+void mVector2Invert(Vector2 *out, Vector2 *v);
+
+//
+void mVector2Clamp(Vector2 *out, Vector2 *v, Vector2 *min, Vector2 *max);
+
+//
+void mVector2ClampValue(Vector2 *out, Vector2 *v, float min, float max);
+
+//
+int mVector2Equals(Vector2 *p, Vector2 *q);
+
+//
+void mVector3Zero(Vector3 *out);
+
+//
+void mVector3One(Vector3 *out);
+
+//
+void mVector3Add(Vector3 *out, Vector3 *v1, Vector3 *v2);
+
+//
+void mVector3AddValue(Vector3 *out, Vector3 *v, float add);
+
+//
+void mVector3Subtract(Vector3 *out, Vector3 *v1, Vector3 *v2);
+
+//
+void mVector3SubtractValue(Vector3 *out, Vector3 *v, float sub);
+
+//
+void mVector3Scale(Vector3 *out, Vector3 *v, float scalar);
+
+//
+void mVector3Multiply(Vector3 *out, Vector3 *v1, Vector3 *v2);
+
+//
+void mVector3CrossProduct(Vector3 *out, Vector3 *v1, Vector3 *v2);
+
+//
+void mVector3Perpendicular(Vector3 *out, Vector3 *v);
+
+//
+float mVector3Length(const Vector3 *v);
+
+//
+float mVector3LengthSqr(const Vector3 *v);
+
+//
+float mVector3DotProduct(Vector3 *v1, Vector3 *v2);
+
+//
+float mVector3Distance(Vector3 *v1, Vector3 *v2);
+
+//
+float mVector3DistanceSqr(Vector3 *v1, Vector3 *v2);
+
+//
+float mVector3Angle(Vector3 *v1, Vector3 *v2);
+
+//
+void mVector3Negate(Vector3 *out, Vector3 *v);
+
+//
+void mVector3Divide(Vector3 *out, Vector3 *v1, Vector3 *v2);
+
+//
+void mVector3Normalize(Vector3 *out, Vector3 *v);
+
+//
+void mVector3Project(Vector3 *out, Vector3 *v1, Vector3 *v2);
+
+//
+void mVector3Reject(Vector3 *out, Vector3 *v1, Vector3 *v2);
+
+//
+void mVector3OrthoNormalize(Vector3 * v1, Vector3 * v2);
+
+//
+void mVector3Transform(Vector3 *out, Vector3 *v, Matrix *mat);
+
+//
+void mVector3RotateByQuaternion(Vector3 *out, Vector3 *v, Vector4 *q);
+
+//
+void mVector3RotateByAxisAngle(Vector3 *out, Vector3 *v, Vector3 *axis, float angle);
+
+//
+void mVector3Lerp(Vector3 *out, Vector3 *v1, Vector3 *v2, float amount);
+
+//
+void mVector3Reflect(Vector3 *out, Vector3 *v, Vector3 *normal);
+
+//
+void mVector3Min(Vector3 *out, Vector3 *v1, Vector3 *v2);
+
+//
+void mVector3Max(Vector3 *out, Vector3 *v1, Vector3 *v2);
+
+//
+void mVector3Barycenter(Vector3 *out, Vector3 *p, Vector3 *a, Vector3 *b, Vector3 *c);
+
+//
+void mVector3Unproject(Vector3 *out, Vector3 *source, Matrix *projection, Matrix *view);
+
+//
+void mVector3ToFloatV(float3 *out, Vector3 *v);
+
+//
+void mVector3Invert(Vector3 *out, Vector3 *v);
+
+//
+void mVector3Clamp(Vector3 *out, Vector3 *v, Vector3 *min, Vector3 *max);
+
+//
+void mVector3ClampValue(Vector3 *out, Vector3 *v, float min, float max);
+
+//
+int mVector3Equals(Vector3 *p, Vector3 *q);
+
+//
+void mVector3Refract(Vector3 *out, Vector3 *v, Vector3 *n, float r);
+
+//
+float mMatrixDeterminant(Matrix *mat);
+
+//
+float mMatrixTrace(Matrix *mat);
+
+//
+void mMatrixTranspose(Matrix *out, Matrix *mat);
+
+//
+void mMatrixInvert(Matrix *out, Matrix *mat);
+
+//
+void mMatrixIdentity(Matrix *out);
+
+//
+void mMatrixAdd(Matrix *out, Matrix *left, Matrix *right);
+
+//
+void mMatrixSubtract(Matrix *out, Matrix *left, Matrix *right);
+
+//
+void mMatrixMultiply(Matrix *out, Matrix *left, Matrix *right);
+
+//
+void mMatrixTranslate(Matrix *out, float x, float y, float z);
+
+//
+void mMatrixRotate(Matrix *out, Vector3 *axis, float angle);
+
+//
+void mMatrixRotateX(Matrix *out, float angle);
+
+//
+void mMatrixRotateY(Matrix *out, float angle);
+
+//
+void mMatrixRotateZ(Matrix *out, float angle);
+
+//
+void mMatrixRotateXYZ(Matrix *out, Vector3 *angle);
+
+//
+void mMatrixRotateZYX(Matrix *out, Vector3 *angle);
+
+//
+void mMatrixScale(Matrix *out, float x, float y, float z);
+
+//
+void mMatrixFrustum(Matrix *out, double left, double right, double bottom, double top, double near, double far);
+
+//
+void mMatrixPerspective(Matrix *out, double fovY, double aspect, double nearPlane, double farPlane);
+
+//
+void mMatrixOrtho(Matrix *out, double left, double right, double bottom, double top, double nearPlane, double farPlane);
+
+//
+void mMatrixLookAt(Matrix *out, Vector3 *eye, Vector3 *target, Vector3 *up);
+
+//
+void mMatrixToFloatV(float16 *out, Matrix *mat);
+
+//
+void mQuaternionAdd(Vector4 *out, Vector4 *q1, Vector4 *q2);
+
+//
+void mQuaternionAddValue(Vector4 *out, Vector4 *q, float add);
+
+//
+void mQuaternionSubtract(Vector4 *out, Vector4 *q1, Vector4 *q2);
+
+//
+void mQuaternionSubtractValue(Vector4 *out, Vector4 *q, float sub);
+
+//
+void mQuaternionIdentity(Vector4 *out);
+
+//
+float mQuaternionLength(Vector4 *q);
+
+//
+void mQuaternionNormalize(Vector4 *out, Vector4 *q);
+
+//
+void mQuaternionInvert(Vector4 *out, Vector4 *q);
+
+//
+void mQuaternionMultiply(Vector4 *out, Vector4 *q1, Vector4 *q2);
+
+//
+void mQuaternionScale(Vector4 *out, Vector4 *q, float mul);
+
+//
+void mQuaternionDivide(Vector4 *out, Vector4 *q1, Vector4 *q2);
+
+//
+void mQuaternionLerp(Vector4 *out, Vector4 *q1, Vector4 *q2, float amount);
+
+//
+void mQuaternionNlerp(Vector4 *out, Vector4 *q1, Vector4 *q2, float amount);
+
+//
+void mQuaternionSlerp(Vector4 *out, Vector4 *q1, Vector4 *q2, float amount);
+
+//
+void mQuaternionFromVector3ToVector3(Vector4 *out, Vector3 *from, Vector3 *to);
+
+//
+void mQuaternionFromMatrix(Vector4 *out, Matrix *mat);
+
+//
+void mQuaternionToMatrix(Matrix *out, Vector4 *q);
+
+//
+void mQuaternionFromAxisAngle(Vector4 *out, Vector3 *axis, float angle);
+
+//
+void mQuaternionToAxisAngle(Vector4 *q, Vector3 * outAxis, float * outAngle);
+
+//
+void mQuaternionFromEuler(Vector4 *out, float pitch, float yaw, float roll);
+
+//
+void mQuaternionToEuler(Vector3 *out, Vector4 *q);
+
+//
+void mQuaternionTransform(Vector4 *out, Vector4 *q, Matrix *mat);
+
+//
+int mQuaternionEquals(Vector4 *p, Vector4 *q);
+
diff --git a/libs/raylib/raylib b/libs/raylib/raylib
new file mode 160000
index 0000000..e46b614
--- /dev/null
+++ b/libs/raylib/raylib
@@ -0,0 +1 @@
+Subproject commit e46b6147fc30e69dd300bbda90ff0a62bf8a4df0
diff --git a/libs/raylib/raylib.json b/libs/raylib/raylib.json
new file mode 100644
index 0000000..fd9bbac
--- /dev/null
+++ b/libs/raylib/raylib.json
@@ -0,0 +1,11660 @@
+{
+ "defines": [
+ {
+ "name": "RAYLIB_H",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RAYLIB_VERSION_MAJOR",
+ "type": "INT",
+ "value": "5",
+ "description": ""
+ },
+ {
+ "name": "RAYLIB_VERSION_MINOR",
+ "type": "INT",
+ "value": "1",
+ "description": ""
+ },
+ {
+ "name": "RAYLIB_VERSION_PATCH",
+ "type": "INT",
+ "value": "0",
+ "description": ""
+ },
+ {
+ "name": "RAYLIB_VERSION",
+ "type": "STRING",
+ "value": "5.1-dev",
+ "description": ""
+ },
+ {
+ "name": "__declspec(x)",
+ "type": "MACRO",
+ "value": "__attribute__((x))",
+ "description": ""
+ },
+ {
+ "name": "RLAPI",
+ "type": "UNKNOWN",
+ "value": "__declspec(dllexport)",
+ "description": "We are building the library as a Win32 shared library (.dll)"
+ },
+ {
+ "name": "PI",
+ "type": "FLOAT",
+ "value": "3.14159265358979323846",
+ "description": ""
+ },
+ {
+ "name": "DEG2RAD",
+ "type": "FLOAT_MATH",
+ "value": "(PI/180.0f)",
+ "description": ""
+ },
+ {
+ "name": "RAD2DEG",
+ "type": "FLOAT_MATH",
+ "value": "(180.0f/PI)",
+ "description": ""
+ },
+ {
+ "name": "RL_MALLOC(sz)",
+ "type": "MACRO",
+ "value": "malloc(sz)",
+ "description": ""
+ },
+ {
+ "name": "RL_CALLOC(n,sz)",
+ "type": "MACRO",
+ "value": "calloc(n,sz)",
+ "description": ""
+ },
+ {
+ "name": "RL_REALLOC(ptr,sz)",
+ "type": "MACRO",
+ "value": "realloc(ptr,sz)",
+ "description": ""
+ },
+ {
+ "name": "RL_FREE(ptr)",
+ "type": "MACRO",
+ "value": "free(ptr)",
+ "description": ""
+ },
+ {
+ "name": "CLITERAL(type)",
+ "type": "MACRO",
+ "value": "type",
+ "description": ""
+ },
+ {
+ "name": "RL_COLOR_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RL_RECTANGLE_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RL_VECTOR2_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RL_VECTOR3_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RL_VECTOR4_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RL_QUATERNION_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RL_MATRIX_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "LIGHTGRAY",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 200, 200, 200, 255 }",
+ "description": "Light Gray"
+ },
+ {
+ "name": "GRAY",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 130, 130, 130, 255 }",
+ "description": "Gray"
+ },
+ {
+ "name": "DARKGRAY",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 80, 80, 80, 255 }",
+ "description": "Dark Gray"
+ },
+ {
+ "name": "YELLOW",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 253, 249, 0, 255 }",
+ "description": "Yellow"
+ },
+ {
+ "name": "GOLD",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 255, 203, 0, 255 }",
+ "description": "Gold"
+ },
+ {
+ "name": "ORANGE",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 255, 161, 0, 255 }",
+ "description": "Orange"
+ },
+ {
+ "name": "PINK",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 255, 109, 194, 255 }",
+ "description": "Pink"
+ },
+ {
+ "name": "RED",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 230, 41, 55, 255 }",
+ "description": "Red"
+ },
+ {
+ "name": "MAROON",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 190, 33, 55, 255 }",
+ "description": "Maroon"
+ },
+ {
+ "name": "GREEN",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 0, 228, 48, 255 }",
+ "description": "Green"
+ },
+ {
+ "name": "LIME",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 0, 158, 47, 255 }",
+ "description": "Lime"
+ },
+ {
+ "name": "DARKGREEN",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 0, 117, 44, 255 }",
+ "description": "Dark Green"
+ },
+ {
+ "name": "SKYBLUE",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 102, 191, 255, 255 }",
+ "description": "Sky Blue"
+ },
+ {
+ "name": "BLUE",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 0, 121, 241, 255 }",
+ "description": "Blue"
+ },
+ {
+ "name": "DARKBLUE",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 0, 82, 172, 255 }",
+ "description": "Dark Blue"
+ },
+ {
+ "name": "PURPLE",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 200, 122, 255, 255 }",
+ "description": "Purple"
+ },
+ {
+ "name": "VIOLET",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 135, 60, 190, 255 }",
+ "description": "Violet"
+ },
+ {
+ "name": "DARKPURPLE",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 112, 31, 126, 255 }",
+ "description": "Dark Purple"
+ },
+ {
+ "name": "BEIGE",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 211, 176, 131, 255 }",
+ "description": "Beige"
+ },
+ {
+ "name": "BROWN",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 127, 106, 79, 255 }",
+ "description": "Brown"
+ },
+ {
+ "name": "DARKBROWN",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 76, 63, 47, 255 }",
+ "description": "Dark Brown"
+ },
+ {
+ "name": "WHITE",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 255, 255, 255, 255 }",
+ "description": "White"
+ },
+ {
+ "name": "BLACK",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 0, 0, 0, 255 }",
+ "description": "Black"
+ },
+ {
+ "name": "BLANK",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 0, 0, 0, 0 }",
+ "description": "Blank (Transparent)"
+ },
+ {
+ "name": "MAGENTA",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 255, 0, 255, 255 }",
+ "description": "Magenta"
+ },
+ {
+ "name": "RAYWHITE",
+ "type": "COLOR",
+ "value": "CLITERAL(Color){ 245, 245, 245, 255 }",
+ "description": "My own White (raylib logo)"
+ },
+ {
+ "name": "RL_BOOL_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "MOUSE_LEFT_BUTTON",
+ "type": "UNKNOWN",
+ "value": "MOUSE_BUTTON_LEFT",
+ "description": ""
+ },
+ {
+ "name": "MOUSE_RIGHT_BUTTON",
+ "type": "UNKNOWN",
+ "value": "MOUSE_BUTTON_RIGHT",
+ "description": ""
+ },
+ {
+ "name": "MOUSE_MIDDLE_BUTTON",
+ "type": "UNKNOWN",
+ "value": "MOUSE_BUTTON_MIDDLE",
+ "description": ""
+ },
+ {
+ "name": "MATERIAL_MAP_DIFFUSE",
+ "type": "UNKNOWN",
+ "value": "MATERIAL_MAP_ALBEDO",
+ "description": ""
+ },
+ {
+ "name": "MATERIAL_MAP_SPECULAR",
+ "type": "UNKNOWN",
+ "value": "MATERIAL_MAP_METALNESS",
+ "description": ""
+ },
+ {
+ "name": "SHADER_LOC_MAP_DIFFUSE",
+ "type": "UNKNOWN",
+ "value": "SHADER_LOC_MAP_ALBEDO",
+ "description": ""
+ },
+ {
+ "name": "SHADER_LOC_MAP_SPECULAR",
+ "type": "UNKNOWN",
+ "value": "SHADER_LOC_MAP_METALNESS",
+ "description": ""
+ }
+ ],
+ "structs": [
+ {
+ "name": "Vector2",
+ "description": "Vector2, 2 components",
+ "fields": [
+ {
+ "type": "float",
+ "name": "x",
+ "description": "Vector x component"
+ },
+ {
+ "type": "float",
+ "name": "y",
+ "description": "Vector y component"
+ }
+ ]
+ },
+ {
+ "name": "Vector3",
+ "description": "Vector3, 3 components",
+ "fields": [
+ {
+ "type": "float",
+ "name": "x",
+ "description": "Vector x component"
+ },
+ {
+ "type": "float",
+ "name": "y",
+ "description": "Vector y component"
+ },
+ {
+ "type": "float",
+ "name": "z",
+ "description": "Vector z component"
+ }
+ ]
+ },
+ {
+ "name": "Vector4",
+ "description": "Vector4, 4 components",
+ "fields": [
+ {
+ "type": "float",
+ "name": "x",
+ "description": "Vector x component"
+ },
+ {
+ "type": "float",
+ "name": "y",
+ "description": "Vector y component"
+ },
+ {
+ "type": "float",
+ "name": "z",
+ "description": "Vector z component"
+ },
+ {
+ "type": "float",
+ "name": "w",
+ "description": "Vector w component"
+ }
+ ]
+ },
+ {
+ "name": "Matrix",
+ "description": "Matrix, 4x4 components, column major, OpenGL style, right-handed",
+ "fields": [
+ {
+ "type": "float",
+ "name": "m0",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m4",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m8",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m12",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m1",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m5",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m9",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m13",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m2",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m6",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m10",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m14",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m3",
+ "description": "Matrix fourth row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m7",
+ "description": "Matrix fourth row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m11",
+ "description": "Matrix fourth row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m15",
+ "description": "Matrix fourth row (4 components)"
+ }
+ ]
+ },
+ {
+ "name": "Color",
+ "description": "Color, 4 components, R8G8B8A8 (32bit)",
+ "fields": [
+ {
+ "type": "unsigned char",
+ "name": "r",
+ "description": "Color red value"
+ },
+ {
+ "type": "unsigned char",
+ "name": "g",
+ "description": "Color green value"
+ },
+ {
+ "type": "unsigned char",
+ "name": "b",
+ "description": "Color blue value"
+ },
+ {
+ "type": "unsigned char",
+ "name": "a",
+ "description": "Color alpha value"
+ }
+ ]
+ },
+ {
+ "name": "Rectangle",
+ "description": "Rectangle, 4 components",
+ "fields": [
+ {
+ "type": "float",
+ "name": "x",
+ "description": "Rectangle top-left corner position x"
+ },
+ {
+ "type": "float",
+ "name": "y",
+ "description": "Rectangle top-left corner position y"
+ },
+ {
+ "type": "float",
+ "name": "width",
+ "description": "Rectangle width"
+ },
+ {
+ "type": "float",
+ "name": "height",
+ "description": "Rectangle height"
+ }
+ ]
+ },
+ {
+ "name": "Image",
+ "description": "Image, pixel data stored in CPU memory (RAM)",
+ "fields": [
+ {
+ "type": "void *",
+ "name": "data",
+ "description": "Image raw data"
+ },
+ {
+ "type": "int",
+ "name": "width",
+ "description": "Image base width"
+ },
+ {
+ "type": "int",
+ "name": "height",
+ "description": "Image base height"
+ },
+ {
+ "type": "int",
+ "name": "mipmaps",
+ "description": "Mipmap levels, 1 by default"
+ },
+ {
+ "type": "int",
+ "name": "format",
+ "description": "Data format (PixelFormat type)"
+ }
+ ]
+ },
+ {
+ "name": "Texture",
+ "description": "Texture, tex data stored in GPU memory (VRAM)",
+ "fields": [
+ {
+ "type": "unsigned int",
+ "name": "id",
+ "description": "OpenGL texture id"
+ },
+ {
+ "type": "int",
+ "name": "width",
+ "description": "Texture base width"
+ },
+ {
+ "type": "int",
+ "name": "height",
+ "description": "Texture base height"
+ },
+ {
+ "type": "int",
+ "name": "mipmaps",
+ "description": "Mipmap levels, 1 by default"
+ },
+ {
+ "type": "int",
+ "name": "format",
+ "description": "Data format (PixelFormat type)"
+ }
+ ]
+ },
+ {
+ "name": "RenderTexture",
+ "description": "RenderTexture, fbo for texture rendering",
+ "fields": [
+ {
+ "type": "unsigned int",
+ "name": "id",
+ "description": "OpenGL framebuffer object id"
+ },
+ {
+ "type": "Texture",
+ "name": "texture",
+ "description": "Color buffer attachment texture"
+ },
+ {
+ "type": "Texture",
+ "name": "depth",
+ "description": "Depth buffer attachment texture"
+ }
+ ]
+ },
+ {
+ "name": "NPatchInfo",
+ "description": "NPatchInfo, n-patch layout info",
+ "fields": [
+ {
+ "type": "Rectangle",
+ "name": "source",
+ "description": "Texture source rectangle"
+ },
+ {
+ "type": "int",
+ "name": "left",
+ "description": "Left border offset"
+ },
+ {
+ "type": "int",
+ "name": "top",
+ "description": "Top border offset"
+ },
+ {
+ "type": "int",
+ "name": "right",
+ "description": "Right border offset"
+ },
+ {
+ "type": "int",
+ "name": "bottom",
+ "description": "Bottom border offset"
+ },
+ {
+ "type": "int",
+ "name": "layout",
+ "description": "Layout of the n-patch: 3x3, 1x3 or 3x1"
+ }
+ ]
+ },
+ {
+ "name": "GlyphInfo",
+ "description": "GlyphInfo, font characters glyphs info",
+ "fields": [
+ {
+ "type": "int",
+ "name": "value",
+ "description": "Character value (Unicode)"
+ },
+ {
+ "type": "int",
+ "name": "offsetX",
+ "description": "Character offset X when drawing"
+ },
+ {
+ "type": "int",
+ "name": "offsetY",
+ "description": "Character offset Y when drawing"
+ },
+ {
+ "type": "int",
+ "name": "advanceX",
+ "description": "Character advance position X"
+ },
+ {
+ "type": "Image",
+ "name": "image",
+ "description": "Character image data"
+ }
+ ]
+ },
+ {
+ "name": "Font",
+ "description": "Font, font texture and GlyphInfo array data",
+ "fields": [
+ {
+ "type": "int",
+ "name": "baseSize",
+ "description": "Base size (default chars height)"
+ },
+ {
+ "type": "int",
+ "name": "glyphCount",
+ "description": "Number of glyph characters"
+ },
+ {
+ "type": "int",
+ "name": "glyphPadding",
+ "description": "Padding around the glyph characters"
+ },
+ {
+ "type": "Texture2D",
+ "name": "texture",
+ "description": "Texture atlas containing the glyphs"
+ },
+ {
+ "type": "Rectangle *",
+ "name": "recs",
+ "description": "Rectangles in texture for the glyphs"
+ },
+ {
+ "type": "GlyphInfo *",
+ "name": "glyphs",
+ "description": "Glyphs info data"
+ }
+ ]
+ },
+ {
+ "name": "Camera3D",
+ "description": "Camera, defines position/orientation in 3d space",
+ "fields": [
+ {
+ "type": "Vector3",
+ "name": "position",
+ "description": "Camera position"
+ },
+ {
+ "type": "Vector3",
+ "name": "target",
+ "description": "Camera target it looks-at"
+ },
+ {
+ "type": "Vector3",
+ "name": "up",
+ "description": "Camera up vector (rotation over its axis)"
+ },
+ {
+ "type": "float",
+ "name": "fovy",
+ "description": "Camera field-of-view aperture in Y (degrees) in perspective, used as near plane width in orthographic"
+ },
+ {
+ "type": "int",
+ "name": "projection",
+ "description": "Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC"
+ }
+ ]
+ },
+ {
+ "name": "Camera2D",
+ "description": "Camera2D, defines position/orientation in 2d space",
+ "fields": [
+ {
+ "type": "Vector2",
+ "name": "offset",
+ "description": "Camera offset (displacement from target)"
+ },
+ {
+ "type": "Vector2",
+ "name": "target",
+ "description": "Camera target (rotation and zoom origin)"
+ },
+ {
+ "type": "float",
+ "name": "rotation",
+ "description": "Camera rotation in degrees"
+ },
+ {
+ "type": "float",
+ "name": "zoom",
+ "description": "Camera zoom (scaling), should be 1.0f by default"
+ }
+ ]
+ },
+ {
+ "name": "Mesh",
+ "description": "Mesh, vertex data and vao/vbo",
+ "fields": [
+ {
+ "type": "int",
+ "name": "vertexCount",
+ "description": "Number of vertices stored in arrays"
+ },
+ {
+ "type": "int",
+ "name": "triangleCount",
+ "description": "Number of triangles stored (indexed or not)"
+ },
+ {
+ "type": "float *",
+ "name": "vertices",
+ "description": "Vertex position (XYZ - 3 components per vertex) (shader-location = 0)"
+ },
+ {
+ "type": "float *",
+ "name": "texcoords",
+ "description": "Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)"
+ },
+ {
+ "type": "float *",
+ "name": "texcoords2",
+ "description": "Vertex texture second coordinates (UV - 2 components per vertex) (shader-location = 5)"
+ },
+ {
+ "type": "float *",
+ "name": "normals",
+ "description": "Vertex normals (XYZ - 3 components per vertex) (shader-location = 2)"
+ },
+ {
+ "type": "float *",
+ "name": "tangents",
+ "description": "Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4)"
+ },
+ {
+ "type": "unsigned char *",
+ "name": "colors",
+ "description": "Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)"
+ },
+ {
+ "type": "unsigned short *",
+ "name": "indices",
+ "description": "Vertex indices (in case vertex data comes indexed)"
+ },
+ {
+ "type": "float *",
+ "name": "animVertices",
+ "description": "Animated vertex positions (after bones transformations)"
+ },
+ {
+ "type": "float *",
+ "name": "animNormals",
+ "description": "Animated normals (after bones transformations)"
+ },
+ {
+ "type": "unsigned char *",
+ "name": "boneIds",
+ "description": "Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning)"
+ },
+ {
+ "type": "float *",
+ "name": "boneWeights",
+ "description": "Vertex bone weight, up to 4 bones influence by vertex (skinning)"
+ },
+ {
+ "type": "unsigned int",
+ "name": "vaoId",
+ "description": "OpenGL Vertex Array Object id"
+ },
+ {
+ "type": "unsigned int *",
+ "name": "vboId",
+ "description": "OpenGL Vertex Buffer Objects id (default vertex data)"
+ }
+ ]
+ },
+ {
+ "name": "Shader",
+ "description": "Shader",
+ "fields": [
+ {
+ "type": "unsigned int",
+ "name": "id",
+ "description": "Shader program id"
+ },
+ {
+ "type": "int *",
+ "name": "locs",
+ "description": "Shader locations array (RL_MAX_SHADER_LOCATIONS)"
+ }
+ ]
+ },
+ {
+ "name": "MaterialMap",
+ "description": "MaterialMap",
+ "fields": [
+ {
+ "type": "Texture2D",
+ "name": "texture",
+ "description": "Material map texture"
+ },
+ {
+ "type": "Color",
+ "name": "color",
+ "description": "Material map color"
+ },
+ {
+ "type": "float",
+ "name": "value",
+ "description": "Material map value"
+ }
+ ]
+ },
+ {
+ "name": "Material",
+ "description": "Material, includes shader and maps",
+ "fields": [
+ {
+ "type": "Shader",
+ "name": "shader",
+ "description": "Material shader"
+ },
+ {
+ "type": "MaterialMap *",
+ "name": "maps",
+ "description": "Material maps array (MAX_MATERIAL_MAPS)"
+ },
+ {
+ "type": "float[4]",
+ "name": "params",
+ "description": "Material generic parameters (if required)"
+ }
+ ]
+ },
+ {
+ "name": "Transform",
+ "description": "Transform, vertex transformation data",
+ "fields": [
+ {
+ "type": "Vector3",
+ "name": "translation",
+ "description": "Translation"
+ },
+ {
+ "type": "Quaternion",
+ "name": "rotation",
+ "description": "Rotation"
+ },
+ {
+ "type": "Vector3",
+ "name": "scale",
+ "description": "Scale"
+ }
+ ]
+ },
+ {
+ "name": "BoneInfo",
+ "description": "Bone, skeletal animation bone",
+ "fields": [
+ {
+ "type": "char[32]",
+ "name": "name",
+ "description": "Bone name"
+ },
+ {
+ "type": "int",
+ "name": "parent",
+ "description": "Bone parent"
+ }
+ ]
+ },
+ {
+ "name": "Model",
+ "description": "Model, meshes, materials and animation data",
+ "fields": [
+ {
+ "type": "Matrix",
+ "name": "transform",
+ "description": "Local transform matrix"
+ },
+ {
+ "type": "int",
+ "name": "meshCount",
+ "description": "Number of meshes"
+ },
+ {
+ "type": "int",
+ "name": "materialCount",
+ "description": "Number of materials"
+ },
+ {
+ "type": "Mesh *",
+ "name": "meshes",
+ "description": "Meshes array"
+ },
+ {
+ "type": "Material *",
+ "name": "materials",
+ "description": "Materials array"
+ },
+ {
+ "type": "int *",
+ "name": "meshMaterial",
+ "description": "Mesh material number"
+ },
+ {
+ "type": "int",
+ "name": "boneCount",
+ "description": "Number of bones"
+ },
+ {
+ "type": "BoneInfo *",
+ "name": "bones",
+ "description": "Bones information (skeleton)"
+ },
+ {
+ "type": "Transform *",
+ "name": "bindPose",
+ "description": "Bones base transformation (pose)"
+ }
+ ]
+ },
+ {
+ "name": "ModelAnimation",
+ "description": "ModelAnimation",
+ "fields": [
+ {
+ "type": "int",
+ "name": "boneCount",
+ "description": "Number of bones"
+ },
+ {
+ "type": "int",
+ "name": "frameCount",
+ "description": "Number of animation frames"
+ },
+ {
+ "type": "BoneInfo *",
+ "name": "bones",
+ "description": "Bones information (skeleton)"
+ },
+ {
+ "type": "Transform **",
+ "name": "framePoses",
+ "description": "Poses array by frame"
+ },
+ {
+ "type": "char[32]",
+ "name": "name",
+ "description": "Animation name"
+ }
+ ]
+ },
+ {
+ "name": "Ray",
+ "description": "Ray, ray for raycasting",
+ "fields": [
+ {
+ "type": "Vector3",
+ "name": "position",
+ "description": "Ray position (origin)"
+ },
+ {
+ "type": "Vector3",
+ "name": "direction",
+ "description": "Ray direction"
+ }
+ ]
+ },
+ {
+ "name": "RayCollision",
+ "description": "RayCollision, ray hit information",
+ "fields": [
+ {
+ "type": "bool",
+ "name": "hit",
+ "description": "Did the ray hit something?"
+ },
+ {
+ "type": "float",
+ "name": "distance",
+ "description": "Distance to the nearest hit"
+ },
+ {
+ "type": "Vector3",
+ "name": "point",
+ "description": "Point of the nearest hit"
+ },
+ {
+ "type": "Vector3",
+ "name": "normal",
+ "description": "Surface normal of hit"
+ }
+ ]
+ },
+ {
+ "name": "BoundingBox",
+ "description": "BoundingBox",
+ "fields": [
+ {
+ "type": "Vector3",
+ "name": "min",
+ "description": "Minimum vertex box-corner"
+ },
+ {
+ "type": "Vector3",
+ "name": "max",
+ "description": "Maximum vertex box-corner"
+ }
+ ]
+ },
+ {
+ "name": "Wave",
+ "description": "Wave, audio wave data",
+ "fields": [
+ {
+ "type": "unsigned int",
+ "name": "frameCount",
+ "description": "Total number of frames (considering channels)"
+ },
+ {
+ "type": "unsigned int",
+ "name": "sampleRate",
+ "description": "Frequency (samples per second)"
+ },
+ {
+ "type": "unsigned int",
+ "name": "sampleSize",
+ "description": "Bit depth (bits per sample): 8, 16, 32 (24 not supported)"
+ },
+ {
+ "type": "unsigned int",
+ "name": "channels",
+ "description": "Number of channels (1-mono, 2-stereo, ...)"
+ },
+ {
+ "type": "void *",
+ "name": "data",
+ "description": "Buffer data pointer"
+ }
+ ]
+ },
+ {
+ "name": "AudioStream",
+ "description": "AudioStream, custom audio stream",
+ "fields": [
+ {
+ "type": "rAudioBuffer *",
+ "name": "buffer",
+ "description": "Pointer to internal data used by the audio system"
+ },
+ {
+ "type": "rAudioProcessor *",
+ "name": "processor",
+ "description": "Pointer to internal data processor, useful for audio effects"
+ },
+ {
+ "type": "unsigned int",
+ "name": "sampleRate",
+ "description": "Frequency (samples per second)"
+ },
+ {
+ "type": "unsigned int",
+ "name": "sampleSize",
+ "description": "Bit depth (bits per sample): 8, 16, 32 (24 not supported)"
+ },
+ {
+ "type": "unsigned int",
+ "name": "channels",
+ "description": "Number of channels (1-mono, 2-stereo, ...)"
+ }
+ ]
+ },
+ {
+ "name": "Sound",
+ "description": "Sound",
+ "fields": [
+ {
+ "type": "AudioStream",
+ "name": "stream",
+ "description": "Audio stream"
+ },
+ {
+ "type": "unsigned int",
+ "name": "frameCount",
+ "description": "Total number of frames (considering channels)"
+ }
+ ]
+ },
+ {
+ "name": "Music",
+ "description": "Music, audio stream, anything longer than ~10 seconds should be streamed",
+ "fields": [
+ {
+ "type": "AudioStream",
+ "name": "stream",
+ "description": "Audio stream"
+ },
+ {
+ "type": "unsigned int",
+ "name": "frameCount",
+ "description": "Total number of frames (considering channels)"
+ },
+ {
+ "type": "bool",
+ "name": "looping",
+ "description": "Music looping enable"
+ },
+ {
+ "type": "int",
+ "name": "ctxType",
+ "description": "Type of music context (audio filetype)"
+ },
+ {
+ "type": "void *",
+ "name": "ctxData",
+ "description": "Audio context data, depends on type"
+ }
+ ]
+ },
+ {
+ "name": "VrDeviceInfo",
+ "description": "VrDeviceInfo, Head-Mounted-Display device parameters",
+ "fields": [
+ {
+ "type": "int",
+ "name": "hResolution",
+ "description": "Horizontal resolution in pixels"
+ },
+ {
+ "type": "int",
+ "name": "vResolution",
+ "description": "Vertical resolution in pixels"
+ },
+ {
+ "type": "float",
+ "name": "hScreenSize",
+ "description": "Horizontal size in meters"
+ },
+ {
+ "type": "float",
+ "name": "vScreenSize",
+ "description": "Vertical size in meters"
+ },
+ {
+ "type": "float",
+ "name": "eyeToScreenDistance",
+ "description": "Distance between eye and display in meters"
+ },
+ {
+ "type": "float",
+ "name": "lensSeparationDistance",
+ "description": "Lens separation distance in meters"
+ },
+ {
+ "type": "float",
+ "name": "interpupillaryDistance",
+ "description": "IPD (distance between pupils) in meters"
+ },
+ {
+ "type": "float[4]",
+ "name": "lensDistortionValues",
+ "description": "Lens distortion constant parameters"
+ },
+ {
+ "type": "float[4]",
+ "name": "chromaAbCorrection",
+ "description": "Chromatic aberration correction parameters"
+ }
+ ]
+ },
+ {
+ "name": "VrStereoConfig",
+ "description": "VrStereoConfig, VR stereo rendering configuration for simulator",
+ "fields": [
+ {
+ "type": "Matrix[2]",
+ "name": "projection",
+ "description": "VR projection matrices (per eye)"
+ },
+ {
+ "type": "Matrix[2]",
+ "name": "viewOffset",
+ "description": "VR view offset matrices (per eye)"
+ },
+ {
+ "type": "float[2]",
+ "name": "leftLensCenter",
+ "description": "VR left lens center"
+ },
+ {
+ "type": "float[2]",
+ "name": "rightLensCenter",
+ "description": "VR right lens center"
+ },
+ {
+ "type": "float[2]",
+ "name": "leftScreenCenter",
+ "description": "VR left screen center"
+ },
+ {
+ "type": "float[2]",
+ "name": "rightScreenCenter",
+ "description": "VR right screen center"
+ },
+ {
+ "type": "float[2]",
+ "name": "scale",
+ "description": "VR distortion scale"
+ },
+ {
+ "type": "float[2]",
+ "name": "scaleIn",
+ "description": "VR distortion scale in"
+ }
+ ]
+ },
+ {
+ "name": "FilePathList",
+ "description": "File path list",
+ "fields": [
+ {
+ "type": "unsigned int",
+ "name": "capacity",
+ "description": "Filepaths max entries"
+ },
+ {
+ "type": "unsigned int",
+ "name": "count",
+ "description": "Filepaths entries count"
+ },
+ {
+ "type": "char **",
+ "name": "paths",
+ "description": "Filepaths entries"
+ }
+ ]
+ },
+ {
+ "name": "AutomationEvent",
+ "description": "Automation event",
+ "fields": [
+ {
+ "type": "unsigned int",
+ "name": "frame",
+ "description": "Event frame"
+ },
+ {
+ "type": "unsigned int",
+ "name": "type",
+ "description": "Event type (AutomationEventType)"
+ },
+ {
+ "type": "int[4]",
+ "name": "params",
+ "description": "Event parameters (if required)"
+ }
+ ]
+ },
+ {
+ "name": "AutomationEventList",
+ "description": "Automation event list",
+ "fields": [
+ {
+ "type": "unsigned int",
+ "name": "capacity",
+ "description": "Events max entries (MAX_AUTOMATION_EVENTS)"
+ },
+ {
+ "type": "unsigned int",
+ "name": "count",
+ "description": "Events entries count"
+ },
+ {
+ "type": "AutomationEvent *",
+ "name": "events",
+ "description": "Events entries"
+ }
+ ]
+ }
+ ],
+ "aliases": [
+ {
+ "type": "Vector4",
+ "name": "Quaternion",
+ "description": "Quaternion, 4 components (Vector4 alias)"
+ },
+ {
+ "type": "Texture",
+ "name": "Texture2D",
+ "description": "Texture2D, same as Texture"
+ },
+ {
+ "type": "Texture",
+ "name": "TextureCubemap",
+ "description": "TextureCubemap, same as Texture"
+ },
+ {
+ "type": "RenderTexture",
+ "name": "RenderTexture2D",
+ "description": "RenderTexture2D, same as RenderTexture"
+ },
+ {
+ "type": "Camera3D",
+ "name": "Camera",
+ "description": "Camera type fallback, defaults to Camera3D"
+ }
+ ],
+ "enums": [
+ {
+ "name": "ConfigFlags",
+ "description": "System/Window config flags",
+ "values": [
+ {
+ "name": "FLAG_VSYNC_HINT",
+ "value": 64,
+ "description": "Set to try enabling V-Sync on GPU"
+ },
+ {
+ "name": "FLAG_FULLSCREEN_MODE",
+ "value": 2,
+ "description": "Set to run program in fullscreen"
+ },
+ {
+ "name": "FLAG_WINDOW_RESIZABLE",
+ "value": 4,
+ "description": "Set to allow resizable window"
+ },
+ {
+ "name": "FLAG_WINDOW_UNDECORATED",
+ "value": 8,
+ "description": "Set to disable window decoration (frame and buttons)"
+ },
+ {
+ "name": "FLAG_WINDOW_HIDDEN",
+ "value": 128,
+ "description": "Set to hide window"
+ },
+ {
+ "name": "FLAG_WINDOW_MINIMIZED",
+ "value": 512,
+ "description": "Set to minimize window (iconify)"
+ },
+ {
+ "name": "FLAG_WINDOW_MAXIMIZED",
+ "value": 1024,
+ "description": "Set to maximize window (expanded to monitor)"
+ },
+ {
+ "name": "FLAG_WINDOW_UNFOCUSED",
+ "value": 2048,
+ "description": "Set to window non focused"
+ },
+ {
+ "name": "FLAG_WINDOW_TOPMOST",
+ "value": 4096,
+ "description": "Set to window always on top"
+ },
+ {
+ "name": "FLAG_WINDOW_ALWAYS_RUN",
+ "value": 256,
+ "description": "Set to allow windows running while minimized"
+ },
+ {
+ "name": "FLAG_WINDOW_TRANSPARENT",
+ "value": 16,
+ "description": "Set to allow transparent framebuffer"
+ },
+ {
+ "name": "FLAG_WINDOW_HIGHDPI",
+ "value": 8192,
+ "description": "Set to support HighDPI"
+ },
+ {
+ "name": "FLAG_WINDOW_MOUSE_PASSTHROUGH",
+ "value": 16384,
+ "description": "Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED"
+ },
+ {
+ "name": "FLAG_BORDERLESS_WINDOWED_MODE",
+ "value": 32768,
+ "description": "Set to run program in borderless windowed mode"
+ },
+ {
+ "name": "FLAG_MSAA_4X_HINT",
+ "value": 32,
+ "description": "Set to try enabling MSAA 4X"
+ },
+ {
+ "name": "FLAG_INTERLACED_HINT",
+ "value": 65536,
+ "description": "Set to try enabling interlaced video format (for V3D)"
+ }
+ ]
+ },
+ {
+ "name": "TraceLogLevel",
+ "description": "Trace log level",
+ "values": [
+ {
+ "name": "LOG_ALL",
+ "value": 0,
+ "description": "Display all logs"
+ },
+ {
+ "name": "LOG_TRACE",
+ "value": 1,
+ "description": "Trace logging, intended for internal use only"
+ },
+ {
+ "name": "LOG_DEBUG",
+ "value": 2,
+ "description": "Debug logging, used for internal debugging, it should be disabled on release builds"
+ },
+ {
+ "name": "LOG_INFO",
+ "value": 3,
+ "description": "Info logging, used for program execution info"
+ },
+ {
+ "name": "LOG_WARNING",
+ "value": 4,
+ "description": "Warning logging, used on recoverable failures"
+ },
+ {
+ "name": "LOG_ERROR",
+ "value": 5,
+ "description": "Error logging, used on unrecoverable failures"
+ },
+ {
+ "name": "LOG_FATAL",
+ "value": 6,
+ "description": "Fatal logging, used to abort program: exit(EXIT_FAILURE)"
+ },
+ {
+ "name": "LOG_NONE",
+ "value": 7,
+ "description": "Disable logging"
+ }
+ ]
+ },
+ {
+ "name": "KeyboardKey",
+ "description": "Keyboard keys (US keyboard layout)",
+ "values": [
+ {
+ "name": "KEY_NULL",
+ "value": 0,
+ "description": "Key: NULL, used for no key pressed"
+ },
+ {
+ "name": "KEY_APOSTROPHE",
+ "value": 39,
+ "description": "Key: '"
+ },
+ {
+ "name": "KEY_COMMA",
+ "value": 44,
+ "description": "Key: ,"
+ },
+ {
+ "name": "KEY_MINUS",
+ "value": 45,
+ "description": "Key: -"
+ },
+ {
+ "name": "KEY_PERIOD",
+ "value": 46,
+ "description": "Key: ."
+ },
+ {
+ "name": "KEY_SLASH",
+ "value": 47,
+ "description": "Key: /"
+ },
+ {
+ "name": "KEY_ZERO",
+ "value": 48,
+ "description": "Key: 0"
+ },
+ {
+ "name": "KEY_ONE",
+ "value": 49,
+ "description": "Key: 1"
+ },
+ {
+ "name": "KEY_TWO",
+ "value": 50,
+ "description": "Key: 2"
+ },
+ {
+ "name": "KEY_THREE",
+ "value": 51,
+ "description": "Key: 3"
+ },
+ {
+ "name": "KEY_FOUR",
+ "value": 52,
+ "description": "Key: 4"
+ },
+ {
+ "name": "KEY_FIVE",
+ "value": 53,
+ "description": "Key: 5"
+ },
+ {
+ "name": "KEY_SIX",
+ "value": 54,
+ "description": "Key: 6"
+ },
+ {
+ "name": "KEY_SEVEN",
+ "value": 55,
+ "description": "Key: 7"
+ },
+ {
+ "name": "KEY_EIGHT",
+ "value": 56,
+ "description": "Key: 8"
+ },
+ {
+ "name": "KEY_NINE",
+ "value": 57,
+ "description": "Key: 9"
+ },
+ {
+ "name": "KEY_SEMICOLON",
+ "value": 59,
+ "description": "Key: ;"
+ },
+ {
+ "name": "KEY_EQUAL",
+ "value": 61,
+ "description": "Key: ="
+ },
+ {
+ "name": "KEY_A",
+ "value": 65,
+ "description": "Key: A | a"
+ },
+ {
+ "name": "KEY_B",
+ "value": 66,
+ "description": "Key: B | b"
+ },
+ {
+ "name": "KEY_C",
+ "value": 67,
+ "description": "Key: C | c"
+ },
+ {
+ "name": "KEY_D",
+ "value": 68,
+ "description": "Key: D | d"
+ },
+ {
+ "name": "KEY_E",
+ "value": 69,
+ "description": "Key: E | e"
+ },
+ {
+ "name": "KEY_F",
+ "value": 70,
+ "description": "Key: F | f"
+ },
+ {
+ "name": "KEY_G",
+ "value": 71,
+ "description": "Key: G | g"
+ },
+ {
+ "name": "KEY_H",
+ "value": 72,
+ "description": "Key: H | h"
+ },
+ {
+ "name": "KEY_I",
+ "value": 73,
+ "description": "Key: I | i"
+ },
+ {
+ "name": "KEY_J",
+ "value": 74,
+ "description": "Key: J | j"
+ },
+ {
+ "name": "KEY_K",
+ "value": 75,
+ "description": "Key: K | k"
+ },
+ {
+ "name": "KEY_L",
+ "value": 76,
+ "description": "Key: L | l"
+ },
+ {
+ "name": "KEY_M",
+ "value": 77,
+ "description": "Key: M | m"
+ },
+ {
+ "name": "KEY_N",
+ "value": 78,
+ "description": "Key: N | n"
+ },
+ {
+ "name": "KEY_O",
+ "value": 79,
+ "description": "Key: O | o"
+ },
+ {
+ "name": "KEY_P",
+ "value": 80,
+ "description": "Key: P | p"
+ },
+ {
+ "name": "KEY_Q",
+ "value": 81,
+ "description": "Key: Q | q"
+ },
+ {
+ "name": "KEY_R",
+ "value": 82,
+ "description": "Key: R | r"
+ },
+ {
+ "name": "KEY_S",
+ "value": 83,
+ "description": "Key: S | s"
+ },
+ {
+ "name": "KEY_T",
+ "value": 84,
+ "description": "Key: T | t"
+ },
+ {
+ "name": "KEY_U",
+ "value": 85,
+ "description": "Key: U | u"
+ },
+ {
+ "name": "KEY_V",
+ "value": 86,
+ "description": "Key: V | v"
+ },
+ {
+ "name": "KEY_W",
+ "value": 87,
+ "description": "Key: W | w"
+ },
+ {
+ "name": "KEY_X",
+ "value": 88,
+ "description": "Key: X | x"
+ },
+ {
+ "name": "KEY_Y",
+ "value": 89,
+ "description": "Key: Y | y"
+ },
+ {
+ "name": "KEY_Z",
+ "value": 90,
+ "description": "Key: Z | z"
+ },
+ {
+ "name": "KEY_LEFT_BRACKET",
+ "value": 91,
+ "description": "Key: ["
+ },
+ {
+ "name": "KEY_BACKSLASH",
+ "value": 92,
+ "description": "Key: '\\'"
+ },
+ {
+ "name": "KEY_RIGHT_BRACKET",
+ "value": 93,
+ "description": "Key: ]"
+ },
+ {
+ "name": "KEY_GRAVE",
+ "value": 96,
+ "description": "Key: `"
+ },
+ {
+ "name": "KEY_SPACE",
+ "value": 32,
+ "description": "Key: Space"
+ },
+ {
+ "name": "KEY_ESCAPE",
+ "value": 256,
+ "description": "Key: Esc"
+ },
+ {
+ "name": "KEY_ENTER",
+ "value": 257,
+ "description": "Key: Enter"
+ },
+ {
+ "name": "KEY_TAB",
+ "value": 258,
+ "description": "Key: Tab"
+ },
+ {
+ "name": "KEY_BACKSPACE",
+ "value": 259,
+ "description": "Key: Backspace"
+ },
+ {
+ "name": "KEY_INSERT",
+ "value": 260,
+ "description": "Key: Ins"
+ },
+ {
+ "name": "KEY_DELETE",
+ "value": 261,
+ "description": "Key: Del"
+ },
+ {
+ "name": "KEY_RIGHT",
+ "value": 262,
+ "description": "Key: Cursor right"
+ },
+ {
+ "name": "KEY_LEFT",
+ "value": 263,
+ "description": "Key: Cursor left"
+ },
+ {
+ "name": "KEY_DOWN",
+ "value": 264,
+ "description": "Key: Cursor down"
+ },
+ {
+ "name": "KEY_UP",
+ "value": 265,
+ "description": "Key: Cursor up"
+ },
+ {
+ "name": "KEY_PAGE_UP",
+ "value": 266,
+ "description": "Key: Page up"
+ },
+ {
+ "name": "KEY_PAGE_DOWN",
+ "value": 267,
+ "description": "Key: Page down"
+ },
+ {
+ "name": "KEY_HOME",
+ "value": 268,
+ "description": "Key: Home"
+ },
+ {
+ "name": "KEY_END",
+ "value": 269,
+ "description": "Key: End"
+ },
+ {
+ "name": "KEY_CAPS_LOCK",
+ "value": 280,
+ "description": "Key: Caps lock"
+ },
+ {
+ "name": "KEY_SCROLL_LOCK",
+ "value": 281,
+ "description": "Key: Scroll down"
+ },
+ {
+ "name": "KEY_NUM_LOCK",
+ "value": 282,
+ "description": "Key: Num lock"
+ },
+ {
+ "name": "KEY_PRINT_SCREEN",
+ "value": 283,
+ "description": "Key: Print screen"
+ },
+ {
+ "name": "KEY_PAUSE",
+ "value": 284,
+ "description": "Key: Pause"
+ },
+ {
+ "name": "KEY_F1",
+ "value": 290,
+ "description": "Key: F1"
+ },
+ {
+ "name": "KEY_F2",
+ "value": 291,
+ "description": "Key: F2"
+ },
+ {
+ "name": "KEY_F3",
+ "value": 292,
+ "description": "Key: F3"
+ },
+ {
+ "name": "KEY_F4",
+ "value": 293,
+ "description": "Key: F4"
+ },
+ {
+ "name": "KEY_F5",
+ "value": 294,
+ "description": "Key: F5"
+ },
+ {
+ "name": "KEY_F6",
+ "value": 295,
+ "description": "Key: F6"
+ },
+ {
+ "name": "KEY_F7",
+ "value": 296,
+ "description": "Key: F7"
+ },
+ {
+ "name": "KEY_F8",
+ "value": 297,
+ "description": "Key: F8"
+ },
+ {
+ "name": "KEY_F9",
+ "value": 298,
+ "description": "Key: F9"
+ },
+ {
+ "name": "KEY_F10",
+ "value": 299,
+ "description": "Key: F10"
+ },
+ {
+ "name": "KEY_F11",
+ "value": 300,
+ "description": "Key: F11"
+ },
+ {
+ "name": "KEY_F12",
+ "value": 301,
+ "description": "Key: F12"
+ },
+ {
+ "name": "KEY_LEFT_SHIFT",
+ "value": 340,
+ "description": "Key: Shift left"
+ },
+ {
+ "name": "KEY_LEFT_CONTROL",
+ "value": 341,
+ "description": "Key: Control left"
+ },
+ {
+ "name": "KEY_LEFT_ALT",
+ "value": 342,
+ "description": "Key: Alt left"
+ },
+ {
+ "name": "KEY_LEFT_SUPER",
+ "value": 343,
+ "description": "Key: Super left"
+ },
+ {
+ "name": "KEY_RIGHT_SHIFT",
+ "value": 344,
+ "description": "Key: Shift right"
+ },
+ {
+ "name": "KEY_RIGHT_CONTROL",
+ "value": 345,
+ "description": "Key: Control right"
+ },
+ {
+ "name": "KEY_RIGHT_ALT",
+ "value": 346,
+ "description": "Key: Alt right"
+ },
+ {
+ "name": "KEY_RIGHT_SUPER",
+ "value": 347,
+ "description": "Key: Super right"
+ },
+ {
+ "name": "KEY_KB_MENU",
+ "value": 348,
+ "description": "Key: KB menu"
+ },
+ {
+ "name": "KEY_KP_0",
+ "value": 320,
+ "description": "Key: Keypad 0"
+ },
+ {
+ "name": "KEY_KP_1",
+ "value": 321,
+ "description": "Key: Keypad 1"
+ },
+ {
+ "name": "KEY_KP_2",
+ "value": 322,
+ "description": "Key: Keypad 2"
+ },
+ {
+ "name": "KEY_KP_3",
+ "value": 323,
+ "description": "Key: Keypad 3"
+ },
+ {
+ "name": "KEY_KP_4",
+ "value": 324,
+ "description": "Key: Keypad 4"
+ },
+ {
+ "name": "KEY_KP_5",
+ "value": 325,
+ "description": "Key: Keypad 5"
+ },
+ {
+ "name": "KEY_KP_6",
+ "value": 326,
+ "description": "Key: Keypad 6"
+ },
+ {
+ "name": "KEY_KP_7",
+ "value": 327,
+ "description": "Key: Keypad 7"
+ },
+ {
+ "name": "KEY_KP_8",
+ "value": 328,
+ "description": "Key: Keypad 8"
+ },
+ {
+ "name": "KEY_KP_9",
+ "value": 329,
+ "description": "Key: Keypad 9"
+ },
+ {
+ "name": "KEY_KP_DECIMAL",
+ "value": 330,
+ "description": "Key: Keypad ."
+ },
+ {
+ "name": "KEY_KP_DIVIDE",
+ "value": 331,
+ "description": "Key: Keypad /"
+ },
+ {
+ "name": "KEY_KP_MULTIPLY",
+ "value": 332,
+ "description": "Key: Keypad *"
+ },
+ {
+ "name": "KEY_KP_SUBTRACT",
+ "value": 333,
+ "description": "Key: Keypad -"
+ },
+ {
+ "name": "KEY_KP_ADD",
+ "value": 334,
+ "description": "Key: Keypad +"
+ },
+ {
+ "name": "KEY_KP_ENTER",
+ "value": 335,
+ "description": "Key: Keypad Enter"
+ },
+ {
+ "name": "KEY_KP_EQUAL",
+ "value": 336,
+ "description": "Key: Keypad ="
+ },
+ {
+ "name": "KEY_BACK",
+ "value": 4,
+ "description": "Key: Android back button"
+ },
+ {
+ "name": "KEY_MENU",
+ "value": 82,
+ "description": "Key: Android menu button"
+ },
+ {
+ "name": "KEY_VOLUME_UP",
+ "value": 24,
+ "description": "Key: Android volume up button"
+ },
+ {
+ "name": "KEY_VOLUME_DOWN",
+ "value": 25,
+ "description": "Key: Android volume down button"
+ }
+ ]
+ },
+ {
+ "name": "MouseButton",
+ "description": "Mouse buttons",
+ "values": [
+ {
+ "name": "MOUSE_BUTTON_LEFT",
+ "value": 0,
+ "description": "Mouse button left"
+ },
+ {
+ "name": "MOUSE_BUTTON_RIGHT",
+ "value": 1,
+ "description": "Mouse button right"
+ },
+ {
+ "name": "MOUSE_BUTTON_MIDDLE",
+ "value": 2,
+ "description": "Mouse button middle (pressed wheel)"
+ },
+ {
+ "name": "MOUSE_BUTTON_SIDE",
+ "value": 3,
+ "description": "Mouse button side (advanced mouse device)"
+ },
+ {
+ "name": "MOUSE_BUTTON_EXTRA",
+ "value": 4,
+ "description": "Mouse button extra (advanced mouse device)"
+ },
+ {
+ "name": "MOUSE_BUTTON_FORWARD",
+ "value": 5,
+ "description": "Mouse button forward (advanced mouse device)"
+ },
+ {
+ "name": "MOUSE_BUTTON_BACK",
+ "value": 6,
+ "description": "Mouse button back (advanced mouse device)"
+ }
+ ]
+ },
+ {
+ "name": "MouseCursor",
+ "description": "Mouse cursor",
+ "values": [
+ {
+ "name": "MOUSE_CURSOR_DEFAULT",
+ "value": 0,
+ "description": "Default pointer shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_ARROW",
+ "value": 1,
+ "description": "Arrow shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_IBEAM",
+ "value": 2,
+ "description": "Text writing cursor shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_CROSSHAIR",
+ "value": 3,
+ "description": "Cross shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_POINTING_HAND",
+ "value": 4,
+ "description": "Pointing hand cursor"
+ },
+ {
+ "name": "MOUSE_CURSOR_RESIZE_EW",
+ "value": 5,
+ "description": "Horizontal resize/move arrow shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_RESIZE_NS",
+ "value": 6,
+ "description": "Vertical resize/move arrow shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_RESIZE_NWSE",
+ "value": 7,
+ "description": "Top-left to bottom-right diagonal resize/move arrow shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_RESIZE_NESW",
+ "value": 8,
+ "description": "The top-right to bottom-left diagonal resize/move arrow shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_RESIZE_ALL",
+ "value": 9,
+ "description": "The omnidirectional resize/move cursor shape"
+ },
+ {
+ "name": "MOUSE_CURSOR_NOT_ALLOWED",
+ "value": 10,
+ "description": "The operation-not-allowed shape"
+ }
+ ]
+ },
+ {
+ "name": "GamepadButton",
+ "description": "Gamepad buttons",
+ "values": [
+ {
+ "name": "GAMEPAD_BUTTON_UNKNOWN",
+ "value": 0,
+ "description": "Unknown button, just for error checking"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_FACE_UP",
+ "value": 1,
+ "description": "Gamepad left DPAD up button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_FACE_RIGHT",
+ "value": 2,
+ "description": "Gamepad left DPAD right button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_FACE_DOWN",
+ "value": 3,
+ "description": "Gamepad left DPAD down button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_FACE_LEFT",
+ "value": 4,
+ "description": "Gamepad left DPAD left button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_FACE_UP",
+ "value": 5,
+ "description": "Gamepad right button up (i.e. PS3: Triangle, Xbox: Y)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_FACE_RIGHT",
+ "value": 6,
+ "description": "Gamepad right button right (i.e. PS3: Square, Xbox: X)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_FACE_DOWN",
+ "value": 7,
+ "description": "Gamepad right button down (i.e. PS3: Cross, Xbox: A)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_FACE_LEFT",
+ "value": 8,
+ "description": "Gamepad right button left (i.e. PS3: Circle, Xbox: B)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_TRIGGER_1",
+ "value": 9,
+ "description": "Gamepad top/back trigger left (first), it could be a trailing button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_TRIGGER_2",
+ "value": 10,
+ "description": "Gamepad top/back trigger left (second), it could be a trailing button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_TRIGGER_1",
+ "value": 11,
+ "description": "Gamepad top/back trigger right (one), it could be a trailing button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_TRIGGER_2",
+ "value": 12,
+ "description": "Gamepad top/back trigger right (second), it could be a trailing button"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_MIDDLE_LEFT",
+ "value": 13,
+ "description": "Gamepad center buttons, left one (i.e. PS3: Select)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_MIDDLE",
+ "value": 14,
+ "description": "Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_MIDDLE_RIGHT",
+ "value": 15,
+ "description": "Gamepad center buttons, right one (i.e. PS3: Start)"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_LEFT_THUMB",
+ "value": 16,
+ "description": "Gamepad joystick pressed button left"
+ },
+ {
+ "name": "GAMEPAD_BUTTON_RIGHT_THUMB",
+ "value": 17,
+ "description": "Gamepad joystick pressed button right"
+ }
+ ]
+ },
+ {
+ "name": "GamepadAxis",
+ "description": "Gamepad axis",
+ "values": [
+ {
+ "name": "GAMEPAD_AXIS_LEFT_X",
+ "value": 0,
+ "description": "Gamepad left stick X axis"
+ },
+ {
+ "name": "GAMEPAD_AXIS_LEFT_Y",
+ "value": 1,
+ "description": "Gamepad left stick Y axis"
+ },
+ {
+ "name": "GAMEPAD_AXIS_RIGHT_X",
+ "value": 2,
+ "description": "Gamepad right stick X axis"
+ },
+ {
+ "name": "GAMEPAD_AXIS_RIGHT_Y",
+ "value": 3,
+ "description": "Gamepad right stick Y axis"
+ },
+ {
+ "name": "GAMEPAD_AXIS_LEFT_TRIGGER",
+ "value": 4,
+ "description": "Gamepad back trigger left, pressure level: [1..-1]"
+ },
+ {
+ "name": "GAMEPAD_AXIS_RIGHT_TRIGGER",
+ "value": 5,
+ "description": "Gamepad back trigger right, pressure level: [1..-1]"
+ }
+ ]
+ },
+ {
+ "name": "MaterialMapIndex",
+ "description": "Material map index",
+ "values": [
+ {
+ "name": "MATERIAL_MAP_ALBEDO",
+ "value": 0,
+ "description": "Albedo material (same as: MATERIAL_MAP_DIFFUSE)"
+ },
+ {
+ "name": "MATERIAL_MAP_METALNESS",
+ "value": 1,
+ "description": "Metalness material (same as: MATERIAL_MAP_SPECULAR)"
+ },
+ {
+ "name": "MATERIAL_MAP_NORMAL",
+ "value": 2,
+ "description": "Normal material"
+ },
+ {
+ "name": "MATERIAL_MAP_ROUGHNESS",
+ "value": 3,
+ "description": "Roughness material"
+ },
+ {
+ "name": "MATERIAL_MAP_OCCLUSION",
+ "value": 4,
+ "description": "Ambient occlusion material"
+ },
+ {
+ "name": "MATERIAL_MAP_EMISSION",
+ "value": 5,
+ "description": "Emission material"
+ },
+ {
+ "name": "MATERIAL_MAP_HEIGHT",
+ "value": 6,
+ "description": "Heightmap material"
+ },
+ {
+ "name": "MATERIAL_MAP_CUBEMAP",
+ "value": 7,
+ "description": "Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP)"
+ },
+ {
+ "name": "MATERIAL_MAP_IRRADIANCE",
+ "value": 8,
+ "description": "Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP)"
+ },
+ {
+ "name": "MATERIAL_MAP_PREFILTER",
+ "value": 9,
+ "description": "Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP)"
+ },
+ {
+ "name": "MATERIAL_MAP_BRDF",
+ "value": 10,
+ "description": "Brdf material"
+ }
+ ]
+ },
+ {
+ "name": "ShaderLocationIndex",
+ "description": "Shader location index",
+ "values": [
+ {
+ "name": "SHADER_LOC_VERTEX_POSITION",
+ "value": 0,
+ "description": "Shader location: vertex attribute: position"
+ },
+ {
+ "name": "SHADER_LOC_VERTEX_TEXCOORD01",
+ "value": 1,
+ "description": "Shader location: vertex attribute: texcoord01"
+ },
+ {
+ "name": "SHADER_LOC_VERTEX_TEXCOORD02",
+ "value": 2,
+ "description": "Shader location: vertex attribute: texcoord02"
+ },
+ {
+ "name": "SHADER_LOC_VERTEX_NORMAL",
+ "value": 3,
+ "description": "Shader location: vertex attribute: normal"
+ },
+ {
+ "name": "SHADER_LOC_VERTEX_TANGENT",
+ "value": 4,
+ "description": "Shader location: vertex attribute: tangent"
+ },
+ {
+ "name": "SHADER_LOC_VERTEX_COLOR",
+ "value": 5,
+ "description": "Shader location: vertex attribute: color"
+ },
+ {
+ "name": "SHADER_LOC_MATRIX_MVP",
+ "value": 6,
+ "description": "Shader location: matrix uniform: model-view-projection"
+ },
+ {
+ "name": "SHADER_LOC_MATRIX_VIEW",
+ "value": 7,
+ "description": "Shader location: matrix uniform: view (camera transform)"
+ },
+ {
+ "name": "SHADER_LOC_MATRIX_PROJECTION",
+ "value": 8,
+ "description": "Shader location: matrix uniform: projection"
+ },
+ {
+ "name": "SHADER_LOC_MATRIX_MODEL",
+ "value": 9,
+ "description": "Shader location: matrix uniform: model (transform)"
+ },
+ {
+ "name": "SHADER_LOC_MATRIX_NORMAL",
+ "value": 10,
+ "description": "Shader location: matrix uniform: normal"
+ },
+ {
+ "name": "SHADER_LOC_VECTOR_VIEW",
+ "value": 11,
+ "description": "Shader location: vector uniform: view"
+ },
+ {
+ "name": "SHADER_LOC_COLOR_DIFFUSE",
+ "value": 12,
+ "description": "Shader location: vector uniform: diffuse color"
+ },
+ {
+ "name": "SHADER_LOC_COLOR_SPECULAR",
+ "value": 13,
+ "description": "Shader location: vector uniform: specular color"
+ },
+ {
+ "name": "SHADER_LOC_COLOR_AMBIENT",
+ "value": 14,
+ "description": "Shader location: vector uniform: ambient color"
+ },
+ {
+ "name": "SHADER_LOC_MAP_ALBEDO",
+ "value": 15,
+ "description": "Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE)"
+ },
+ {
+ "name": "SHADER_LOC_MAP_METALNESS",
+ "value": 16,
+ "description": "Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR)"
+ },
+ {
+ "name": "SHADER_LOC_MAP_NORMAL",
+ "value": 17,
+ "description": "Shader location: sampler2d texture: normal"
+ },
+ {
+ "name": "SHADER_LOC_MAP_ROUGHNESS",
+ "value": 18,
+ "description": "Shader location: sampler2d texture: roughness"
+ },
+ {
+ "name": "SHADER_LOC_MAP_OCCLUSION",
+ "value": 19,
+ "description": "Shader location: sampler2d texture: occlusion"
+ },
+ {
+ "name": "SHADER_LOC_MAP_EMISSION",
+ "value": 20,
+ "description": "Shader location: sampler2d texture: emission"
+ },
+ {
+ "name": "SHADER_LOC_MAP_HEIGHT",
+ "value": 21,
+ "description": "Shader location: sampler2d texture: height"
+ },
+ {
+ "name": "SHADER_LOC_MAP_CUBEMAP",
+ "value": 22,
+ "description": "Shader location: samplerCube texture: cubemap"
+ },
+ {
+ "name": "SHADER_LOC_MAP_IRRADIANCE",
+ "value": 23,
+ "description": "Shader location: samplerCube texture: irradiance"
+ },
+ {
+ "name": "SHADER_LOC_MAP_PREFILTER",
+ "value": 24,
+ "description": "Shader location: samplerCube texture: prefilter"
+ },
+ {
+ "name": "SHADER_LOC_MAP_BRDF",
+ "value": 25,
+ "description": "Shader location: sampler2d texture: brdf"
+ }
+ ]
+ },
+ {
+ "name": "ShaderUniformDataType",
+ "description": "Shader uniform data type",
+ "values": [
+ {
+ "name": "SHADER_UNIFORM_FLOAT",
+ "value": 0,
+ "description": "Shader uniform type: float"
+ },
+ {
+ "name": "SHADER_UNIFORM_VEC2",
+ "value": 1,
+ "description": "Shader uniform type: vec2 (2 float)"
+ },
+ {
+ "name": "SHADER_UNIFORM_VEC3",
+ "value": 2,
+ "description": "Shader uniform type: vec3 (3 float)"
+ },
+ {
+ "name": "SHADER_UNIFORM_VEC4",
+ "value": 3,
+ "description": "Shader uniform type: vec4 (4 float)"
+ },
+ {
+ "name": "SHADER_UNIFORM_INT",
+ "value": 4,
+ "description": "Shader uniform type: int"
+ },
+ {
+ "name": "SHADER_UNIFORM_IVEC2",
+ "value": 5,
+ "description": "Shader uniform type: ivec2 (2 int)"
+ },
+ {
+ "name": "SHADER_UNIFORM_IVEC3",
+ "value": 6,
+ "description": "Shader uniform type: ivec3 (3 int)"
+ },
+ {
+ "name": "SHADER_UNIFORM_IVEC4",
+ "value": 7,
+ "description": "Shader uniform type: ivec4 (4 int)"
+ },
+ {
+ "name": "SHADER_UNIFORM_SAMPLER2D",
+ "value": 8,
+ "description": "Shader uniform type: sampler2d"
+ }
+ ]
+ },
+ {
+ "name": "ShaderAttributeDataType",
+ "description": "Shader attribute data types",
+ "values": [
+ {
+ "name": "SHADER_ATTRIB_FLOAT",
+ "value": 0,
+ "description": "Shader attribute type: float"
+ },
+ {
+ "name": "SHADER_ATTRIB_VEC2",
+ "value": 1,
+ "description": "Shader attribute type: vec2 (2 float)"
+ },
+ {
+ "name": "SHADER_ATTRIB_VEC3",
+ "value": 2,
+ "description": "Shader attribute type: vec3 (3 float)"
+ },
+ {
+ "name": "SHADER_ATTRIB_VEC4",
+ "value": 3,
+ "description": "Shader attribute type: vec4 (4 float)"
+ }
+ ]
+ },
+ {
+ "name": "PixelFormat",
+ "description": "Pixel formats",
+ "values": [
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_GRAYSCALE",
+ "value": 1,
+ "description": "8 bit per pixel (no alpha)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA",
+ "value": 2,
+ "description": "8*2 bpp (2 channels)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R5G6B5",
+ "value": 3,
+ "description": "16 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R8G8B8",
+ "value": 4,
+ "description": "24 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R5G5B5A1",
+ "value": 5,
+ "description": "16 bpp (1 bit alpha)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R4G4B4A4",
+ "value": 6,
+ "description": "16 bpp (4 bit alpha)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R8G8B8A8",
+ "value": 7,
+ "description": "32 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R32",
+ "value": 8,
+ "description": "32 bpp (1 channel - float)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R32G32B32",
+ "value": 9,
+ "description": "32*3 bpp (3 channels - float)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R32G32B32A32",
+ "value": 10,
+ "description": "32*4 bpp (4 channels - float)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R16",
+ "value": 11,
+ "description": "16 bpp (1 channel - half float)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R16G16B16",
+ "value": 12,
+ "description": "16*3 bpp (3 channels - half float)"
+ },
+ {
+ "name": "PIXELFORMAT_UNCOMPRESSED_R16G16B16A16",
+ "value": 13,
+ "description": "16*4 bpp (4 channels - half float)"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_DXT1_RGB",
+ "value": 14,
+ "description": "4 bpp (no alpha)"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_DXT1_RGBA",
+ "value": 15,
+ "description": "4 bpp (1 bit alpha)"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_DXT3_RGBA",
+ "value": 16,
+ "description": "8 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_DXT5_RGBA",
+ "value": 17,
+ "description": "8 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_ETC1_RGB",
+ "value": 18,
+ "description": "4 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_ETC2_RGB",
+ "value": 19,
+ "description": "4 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA",
+ "value": 20,
+ "description": "8 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_PVRT_RGB",
+ "value": 21,
+ "description": "4 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_PVRT_RGBA",
+ "value": 22,
+ "description": "4 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA",
+ "value": 23,
+ "description": "8 bpp"
+ },
+ {
+ "name": "PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA",
+ "value": 24,
+ "description": "2 bpp"
+ }
+ ]
+ },
+ {
+ "name": "TextureFilter",
+ "description": "Texture parameters: filter mode",
+ "values": [
+ {
+ "name": "TEXTURE_FILTER_POINT",
+ "value": 0,
+ "description": "No filter, just pixel approximation"
+ },
+ {
+ "name": "TEXTURE_FILTER_BILINEAR",
+ "value": 1,
+ "description": "Linear filtering"
+ },
+ {
+ "name": "TEXTURE_FILTER_TRILINEAR",
+ "value": 2,
+ "description": "Trilinear filtering (linear with mipmaps)"
+ },
+ {
+ "name": "TEXTURE_FILTER_ANISOTROPIC_4X",
+ "value": 3,
+ "description": "Anisotropic filtering 4x"
+ },
+ {
+ "name": "TEXTURE_FILTER_ANISOTROPIC_8X",
+ "value": 4,
+ "description": "Anisotropic filtering 8x"
+ },
+ {
+ "name": "TEXTURE_FILTER_ANISOTROPIC_16X",
+ "value": 5,
+ "description": "Anisotropic filtering 16x"
+ }
+ ]
+ },
+ {
+ "name": "TextureWrap",
+ "description": "Texture parameters: wrap mode",
+ "values": [
+ {
+ "name": "TEXTURE_WRAP_REPEAT",
+ "value": 0,
+ "description": "Repeats texture in tiled mode"
+ },
+ {
+ "name": "TEXTURE_WRAP_CLAMP",
+ "value": 1,
+ "description": "Clamps texture to edge pixel in tiled mode"
+ },
+ {
+ "name": "TEXTURE_WRAP_MIRROR_REPEAT",
+ "value": 2,
+ "description": "Mirrors and repeats the texture in tiled mode"
+ },
+ {
+ "name": "TEXTURE_WRAP_MIRROR_CLAMP",
+ "value": 3,
+ "description": "Mirrors and clamps to border the texture in tiled mode"
+ }
+ ]
+ },
+ {
+ "name": "CubemapLayout",
+ "description": "Cubemap layouts",
+ "values": [
+ {
+ "name": "CUBEMAP_LAYOUT_AUTO_DETECT",
+ "value": 0,
+ "description": "Automatically detect layout type"
+ },
+ {
+ "name": "CUBEMAP_LAYOUT_LINE_VERTICAL",
+ "value": 1,
+ "description": "Layout is defined by a vertical line with faces"
+ },
+ {
+ "name": "CUBEMAP_LAYOUT_LINE_HORIZONTAL",
+ "value": 2,
+ "description": "Layout is defined by a horizontal line with faces"
+ },
+ {
+ "name": "CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR",
+ "value": 3,
+ "description": "Layout is defined by a 3x4 cross with cubemap faces"
+ },
+ {
+ "name": "CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE",
+ "value": 4,
+ "description": "Layout is defined by a 4x3 cross with cubemap faces"
+ },
+ {
+ "name": "CUBEMAP_LAYOUT_PANORAMA",
+ "value": 5,
+ "description": "Layout is defined by a panorama image (equirrectangular map)"
+ }
+ ]
+ },
+ {
+ "name": "FontType",
+ "description": "Font type, defines generation method",
+ "values": [
+ {
+ "name": "FONT_DEFAULT",
+ "value": 0,
+ "description": "Default font generation, anti-aliased"
+ },
+ {
+ "name": "FONT_BITMAP",
+ "value": 1,
+ "description": "Bitmap font generation, no anti-aliasing"
+ },
+ {
+ "name": "FONT_SDF",
+ "value": 2,
+ "description": "SDF font generation, requires external shader"
+ }
+ ]
+ },
+ {
+ "name": "BlendMode",
+ "description": "Color blending modes (pre-defined)",
+ "values": [
+ {
+ "name": "BLEND_ALPHA",
+ "value": 0,
+ "description": "Blend textures considering alpha (default)"
+ },
+ {
+ "name": "BLEND_ADDITIVE",
+ "value": 1,
+ "description": "Blend textures adding colors"
+ },
+ {
+ "name": "BLEND_MULTIPLIED",
+ "value": 2,
+ "description": "Blend textures multiplying colors"
+ },
+ {
+ "name": "BLEND_ADD_COLORS",
+ "value": 3,
+ "description": "Blend textures adding colors (alternative)"
+ },
+ {
+ "name": "BLEND_SUBTRACT_COLORS",
+ "value": 4,
+ "description": "Blend textures subtracting colors (alternative)"
+ },
+ {
+ "name": "BLEND_ALPHA_PREMULTIPLY",
+ "value": 5,
+ "description": "Blend premultiplied textures considering alpha"
+ },
+ {
+ "name": "BLEND_CUSTOM",
+ "value": 6,
+ "description": "Blend textures using custom src/dst factors (use rlSetBlendFactors())"
+ },
+ {
+ "name": "BLEND_CUSTOM_SEPARATE",
+ "value": 7,
+ "description": "Blend textures using custom rgb/alpha separate src/dst factors (use rlSetBlendFactorsSeparate())"
+ }
+ ]
+ },
+ {
+ "name": "Gesture",
+ "description": "Gesture",
+ "values": [
+ {
+ "name": "GESTURE_NONE",
+ "value": 0,
+ "description": "No gesture"
+ },
+ {
+ "name": "GESTURE_TAP",
+ "value": 1,
+ "description": "Tap gesture"
+ },
+ {
+ "name": "GESTURE_DOUBLETAP",
+ "value": 2,
+ "description": "Double tap gesture"
+ },
+ {
+ "name": "GESTURE_HOLD",
+ "value": 4,
+ "description": "Hold gesture"
+ },
+ {
+ "name": "GESTURE_DRAG",
+ "value": 8,
+ "description": "Drag gesture"
+ },
+ {
+ "name": "GESTURE_SWIPE_RIGHT",
+ "value": 16,
+ "description": "Swipe right gesture"
+ },
+ {
+ "name": "GESTURE_SWIPE_LEFT",
+ "value": 32,
+ "description": "Swipe left gesture"
+ },
+ {
+ "name": "GESTURE_SWIPE_UP",
+ "value": 64,
+ "description": "Swipe up gesture"
+ },
+ {
+ "name": "GESTURE_SWIPE_DOWN",
+ "value": 128,
+ "description": "Swipe down gesture"
+ },
+ {
+ "name": "GESTURE_PINCH_IN",
+ "value": 256,
+ "description": "Pinch in gesture"
+ },
+ {
+ "name": "GESTURE_PINCH_OUT",
+ "value": 512,
+ "description": "Pinch out gesture"
+ }
+ ]
+ },
+ {
+ "name": "CameraMode",
+ "description": "Camera system modes",
+ "values": [
+ {
+ "name": "CAMERA_CUSTOM",
+ "value": 0,
+ "description": "Custom camera"
+ },
+ {
+ "name": "CAMERA_FREE",
+ "value": 1,
+ "description": "Free camera"
+ },
+ {
+ "name": "CAMERA_ORBITAL",
+ "value": 2,
+ "description": "Orbital camera"
+ },
+ {
+ "name": "CAMERA_FIRST_PERSON",
+ "value": 3,
+ "description": "First person camera"
+ },
+ {
+ "name": "CAMERA_THIRD_PERSON",
+ "value": 4,
+ "description": "Third person camera"
+ }
+ ]
+ },
+ {
+ "name": "CameraProjection",
+ "description": "Camera projection",
+ "values": [
+ {
+ "name": "CAMERA_PERSPECTIVE",
+ "value": 0,
+ "description": "Perspective projection"
+ },
+ {
+ "name": "CAMERA_ORTHOGRAPHIC",
+ "value": 1,
+ "description": "Orthographic projection"
+ }
+ ]
+ },
+ {
+ "name": "NPatchLayout",
+ "description": "N-patch layout",
+ "values": [
+ {
+ "name": "NPATCH_NINE_PATCH",
+ "value": 0,
+ "description": "Npatch layout: 3x3 tiles"
+ },
+ {
+ "name": "NPATCH_THREE_PATCH_VERTICAL",
+ "value": 1,
+ "description": "Npatch layout: 1x3 tiles"
+ },
+ {
+ "name": "NPATCH_THREE_PATCH_HORIZONTAL",
+ "value": 2,
+ "description": "Npatch layout: 3x1 tiles"
+ }
+ ]
+ }
+ ],
+ "callbacks": [
+ {
+ "name": "TraceLogCallback",
+ "description": "Logging: Redirect trace log messages",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "logLevel"
+ },
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "va_list",
+ "name": "args"
+ }
+ ]
+ },
+ {
+ "name": "LoadFileDataCallback",
+ "description": "FileIO: Load binary data",
+ "returnType": "unsigned char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ },
+ {
+ "type": "int *",
+ "name": "dataSize"
+ }
+ ]
+ },
+ {
+ "name": "SaveFileDataCallback",
+ "description": "FileIO: Save binary data",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ },
+ {
+ "type": "void *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ }
+ ]
+ },
+ {
+ "name": "LoadFileTextCallback",
+ "description": "FileIO: Load text data",
+ "returnType": "char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "SaveFileTextCallback",
+ "description": "FileIO: Save text data",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ },
+ {
+ "type": "char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "AudioCallback",
+ "description": "",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "void *",
+ "name": "bufferData"
+ },
+ {
+ "type": "unsigned int",
+ "name": "frames"
+ }
+ ]
+ }
+ ],
+ "functions": [
+ {
+ "name": "InitWindow",
+ "description": "Initialize window and OpenGL context",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "const char *",
+ "name": "title"
+ }
+ ]
+ },
+ {
+ "name": "CloseWindow",
+ "description": "Close window and unload OpenGL context",
+ "returnType": "void"
+ },
+ {
+ "name": "WindowShouldClose",
+ "description": "Check if application should close (KEY_ESCAPE pressed or windows close icon clicked)",
+ "returnType": "bool"
+ },
+ {
+ "name": "IsWindowReady",
+ "description": "Check if window has been initialized successfully",
+ "returnType": "bool"
+ },
+ {
+ "name": "IsWindowFullscreen",
+ "description": "Check if window is currently fullscreen",
+ "returnType": "bool"
+ },
+ {
+ "name": "IsWindowHidden",
+ "description": "Check if window is currently hidden (only PLATFORM_DESKTOP)",
+ "returnType": "bool"
+ },
+ {
+ "name": "IsWindowMinimized",
+ "description": "Check if window is currently minimized (only PLATFORM_DESKTOP)",
+ "returnType": "bool"
+ },
+ {
+ "name": "IsWindowMaximized",
+ "description": "Check if window is currently maximized (only PLATFORM_DESKTOP)",
+ "returnType": "bool"
+ },
+ {
+ "name": "IsWindowFocused",
+ "description": "Check if window is currently focused (only PLATFORM_DESKTOP)",
+ "returnType": "bool"
+ },
+ {
+ "name": "IsWindowResized",
+ "description": "Check if window has been resized last frame",
+ "returnType": "bool"
+ },
+ {
+ "name": "IsWindowState",
+ "description": "Check if one specific window flag is enabled",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "flag"
+ }
+ ]
+ },
+ {
+ "name": "SetWindowState",
+ "description": "Set window configuration state using flags (only PLATFORM_DESKTOP)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "flags"
+ }
+ ]
+ },
+ {
+ "name": "ClearWindowState",
+ "description": "Clear window configuration state flags",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "flags"
+ }
+ ]
+ },
+ {
+ "name": "ToggleFullscreen",
+ "description": "Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)",
+ "returnType": "void"
+ },
+ {
+ "name": "ToggleBorderlessWindowed",
+ "description": "Toggle window state: borderless windowed (only PLATFORM_DESKTOP)",
+ "returnType": "void"
+ },
+ {
+ "name": "MaximizeWindow",
+ "description": "Set window state: maximized, if resizable (only PLATFORM_DESKTOP)",
+ "returnType": "void"
+ },
+ {
+ "name": "MinimizeWindow",
+ "description": "Set window state: minimized, if resizable (only PLATFORM_DESKTOP)",
+ "returnType": "void"
+ },
+ {
+ "name": "RestoreWindow",
+ "description": "Set window state: not minimized/maximized (only PLATFORM_DESKTOP)",
+ "returnType": "void"
+ },
+ {
+ "name": "SetWindowIcon",
+ "description": "Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "SetWindowIcons",
+ "description": "Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "images"
+ },
+ {
+ "type": "int",
+ "name": "count"
+ }
+ ]
+ },
+ {
+ "name": "SetWindowTitle",
+ "description": "Set title for window (only PLATFORM_DESKTOP and PLATFORM_WEB)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "title"
+ }
+ ]
+ },
+ {
+ "name": "SetWindowPosition",
+ "description": "Set window position on screen (only PLATFORM_DESKTOP)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "x"
+ },
+ {
+ "type": "int",
+ "name": "y"
+ }
+ ]
+ },
+ {
+ "name": "SetWindowMonitor",
+ "description": "Set monitor for the current window",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "monitor"
+ }
+ ]
+ },
+ {
+ "name": "SetWindowMinSize",
+ "description": "Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "SetWindowMaxSize",
+ "description": "Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "SetWindowSize",
+ "description": "Set window dimensions",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "SetWindowOpacity",
+ "description": "Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "opacity"
+ }
+ ]
+ },
+ {
+ "name": "SetWindowFocused",
+ "description": "Set window focused (only PLATFORM_DESKTOP)",
+ "returnType": "void"
+ },
+ {
+ "name": "GetWindowHandle",
+ "description": "Get native window handle",
+ "returnType": "void *"
+ },
+ {
+ "name": "GetScreenWidth",
+ "description": "Get current screen width",
+ "returnType": "int"
+ },
+ {
+ "name": "GetScreenHeight",
+ "description": "Get current screen height",
+ "returnType": "int"
+ },
+ {
+ "name": "GetRenderWidth",
+ "description": "Get current render width (it considers HiDPI)",
+ "returnType": "int"
+ },
+ {
+ "name": "GetRenderHeight",
+ "description": "Get current render height (it considers HiDPI)",
+ "returnType": "int"
+ },
+ {
+ "name": "GetMonitorCount",
+ "description": "Get number of connected monitors",
+ "returnType": "int"
+ },
+ {
+ "name": "GetCurrentMonitor",
+ "description": "Get current connected monitor",
+ "returnType": "int"
+ },
+ {
+ "name": "GetMonitorPosition",
+ "description": "Get specified monitor position",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "int",
+ "name": "monitor"
+ }
+ ]
+ },
+ {
+ "name": "GetMonitorWidth",
+ "description": "Get specified monitor width (current video mode used by monitor)",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "int",
+ "name": "monitor"
+ }
+ ]
+ },
+ {
+ "name": "GetMonitorHeight",
+ "description": "Get specified monitor height (current video mode used by monitor)",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "int",
+ "name": "monitor"
+ }
+ ]
+ },
+ {
+ "name": "GetMonitorPhysicalWidth",
+ "description": "Get specified monitor physical width in millimetres",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "int",
+ "name": "monitor"
+ }
+ ]
+ },
+ {
+ "name": "GetMonitorPhysicalHeight",
+ "description": "Get specified monitor physical height in millimetres",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "int",
+ "name": "monitor"
+ }
+ ]
+ },
+ {
+ "name": "GetMonitorRefreshRate",
+ "description": "Get specified monitor refresh rate",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "int",
+ "name": "monitor"
+ }
+ ]
+ },
+ {
+ "name": "GetWindowPosition",
+ "description": "Get window position XY on monitor",
+ "returnType": "Vector2"
+ },
+ {
+ "name": "GetWindowScaleDPI",
+ "description": "Get window scale DPI factor",
+ "returnType": "Vector2"
+ },
+ {
+ "name": "GetMonitorName",
+ "description": "Get the human-readable, UTF-8 encoded name of the specified monitor",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "int",
+ "name": "monitor"
+ }
+ ]
+ },
+ {
+ "name": "SetClipboardText",
+ "description": "Set clipboard text content",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "GetClipboardText",
+ "description": "Get clipboard text content",
+ "returnType": "const char *"
+ },
+ {
+ "name": "EnableEventWaiting",
+ "description": "Enable waiting for events on EndDrawing(), no automatic event polling",
+ "returnType": "void"
+ },
+ {
+ "name": "DisableEventWaiting",
+ "description": "Disable waiting for events on EndDrawing(), automatic events polling",
+ "returnType": "void"
+ },
+ {
+ "name": "ShowCursor",
+ "description": "Shows cursor",
+ "returnType": "void"
+ },
+ {
+ "name": "HideCursor",
+ "description": "Hides cursor",
+ "returnType": "void"
+ },
+ {
+ "name": "IsCursorHidden",
+ "description": "Check if cursor is not visible",
+ "returnType": "bool"
+ },
+ {
+ "name": "EnableCursor",
+ "description": "Enables cursor (unlock cursor)",
+ "returnType": "void"
+ },
+ {
+ "name": "DisableCursor",
+ "description": "Disables cursor (lock cursor)",
+ "returnType": "void"
+ },
+ {
+ "name": "IsCursorOnScreen",
+ "description": "Check if cursor is on the screen",
+ "returnType": "bool"
+ },
+ {
+ "name": "ClearBackground",
+ "description": "Set background color (framebuffer clear color)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "BeginDrawing",
+ "description": "Setup canvas (framebuffer) to start drawing",
+ "returnType": "void"
+ },
+ {
+ "name": "EndDrawing",
+ "description": "End canvas drawing and swap buffers (double buffering)",
+ "returnType": "void"
+ },
+ {
+ "name": "BeginMode2D",
+ "description": "Begin 2D mode with custom camera (2D)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Camera2D",
+ "name": "camera"
+ }
+ ]
+ },
+ {
+ "name": "EndMode2D",
+ "description": "Ends 2D mode with custom camera",
+ "returnType": "void"
+ },
+ {
+ "name": "BeginMode3D",
+ "description": "Begin 3D mode with custom camera (3D)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Camera3D",
+ "name": "camera"
+ }
+ ]
+ },
+ {
+ "name": "EndMode3D",
+ "description": "Ends 3D mode and returns to default 2D orthographic mode",
+ "returnType": "void"
+ },
+ {
+ "name": "BeginTextureMode",
+ "description": "Begin drawing to render texture",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "RenderTexture2D",
+ "name": "target"
+ }
+ ]
+ },
+ {
+ "name": "EndTextureMode",
+ "description": "Ends drawing to render texture",
+ "returnType": "void"
+ },
+ {
+ "name": "BeginShaderMode",
+ "description": "Begin custom shader drawing",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Shader",
+ "name": "shader"
+ }
+ ]
+ },
+ {
+ "name": "EndShaderMode",
+ "description": "End custom shader drawing (use default shader)",
+ "returnType": "void"
+ },
+ {
+ "name": "BeginBlendMode",
+ "description": "Begin blending mode (alpha, additive, multiplied, subtract, custom)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "mode"
+ }
+ ]
+ },
+ {
+ "name": "EndBlendMode",
+ "description": "End blending mode (reset to default: alpha blending)",
+ "returnType": "void"
+ },
+ {
+ "name": "BeginScissorMode",
+ "description": "Begin scissor mode (define screen area for following drawing)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "x"
+ },
+ {
+ "type": "int",
+ "name": "y"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "EndScissorMode",
+ "description": "End scissor mode",
+ "returnType": "void"
+ },
+ {
+ "name": "BeginVrStereoMode",
+ "description": "Begin stereo rendering (requires VR simulator)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "VrStereoConfig",
+ "name": "config"
+ }
+ ]
+ },
+ {
+ "name": "EndVrStereoMode",
+ "description": "End stereo rendering (requires VR simulator)",
+ "returnType": "void"
+ },
+ {
+ "name": "LoadVrStereoConfig",
+ "description": "Load VR stereo config for VR simulator device parameters",
+ "returnType": "VrStereoConfig",
+ "params": [
+ {
+ "type": "VrDeviceInfo",
+ "name": "device"
+ }
+ ]
+ },
+ {
+ "name": "UnloadVrStereoConfig",
+ "description": "Unload VR stereo config",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "VrStereoConfig",
+ "name": "config"
+ }
+ ]
+ },
+ {
+ "name": "LoadShader",
+ "description": "Load shader from files and bind default locations",
+ "returnType": "Shader",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "vsFileName"
+ },
+ {
+ "type": "const char *",
+ "name": "fsFileName"
+ }
+ ]
+ },
+ {
+ "name": "LoadShaderFromMemory",
+ "description": "Load shader from code strings and bind default locations",
+ "returnType": "Shader",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "vsCode"
+ },
+ {
+ "type": "const char *",
+ "name": "fsCode"
+ }
+ ]
+ },
+ {
+ "name": "IsShaderReady",
+ "description": "Check if a shader is ready",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Shader",
+ "name": "shader"
+ }
+ ]
+ },
+ {
+ "name": "GetShaderLocation",
+ "description": "Get shader uniform location",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "Shader",
+ "name": "shader"
+ },
+ {
+ "type": "const char *",
+ "name": "uniformName"
+ }
+ ]
+ },
+ {
+ "name": "GetShaderLocationAttrib",
+ "description": "Get shader attribute location",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "Shader",
+ "name": "shader"
+ },
+ {
+ "type": "const char *",
+ "name": "attribName"
+ }
+ ]
+ },
+ {
+ "name": "SetShaderValue",
+ "description": "Set shader uniform value",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Shader",
+ "name": "shader"
+ },
+ {
+ "type": "int",
+ "name": "locIndex"
+ },
+ {
+ "type": "const void *",
+ "name": "value"
+ },
+ {
+ "type": "int",
+ "name": "uniformType"
+ }
+ ]
+ },
+ {
+ "name": "SetShaderValueV",
+ "description": "Set shader uniform value vector",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Shader",
+ "name": "shader"
+ },
+ {
+ "type": "int",
+ "name": "locIndex"
+ },
+ {
+ "type": "const void *",
+ "name": "value"
+ },
+ {
+ "type": "int",
+ "name": "uniformType"
+ },
+ {
+ "type": "int",
+ "name": "count"
+ }
+ ]
+ },
+ {
+ "name": "SetShaderValueMatrix",
+ "description": "Set shader uniform value (matrix 4x4)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Shader",
+ "name": "shader"
+ },
+ {
+ "type": "int",
+ "name": "locIndex"
+ },
+ {
+ "type": "Matrix",
+ "name": "mat"
+ }
+ ]
+ },
+ {
+ "name": "SetShaderValueTexture",
+ "description": "Set shader uniform value for texture (sampler2d)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Shader",
+ "name": "shader"
+ },
+ {
+ "type": "int",
+ "name": "locIndex"
+ },
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ }
+ ]
+ },
+ {
+ "name": "UnloadShader",
+ "description": "Unload shader from GPU memory (VRAM)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Shader",
+ "name": "shader"
+ }
+ ]
+ },
+ {
+ "name": "GetMouseRay",
+ "description": "Get a ray trace from mouse position",
+ "returnType": "Ray",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "mousePosition"
+ },
+ {
+ "type": "Camera",
+ "name": "camera"
+ }
+ ]
+ },
+ {
+ "name": "GetCameraMatrix",
+ "description": "Get camera transform matrix (view matrix)",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "Camera",
+ "name": "camera"
+ }
+ ]
+ },
+ {
+ "name": "GetCameraMatrix2D",
+ "description": "Get camera 2d transform matrix",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "Camera2D",
+ "name": "camera"
+ }
+ ]
+ },
+ {
+ "name": "GetWorldToScreen",
+ "description": "Get the screen space position for a 3d world space position",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "Camera",
+ "name": "camera"
+ }
+ ]
+ },
+ {
+ "name": "GetScreenToWorld2D",
+ "description": "Get the world space position for a 2d camera screen space position",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "Camera2D",
+ "name": "camera"
+ }
+ ]
+ },
+ {
+ "name": "GetWorldToScreenEx",
+ "description": "Get size position for a 3d world space position",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "Camera",
+ "name": "camera"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "GetWorldToScreen2D",
+ "description": "Get the screen space position for a 2d camera world space position",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "Camera2D",
+ "name": "camera"
+ }
+ ]
+ },
+ {
+ "name": "SetTargetFPS",
+ "description": "Set target FPS (maximum)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "fps"
+ }
+ ]
+ },
+ {
+ "name": "GetFrameTime",
+ "description": "Get time in seconds for last frame drawn (delta time)",
+ "returnType": "float"
+ },
+ {
+ "name": "GetTime",
+ "description": "Get elapsed time in seconds since InitWindow()",
+ "returnType": "double"
+ },
+ {
+ "name": "GetFPS",
+ "description": "Get current FPS",
+ "returnType": "int"
+ },
+ {
+ "name": "SwapScreenBuffer",
+ "description": "Swap back buffer with front buffer (screen drawing)",
+ "returnType": "void"
+ },
+ {
+ "name": "PollInputEvents",
+ "description": "Register all input events",
+ "returnType": "void"
+ },
+ {
+ "name": "WaitTime",
+ "description": "Wait for some time (halt program execution)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "double",
+ "name": "seconds"
+ }
+ ]
+ },
+ {
+ "name": "SetRandomSeed",
+ "description": "Set the seed for the random number generator",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "seed"
+ }
+ ]
+ },
+ {
+ "name": "GetRandomValue",
+ "description": "Get a random value between min and max (both included)",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "int",
+ "name": "min"
+ },
+ {
+ "type": "int",
+ "name": "max"
+ }
+ ]
+ },
+ {
+ "name": "LoadRandomSequence",
+ "description": "Load random values sequence, no values repeated",
+ "returnType": "int *",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "count"
+ },
+ {
+ "type": "int",
+ "name": "min"
+ },
+ {
+ "type": "int",
+ "name": "max"
+ }
+ ]
+ },
+ {
+ "name": "UnloadRandomSequence",
+ "description": "Unload random values sequence",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int *",
+ "name": "sequence"
+ }
+ ]
+ },
+ {
+ "name": "TakeScreenshot",
+ "description": "Takes a screenshot of current screen (filename extension defines format)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "SetConfigFlags",
+ "description": "Setup init configuration flags (view FLAGS)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "flags"
+ }
+ ]
+ },
+ {
+ "name": "OpenURL",
+ "description": "Open URL with default system browser (if available)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "url"
+ }
+ ]
+ },
+ {
+ "name": "TraceLog",
+ "description": "Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "logLevel"
+ },
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "...",
+ "name": "args"
+ }
+ ]
+ },
+ {
+ "name": "SetTraceLogLevel",
+ "description": "Set the current threshold (minimum) log level",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "logLevel"
+ }
+ ]
+ },
+ {
+ "name": "MemAlloc",
+ "description": "Internal memory allocator",
+ "returnType": "void *",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "size"
+ }
+ ]
+ },
+ {
+ "name": "MemRealloc",
+ "description": "Internal memory reallocator",
+ "returnType": "void *",
+ "params": [
+ {
+ "type": "void *",
+ "name": "ptr"
+ },
+ {
+ "type": "unsigned int",
+ "name": "size"
+ }
+ ]
+ },
+ {
+ "name": "MemFree",
+ "description": "Internal memory free",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "void *",
+ "name": "ptr"
+ }
+ ]
+ },
+ {
+ "name": "SetTraceLogCallback",
+ "description": "Set custom trace log",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "TraceLogCallback",
+ "name": "callback"
+ }
+ ]
+ },
+ {
+ "name": "SetLoadFileDataCallback",
+ "description": "Set custom file binary data loader",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "LoadFileDataCallback",
+ "name": "callback"
+ }
+ ]
+ },
+ {
+ "name": "SetSaveFileDataCallback",
+ "description": "Set custom file binary data saver",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "SaveFileDataCallback",
+ "name": "callback"
+ }
+ ]
+ },
+ {
+ "name": "SetLoadFileTextCallback",
+ "description": "Set custom file text data loader",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "LoadFileTextCallback",
+ "name": "callback"
+ }
+ ]
+ },
+ {
+ "name": "SetSaveFileTextCallback",
+ "description": "Set custom file text data saver",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "SaveFileTextCallback",
+ "name": "callback"
+ }
+ ]
+ },
+ {
+ "name": "LoadFileData",
+ "description": "Load file data as byte array (read)",
+ "returnType": "unsigned char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ },
+ {
+ "type": "int *",
+ "name": "dataSize"
+ }
+ ]
+ },
+ {
+ "name": "UnloadFileData",
+ "description": "Unload file data allocated by LoadFileData()",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned char *",
+ "name": "data"
+ }
+ ]
+ },
+ {
+ "name": "SaveFileData",
+ "description": "Save data to file from byte array (write), returns true on success",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ },
+ {
+ "type": "void *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ }
+ ]
+ },
+ {
+ "name": "ExportDataAsCode",
+ "description": "Export data to code (.h), returns true on success",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "const unsigned char *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ },
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "LoadFileText",
+ "description": "Load text data from file (read), returns a '\\0' terminated string",
+ "returnType": "char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "UnloadFileText",
+ "description": "Unload file text data allocated by LoadFileText()",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "SaveFileText",
+ "description": "Save text data to file (write), string must be '\\0' terminated, returns true on success",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ },
+ {
+ "type": "char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "FileExists",
+ "description": "Check if file exists",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "DirectoryExists",
+ "description": "Check if a directory path exists",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "dirPath"
+ }
+ ]
+ },
+ {
+ "name": "IsFileExtension",
+ "description": "Check file extension (including point: .png, .wav)",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ },
+ {
+ "type": "const char *",
+ "name": "ext"
+ }
+ ]
+ },
+ {
+ "name": "GetFileLength",
+ "description": "Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h)",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "GetFileExtension",
+ "description": "Get pointer to extension for a filename string (includes dot: '.png')",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "GetFileName",
+ "description": "Get pointer to filename for a path string",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "filePath"
+ }
+ ]
+ },
+ {
+ "name": "GetFileNameWithoutExt",
+ "description": "Get filename string without extension (uses static string)",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "filePath"
+ }
+ ]
+ },
+ {
+ "name": "GetDirectoryPath",
+ "description": "Get full path for a given fileName with path (uses static string)",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "filePath"
+ }
+ ]
+ },
+ {
+ "name": "GetPrevDirectoryPath",
+ "description": "Get previous directory path for a given path (uses static string)",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "dirPath"
+ }
+ ]
+ },
+ {
+ "name": "GetWorkingDirectory",
+ "description": "Get current working directory (uses static string)",
+ "returnType": "const char *"
+ },
+ {
+ "name": "GetApplicationDirectory",
+ "description": "Get the directory of the running application (uses static string)",
+ "returnType": "const char *"
+ },
+ {
+ "name": "ChangeDirectory",
+ "description": "Change working directory, return true on success",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "dir"
+ }
+ ]
+ },
+ {
+ "name": "IsPathFile",
+ "description": "Check if a given path is a file or a directory",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "path"
+ }
+ ]
+ },
+ {
+ "name": "LoadDirectoryFiles",
+ "description": "Load directory filepaths",
+ "returnType": "FilePathList",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "dirPath"
+ }
+ ]
+ },
+ {
+ "name": "LoadDirectoryFilesEx",
+ "description": "Load directory filepaths with extension filtering and recursive directory scan",
+ "returnType": "FilePathList",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "basePath"
+ },
+ {
+ "type": "const char *",
+ "name": "filter"
+ },
+ {
+ "type": "bool",
+ "name": "scanSubdirs"
+ }
+ ]
+ },
+ {
+ "name": "UnloadDirectoryFiles",
+ "description": "Unload filepaths",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "FilePathList",
+ "name": "files"
+ }
+ ]
+ },
+ {
+ "name": "IsFileDropped",
+ "description": "Check if a file has been dropped into window",
+ "returnType": "bool"
+ },
+ {
+ "name": "LoadDroppedFiles",
+ "description": "Load dropped filepaths",
+ "returnType": "FilePathList"
+ },
+ {
+ "name": "UnloadDroppedFiles",
+ "description": "Unload dropped filepaths",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "FilePathList",
+ "name": "files"
+ }
+ ]
+ },
+ {
+ "name": "GetFileModTime",
+ "description": "Get file modification time (last write time)",
+ "returnType": "long",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "CompressData",
+ "description": "Compress data (DEFLATE algorithm), memory must be MemFree()",
+ "returnType": "unsigned char *",
+ "params": [
+ {
+ "type": "const unsigned char *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ },
+ {
+ "type": "int *",
+ "name": "compDataSize"
+ }
+ ]
+ },
+ {
+ "name": "DecompressData",
+ "description": "Decompress data (DEFLATE algorithm), memory must be MemFree()",
+ "returnType": "unsigned char *",
+ "params": [
+ {
+ "type": "const unsigned char *",
+ "name": "compData"
+ },
+ {
+ "type": "int",
+ "name": "compDataSize"
+ },
+ {
+ "type": "int *",
+ "name": "dataSize"
+ }
+ ]
+ },
+ {
+ "name": "EncodeDataBase64",
+ "description": "Encode data to Base64 string, memory must be MemFree()",
+ "returnType": "char *",
+ "params": [
+ {
+ "type": "const unsigned char *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ },
+ {
+ "type": "int *",
+ "name": "outputSize"
+ }
+ ]
+ },
+ {
+ "name": "DecodeDataBase64",
+ "description": "Decode Base64 string data, memory must be MemFree()",
+ "returnType": "unsigned char *",
+ "params": [
+ {
+ "type": "const unsigned char *",
+ "name": "data"
+ },
+ {
+ "type": "int *",
+ "name": "outputSize"
+ }
+ ]
+ },
+ {
+ "name": "LoadAutomationEventList",
+ "description": "Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS",
+ "returnType": "AutomationEventList",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "UnloadAutomationEventList",
+ "description": "Unload automation events list from file",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AutomationEventList",
+ "name": "list"
+ }
+ ]
+ },
+ {
+ "name": "ExportAutomationEventList",
+ "description": "Export automation events list as text file",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "AutomationEventList",
+ "name": "list"
+ },
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "SetAutomationEventList",
+ "description": "Set automation event list to record to",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AutomationEventList *",
+ "name": "list"
+ }
+ ]
+ },
+ {
+ "name": "SetAutomationEventBaseFrame",
+ "description": "Set automation event internal base frame to start recording",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "frame"
+ }
+ ]
+ },
+ {
+ "name": "StartAutomationEventRecording",
+ "description": "Start recording automation events (AutomationEventList must be set)",
+ "returnType": "void"
+ },
+ {
+ "name": "StopAutomationEventRecording",
+ "description": "Stop recording automation events",
+ "returnType": "void"
+ },
+ {
+ "name": "PlayAutomationEvent",
+ "description": "Play a recorded automation event",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AutomationEvent",
+ "name": "event"
+ }
+ ]
+ },
+ {
+ "name": "IsKeyPressed",
+ "description": "Check if a key has been pressed once",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "key"
+ }
+ ]
+ },
+ {
+ "name": "IsKeyPressedRepeat",
+ "description": "Check if a key has been pressed again (Only PLATFORM_DESKTOP)",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "key"
+ }
+ ]
+ },
+ {
+ "name": "IsKeyDown",
+ "description": "Check if a key is being pressed",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "key"
+ }
+ ]
+ },
+ {
+ "name": "IsKeyReleased",
+ "description": "Check if a key has been released once",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "key"
+ }
+ ]
+ },
+ {
+ "name": "IsKeyUp",
+ "description": "Check if a key is NOT being pressed",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "key"
+ }
+ ]
+ },
+ {
+ "name": "GetKeyPressed",
+ "description": "Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty",
+ "returnType": "int"
+ },
+ {
+ "name": "GetCharPressed",
+ "description": "Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty",
+ "returnType": "int"
+ },
+ {
+ "name": "SetExitKey",
+ "description": "Set a custom key to exit program (default is ESC)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "key"
+ }
+ ]
+ },
+ {
+ "name": "IsGamepadAvailable",
+ "description": "Check if a gamepad is available",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "gamepad"
+ }
+ ]
+ },
+ {
+ "name": "GetGamepadName",
+ "description": "Get gamepad internal name id",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "int",
+ "name": "gamepad"
+ }
+ ]
+ },
+ {
+ "name": "IsGamepadButtonPressed",
+ "description": "Check if a gamepad button has been pressed once",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "gamepad"
+ },
+ {
+ "type": "int",
+ "name": "button"
+ }
+ ]
+ },
+ {
+ "name": "IsGamepadButtonDown",
+ "description": "Check if a gamepad button is being pressed",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "gamepad"
+ },
+ {
+ "type": "int",
+ "name": "button"
+ }
+ ]
+ },
+ {
+ "name": "IsGamepadButtonReleased",
+ "description": "Check if a gamepad button has been released once",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "gamepad"
+ },
+ {
+ "type": "int",
+ "name": "button"
+ }
+ ]
+ },
+ {
+ "name": "IsGamepadButtonUp",
+ "description": "Check if a gamepad button is NOT being pressed",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "gamepad"
+ },
+ {
+ "type": "int",
+ "name": "button"
+ }
+ ]
+ },
+ {
+ "name": "GetGamepadButtonPressed",
+ "description": "Get the last gamepad button pressed",
+ "returnType": "int"
+ },
+ {
+ "name": "GetGamepadAxisCount",
+ "description": "Get gamepad axis count for a gamepad",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "int",
+ "name": "gamepad"
+ }
+ ]
+ },
+ {
+ "name": "GetGamepadAxisMovement",
+ "description": "Get axis movement value for a gamepad axis",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "int",
+ "name": "gamepad"
+ },
+ {
+ "type": "int",
+ "name": "axis"
+ }
+ ]
+ },
+ {
+ "name": "SetGamepadMappings",
+ "description": "Set internal gamepad mappings (SDL_GameControllerDB)",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "mappings"
+ }
+ ]
+ },
+ {
+ "name": "IsMouseButtonPressed",
+ "description": "Check if a mouse button has been pressed once",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "button"
+ }
+ ]
+ },
+ {
+ "name": "IsMouseButtonDown",
+ "description": "Check if a mouse button is being pressed",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "button"
+ }
+ ]
+ },
+ {
+ "name": "IsMouseButtonReleased",
+ "description": "Check if a mouse button has been released once",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "button"
+ }
+ ]
+ },
+ {
+ "name": "IsMouseButtonUp",
+ "description": "Check if a mouse button is NOT being pressed",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "button"
+ }
+ ]
+ },
+ {
+ "name": "GetMouseX",
+ "description": "Get mouse position X",
+ "returnType": "int"
+ },
+ {
+ "name": "GetMouseY",
+ "description": "Get mouse position Y",
+ "returnType": "int"
+ },
+ {
+ "name": "GetMousePosition",
+ "description": "Get mouse position XY",
+ "returnType": "Vector2"
+ },
+ {
+ "name": "GetMouseDelta",
+ "description": "Get mouse delta between frames",
+ "returnType": "Vector2"
+ },
+ {
+ "name": "SetMousePosition",
+ "description": "Set mouse position XY",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "x"
+ },
+ {
+ "type": "int",
+ "name": "y"
+ }
+ ]
+ },
+ {
+ "name": "SetMouseOffset",
+ "description": "Set mouse offset",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "offsetX"
+ },
+ {
+ "type": "int",
+ "name": "offsetY"
+ }
+ ]
+ },
+ {
+ "name": "SetMouseScale",
+ "description": "Set mouse scaling",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "scaleX"
+ },
+ {
+ "type": "float",
+ "name": "scaleY"
+ }
+ ]
+ },
+ {
+ "name": "GetMouseWheelMove",
+ "description": "Get mouse wheel movement for X or Y, whichever is larger",
+ "returnType": "float"
+ },
+ {
+ "name": "GetMouseWheelMoveV",
+ "description": "Get mouse wheel movement for both X and Y",
+ "returnType": "Vector2"
+ },
+ {
+ "name": "SetMouseCursor",
+ "description": "Set mouse cursor",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "cursor"
+ }
+ ]
+ },
+ {
+ "name": "GetTouchX",
+ "description": "Get touch position X for touch point 0 (relative to screen size)",
+ "returnType": "int"
+ },
+ {
+ "name": "GetTouchY",
+ "description": "Get touch position Y for touch point 0 (relative to screen size)",
+ "returnType": "int"
+ },
+ {
+ "name": "GetTouchPosition",
+ "description": "Get touch position XY for a touch point index (relative to screen size)",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "int",
+ "name": "index"
+ }
+ ]
+ },
+ {
+ "name": "GetTouchPointId",
+ "description": "Get touch point identifier for given index",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "int",
+ "name": "index"
+ }
+ ]
+ },
+ {
+ "name": "GetTouchPointCount",
+ "description": "Get number of touch points",
+ "returnType": "int"
+ },
+ {
+ "name": "SetGesturesEnabled",
+ "description": "Enable a set of gestures using flags",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "flags"
+ }
+ ]
+ },
+ {
+ "name": "IsGestureDetected",
+ "description": "Check if a gesture have been detected",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "gesture"
+ }
+ ]
+ },
+ {
+ "name": "GetGestureDetected",
+ "description": "Get latest detected gesture",
+ "returnType": "int"
+ },
+ {
+ "name": "GetGestureHoldDuration",
+ "description": "Get gesture hold time in milliseconds",
+ "returnType": "float"
+ },
+ {
+ "name": "GetGestureDragVector",
+ "description": "Get gesture drag vector",
+ "returnType": "Vector2"
+ },
+ {
+ "name": "GetGestureDragAngle",
+ "description": "Get gesture drag angle",
+ "returnType": "float"
+ },
+ {
+ "name": "GetGesturePinchVector",
+ "description": "Get gesture pinch delta",
+ "returnType": "Vector2"
+ },
+ {
+ "name": "GetGesturePinchAngle",
+ "description": "Get gesture pinch angle",
+ "returnType": "float"
+ },
+ {
+ "name": "UpdateCamera",
+ "description": "Update camera position for selected mode",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Camera *",
+ "name": "camera"
+ },
+ {
+ "type": "int",
+ "name": "mode"
+ }
+ ]
+ },
+ {
+ "name": "UpdateCameraPro",
+ "description": "Update camera movement/rotation",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Camera *",
+ "name": "camera"
+ },
+ {
+ "type": "Vector3",
+ "name": "movement"
+ },
+ {
+ "type": "Vector3",
+ "name": "rotation"
+ },
+ {
+ "type": "float",
+ "name": "zoom"
+ }
+ ]
+ },
+ {
+ "name": "SetShapesTexture",
+ "description": "Set texture and rectangle to be used on shapes drawing",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "Rectangle",
+ "name": "source"
+ }
+ ]
+ },
+ {
+ "name": "GetShapesTexture",
+ "description": "Get texture that is used for shapes drawing",
+ "returnType": "Texture2D"
+ },
+ {
+ "name": "GetShapesTextureRectangle",
+ "description": "Get texture source rectangle that is used for shapes drawing",
+ "returnType": "Rectangle"
+ },
+ {
+ "name": "DrawPixel",
+ "description": "Draw a pixel",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "posX"
+ },
+ {
+ "type": "int",
+ "name": "posY"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawPixelV",
+ "description": "Draw a pixel (Vector version)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawLine",
+ "description": "Draw a line",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "startPosX"
+ },
+ {
+ "type": "int",
+ "name": "startPosY"
+ },
+ {
+ "type": "int",
+ "name": "endPosX"
+ },
+ {
+ "type": "int",
+ "name": "endPosY"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawLineV",
+ "description": "Draw a line (using gl lines)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "startPos"
+ },
+ {
+ "type": "Vector2",
+ "name": "endPos"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawLineEx",
+ "description": "Draw a line (using triangles/quads)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "startPos"
+ },
+ {
+ "type": "Vector2",
+ "name": "endPos"
+ },
+ {
+ "type": "float",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawLineStrip",
+ "description": "Draw lines sequence (using gl lines)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2 *",
+ "name": "points"
+ },
+ {
+ "type": "int",
+ "name": "pointCount"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawLineBezier",
+ "description": "Draw line segment cubic-bezier in-out interpolation",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "startPos"
+ },
+ {
+ "type": "Vector2",
+ "name": "endPos"
+ },
+ {
+ "type": "float",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCircle",
+ "description": "Draw a color-filled circle",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "centerX"
+ },
+ {
+ "type": "int",
+ "name": "centerY"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCircleSector",
+ "description": "Draw a piece of a circle",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "float",
+ "name": "startAngle"
+ },
+ {
+ "type": "float",
+ "name": "endAngle"
+ },
+ {
+ "type": "int",
+ "name": "segments"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCircleSectorLines",
+ "description": "Draw circle sector outline",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "float",
+ "name": "startAngle"
+ },
+ {
+ "type": "float",
+ "name": "endAngle"
+ },
+ {
+ "type": "int",
+ "name": "segments"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCircleGradient",
+ "description": "Draw a gradient-filled circle",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "centerX"
+ },
+ {
+ "type": "int",
+ "name": "centerY"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "Color",
+ "name": "color1"
+ },
+ {
+ "type": "Color",
+ "name": "color2"
+ }
+ ]
+ },
+ {
+ "name": "DrawCircleV",
+ "description": "Draw a color-filled circle (Vector version)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCircleLines",
+ "description": "Draw circle outline",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "centerX"
+ },
+ {
+ "type": "int",
+ "name": "centerY"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCircleLinesV",
+ "description": "Draw circle outline (Vector version)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawEllipse",
+ "description": "Draw ellipse",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "centerX"
+ },
+ {
+ "type": "int",
+ "name": "centerY"
+ },
+ {
+ "type": "float",
+ "name": "radiusH"
+ },
+ {
+ "type": "float",
+ "name": "radiusV"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawEllipseLines",
+ "description": "Draw ellipse outline",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "centerX"
+ },
+ {
+ "type": "int",
+ "name": "centerY"
+ },
+ {
+ "type": "float",
+ "name": "radiusH"
+ },
+ {
+ "type": "float",
+ "name": "radiusV"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawRing",
+ "description": "Draw ring",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "float",
+ "name": "innerRadius"
+ },
+ {
+ "type": "float",
+ "name": "outerRadius"
+ },
+ {
+ "type": "float",
+ "name": "startAngle"
+ },
+ {
+ "type": "float",
+ "name": "endAngle"
+ },
+ {
+ "type": "int",
+ "name": "segments"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawRingLines",
+ "description": "Draw ring outline",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "float",
+ "name": "innerRadius"
+ },
+ {
+ "type": "float",
+ "name": "outerRadius"
+ },
+ {
+ "type": "float",
+ "name": "startAngle"
+ },
+ {
+ "type": "float",
+ "name": "endAngle"
+ },
+ {
+ "type": "int",
+ "name": "segments"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawRectangle",
+ "description": "Draw a color-filled rectangle",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "posX"
+ },
+ {
+ "type": "int",
+ "name": "posY"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawRectangleV",
+ "description": "Draw a color-filled rectangle (Vector version)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "Vector2",
+ "name": "size"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawRectangleRec",
+ "description": "Draw a color-filled rectangle",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Rectangle",
+ "name": "rec"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawRectanglePro",
+ "description": "Draw a color-filled rectangle with pro parameters",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Rectangle",
+ "name": "rec"
+ },
+ {
+ "type": "Vector2",
+ "name": "origin"
+ },
+ {
+ "type": "float",
+ "name": "rotation"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawRectangleGradientV",
+ "description": "Draw a vertical-gradient-filled rectangle",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "posX"
+ },
+ {
+ "type": "int",
+ "name": "posY"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "Color",
+ "name": "color1"
+ },
+ {
+ "type": "Color",
+ "name": "color2"
+ }
+ ]
+ },
+ {
+ "name": "DrawRectangleGradientH",
+ "description": "Draw a horizontal-gradient-filled rectangle",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "posX"
+ },
+ {
+ "type": "int",
+ "name": "posY"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "Color",
+ "name": "color1"
+ },
+ {
+ "type": "Color",
+ "name": "color2"
+ }
+ ]
+ },
+ {
+ "name": "DrawRectangleGradientEx",
+ "description": "Draw a gradient-filled rectangle with custom vertex colors",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Rectangle",
+ "name": "rec"
+ },
+ {
+ "type": "Color",
+ "name": "col1"
+ },
+ {
+ "type": "Color",
+ "name": "col2"
+ },
+ {
+ "type": "Color",
+ "name": "col3"
+ },
+ {
+ "type": "Color",
+ "name": "col4"
+ }
+ ]
+ },
+ {
+ "name": "DrawRectangleLines",
+ "description": "Draw rectangle outline",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "posX"
+ },
+ {
+ "type": "int",
+ "name": "posY"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawRectangleLinesEx",
+ "description": "Draw rectangle outline with extended parameters",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Rectangle",
+ "name": "rec"
+ },
+ {
+ "type": "float",
+ "name": "lineThick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawRectangleRounded",
+ "description": "Draw rectangle with rounded edges",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Rectangle",
+ "name": "rec"
+ },
+ {
+ "type": "float",
+ "name": "roundness"
+ },
+ {
+ "type": "int",
+ "name": "segments"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawRectangleRoundedLines",
+ "description": "Draw rectangle with rounded edges outline",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Rectangle",
+ "name": "rec"
+ },
+ {
+ "type": "float",
+ "name": "roundness"
+ },
+ {
+ "type": "int",
+ "name": "segments"
+ },
+ {
+ "type": "float",
+ "name": "lineThick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawTriangle",
+ "description": "Draw a color-filled triangle (vertex in counter-clockwise order!)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v1"
+ },
+ {
+ "type": "Vector2",
+ "name": "v2"
+ },
+ {
+ "type": "Vector2",
+ "name": "v3"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawTriangleLines",
+ "description": "Draw triangle outline (vertex in counter-clockwise order!)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v1"
+ },
+ {
+ "type": "Vector2",
+ "name": "v2"
+ },
+ {
+ "type": "Vector2",
+ "name": "v3"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawTriangleFan",
+ "description": "Draw a triangle fan defined by points (first vertex is the center)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2 *",
+ "name": "points"
+ },
+ {
+ "type": "int",
+ "name": "pointCount"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawTriangleStrip",
+ "description": "Draw a triangle strip defined by points",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2 *",
+ "name": "points"
+ },
+ {
+ "type": "int",
+ "name": "pointCount"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawPoly",
+ "description": "Draw a regular polygon (Vector version)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "int",
+ "name": "sides"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "float",
+ "name": "rotation"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawPolyLines",
+ "description": "Draw a polygon outline of n sides",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "int",
+ "name": "sides"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "float",
+ "name": "rotation"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawPolyLinesEx",
+ "description": "Draw a polygon outline of n sides with extended parameters",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "int",
+ "name": "sides"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "float",
+ "name": "rotation"
+ },
+ {
+ "type": "float",
+ "name": "lineThick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSplineLinear",
+ "description": "Draw spline: Linear, minimum 2 points",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2 *",
+ "name": "points"
+ },
+ {
+ "type": "int",
+ "name": "pointCount"
+ },
+ {
+ "type": "float",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSplineBasis",
+ "description": "Draw spline: B-Spline, minimum 4 points",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2 *",
+ "name": "points"
+ },
+ {
+ "type": "int",
+ "name": "pointCount"
+ },
+ {
+ "type": "float",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSplineCatmullRom",
+ "description": "Draw spline: Catmull-Rom, minimum 4 points",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2 *",
+ "name": "points"
+ },
+ {
+ "type": "int",
+ "name": "pointCount"
+ },
+ {
+ "type": "float",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSplineBezierQuadratic",
+ "description": "Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2 *",
+ "name": "points"
+ },
+ {
+ "type": "int",
+ "name": "pointCount"
+ },
+ {
+ "type": "float",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSplineBezierCubic",
+ "description": "Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2 *",
+ "name": "points"
+ },
+ {
+ "type": "int",
+ "name": "pointCount"
+ },
+ {
+ "type": "float",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSplineSegmentLinear",
+ "description": "Draw spline segment: Linear, 2 points",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "p1"
+ },
+ {
+ "type": "Vector2",
+ "name": "p2"
+ },
+ {
+ "type": "float",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSplineSegmentBasis",
+ "description": "Draw spline segment: B-Spline, 4 points",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "p1"
+ },
+ {
+ "type": "Vector2",
+ "name": "p2"
+ },
+ {
+ "type": "Vector2",
+ "name": "p3"
+ },
+ {
+ "type": "Vector2",
+ "name": "p4"
+ },
+ {
+ "type": "float",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSplineSegmentCatmullRom",
+ "description": "Draw spline segment: Catmull-Rom, 4 points",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "p1"
+ },
+ {
+ "type": "Vector2",
+ "name": "p2"
+ },
+ {
+ "type": "Vector2",
+ "name": "p3"
+ },
+ {
+ "type": "Vector2",
+ "name": "p4"
+ },
+ {
+ "type": "float",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSplineSegmentBezierQuadratic",
+ "description": "Draw spline segment: Quadratic Bezier, 2 points, 1 control point",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "p1"
+ },
+ {
+ "type": "Vector2",
+ "name": "c2"
+ },
+ {
+ "type": "Vector2",
+ "name": "p3"
+ },
+ {
+ "type": "float",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSplineSegmentBezierCubic",
+ "description": "Draw spline segment: Cubic Bezier, 2 points, 2 control points",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "p1"
+ },
+ {
+ "type": "Vector2",
+ "name": "c2"
+ },
+ {
+ "type": "Vector2",
+ "name": "c3"
+ },
+ {
+ "type": "Vector2",
+ "name": "p4"
+ },
+ {
+ "type": "float",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "GetSplinePointLinear",
+ "description": "Get (evaluate) spline point: Linear",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "startPos"
+ },
+ {
+ "type": "Vector2",
+ "name": "endPos"
+ },
+ {
+ "type": "float",
+ "name": "t"
+ }
+ ]
+ },
+ {
+ "name": "GetSplinePointBasis",
+ "description": "Get (evaluate) spline point: B-Spline",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "p1"
+ },
+ {
+ "type": "Vector2",
+ "name": "p2"
+ },
+ {
+ "type": "Vector2",
+ "name": "p3"
+ },
+ {
+ "type": "Vector2",
+ "name": "p4"
+ },
+ {
+ "type": "float",
+ "name": "t"
+ }
+ ]
+ },
+ {
+ "name": "GetSplinePointCatmullRom",
+ "description": "Get (evaluate) spline point: Catmull-Rom",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "p1"
+ },
+ {
+ "type": "Vector2",
+ "name": "p2"
+ },
+ {
+ "type": "Vector2",
+ "name": "p3"
+ },
+ {
+ "type": "Vector2",
+ "name": "p4"
+ },
+ {
+ "type": "float",
+ "name": "t"
+ }
+ ]
+ },
+ {
+ "name": "GetSplinePointBezierQuad",
+ "description": "Get (evaluate) spline point: Quadratic Bezier",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "p1"
+ },
+ {
+ "type": "Vector2",
+ "name": "c2"
+ },
+ {
+ "type": "Vector2",
+ "name": "p3"
+ },
+ {
+ "type": "float",
+ "name": "t"
+ }
+ ]
+ },
+ {
+ "name": "GetSplinePointBezierCubic",
+ "description": "Get (evaluate) spline point: Cubic Bezier",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "p1"
+ },
+ {
+ "type": "Vector2",
+ "name": "c2"
+ },
+ {
+ "type": "Vector2",
+ "name": "c3"
+ },
+ {
+ "type": "Vector2",
+ "name": "p4"
+ },
+ {
+ "type": "float",
+ "name": "t"
+ }
+ ]
+ },
+ {
+ "name": "CheckCollisionRecs",
+ "description": "Check collision between two rectangles",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Rectangle",
+ "name": "rec1"
+ },
+ {
+ "type": "Rectangle",
+ "name": "rec2"
+ }
+ ]
+ },
+ {
+ "name": "CheckCollisionCircles",
+ "description": "Check collision between two circles",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "center1"
+ },
+ {
+ "type": "float",
+ "name": "radius1"
+ },
+ {
+ "type": "Vector2",
+ "name": "center2"
+ },
+ {
+ "type": "float",
+ "name": "radius2"
+ }
+ ]
+ },
+ {
+ "name": "CheckCollisionCircleRec",
+ "description": "Check collision between circle and rectangle",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "Rectangle",
+ "name": "rec"
+ }
+ ]
+ },
+ {
+ "name": "CheckCollisionPointRec",
+ "description": "Check if point is inside rectangle",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "point"
+ },
+ {
+ "type": "Rectangle",
+ "name": "rec"
+ }
+ ]
+ },
+ {
+ "name": "CheckCollisionPointCircle",
+ "description": "Check if point is inside circle",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "point"
+ },
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ }
+ ]
+ },
+ {
+ "name": "CheckCollisionPointTriangle",
+ "description": "Check if point is inside a triangle",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "point"
+ },
+ {
+ "type": "Vector2",
+ "name": "p1"
+ },
+ {
+ "type": "Vector2",
+ "name": "p2"
+ },
+ {
+ "type": "Vector2",
+ "name": "p3"
+ }
+ ]
+ },
+ {
+ "name": "CheckCollisionPointPoly",
+ "description": "Check if point is within a polygon described by array of vertices",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "point"
+ },
+ {
+ "type": "Vector2 *",
+ "name": "points"
+ },
+ {
+ "type": "int",
+ "name": "pointCount"
+ }
+ ]
+ },
+ {
+ "name": "CheckCollisionLines",
+ "description": "Check the collision between two lines defined by two points each, returns collision point by reference",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "startPos1"
+ },
+ {
+ "type": "Vector2",
+ "name": "endPos1"
+ },
+ {
+ "type": "Vector2",
+ "name": "startPos2"
+ },
+ {
+ "type": "Vector2",
+ "name": "endPos2"
+ },
+ {
+ "type": "Vector2 *",
+ "name": "collisionPoint"
+ }
+ ]
+ },
+ {
+ "name": "CheckCollisionPointLine",
+ "description": "Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold]",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "point"
+ },
+ {
+ "type": "Vector2",
+ "name": "p1"
+ },
+ {
+ "type": "Vector2",
+ "name": "p2"
+ },
+ {
+ "type": "int",
+ "name": "threshold"
+ }
+ ]
+ },
+ {
+ "name": "GetCollisionRec",
+ "description": "Get collision rectangle for two rectangles collision",
+ "returnType": "Rectangle",
+ "params": [
+ {
+ "type": "Rectangle",
+ "name": "rec1"
+ },
+ {
+ "type": "Rectangle",
+ "name": "rec2"
+ }
+ ]
+ },
+ {
+ "name": "LoadImage",
+ "description": "Load image from file into CPU memory (RAM)",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "LoadImageRaw",
+ "description": "Load image from RAW file data",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "format"
+ },
+ {
+ "type": "int",
+ "name": "headerSize"
+ }
+ ]
+ },
+ {
+ "name": "LoadImageSvg",
+ "description": "Load image from SVG file data or string with specified size",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileNameOrString"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "LoadImageAnim",
+ "description": "Load image sequence from file (frames appended to image.data)",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ },
+ {
+ "type": "int *",
+ "name": "frames"
+ }
+ ]
+ },
+ {
+ "name": "LoadImageAnimFromMemory",
+ "description": "Load image sequence from memory buffer",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileType"
+ },
+ {
+ "type": "const unsigned char *",
+ "name": "fileData"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ },
+ {
+ "type": "int *",
+ "name": "frames"
+ }
+ ]
+ },
+ {
+ "name": "LoadImageFromMemory",
+ "description": "Load image from memory buffer, fileType refers to extension: i.e. '.png'",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileType"
+ },
+ {
+ "type": "const unsigned char *",
+ "name": "fileData"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ }
+ ]
+ },
+ {
+ "name": "LoadImageFromTexture",
+ "description": "Load image from GPU texture data",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ }
+ ]
+ },
+ {
+ "name": "LoadImageFromScreen",
+ "description": "Load image from screen buffer and (screenshot)",
+ "returnType": "Image"
+ },
+ {
+ "name": "IsImageReady",
+ "description": "Check if an image is ready",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "UnloadImage",
+ "description": "Unload image from CPU memory (RAM)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "ExportImage",
+ "description": "Export image data to file, returns true on success",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ },
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "ExportImageToMemory",
+ "description": "Export image to memory buffer",
+ "returnType": "unsigned char *",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ },
+ {
+ "type": "const char *",
+ "name": "fileType"
+ },
+ {
+ "type": "int *",
+ "name": "fileSize"
+ }
+ ]
+ },
+ {
+ "name": "ExportImageAsCode",
+ "description": "Export image as code file defining an array of bytes, returns true on success",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ },
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "GenImageColor",
+ "description": "Generate image: plain color",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "GenImageGradientLinear",
+ "description": "Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "direction"
+ },
+ {
+ "type": "Color",
+ "name": "start"
+ },
+ {
+ "type": "Color",
+ "name": "end"
+ }
+ ]
+ },
+ {
+ "name": "GenImageGradientRadial",
+ "description": "Generate image: radial gradient",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "float",
+ "name": "density"
+ },
+ {
+ "type": "Color",
+ "name": "inner"
+ },
+ {
+ "type": "Color",
+ "name": "outer"
+ }
+ ]
+ },
+ {
+ "name": "GenImageGradientSquare",
+ "description": "Generate image: square gradient",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "float",
+ "name": "density"
+ },
+ {
+ "type": "Color",
+ "name": "inner"
+ },
+ {
+ "type": "Color",
+ "name": "outer"
+ }
+ ]
+ },
+ {
+ "name": "GenImageChecked",
+ "description": "Generate image: checked",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "checksX"
+ },
+ {
+ "type": "int",
+ "name": "checksY"
+ },
+ {
+ "type": "Color",
+ "name": "col1"
+ },
+ {
+ "type": "Color",
+ "name": "col2"
+ }
+ ]
+ },
+ {
+ "name": "GenImageWhiteNoise",
+ "description": "Generate image: white noise",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "float",
+ "name": "factor"
+ }
+ ]
+ },
+ {
+ "name": "GenImagePerlinNoise",
+ "description": "Generate image: perlin noise",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "offsetX"
+ },
+ {
+ "type": "int",
+ "name": "offsetY"
+ },
+ {
+ "type": "float",
+ "name": "scale"
+ }
+ ]
+ },
+ {
+ "name": "GenImageCellular",
+ "description": "Generate image: cellular algorithm, bigger tileSize means bigger cells",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "tileSize"
+ }
+ ]
+ },
+ {
+ "name": "GenImageText",
+ "description": "Generate image: grayscale image from text data",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "const char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "ImageCopy",
+ "description": "Create an image duplicate (useful for transformations)",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "ImageFromImage",
+ "description": "Create an image from another image piece",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ },
+ {
+ "type": "Rectangle",
+ "name": "rec"
+ }
+ ]
+ },
+ {
+ "name": "ImageText",
+ "description": "Create an image from text (default font)",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "int",
+ "name": "fontSize"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageTextEx",
+ "description": "Create an image from text (custom sprite font)",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "Font",
+ "name": "font"
+ },
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "float",
+ "name": "fontSize"
+ },
+ {
+ "type": "float",
+ "name": "spacing"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "ImageFormat",
+ "description": "Convert image data to desired format",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "int",
+ "name": "newFormat"
+ }
+ ]
+ },
+ {
+ "name": "ImageToPOT",
+ "description": "Convert image to POT (power-of-two)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "Color",
+ "name": "fill"
+ }
+ ]
+ },
+ {
+ "name": "ImageCrop",
+ "description": "Crop an image to a defined rectangle",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "Rectangle",
+ "name": "crop"
+ }
+ ]
+ },
+ {
+ "name": "ImageAlphaCrop",
+ "description": "Crop image depending on alpha value",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "float",
+ "name": "threshold"
+ }
+ ]
+ },
+ {
+ "name": "ImageAlphaClear",
+ "description": "Clear alpha channel to desired color",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ },
+ {
+ "type": "float",
+ "name": "threshold"
+ }
+ ]
+ },
+ {
+ "name": "ImageAlphaMask",
+ "description": "Apply alpha mask to image",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "Image",
+ "name": "alphaMask"
+ }
+ ]
+ },
+ {
+ "name": "ImageAlphaPremultiply",
+ "description": "Premultiply alpha channel",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "ImageBlurGaussian",
+ "description": "Apply Gaussian blur using a box blur approximation",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "int",
+ "name": "blurSize"
+ }
+ ]
+ },
+ {
+ "name": "ImageKernelConvolution",
+ "description": "Apply Custom Square image convolution kernel",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "float*",
+ "name": "kernel"
+ },
+ {
+ "type": "int",
+ "name": "kernelSize"
+ }
+ ]
+ },
+ {
+ "name": "ImageResize",
+ "description": "Resize image (Bicubic scaling algorithm)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "int",
+ "name": "newWidth"
+ },
+ {
+ "type": "int",
+ "name": "newHeight"
+ }
+ ]
+ },
+ {
+ "name": "ImageResizeNN",
+ "description": "Resize image (Nearest-Neighbor scaling algorithm)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "int",
+ "name": "newWidth"
+ },
+ {
+ "type": "int",
+ "name": "newHeight"
+ }
+ ]
+ },
+ {
+ "name": "ImageResizeCanvas",
+ "description": "Resize canvas and fill with color",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "int",
+ "name": "newWidth"
+ },
+ {
+ "type": "int",
+ "name": "newHeight"
+ },
+ {
+ "type": "int",
+ "name": "offsetX"
+ },
+ {
+ "type": "int",
+ "name": "offsetY"
+ },
+ {
+ "type": "Color",
+ "name": "fill"
+ }
+ ]
+ },
+ {
+ "name": "ImageMipmaps",
+ "description": "Compute all mipmap levels for a provided image",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "ImageDither",
+ "description": "Dither image data to 16bpp or lower (Floyd-Steinberg dithering)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "int",
+ "name": "rBpp"
+ },
+ {
+ "type": "int",
+ "name": "gBpp"
+ },
+ {
+ "type": "int",
+ "name": "bBpp"
+ },
+ {
+ "type": "int",
+ "name": "aBpp"
+ }
+ ]
+ },
+ {
+ "name": "ImageFlipVertical",
+ "description": "Flip image vertically",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "ImageFlipHorizontal",
+ "description": "Flip image horizontally",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "ImageRotate",
+ "description": "Rotate image by input angle in degrees (-359 to 359)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "int",
+ "name": "degrees"
+ }
+ ]
+ },
+ {
+ "name": "ImageRotateCW",
+ "description": "Rotate image clockwise 90deg",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "ImageRotateCCW",
+ "description": "Rotate image counter-clockwise 90deg",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "ImageColorTint",
+ "description": "Modify image color: tint",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageColorInvert",
+ "description": "Modify image color: invert",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "ImageColorGrayscale",
+ "description": "Modify image color: grayscale",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "ImageColorContrast",
+ "description": "Modify image color: contrast (-100 to 100)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "float",
+ "name": "contrast"
+ }
+ ]
+ },
+ {
+ "name": "ImageColorBrightness",
+ "description": "Modify image color: brightness (-255 to 255)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "int",
+ "name": "brightness"
+ }
+ ]
+ },
+ {
+ "name": "ImageColorReplace",
+ "description": "Modify image color: replace color",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "image"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ },
+ {
+ "type": "Color",
+ "name": "replace"
+ }
+ ]
+ },
+ {
+ "name": "LoadImageColors",
+ "description": "Load color data from image as a Color array (RGBA - 32bit)",
+ "returnType": "Color *",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "LoadImagePalette",
+ "description": "Load colors palette from image as a Color array (RGBA - 32bit)",
+ "returnType": "Color *",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ },
+ {
+ "type": "int",
+ "name": "maxPaletteSize"
+ },
+ {
+ "type": "int *",
+ "name": "colorCount"
+ }
+ ]
+ },
+ {
+ "name": "UnloadImageColors",
+ "description": "Unload color data loaded with LoadImageColors()",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Color *",
+ "name": "colors"
+ }
+ ]
+ },
+ {
+ "name": "UnloadImagePalette",
+ "description": "Unload colors palette loaded with LoadImagePalette()",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Color *",
+ "name": "colors"
+ }
+ ]
+ },
+ {
+ "name": "GetImageAlphaBorder",
+ "description": "Get image alpha border rectangle",
+ "returnType": "Rectangle",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ },
+ {
+ "type": "float",
+ "name": "threshold"
+ }
+ ]
+ },
+ {
+ "name": "GetImageColor",
+ "description": "Get image pixel color at (x, y) position",
+ "returnType": "Color",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ },
+ {
+ "type": "int",
+ "name": "x"
+ },
+ {
+ "type": "int",
+ "name": "y"
+ }
+ ]
+ },
+ {
+ "name": "ImageClearBackground",
+ "description": "Clear image background with given color",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawPixel",
+ "description": "Draw pixel within an image",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "int",
+ "name": "posX"
+ },
+ {
+ "type": "int",
+ "name": "posY"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawPixelV",
+ "description": "Draw pixel within an image (Vector version)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawLine",
+ "description": "Draw line within an image",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "int",
+ "name": "startPosX"
+ },
+ {
+ "type": "int",
+ "name": "startPosY"
+ },
+ {
+ "type": "int",
+ "name": "endPosX"
+ },
+ {
+ "type": "int",
+ "name": "endPosY"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawLineV",
+ "description": "Draw line within an image (Vector version)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "Vector2",
+ "name": "start"
+ },
+ {
+ "type": "Vector2",
+ "name": "end"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawCircle",
+ "description": "Draw a filled circle within an image",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "int",
+ "name": "centerX"
+ },
+ {
+ "type": "int",
+ "name": "centerY"
+ },
+ {
+ "type": "int",
+ "name": "radius"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawCircleV",
+ "description": "Draw a filled circle within an image (Vector version)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "int",
+ "name": "radius"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawCircleLines",
+ "description": "Draw circle outline within an image",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "int",
+ "name": "centerX"
+ },
+ {
+ "type": "int",
+ "name": "centerY"
+ },
+ {
+ "type": "int",
+ "name": "radius"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawCircleLinesV",
+ "description": "Draw circle outline within an image (Vector version)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "Vector2",
+ "name": "center"
+ },
+ {
+ "type": "int",
+ "name": "radius"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawRectangle",
+ "description": "Draw rectangle within an image",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "int",
+ "name": "posX"
+ },
+ {
+ "type": "int",
+ "name": "posY"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawRectangleV",
+ "description": "Draw rectangle within an image (Vector version)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "Vector2",
+ "name": "size"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawRectangleRec",
+ "description": "Draw rectangle within an image",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "Rectangle",
+ "name": "rec"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawRectangleLines",
+ "description": "Draw rectangle lines within an image",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "Rectangle",
+ "name": "rec"
+ },
+ {
+ "type": "int",
+ "name": "thick"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDraw",
+ "description": "Draw a source image within a destination image (tint applied to source)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "Image",
+ "name": "src"
+ },
+ {
+ "type": "Rectangle",
+ "name": "srcRec"
+ },
+ {
+ "type": "Rectangle",
+ "name": "dstRec"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawText",
+ "description": "Draw text (using default font) within an image (destination)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "int",
+ "name": "posX"
+ },
+ {
+ "type": "int",
+ "name": "posY"
+ },
+ {
+ "type": "int",
+ "name": "fontSize"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ImageDrawTextEx",
+ "description": "Draw text (custom sprite font) within an image (destination)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Image *",
+ "name": "dst"
+ },
+ {
+ "type": "Font",
+ "name": "font"
+ },
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "float",
+ "name": "fontSize"
+ },
+ {
+ "type": "float",
+ "name": "spacing"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "LoadTexture",
+ "description": "Load texture from file into GPU memory (VRAM)",
+ "returnType": "Texture2D",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "LoadTextureFromImage",
+ "description": "Load texture from image data",
+ "returnType": "Texture2D",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ }
+ ]
+ },
+ {
+ "name": "LoadTextureCubemap",
+ "description": "Load cubemap from image, multiple image cubemap layouts supported",
+ "returnType": "TextureCubemap",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ },
+ {
+ "type": "int",
+ "name": "layout"
+ }
+ ]
+ },
+ {
+ "name": "LoadRenderTexture",
+ "description": "Load texture for rendering (framebuffer)",
+ "returnType": "RenderTexture2D",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "IsTextureReady",
+ "description": "Check if a texture is ready",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ }
+ ]
+ },
+ {
+ "name": "UnloadTexture",
+ "description": "Unload texture from GPU memory (VRAM)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ }
+ ]
+ },
+ {
+ "name": "IsRenderTextureReady",
+ "description": "Check if a render texture is ready",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "RenderTexture2D",
+ "name": "target"
+ }
+ ]
+ },
+ {
+ "name": "UnloadRenderTexture",
+ "description": "Unload render texture from GPU memory (VRAM)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "RenderTexture2D",
+ "name": "target"
+ }
+ ]
+ },
+ {
+ "name": "UpdateTexture",
+ "description": "Update GPU texture with new data",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "const void *",
+ "name": "pixels"
+ }
+ ]
+ },
+ {
+ "name": "UpdateTextureRec",
+ "description": "Update GPU texture rectangle with new data",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "Rectangle",
+ "name": "rec"
+ },
+ {
+ "type": "const void *",
+ "name": "pixels"
+ }
+ ]
+ },
+ {
+ "name": "GenTextureMipmaps",
+ "description": "Generate GPU mipmaps for a texture",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D *",
+ "name": "texture"
+ }
+ ]
+ },
+ {
+ "name": "SetTextureFilter",
+ "description": "Set texture scaling filter mode",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "int",
+ "name": "filter"
+ }
+ ]
+ },
+ {
+ "name": "SetTextureWrap",
+ "description": "Set texture wrapping mode",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "int",
+ "name": "wrap"
+ }
+ ]
+ },
+ {
+ "name": "DrawTexture",
+ "description": "Draw a Texture2D",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "int",
+ "name": "posX"
+ },
+ {
+ "type": "int",
+ "name": "posY"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawTextureV",
+ "description": "Draw a Texture2D with position defined as Vector2",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawTextureEx",
+ "description": "Draw a Texture2D with extended parameters",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "float",
+ "name": "rotation"
+ },
+ {
+ "type": "float",
+ "name": "scale"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawTextureRec",
+ "description": "Draw a part of a texture defined by a rectangle",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "Rectangle",
+ "name": "source"
+ },
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawTexturePro",
+ "description": "Draw a part of a texture defined by a rectangle with 'pro' parameters",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "Rectangle",
+ "name": "source"
+ },
+ {
+ "type": "Rectangle",
+ "name": "dest"
+ },
+ {
+ "type": "Vector2",
+ "name": "origin"
+ },
+ {
+ "type": "float",
+ "name": "rotation"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawTextureNPatch",
+ "description": "Draws a texture (or part of it) that stretches or shrinks nicely",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "NPatchInfo",
+ "name": "nPatchInfo"
+ },
+ {
+ "type": "Rectangle",
+ "name": "dest"
+ },
+ {
+ "type": "Vector2",
+ "name": "origin"
+ },
+ {
+ "type": "float",
+ "name": "rotation"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "Fade",
+ "description": "Get color with alpha applied, alpha goes from 0.0f to 1.0f",
+ "returnType": "Color",
+ "params": [
+ {
+ "type": "Color",
+ "name": "color"
+ },
+ {
+ "type": "float",
+ "name": "alpha"
+ }
+ ]
+ },
+ {
+ "name": "ColorToInt",
+ "description": "Get hexadecimal value for a Color",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ColorNormalize",
+ "description": "Get Color normalized as float [0..1]",
+ "returnType": "Vector4",
+ "params": [
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ColorFromNormalized",
+ "description": "Get Color from normalized values [0..1]",
+ "returnType": "Color",
+ "params": [
+ {
+ "type": "Vector4",
+ "name": "normalized"
+ }
+ ]
+ },
+ {
+ "name": "ColorToHSV",
+ "description": "Get HSV values for a Color, hue [0..360], saturation/value [0..1]",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "ColorFromHSV",
+ "description": "Get a Color from HSV values, hue [0..360], saturation/value [0..1]",
+ "returnType": "Color",
+ "params": [
+ {
+ "type": "float",
+ "name": "hue"
+ },
+ {
+ "type": "float",
+ "name": "saturation"
+ },
+ {
+ "type": "float",
+ "name": "value"
+ }
+ ]
+ },
+ {
+ "name": "ColorTint",
+ "description": "Get color multiplied with another color",
+ "returnType": "Color",
+ "params": [
+ {
+ "type": "Color",
+ "name": "color"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "ColorBrightness",
+ "description": "Get color with brightness correction, brightness factor goes from -1.0f to 1.0f",
+ "returnType": "Color",
+ "params": [
+ {
+ "type": "Color",
+ "name": "color"
+ },
+ {
+ "type": "float",
+ "name": "factor"
+ }
+ ]
+ },
+ {
+ "name": "ColorContrast",
+ "description": "Get color with contrast correction, contrast values between -1.0f and 1.0f",
+ "returnType": "Color",
+ "params": [
+ {
+ "type": "Color",
+ "name": "color"
+ },
+ {
+ "type": "float",
+ "name": "contrast"
+ }
+ ]
+ },
+ {
+ "name": "ColorAlpha",
+ "description": "Get color with alpha applied, alpha goes from 0.0f to 1.0f",
+ "returnType": "Color",
+ "params": [
+ {
+ "type": "Color",
+ "name": "color"
+ },
+ {
+ "type": "float",
+ "name": "alpha"
+ }
+ ]
+ },
+ {
+ "name": "ColorAlphaBlend",
+ "description": "Get src alpha-blended into dst color with tint",
+ "returnType": "Color",
+ "params": [
+ {
+ "type": "Color",
+ "name": "dst"
+ },
+ {
+ "type": "Color",
+ "name": "src"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "GetColor",
+ "description": "Get Color structure from hexadecimal value",
+ "returnType": "Color",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "hexValue"
+ }
+ ]
+ },
+ {
+ "name": "GetPixelColor",
+ "description": "Get Color from a source pixel pointer of certain format",
+ "returnType": "Color",
+ "params": [
+ {
+ "type": "void *",
+ "name": "srcPtr"
+ },
+ {
+ "type": "int",
+ "name": "format"
+ }
+ ]
+ },
+ {
+ "name": "SetPixelColor",
+ "description": "Set color formatted into destination pixel pointer",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "void *",
+ "name": "dstPtr"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ },
+ {
+ "type": "int",
+ "name": "format"
+ }
+ ]
+ },
+ {
+ "name": "GetPixelDataSize",
+ "description": "Get pixel data size in bytes for certain format",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "format"
+ }
+ ]
+ },
+ {
+ "name": "GetFontDefault",
+ "description": "Get the default Font",
+ "returnType": "Font"
+ },
+ {
+ "name": "LoadFont",
+ "description": "Load font from file into GPU memory (VRAM)",
+ "returnType": "Font",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "LoadFontEx",
+ "description": "Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character setFont",
+ "returnType": "Font",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ },
+ {
+ "type": "int",
+ "name": "fontSize"
+ },
+ {
+ "type": "int *",
+ "name": "codepoints"
+ },
+ {
+ "type": "int",
+ "name": "codepointCount"
+ }
+ ]
+ },
+ {
+ "name": "LoadFontFromImage",
+ "description": "Load font from Image (XNA style)",
+ "returnType": "Font",
+ "params": [
+ {
+ "type": "Image",
+ "name": "image"
+ },
+ {
+ "type": "Color",
+ "name": "key"
+ },
+ {
+ "type": "int",
+ "name": "firstChar"
+ }
+ ]
+ },
+ {
+ "name": "LoadFontFromMemory",
+ "description": "Load font from memory buffer, fileType refers to extension: i.e. '.ttf'",
+ "returnType": "Font",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileType"
+ },
+ {
+ "type": "const unsigned char *",
+ "name": "fileData"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ },
+ {
+ "type": "int",
+ "name": "fontSize"
+ },
+ {
+ "type": "int *",
+ "name": "codepoints"
+ },
+ {
+ "type": "int",
+ "name": "codepointCount"
+ }
+ ]
+ },
+ {
+ "name": "IsFontReady",
+ "description": "Check if a font is ready",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Font",
+ "name": "font"
+ }
+ ]
+ },
+ {
+ "name": "LoadFontData",
+ "description": "Load font data for further use",
+ "returnType": "GlyphInfo *",
+ "params": [
+ {
+ "type": "const unsigned char *",
+ "name": "fileData"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ },
+ {
+ "type": "int",
+ "name": "fontSize"
+ },
+ {
+ "type": "int *",
+ "name": "codepoints"
+ },
+ {
+ "type": "int",
+ "name": "codepointCount"
+ },
+ {
+ "type": "int",
+ "name": "type"
+ }
+ ]
+ },
+ {
+ "name": "GenImageFontAtlas",
+ "description": "Generate image font atlas using chars info",
+ "returnType": "Image",
+ "params": [
+ {
+ "type": "const GlyphInfo *",
+ "name": "glyphs"
+ },
+ {
+ "type": "Rectangle **",
+ "name": "glyphRecs"
+ },
+ {
+ "type": "int",
+ "name": "glyphCount"
+ },
+ {
+ "type": "int",
+ "name": "fontSize"
+ },
+ {
+ "type": "int",
+ "name": "padding"
+ },
+ {
+ "type": "int",
+ "name": "packMethod"
+ }
+ ]
+ },
+ {
+ "name": "UnloadFontData",
+ "description": "Unload font chars info data (RAM)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "GlyphInfo *",
+ "name": "glyphs"
+ },
+ {
+ "type": "int",
+ "name": "glyphCount"
+ }
+ ]
+ },
+ {
+ "name": "UnloadFont",
+ "description": "Unload font from GPU memory (VRAM)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Font",
+ "name": "font"
+ }
+ ]
+ },
+ {
+ "name": "ExportFontAsCode",
+ "description": "Export font as code file, returns true on success",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Font",
+ "name": "font"
+ },
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "DrawFPS",
+ "description": "Draw current FPS",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "posX"
+ },
+ {
+ "type": "int",
+ "name": "posY"
+ }
+ ]
+ },
+ {
+ "name": "DrawText",
+ "description": "Draw text (using default font)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "int",
+ "name": "posX"
+ },
+ {
+ "type": "int",
+ "name": "posY"
+ },
+ {
+ "type": "int",
+ "name": "fontSize"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawTextEx",
+ "description": "Draw text using font and additional parameters",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Font",
+ "name": "font"
+ },
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "float",
+ "name": "fontSize"
+ },
+ {
+ "type": "float",
+ "name": "spacing"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawTextPro",
+ "description": "Draw text using Font and pro parameters (rotation)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Font",
+ "name": "font"
+ },
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "Vector2",
+ "name": "origin"
+ },
+ {
+ "type": "float",
+ "name": "rotation"
+ },
+ {
+ "type": "float",
+ "name": "fontSize"
+ },
+ {
+ "type": "float",
+ "name": "spacing"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawTextCodepoint",
+ "description": "Draw one character (codepoint)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Font",
+ "name": "font"
+ },
+ {
+ "type": "int",
+ "name": "codepoint"
+ },
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "float",
+ "name": "fontSize"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawTextCodepoints",
+ "description": "Draw multiple character (codepoint)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Font",
+ "name": "font"
+ },
+ {
+ "type": "const int *",
+ "name": "codepoints"
+ },
+ {
+ "type": "int",
+ "name": "codepointCount"
+ },
+ {
+ "type": "Vector2",
+ "name": "position"
+ },
+ {
+ "type": "float",
+ "name": "fontSize"
+ },
+ {
+ "type": "float",
+ "name": "spacing"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "SetTextLineSpacing",
+ "description": "Set vertical line spacing when drawing with line-breaks",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "spacing"
+ }
+ ]
+ },
+ {
+ "name": "MeasureText",
+ "description": "Measure string width for default font",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "int",
+ "name": "fontSize"
+ }
+ ]
+ },
+ {
+ "name": "MeasureTextEx",
+ "description": "Measure string size for Font",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Font",
+ "name": "font"
+ },
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "float",
+ "name": "fontSize"
+ },
+ {
+ "type": "float",
+ "name": "spacing"
+ }
+ ]
+ },
+ {
+ "name": "GetGlyphIndex",
+ "description": "Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "Font",
+ "name": "font"
+ },
+ {
+ "type": "int",
+ "name": "codepoint"
+ }
+ ]
+ },
+ {
+ "name": "GetGlyphInfo",
+ "description": "Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found",
+ "returnType": "GlyphInfo",
+ "params": [
+ {
+ "type": "Font",
+ "name": "font"
+ },
+ {
+ "type": "int",
+ "name": "codepoint"
+ }
+ ]
+ },
+ {
+ "name": "GetGlyphAtlasRec",
+ "description": "Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found",
+ "returnType": "Rectangle",
+ "params": [
+ {
+ "type": "Font",
+ "name": "font"
+ },
+ {
+ "type": "int",
+ "name": "codepoint"
+ }
+ ]
+ },
+ {
+ "name": "LoadUTF8",
+ "description": "Load UTF-8 text encoded from codepoints array",
+ "returnType": "char *",
+ "params": [
+ {
+ "type": "const int *",
+ "name": "codepoints"
+ },
+ {
+ "type": "int",
+ "name": "length"
+ }
+ ]
+ },
+ {
+ "name": "UnloadUTF8",
+ "description": "Unload UTF-8 text encoded from codepoints array",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "LoadCodepoints",
+ "description": "Load all codepoints from a UTF-8 text string, codepoints count returned by parameter",
+ "returnType": "int *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "int *",
+ "name": "count"
+ }
+ ]
+ },
+ {
+ "name": "UnloadCodepoints",
+ "description": "Unload codepoints data from memory",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int *",
+ "name": "codepoints"
+ }
+ ]
+ },
+ {
+ "name": "GetCodepointCount",
+ "description": "Get total number of codepoints in a UTF-8 encoded string",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "GetCodepoint",
+ "description": "Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "int *",
+ "name": "codepointSize"
+ }
+ ]
+ },
+ {
+ "name": "GetCodepointNext",
+ "description": "Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "int *",
+ "name": "codepointSize"
+ }
+ ]
+ },
+ {
+ "name": "GetCodepointPrevious",
+ "description": "Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "int *",
+ "name": "codepointSize"
+ }
+ ]
+ },
+ {
+ "name": "CodepointToUTF8",
+ "description": "Encode one codepoint into UTF-8 byte array (array length returned as parameter)",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "int",
+ "name": "codepoint"
+ },
+ {
+ "type": "int *",
+ "name": "utf8Size"
+ }
+ ]
+ },
+ {
+ "name": "TextCopy",
+ "description": "Copy one string to another, returns bytes copied",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "char *",
+ "name": "dst"
+ },
+ {
+ "type": "const char *",
+ "name": "src"
+ }
+ ]
+ },
+ {
+ "name": "TextIsEqual",
+ "description": "Check if two text string are equal",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text1"
+ },
+ {
+ "type": "const char *",
+ "name": "text2"
+ }
+ ]
+ },
+ {
+ "name": "TextLength",
+ "description": "Get text length, checks for '\\0' ending",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "TextFormat",
+ "description": "Text formatting with variables (sprintf() style)",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "...",
+ "name": "args"
+ }
+ ]
+ },
+ {
+ "name": "TextSubtext",
+ "description": "Get a piece of a text string",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "int",
+ "name": "position"
+ },
+ {
+ "type": "int",
+ "name": "length"
+ }
+ ]
+ },
+ {
+ "name": "TextReplace",
+ "description": "Replace text string (WARNING: memory must be freed!)",
+ "returnType": "char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "const char *",
+ "name": "replace"
+ },
+ {
+ "type": "const char *",
+ "name": "by"
+ }
+ ]
+ },
+ {
+ "name": "TextInsert",
+ "description": "Insert text in a position (WARNING: memory must be freed!)",
+ "returnType": "char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "const char *",
+ "name": "insert"
+ },
+ {
+ "type": "int",
+ "name": "position"
+ }
+ ]
+ },
+ {
+ "name": "TextJoin",
+ "description": "Join text strings with delimiter",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "const char **",
+ "name": "textList"
+ },
+ {
+ "type": "int",
+ "name": "count"
+ },
+ {
+ "type": "const char *",
+ "name": "delimiter"
+ }
+ ]
+ },
+ {
+ "name": "TextSplit",
+ "description": "Split text into multiple strings",
+ "returnType": "const char **",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "char",
+ "name": "delimiter"
+ },
+ {
+ "type": "int *",
+ "name": "count"
+ }
+ ]
+ },
+ {
+ "name": "TextAppend",
+ "description": "Append text at specific position and move cursor!",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "char *",
+ "name": "text"
+ },
+ {
+ "type": "const char *",
+ "name": "append"
+ },
+ {
+ "type": "int *",
+ "name": "position"
+ }
+ ]
+ },
+ {
+ "name": "TextFindIndex",
+ "description": "Find first text occurrence within a string",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ },
+ {
+ "type": "const char *",
+ "name": "find"
+ }
+ ]
+ },
+ {
+ "name": "TextToUpper",
+ "description": "Get upper case version of provided string",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "TextToLower",
+ "description": "Get lower case version of provided string",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "TextToPascal",
+ "description": "Get Pascal case notation version of provided string",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "TextToInteger",
+ "description": "Get integer value from text (negative values not supported)",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "TextToFloat",
+ "description": "Get float value from text (negative values not supported)",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "text"
+ }
+ ]
+ },
+ {
+ "name": "DrawLine3D",
+ "description": "Draw a line in 3D world space",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "startPos"
+ },
+ {
+ "type": "Vector3",
+ "name": "endPos"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawPoint3D",
+ "description": "Draw a point in 3D space, actually a small line",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCircle3D",
+ "description": "Draw a circle in 3D world space",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "center"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "Vector3",
+ "name": "rotationAxis"
+ },
+ {
+ "type": "float",
+ "name": "rotationAngle"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawTriangle3D",
+ "description": "Draw a color-filled triangle (vertex in counter-clockwise order!)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ },
+ {
+ "type": "Vector3",
+ "name": "v3"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawTriangleStrip3D",
+ "description": "Draw a triangle strip defined by points",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3 *",
+ "name": "points"
+ },
+ {
+ "type": "int",
+ "name": "pointCount"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCube",
+ "description": "Draw cube",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "float",
+ "name": "width"
+ },
+ {
+ "type": "float",
+ "name": "height"
+ },
+ {
+ "type": "float",
+ "name": "length"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCubeV",
+ "description": "Draw cube (Vector version)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "Vector3",
+ "name": "size"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCubeWires",
+ "description": "Draw cube wires",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "float",
+ "name": "width"
+ },
+ {
+ "type": "float",
+ "name": "height"
+ },
+ {
+ "type": "float",
+ "name": "length"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCubeWiresV",
+ "description": "Draw cube wires (Vector version)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "Vector3",
+ "name": "size"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSphere",
+ "description": "Draw sphere",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "centerPos"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSphereEx",
+ "description": "Draw sphere with extended parameters",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "centerPos"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "int",
+ "name": "rings"
+ },
+ {
+ "type": "int",
+ "name": "slices"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawSphereWires",
+ "description": "Draw sphere wires",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "centerPos"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "int",
+ "name": "rings"
+ },
+ {
+ "type": "int",
+ "name": "slices"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCylinder",
+ "description": "Draw a cylinder/cone",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "float",
+ "name": "radiusTop"
+ },
+ {
+ "type": "float",
+ "name": "radiusBottom"
+ },
+ {
+ "type": "float",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "slices"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCylinderEx",
+ "description": "Draw a cylinder with base at startPos and top at endPos",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "startPos"
+ },
+ {
+ "type": "Vector3",
+ "name": "endPos"
+ },
+ {
+ "type": "float",
+ "name": "startRadius"
+ },
+ {
+ "type": "float",
+ "name": "endRadius"
+ },
+ {
+ "type": "int",
+ "name": "sides"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCylinderWires",
+ "description": "Draw a cylinder/cone wires",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "float",
+ "name": "radiusTop"
+ },
+ {
+ "type": "float",
+ "name": "radiusBottom"
+ },
+ {
+ "type": "float",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "slices"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCylinderWiresEx",
+ "description": "Draw a cylinder wires with base at startPos and top at endPos",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "startPos"
+ },
+ {
+ "type": "Vector3",
+ "name": "endPos"
+ },
+ {
+ "type": "float",
+ "name": "startRadius"
+ },
+ {
+ "type": "float",
+ "name": "endRadius"
+ },
+ {
+ "type": "int",
+ "name": "sides"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCapsule",
+ "description": "Draw a capsule with the center of its sphere caps at startPos and endPos",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "startPos"
+ },
+ {
+ "type": "Vector3",
+ "name": "endPos"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "int",
+ "name": "slices"
+ },
+ {
+ "type": "int",
+ "name": "rings"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawCapsuleWires",
+ "description": "Draw capsule wireframe with the center of its sphere caps at startPos and endPos",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "startPos"
+ },
+ {
+ "type": "Vector3",
+ "name": "endPos"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "int",
+ "name": "slices"
+ },
+ {
+ "type": "int",
+ "name": "rings"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawPlane",
+ "description": "Draw a plane XZ",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "centerPos"
+ },
+ {
+ "type": "Vector2",
+ "name": "size"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawRay",
+ "description": "Draw a ray line",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Ray",
+ "name": "ray"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawGrid",
+ "description": "Draw a grid (centered at (0, 0, 0))",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "slices"
+ },
+ {
+ "type": "float",
+ "name": "spacing"
+ }
+ ]
+ },
+ {
+ "name": "LoadModel",
+ "description": "Load model from files (meshes and materials)",
+ "returnType": "Model",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "LoadModelFromMesh",
+ "description": "Load model from generated mesh (default material)",
+ "returnType": "Model",
+ "params": [
+ {
+ "type": "Mesh",
+ "name": "mesh"
+ }
+ ]
+ },
+ {
+ "name": "IsModelReady",
+ "description": "Check if a model is ready",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Model",
+ "name": "model"
+ }
+ ]
+ },
+ {
+ "name": "UnloadModel",
+ "description": "Unload model (including meshes) from memory (RAM and/or VRAM)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Model",
+ "name": "model"
+ }
+ ]
+ },
+ {
+ "name": "GetModelBoundingBox",
+ "description": "Compute model bounding box limits (considers all meshes)",
+ "returnType": "BoundingBox",
+ "params": [
+ {
+ "type": "Model",
+ "name": "model"
+ }
+ ]
+ },
+ {
+ "name": "DrawModel",
+ "description": "Draw a model (with texture if set)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Model",
+ "name": "model"
+ },
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "float",
+ "name": "scale"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawModelEx",
+ "description": "Draw a model with extended parameters",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Model",
+ "name": "model"
+ },
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "Vector3",
+ "name": "rotationAxis"
+ },
+ {
+ "type": "float",
+ "name": "rotationAngle"
+ },
+ {
+ "type": "Vector3",
+ "name": "scale"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawModelWires",
+ "description": "Draw a model wires (with texture if set)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Model",
+ "name": "model"
+ },
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "float",
+ "name": "scale"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawModelWiresEx",
+ "description": "Draw a model wires (with texture if set) with extended parameters",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Model",
+ "name": "model"
+ },
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "Vector3",
+ "name": "rotationAxis"
+ },
+ {
+ "type": "float",
+ "name": "rotationAngle"
+ },
+ {
+ "type": "Vector3",
+ "name": "scale"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawBoundingBox",
+ "description": "Draw bounding box (wires)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "BoundingBox",
+ "name": "box"
+ },
+ {
+ "type": "Color",
+ "name": "color"
+ }
+ ]
+ },
+ {
+ "name": "DrawBillboard",
+ "description": "Draw a billboard texture",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Camera",
+ "name": "camera"
+ },
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "float",
+ "name": "size"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawBillboardRec",
+ "description": "Draw a billboard texture defined by source",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Camera",
+ "name": "camera"
+ },
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "Rectangle",
+ "name": "source"
+ },
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "Vector2",
+ "name": "size"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "DrawBillboardPro",
+ "description": "Draw a billboard texture defined by source and rotation",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Camera",
+ "name": "camera"
+ },
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ },
+ {
+ "type": "Rectangle",
+ "name": "source"
+ },
+ {
+ "type": "Vector3",
+ "name": "position"
+ },
+ {
+ "type": "Vector3",
+ "name": "up"
+ },
+ {
+ "type": "Vector2",
+ "name": "size"
+ },
+ {
+ "type": "Vector2",
+ "name": "origin"
+ },
+ {
+ "type": "float",
+ "name": "rotation"
+ },
+ {
+ "type": "Color",
+ "name": "tint"
+ }
+ ]
+ },
+ {
+ "name": "UploadMesh",
+ "description": "Upload mesh vertex data in GPU and provide VAO/VBO ids",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Mesh *",
+ "name": "mesh"
+ },
+ {
+ "type": "bool",
+ "name": "dynamic"
+ }
+ ]
+ },
+ {
+ "name": "UpdateMeshBuffer",
+ "description": "Update mesh vertex data in GPU for a specific buffer index",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Mesh",
+ "name": "mesh"
+ },
+ {
+ "type": "int",
+ "name": "index"
+ },
+ {
+ "type": "const void *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ },
+ {
+ "type": "int",
+ "name": "offset"
+ }
+ ]
+ },
+ {
+ "name": "UnloadMesh",
+ "description": "Unload mesh data from CPU and GPU",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Mesh",
+ "name": "mesh"
+ }
+ ]
+ },
+ {
+ "name": "DrawMesh",
+ "description": "Draw a 3d mesh with material and transform",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Mesh",
+ "name": "mesh"
+ },
+ {
+ "type": "Material",
+ "name": "material"
+ },
+ {
+ "type": "Matrix",
+ "name": "transform"
+ }
+ ]
+ },
+ {
+ "name": "DrawMeshInstanced",
+ "description": "Draw multiple mesh instances with material and different transforms",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Mesh",
+ "name": "mesh"
+ },
+ {
+ "type": "Material",
+ "name": "material"
+ },
+ {
+ "type": "const Matrix *",
+ "name": "transforms"
+ },
+ {
+ "type": "int",
+ "name": "instances"
+ }
+ ]
+ },
+ {
+ "name": "GetMeshBoundingBox",
+ "description": "Compute mesh bounding box limits",
+ "returnType": "BoundingBox",
+ "params": [
+ {
+ "type": "Mesh",
+ "name": "mesh"
+ }
+ ]
+ },
+ {
+ "name": "GenMeshTangents",
+ "description": "Compute mesh tangents",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Mesh *",
+ "name": "mesh"
+ }
+ ]
+ },
+ {
+ "name": "ExportMesh",
+ "description": "Export mesh data to file, returns true on success",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Mesh",
+ "name": "mesh"
+ },
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "ExportMeshAsCode",
+ "description": "Export mesh as code file (.h) defining multiple arrays of vertex attributes",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Mesh",
+ "name": "mesh"
+ },
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "GenMeshPoly",
+ "description": "Generate polygonal mesh",
+ "returnType": "Mesh",
+ "params": [
+ {
+ "type": "int",
+ "name": "sides"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ }
+ ]
+ },
+ {
+ "name": "GenMeshPlane",
+ "description": "Generate plane mesh (with subdivisions)",
+ "returnType": "Mesh",
+ "params": [
+ {
+ "type": "float",
+ "name": "width"
+ },
+ {
+ "type": "float",
+ "name": "length"
+ },
+ {
+ "type": "int",
+ "name": "resX"
+ },
+ {
+ "type": "int",
+ "name": "resZ"
+ }
+ ]
+ },
+ {
+ "name": "GenMeshCube",
+ "description": "Generate cuboid mesh",
+ "returnType": "Mesh",
+ "params": [
+ {
+ "type": "float",
+ "name": "width"
+ },
+ {
+ "type": "float",
+ "name": "height"
+ },
+ {
+ "type": "float",
+ "name": "length"
+ }
+ ]
+ },
+ {
+ "name": "GenMeshSphere",
+ "description": "Generate sphere mesh (standard sphere)",
+ "returnType": "Mesh",
+ "params": [
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "int",
+ "name": "rings"
+ },
+ {
+ "type": "int",
+ "name": "slices"
+ }
+ ]
+ },
+ {
+ "name": "GenMeshHemiSphere",
+ "description": "Generate half-sphere mesh (no bottom cap)",
+ "returnType": "Mesh",
+ "params": [
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "int",
+ "name": "rings"
+ },
+ {
+ "type": "int",
+ "name": "slices"
+ }
+ ]
+ },
+ {
+ "name": "GenMeshCylinder",
+ "description": "Generate cylinder mesh",
+ "returnType": "Mesh",
+ "params": [
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "float",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "slices"
+ }
+ ]
+ },
+ {
+ "name": "GenMeshCone",
+ "description": "Generate cone/pyramid mesh",
+ "returnType": "Mesh",
+ "params": [
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "float",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "slices"
+ }
+ ]
+ },
+ {
+ "name": "GenMeshTorus",
+ "description": "Generate torus mesh",
+ "returnType": "Mesh",
+ "params": [
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "float",
+ "name": "size"
+ },
+ {
+ "type": "int",
+ "name": "radSeg"
+ },
+ {
+ "type": "int",
+ "name": "sides"
+ }
+ ]
+ },
+ {
+ "name": "GenMeshKnot",
+ "description": "Generate trefoil knot mesh",
+ "returnType": "Mesh",
+ "params": [
+ {
+ "type": "float",
+ "name": "radius"
+ },
+ {
+ "type": "float",
+ "name": "size"
+ },
+ {
+ "type": "int",
+ "name": "radSeg"
+ },
+ {
+ "type": "int",
+ "name": "sides"
+ }
+ ]
+ },
+ {
+ "name": "GenMeshHeightmap",
+ "description": "Generate heightmap mesh from image data",
+ "returnType": "Mesh",
+ "params": [
+ {
+ "type": "Image",
+ "name": "heightmap"
+ },
+ {
+ "type": "Vector3",
+ "name": "size"
+ }
+ ]
+ },
+ {
+ "name": "GenMeshCubicmap",
+ "description": "Generate cubes-based map mesh from image data",
+ "returnType": "Mesh",
+ "params": [
+ {
+ "type": "Image",
+ "name": "cubicmap"
+ },
+ {
+ "type": "Vector3",
+ "name": "cubeSize"
+ }
+ ]
+ },
+ {
+ "name": "LoadMaterials",
+ "description": "Load materials from model file",
+ "returnType": "Material *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ },
+ {
+ "type": "int *",
+ "name": "materialCount"
+ }
+ ]
+ },
+ {
+ "name": "LoadMaterialDefault",
+ "description": "Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)",
+ "returnType": "Material"
+ },
+ {
+ "name": "IsMaterialReady",
+ "description": "Check if a material is ready",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Material",
+ "name": "material"
+ }
+ ]
+ },
+ {
+ "name": "UnloadMaterial",
+ "description": "Unload material from GPU memory (VRAM)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Material",
+ "name": "material"
+ }
+ ]
+ },
+ {
+ "name": "SetMaterialTexture",
+ "description": "Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Material *",
+ "name": "material"
+ },
+ {
+ "type": "int",
+ "name": "mapType"
+ },
+ {
+ "type": "Texture2D",
+ "name": "texture"
+ }
+ ]
+ },
+ {
+ "name": "SetModelMeshMaterial",
+ "description": "Set material for a mesh",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Model *",
+ "name": "model"
+ },
+ {
+ "type": "int",
+ "name": "meshId"
+ },
+ {
+ "type": "int",
+ "name": "materialId"
+ }
+ ]
+ },
+ {
+ "name": "LoadModelAnimations",
+ "description": "Load model animations from file",
+ "returnType": "ModelAnimation *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ },
+ {
+ "type": "int *",
+ "name": "animCount"
+ }
+ ]
+ },
+ {
+ "name": "UpdateModelAnimation",
+ "description": "Update model animation pose",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Model",
+ "name": "model"
+ },
+ {
+ "type": "ModelAnimation",
+ "name": "anim"
+ },
+ {
+ "type": "int",
+ "name": "frame"
+ }
+ ]
+ },
+ {
+ "name": "UnloadModelAnimation",
+ "description": "Unload animation data",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "ModelAnimation",
+ "name": "anim"
+ }
+ ]
+ },
+ {
+ "name": "UnloadModelAnimations",
+ "description": "Unload animation array data",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "ModelAnimation *",
+ "name": "animations"
+ },
+ {
+ "type": "int",
+ "name": "animCount"
+ }
+ ]
+ },
+ {
+ "name": "IsModelAnimationValid",
+ "description": "Check model animation skeleton match",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Model",
+ "name": "model"
+ },
+ {
+ "type": "ModelAnimation",
+ "name": "anim"
+ }
+ ]
+ },
+ {
+ "name": "CheckCollisionSpheres",
+ "description": "Check collision between two spheres",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "center1"
+ },
+ {
+ "type": "float",
+ "name": "radius1"
+ },
+ {
+ "type": "Vector3",
+ "name": "center2"
+ },
+ {
+ "type": "float",
+ "name": "radius2"
+ }
+ ]
+ },
+ {
+ "name": "CheckCollisionBoxes",
+ "description": "Check collision between two bounding boxes",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "BoundingBox",
+ "name": "box1"
+ },
+ {
+ "type": "BoundingBox",
+ "name": "box2"
+ }
+ ]
+ },
+ {
+ "name": "CheckCollisionBoxSphere",
+ "description": "Check collision between box and sphere",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "BoundingBox",
+ "name": "box"
+ },
+ {
+ "type": "Vector3",
+ "name": "center"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ }
+ ]
+ },
+ {
+ "name": "GetRayCollisionSphere",
+ "description": "Get collision info between ray and sphere",
+ "returnType": "RayCollision",
+ "params": [
+ {
+ "type": "Ray",
+ "name": "ray"
+ },
+ {
+ "type": "Vector3",
+ "name": "center"
+ },
+ {
+ "type": "float",
+ "name": "radius"
+ }
+ ]
+ },
+ {
+ "name": "GetRayCollisionBox",
+ "description": "Get collision info between ray and box",
+ "returnType": "RayCollision",
+ "params": [
+ {
+ "type": "Ray",
+ "name": "ray"
+ },
+ {
+ "type": "BoundingBox",
+ "name": "box"
+ }
+ ]
+ },
+ {
+ "name": "GetRayCollisionMesh",
+ "description": "Get collision info between ray and mesh",
+ "returnType": "RayCollision",
+ "params": [
+ {
+ "type": "Ray",
+ "name": "ray"
+ },
+ {
+ "type": "Mesh",
+ "name": "mesh"
+ },
+ {
+ "type": "Matrix",
+ "name": "transform"
+ }
+ ]
+ },
+ {
+ "name": "GetRayCollisionTriangle",
+ "description": "Get collision info between ray and triangle",
+ "returnType": "RayCollision",
+ "params": [
+ {
+ "type": "Ray",
+ "name": "ray"
+ },
+ {
+ "type": "Vector3",
+ "name": "p1"
+ },
+ {
+ "type": "Vector3",
+ "name": "p2"
+ },
+ {
+ "type": "Vector3",
+ "name": "p3"
+ }
+ ]
+ },
+ {
+ "name": "GetRayCollisionQuad",
+ "description": "Get collision info between ray and quad",
+ "returnType": "RayCollision",
+ "params": [
+ {
+ "type": "Ray",
+ "name": "ray"
+ },
+ {
+ "type": "Vector3",
+ "name": "p1"
+ },
+ {
+ "type": "Vector3",
+ "name": "p2"
+ },
+ {
+ "type": "Vector3",
+ "name": "p3"
+ },
+ {
+ "type": "Vector3",
+ "name": "p4"
+ }
+ ]
+ },
+ {
+ "name": "InitAudioDevice",
+ "description": "Initialize audio device and context",
+ "returnType": "void"
+ },
+ {
+ "name": "CloseAudioDevice",
+ "description": "Close the audio device and context",
+ "returnType": "void"
+ },
+ {
+ "name": "IsAudioDeviceReady",
+ "description": "Check if audio device has been initialized successfully",
+ "returnType": "bool"
+ },
+ {
+ "name": "SetMasterVolume",
+ "description": "Set master volume (listener)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "volume"
+ }
+ ]
+ },
+ {
+ "name": "GetMasterVolume",
+ "description": "Get master volume (listener)",
+ "returnType": "float"
+ },
+ {
+ "name": "LoadWave",
+ "description": "Load wave data from file",
+ "returnType": "Wave",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "LoadWaveFromMemory",
+ "description": "Load wave from memory buffer, fileType refers to extension: i.e. '.wav'",
+ "returnType": "Wave",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileType"
+ },
+ {
+ "type": "const unsigned char *",
+ "name": "fileData"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ }
+ ]
+ },
+ {
+ "name": "IsWaveReady",
+ "description": "Checks if wave data is ready",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Wave",
+ "name": "wave"
+ }
+ ]
+ },
+ {
+ "name": "LoadSound",
+ "description": "Load sound from file",
+ "returnType": "Sound",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "LoadSoundFromWave",
+ "description": "Load sound from wave data",
+ "returnType": "Sound",
+ "params": [
+ {
+ "type": "Wave",
+ "name": "wave"
+ }
+ ]
+ },
+ {
+ "name": "LoadSoundAlias",
+ "description": "Create a new sound that shares the same sample data as the source sound, does not own the sound data",
+ "returnType": "Sound",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "source"
+ }
+ ]
+ },
+ {
+ "name": "IsSoundReady",
+ "description": "Checks if a sound is ready",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "sound"
+ }
+ ]
+ },
+ {
+ "name": "UpdateSound",
+ "description": "Update sound buffer with new data",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "sound"
+ },
+ {
+ "type": "const void *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "sampleCount"
+ }
+ ]
+ },
+ {
+ "name": "UnloadWave",
+ "description": "Unload wave data",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Wave",
+ "name": "wave"
+ }
+ ]
+ },
+ {
+ "name": "UnloadSound",
+ "description": "Unload sound",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "sound"
+ }
+ ]
+ },
+ {
+ "name": "UnloadSoundAlias",
+ "description": "Unload a sound alias (does not deallocate sample data)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "alias"
+ }
+ ]
+ },
+ {
+ "name": "ExportWave",
+ "description": "Export wave data to file, returns true on success",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Wave",
+ "name": "wave"
+ },
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "ExportWaveAsCode",
+ "description": "Export wave sample data to code (.h), returns true on success",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Wave",
+ "name": "wave"
+ },
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "PlaySound",
+ "description": "Play a sound",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "sound"
+ }
+ ]
+ },
+ {
+ "name": "StopSound",
+ "description": "Stop playing a sound",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "sound"
+ }
+ ]
+ },
+ {
+ "name": "PauseSound",
+ "description": "Pause a sound",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "sound"
+ }
+ ]
+ },
+ {
+ "name": "ResumeSound",
+ "description": "Resume a paused sound",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "sound"
+ }
+ ]
+ },
+ {
+ "name": "IsSoundPlaying",
+ "description": "Check if a sound is currently playing",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "sound"
+ }
+ ]
+ },
+ {
+ "name": "SetSoundVolume",
+ "description": "Set volume for a sound (1.0 is max level)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "sound"
+ },
+ {
+ "type": "float",
+ "name": "volume"
+ }
+ ]
+ },
+ {
+ "name": "SetSoundPitch",
+ "description": "Set pitch for a sound (1.0 is base level)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "sound"
+ },
+ {
+ "type": "float",
+ "name": "pitch"
+ }
+ ]
+ },
+ {
+ "name": "SetSoundPan",
+ "description": "Set pan for a sound (0.5 is center)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Sound",
+ "name": "sound"
+ },
+ {
+ "type": "float",
+ "name": "pan"
+ }
+ ]
+ },
+ {
+ "name": "WaveCopy",
+ "description": "Copy a wave to a new wave",
+ "returnType": "Wave",
+ "params": [
+ {
+ "type": "Wave",
+ "name": "wave"
+ }
+ ]
+ },
+ {
+ "name": "WaveCrop",
+ "description": "Crop a wave to defined samples range",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Wave *",
+ "name": "wave"
+ },
+ {
+ "type": "int",
+ "name": "initSample"
+ },
+ {
+ "type": "int",
+ "name": "finalSample"
+ }
+ ]
+ },
+ {
+ "name": "WaveFormat",
+ "description": "Convert wave data to desired format",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Wave *",
+ "name": "wave"
+ },
+ {
+ "type": "int",
+ "name": "sampleRate"
+ },
+ {
+ "type": "int",
+ "name": "sampleSize"
+ },
+ {
+ "type": "int",
+ "name": "channels"
+ }
+ ]
+ },
+ {
+ "name": "LoadWaveSamples",
+ "description": "Load samples data from wave as a 32bit float data array",
+ "returnType": "float *",
+ "params": [
+ {
+ "type": "Wave",
+ "name": "wave"
+ }
+ ]
+ },
+ {
+ "name": "UnloadWaveSamples",
+ "description": "Unload samples data loaded with LoadWaveSamples()",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float *",
+ "name": "samples"
+ }
+ ]
+ },
+ {
+ "name": "LoadMusicStream",
+ "description": "Load music stream from file",
+ "returnType": "Music",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileName"
+ }
+ ]
+ },
+ {
+ "name": "LoadMusicStreamFromMemory",
+ "description": "Load music stream from data",
+ "returnType": "Music",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "fileType"
+ },
+ {
+ "type": "const unsigned char *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ }
+ ]
+ },
+ {
+ "name": "IsMusicReady",
+ "description": "Checks if a music stream is ready",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ }
+ ]
+ },
+ {
+ "name": "UnloadMusicStream",
+ "description": "Unload music stream",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ }
+ ]
+ },
+ {
+ "name": "PlayMusicStream",
+ "description": "Start music playing",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ }
+ ]
+ },
+ {
+ "name": "IsMusicStreamPlaying",
+ "description": "Check if music is playing",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ }
+ ]
+ },
+ {
+ "name": "UpdateMusicStream",
+ "description": "Updates buffers for music streaming",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ }
+ ]
+ },
+ {
+ "name": "StopMusicStream",
+ "description": "Stop music playing",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ }
+ ]
+ },
+ {
+ "name": "PauseMusicStream",
+ "description": "Pause music playing",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ }
+ ]
+ },
+ {
+ "name": "ResumeMusicStream",
+ "description": "Resume playing paused music",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ }
+ ]
+ },
+ {
+ "name": "SeekMusicStream",
+ "description": "Seek music to a position (in seconds)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ },
+ {
+ "type": "float",
+ "name": "position"
+ }
+ ]
+ },
+ {
+ "name": "SetMusicVolume",
+ "description": "Set volume for music (1.0 is max level)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ },
+ {
+ "type": "float",
+ "name": "volume"
+ }
+ ]
+ },
+ {
+ "name": "SetMusicPitch",
+ "description": "Set pitch for a music (1.0 is base level)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ },
+ {
+ "type": "float",
+ "name": "pitch"
+ }
+ ]
+ },
+ {
+ "name": "SetMusicPan",
+ "description": "Set pan for a music (0.5 is center)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ },
+ {
+ "type": "float",
+ "name": "pan"
+ }
+ ]
+ },
+ {
+ "name": "GetMusicTimeLength",
+ "description": "Get music time length (in seconds)",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ }
+ ]
+ },
+ {
+ "name": "GetMusicTimePlayed",
+ "description": "Get current music time played (in seconds)",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Music",
+ "name": "music"
+ }
+ ]
+ },
+ {
+ "name": "LoadAudioStream",
+ "description": "Load audio stream (to stream raw audio pcm data)",
+ "returnType": "AudioStream",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "sampleRate"
+ },
+ {
+ "type": "unsigned int",
+ "name": "sampleSize"
+ },
+ {
+ "type": "unsigned int",
+ "name": "channels"
+ }
+ ]
+ },
+ {
+ "name": "IsAudioStreamReady",
+ "description": "Checks if an audio stream is ready",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ }
+ ]
+ },
+ {
+ "name": "UnloadAudioStream",
+ "description": "Unload audio stream and free memory",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ }
+ ]
+ },
+ {
+ "name": "UpdateAudioStream",
+ "description": "Update audio stream buffers with data",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ },
+ {
+ "type": "const void *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "frameCount"
+ }
+ ]
+ },
+ {
+ "name": "IsAudioStreamProcessed",
+ "description": "Check if any audio stream buffers requires refill",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ }
+ ]
+ },
+ {
+ "name": "PlayAudioStream",
+ "description": "Play audio stream",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ }
+ ]
+ },
+ {
+ "name": "PauseAudioStream",
+ "description": "Pause audio stream",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ }
+ ]
+ },
+ {
+ "name": "ResumeAudioStream",
+ "description": "Resume audio stream",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ }
+ ]
+ },
+ {
+ "name": "IsAudioStreamPlaying",
+ "description": "Check if audio stream is playing",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ }
+ ]
+ },
+ {
+ "name": "StopAudioStream",
+ "description": "Stop audio stream",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ }
+ ]
+ },
+ {
+ "name": "SetAudioStreamVolume",
+ "description": "Set volume for audio stream (1.0 is max level)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ },
+ {
+ "type": "float",
+ "name": "volume"
+ }
+ ]
+ },
+ {
+ "name": "SetAudioStreamPitch",
+ "description": "Set pitch for audio stream (1.0 is base level)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ },
+ {
+ "type": "float",
+ "name": "pitch"
+ }
+ ]
+ },
+ {
+ "name": "SetAudioStreamPan",
+ "description": "Set pan for audio stream (0.5 is centered)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ },
+ {
+ "type": "float",
+ "name": "pan"
+ }
+ ]
+ },
+ {
+ "name": "SetAudioStreamBufferSizeDefault",
+ "description": "Default size for new audio streams",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "size"
+ }
+ ]
+ },
+ {
+ "name": "SetAudioStreamCallback",
+ "description": "Audio thread callback to request new data",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ },
+ {
+ "type": "AudioCallback",
+ "name": "callback"
+ }
+ ]
+ },
+ {
+ "name": "AttachAudioStreamProcessor",
+ "description": "Attach audio stream processor to stream, receives the samples as s",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ },
+ {
+ "type": "AudioCallback",
+ "name": "processor"
+ }
+ ]
+ },
+ {
+ "name": "DetachAudioStreamProcessor",
+ "description": "Detach audio stream processor from stream",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioStream",
+ "name": "stream"
+ },
+ {
+ "type": "AudioCallback",
+ "name": "processor"
+ }
+ ]
+ },
+ {
+ "name": "AttachAudioMixedProcessor",
+ "description": "Attach audio stream processor to the entire audio pipeline, receives the samples as s",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioCallback",
+ "name": "processor"
+ }
+ ]
+ },
+ {
+ "name": "DetachAudioMixedProcessor",
+ "description": "Detach audio stream processor from the entire audio pipeline",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "AudioCallback",
+ "name": "processor"
+ }
+ ]
+ }
+ ]
+}
diff --git a/libs/raylib/raylib.zig b/libs/raylib/raylib.zig
new file mode 100644
index 0000000..5623096
--- /dev/null
+++ b/libs/raylib/raylib.zig
@@ -0,0 +1,12171 @@
+const std = @import("std");
+const raylib = @cImport({
+ @cInclude("raylib.h");
+
+ @cDefine("GRAPHICS_API_OPENGL_11", {});
+ // @cDefine("RLGL_IMPLEMENTATION", {});
+ @cInclude("rlgl.h");
+
+ @cDefine("RAYMATH_IMPLEMENTATION", {});
+ @cInclude("raymath.h");
+
+ @cInclude("marshal.h");
+});
+
+//--- structs -------------------------------------------------------------------------------------
+
+/// System/Window config flags
+pub const ConfigFlags = packed struct(u32) {
+ FLAG_UNKNOWN_1: bool = false, // 0x0001
+ /// Set to run program in fullscreen
+ FLAG_FULLSCREEN_MODE: bool = false, // 0x0002,
+ /// Set to allow resizable window
+ FLAG_WINDOW_RESIZABLE: bool = false, // 0x0004,
+ /// Set to disable window decoration (frame and buttons)
+ FLAG_WINDOW_UNDECORATED: bool = false, // 0x0008,
+ /// Set to allow transparent framebuffer
+ FLAG_WINDOW_TRANSPARENT: bool = false, // 0x0010,
+ /// Set to try enabling MSAA 4X
+ FLAG_MSAA_4X_HINT: bool = false, // 0x0020,
+ /// Set to try enabling V-Sync on GPU
+ FLAG_VSYNC_HINT: bool = false, // 0x0040,
+ /// Set to hide window
+ FLAG_WINDOW_HIDDEN: bool = false, // 0x0080,
+ /// Set to allow windows running while minimized
+ FLAG_WINDOW_ALWAYS_RUN: bool = false, // 0x0100,
+ /// Set to minimize window (iconify)
+ FLAG_WINDOW_MINIMIZED: bool = false, // 0x0200,
+ /// Set to maximize window (expanded to monitor)
+ FLAG_WINDOW_MAXIMIZED: bool = false, // 0x0400,
+ /// Set to window non focused
+ FLAG_WINDOW_UNFOCUSED: bool = false, // 0x0800,
+ /// Set to window always on top
+ FLAG_WINDOW_TOPMOST: bool = false, // 0x1000,
+ /// Set to support HighDPI
+ FLAG_WINDOW_HIGHDPI: bool = false, // 0x2000,
+ /// Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED
+ FLAG_WINDOW_MOUSE_PASSTHROUGH: bool = false, // 0x4000,
+ FLAG_UNKNOWN_2: bool = false, // 0x8000
+ /// Set to try enabling interlaced video format (for V3D)
+ FLAG_INTERLACED_HINT: bool = false, // 0x10000
+ FLAG_PADDING: u15 = 0, // 0xFFFE0000
+};
+
+/// Transform, vectex transformation data
+pub const Transform = extern struct {
+ /// Translation
+ translation: Vector3,
+ /// Rotation
+ rotation: Vector4,
+ /// Scale
+ scale: Vector3,
+};
+
+/// Matrix, 4x4 components, column major, OpenGL style, right handed
+pub const Matrix = extern struct {
+ /// Matrix first row (4 components) [m0, m4, m8, m12]
+ m0: f32,
+ m4: f32,
+ m8: f32,
+ m12: f32,
+ /// Matrix second row (4 components) [m1, m5, m9, m13]
+ m1: f32,
+ m5: f32,
+ m9: f32,
+ m13: f32,
+ /// Matrix third row (4 components) [m2, m6, m10, m14]
+ m2: f32,
+ m6: f32,
+ m10: f32,
+ m14: f32,
+ /// Matrix fourth row (4 components) [m3, m7, m11, m15]
+ m3: f32,
+ m7: f32,
+ m11: f32,
+ m15: f32,
+
+ pub fn zero() @This() {
+ return @This(){
+ .m0 = 0,
+ .m1 = 0,
+ .m2 = 0,
+ .m3 = 0,
+ .m4 = 0,
+ .m5 = 0,
+ .m6 = 0,
+ .m7 = 0,
+ .m8 = 0,
+ .m9 = 0,
+ .m10 = 0,
+ .m11 = 0,
+ .m12 = 0,
+ .m13 = 0,
+ .m14 = 0,
+ .m15 = 0,
+ };
+ }
+
+ pub fn identity() @This() {
+ return MatrixIdentity();
+ }
+};
+
+pub const Rectangle = extern struct {
+ x: f32 = 0,
+ y: f32 = 0,
+ width: f32 = 0,
+ height: f32 = 0,
+
+ pub fn toI32(self: @This()) RectangleI {
+ return .{
+ .x = @as(i32, @intFromFloat(self.x)),
+ .y = @as(i32, @intFromFloat(self.y)),
+ .width = @as(i32, @intFromFloat(self.width)),
+ .height = @as(i32, @intFromFloat(self.height)),
+ };
+ }
+
+ pub fn pos(self: @This()) Vector2 {
+ return .{
+ .x = self.x,
+ .y = self.y,
+ };
+ }
+
+ pub fn size(self: @This()) Vector2 {
+ return .{
+ .x = self.width,
+ .y = self.height,
+ };
+ }
+
+ pub fn topLeft(self: @This()) Vector2 {
+ return .{
+ .x = self.x,
+ .y = self.y,
+ };
+ }
+
+ pub fn topCenter(self: @This()) Vector2 {
+ return .{
+ .x = self.x + self.width / 2,
+ .y = self.y,
+ };
+ }
+
+ pub fn topRight(self: @This()) Vector2 {
+ return .{
+ .x = self.x + self.width,
+ .y = self.y,
+ };
+ }
+
+ pub fn centerLeft(self: @This()) Vector2 {
+ return .{
+ .x = self.x,
+ .y = self.y + self.height / 2,
+ };
+ }
+
+ pub fn center(self: @This()) Vector2 {
+ return .{
+ .x = self.x + self.width / 2,
+ .y = self.y + self.height / 2,
+ };
+ }
+
+ pub fn centerRight(self: @This()) Vector2 {
+ return .{
+ .x = self.x + self.width,
+ .y = self.y + self.height / 2,
+ };
+ }
+
+ pub fn bottomLeft(self: @This()) Vector2 {
+ return .{
+ .x = self.x + 0,
+ .y = self.y + self.height,
+ };
+ }
+
+ pub fn bottomCenter(self: @This()) Vector2 {
+ return .{
+ .x = self.x + self.width / 2,
+ .y = self.y + self.height,
+ };
+ }
+
+ pub fn bottomRight(self: @This()) Vector2 {
+ return .{
+ .x = self.x + self.width,
+ .y = self.y + self.height,
+ };
+ }
+
+ pub fn area(self: @This()) f32 {
+ return self.width * self.height;
+ }
+
+ pub fn include(self: @This(), other: @This()) @This() {
+ return self.includePoint(other.topLeft()).includePoint(other.bottomRight());
+ }
+
+ pub fn includePoint(self: @This(), point: Vector2) @This() {
+ const minX = @min(self.x, point.x);
+ const minY = @min(self.y, point.y);
+ const maxX = @max(self.x + self.width, point.x);
+ const maxY = @max(self.y + self.height, point.y);
+
+ return .{
+ .x = minX,
+ .y = minY,
+ .width = maxX - minX,
+ .height = maxY - minY,
+ };
+ }
+};
+
+pub const RectangleI = extern struct {
+ x: i32 = 0,
+ y: i32 = 0,
+ width: i32 = 0,
+ height: i32 = 0,
+
+ pub fn toF32(self: @This()) Rectangle {
+ return .{
+ .x = @as(f32, @floatFromInt(self.x)),
+ .y = @as(f32, @floatFromInt(self.y)),
+ .width = @as(f32, @floatFromInt(self.width)),
+ .height = @as(f32, @floatFromInt(self.height)),
+ };
+ }
+
+ pub fn pos(self: @This()) Vector2i {
+ return .{
+ .x = self.x,
+ .y = self.y,
+ };
+ }
+};
+
+pub const Vector2 = extern struct {
+ x: f32 = 0,
+ y: f32 = 0,
+
+ pub fn zero() @This() {
+ return .{ .x = 0, .y = 0 };
+ }
+
+ pub fn setZero(self: *@This()) void {
+ self.x = 0;
+ self.y = 0;
+ }
+
+ pub fn one() @This() {
+ return @This(){ .x = 1, .y = 1 };
+ }
+
+ pub fn neg(self: @This()) @This() {
+ return @This(){ .x = -self.x, .y = -self.y };
+ }
+
+ pub fn length2(self: @This()) f32 {
+ var sum = self.x * self.x;
+ sum += self.y * self.y;
+ return sum;
+ }
+
+ pub fn length(self: @This()) f32 {
+ return std.math.sqrt(self.length2());
+ }
+
+ pub fn distanceTo(self: @This(), other: @This()) f32 {
+ return self.sub(other).length();
+ }
+
+ pub fn distanceToSquared(self: @This(), other: @This()) f32 {
+ return self.sub(other).length2();
+ }
+
+ pub fn normalize(self: @This()) @This() {
+ const l = self.length();
+ if (l == 0.0) return @This().zero();
+ return self.scale(1.0 / l);
+ }
+
+ pub fn scale(self: @This(), factor: f32) @This() {
+ return @This(){
+ .x = self.x * factor,
+ .y = self.y * factor,
+ };
+ }
+
+ pub fn add(self: @This(), other: @This()) @This() {
+ return @This(){
+ .x = self.x + other.x,
+ .y = self.y + other.y,
+ };
+ }
+
+ /// same as add but assign result directly to this
+ pub fn addSet(self: *@This(), other: @This()) void {
+ self.x += other.x;
+ self.y += other.y;
+ }
+
+ pub fn sub(self: @This(), other: @This()) @This() {
+ return @This(){
+ .x = self.x - other.x,
+ .y = self.y - other.y,
+ };
+ }
+
+ pub fn lerp(self: @This(), other: @This(), t: f32) @This() {
+ return self.scale(1 - t).add(other.scale(t));
+ }
+
+ pub fn randomInUnitCircle(rng: std.rand.Random) @This() {
+ return randomOnUnitCircle(rng).scale(randomF32(rng, 0, 1));
+ }
+
+ pub fn randomOnUnitCircle(rng: std.rand.Random) @This() {
+ return (Vector2{ .x = 1 }).rotate(randomF32(rng, -PI, PI));
+ }
+
+ pub fn clampX(self: @This(), minX: f32, maxX: f32) @This() {
+ return .{
+ .x = std.math.clamp(self.x, minX, maxX),
+ .y = self.y,
+ };
+ }
+ pub fn clampY(self: @This(), minY: f32, maxY: f32) @This() {
+ return .{
+ .x = self.x,
+ .y = std.math.clamp(self.y, minY, maxY),
+ };
+ }
+
+ pub fn int(self: @This()) Vector2i {
+ return .{ .x = @as(i32, @intFromFloat(self.x)), .y = @as(i32, @intFromFloat(self.y)) };
+ }
+
+ /// Cross product
+ pub fn cross(self: @This(), other: @This()) f32 {
+ return self.x * other.y - self.y * other.x;
+ }
+
+ /// Dot product.
+ pub fn dot(self: @This(), other: @This()) f32 {
+ return self.x * other.x + self.y * other.y;
+ }
+
+ pub fn rotate(self: @This(), a: f32) @This() {
+ return Vector2Rotate(self, a);
+ }
+
+ pub fn fromAngle(a: f32) @This() {
+ return Vector2Rotate(.{ .x = 1 }, a);
+ }
+
+ pub fn angle(this: @This()) f32 {
+ const zeroRotation: Vector2 = .{ .x = 1, .y = 0 };
+ if (this.x == zeroRotation.x and this.y == zeroRotation.y) return 0;
+
+ const c = zeroRotation.cross(this);
+ const d = zeroRotation.dot(this);
+ return std.math.atan2(f32, c, d);
+ }
+
+ pub fn xy0(self: @This()) Vector3 {
+ return .{ .x = self.x, .y = self.y };
+ }
+
+ pub fn x0z(self: @This()) Vector3 {
+ return .{ .x = self.x, .z = self.y };
+ }
+
+ pub fn set(self: @This(), setter: struct { x: ?f32 = null, y: ?f32 = null }) Vector2 {
+ var copy = self;
+ if (setter.x) |x| copy.x = x;
+ if (setter.y) |y| copy.y = y;
+ return copy;
+ }
+};
+
+pub const Vector2i = extern struct {
+ x: i32 = 0,
+ y: i32 = 0,
+
+ pub fn float(self: @This()) Vector2 {
+ return .{ .x = @as(f32, @floatFromInt(self.x)), .y = @as(f32, @floatFromInt(self.y)) };
+ }
+};
+
+pub const Vector3 = extern struct {
+ x: f32 = 0,
+ y: f32 = 0,
+ z: f32 = 0,
+
+ pub fn new(x: f32, y: f32, z: f32) @This() {
+ return @This(){ .x = x, .y = y, .z = z };
+ }
+
+ pub fn zero() @This() {
+ return @This(){ .x = 0, .y = 0, .z = 0 };
+ }
+
+ pub fn one() @This() {
+ return @This(){ .x = 1, .y = 1, .z = 1 };
+ }
+
+ pub fn length2(self: @This()) f32 {
+ var sum = self.x * self.x;
+ sum += self.y * self.y;
+ sum += self.z * self.z;
+ return sum;
+ }
+
+ pub fn length(self: @This()) f32 {
+ return std.math.sqrt(self.length2());
+ }
+
+ pub fn normalize(self: @This()) @This() {
+ const l = self.length();
+ if (l == 0.0) return @This().zero();
+ return self.scale(1.0 / l);
+ }
+
+ pub fn scale(self: @This(), factor: f32) @This() {
+ return @This(){
+ .x = self.x * factor,
+ .y = self.y * factor,
+ .z = self.z * factor,
+ };
+ }
+
+ pub fn add(self: @This(), other: @This()) @This() {
+ return @This(){
+ .x = self.x + other.x,
+ .y = self.y + other.y,
+ .z = self.z + other.z,
+ };
+ }
+ pub fn sub(self: @This(), other: @This()) @This() {
+ return @This(){
+ .x = self.x - other.x,
+ .y = self.y - other.y,
+ .z = self.z - other.z,
+ };
+ }
+
+ pub fn neg(this: @This()) @This() {
+ return .{
+ .x = -this.x,
+ .y = -this.y,
+ .z = -this.z,
+ };
+ }
+
+ pub fn lerp(self: @This(), other: @This(), t: f32) @This() {
+ return self.scale(1 - t).add(other.scale(t));
+ }
+
+ pub fn forward() @This() {
+ return @This().new(0, 0, 1);
+ }
+
+ pub fn rotate(self: @This(), quaternion: Vector4) @This() {
+ return Vector3RotateByQuaternion(self, quaternion);
+ }
+
+ pub fn angleBetween(self: @This(), other: Vector3) f32 {
+ return Vector3Angle(self, other);
+ // return std.math.acos(self.dot(other) / (self.length() * other.length()));
+ }
+
+ /// Dot product.
+ pub fn dot(self: @This(), other: @This()) f32 {
+ return self.x * other.x + self.y * other.y + self.z * other.z;
+ }
+
+ pub fn xy(self: @This()) Vector2 {
+ return .{ .x = self.x, .y = self.y };
+ }
+
+ pub fn set(self: @This(), setter: struct { x: ?f32 = null, y: ?f32 = null, z: ?f32 = null }) Vector3 {
+ var copy = self;
+ if (setter.x) |x| copy.x = x;
+ if (setter.y) |y| copy.y = y;
+ if (setter.z) |z| copy.z = z;
+ return copy;
+ }
+};
+
+pub const Vector4 = extern struct {
+ x: f32 = 0,
+ y: f32 = 0,
+ z: f32 = 0,
+ w: f32 = 0,
+
+ pub fn zero() @This() {
+ return @This(){ .x = 0, .y = 0, .z = 0 };
+ }
+
+ pub fn one() @This() {
+ return @This(){ .x = 1, .y = 1, .z = 1 };
+ }
+
+ pub fn length2(self: @This()) f32 {
+ var sum = self.x * self.x;
+ sum += self.y * self.y;
+ sum += self.z * self.z;
+ sum += self.w * self.w;
+ return sum;
+ }
+
+ pub fn length(self: @This()) f32 {
+ return std.math.sqrt(self.length2());
+ }
+
+ pub fn normalize(self: @This()) @This() {
+ const l = self.length();
+ if (l == 0.0) return @This().zero();
+ return self.scale(1.0 / l);
+ }
+
+ pub fn scale(self: @This(), factor: f32) @This() {
+ return @This(){
+ .x = self.x * factor,
+ .y = self.y * factor,
+ .z = self.z * factor,
+ .w = self.w * factor,
+ };
+ }
+
+ pub fn add(self: @This(), other: @This()) @This() {
+ return @This(){
+ .x = self.x + other.x,
+ .y = self.y + other.y,
+ .z = self.z + other.z,
+ .w = self.w + other.w,
+ };
+ }
+ pub fn sub(self: @This(), other: @This()) @This() {
+ return @This(){
+ .x = self.x - other.x,
+ .y = self.y - other.y,
+ .z = self.z - other.z,
+ .w = self.w - other.w,
+ };
+ }
+
+ pub fn lerp(self: @This(), other: @This(), t: f32) @This() {
+ return self.scale(1 - t).add(other.scale(t));
+ }
+
+ pub fn toColor(self: @This()) Color {
+ return .{
+ .r = @as(u8, @intFromFloat(std.math.clamp(self.x * 255, 0, 255))),
+ .g = @as(u8, @intFromFloat(std.math.clamp(self.y * 255, 0, 255))),
+ .b = @as(u8, @intFromFloat(std.math.clamp(self.z * 255, 0, 255))),
+ .a = @as(u8, @intFromFloat(std.math.clamp(self.w * 255, 0, 255))),
+ };
+ }
+
+ pub fn fromAngleAxis(axis: Vector3, angle: f32) @This() {
+ return QuaternionFromAxisAngle(axis, angle);
+ }
+};
+
+/// Color type, RGBA (32bit)
+pub const Color = extern struct {
+ r: u8 = 0,
+ g: u8 = 0,
+ b: u8 = 0,
+ a: u8 = 255,
+
+ pub const ColorChangeConfig = struct {
+ r: ?u8 = null,
+ g: ?u8 = null,
+ b: ?u8 = null,
+ a: ?u8 = null,
+ };
+
+ pub fn set(self: @This(), c: ColorChangeConfig) Color {
+ return .{
+ .r = if (c.r) |_r| _r else self.r,
+ .g = if (c.g) |_g| _g else self.g,
+ .b = if (c.b) |_b| _b else self.b,
+ .a = if (c.a) |_a| _a else self.a,
+ };
+ }
+
+ pub fn lerp(self: @This(), other: @This(), t: f32) @This() {
+ return self.toVector4().lerp(other.toVector4(), t).toColor();
+ }
+
+ pub fn lerpA(self: @This(), targetAlpha: u8, t: f32) @This() {
+ var copy = self;
+ const a = @as(f32, @floatFromInt(self.a));
+ copy.a = @as(u8, @intFromFloat(a * (1 - t) + @as(f32, @floatFromInt(targetAlpha)) * t));
+ return copy;
+ }
+
+ pub fn toVector4(self: @This()) Vector4 {
+ return .{
+ .x = @as(f32, @floatFromInt(self.r)) / 255.0,
+ .y = @as(f32, @floatFromInt(self.g)) / 255.0,
+ .z = @as(f32, @floatFromInt(self.b)) / 255.0,
+ .w = @as(f32, @floatFromInt(self.a)) / 255.0,
+ };
+ }
+
+ /// negate color (keep alpha)
+ pub fn neg(self: @This()) @This() {
+ return .{
+ .r = 255 - self.r,
+ .g = 255 - self.g,
+ .b = 255 - self.b,
+ .a = self.a,
+ };
+ }
+};
+
+/// Camera2D, defines position/orientation in 2d space
+pub const Camera2D = extern struct {
+ /// Camera offset (displacement from target)
+ offset: Vector2 = Vector2.zero(),
+ /// Camera target (rotation and zoom origin)
+ target: Vector2,
+ /// Camera rotation in degrees
+ rotation: f32 = 0,
+ /// Camera zoom (scaling), should be 1.0f by default
+ zoom: f32 = 1,
+};
+
+pub const MATERIAL_MAP_DIFFUSE = @as(usize, @intCast(@intFromEnum(MaterialMapIndex.MATERIAL_MAP_ALBEDO)));
+pub const MATERIAL_MAP_SPECULAR = @as(usize, @intCast(@intFromEnum(MaterialMapIndex.MATERIAL_MAP_METALNESS)));
+
+//--- callbacks -----------------------------------------------------------------------------------
+
+/// Logging: Redirect trace log messages
+pub const TraceLogCallback = *const fn (logLevel: c_int, text: [*c]const u8, args: ?*anyopaque) void;
+
+/// FileIO: Load binary data
+pub const LoadFileDataCallback = *const fn (fileName: [*c]const u8, bytesRead: [*c]c_uint) [*c]u8;
+
+/// FileIO: Save binary data
+pub const SaveFileDataCallback = *const fn (fileName: [*c]const u8, data: ?*anyopaque, bytesToWrite: c_uint) bool;
+
+/// FileIO: Load text data
+pub const LoadFileTextCallback = *const fn (fileName: [*c]const u8) [*c]u8;
+
+/// FileIO: Save text data
+pub const SaveFileTextCallback = *const fn (fileName: [*c]const u8, text: [*c]const u8) bool;
+
+/// Audio Loading and Playing Functions (Module: audio)
+pub const AudioCallback = *const fn (bufferData: ?*anyopaque, frames: u32) void;
+
+//--- utils ---------------------------------------------------------------------------------------
+
+// Camera global state context data [56 bytes]
+pub const CameraData = extern struct {
+ /// Current camera mode
+ mode: u32,
+ /// Camera distance from position to target
+ targetDistance: f32,
+ /// Player eyes position from ground (in meters)
+ playerEyesPosition: f32,
+ /// Camera angle in plane XZ
+ angle: Vector2,
+ /// Previous mouse position
+ previousMousePosition: Vector2,
+
+ // Camera movement control keys
+
+ /// Move controls (CAMERA_FIRST_PERSON)
+ moveControl: i32[6],
+ /// Smooth zoom control key
+ smoothZoomControl: i32,
+ /// Alternative control key
+ altControl: i32,
+ /// Pan view control key
+ panControl: i32,
+};
+
+pub fn randomF32(rng: std.rand.Random, min: f32, max: f32) f32 {
+ return rng.float(f32) * (max - min) + min;
+}
+
+//--- functions -----------------------------------------------------------------------------------
+
+/// Setup init configuration flags (view FLAGS)
+pub fn SetConfigFlags(
+ flags: ConfigFlags,
+) void {
+ raylib.SetConfigFlags(@as(c_uint, @bitCast(flags)));
+}
+
+/// Load file data as byte array (read)
+pub fn LoadFileData(fileName: [*:0]const u8) ![]const u8 {
+ var bytesRead: u32 = undefined;
+ const data = raylib.LoadFileData(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ @as([*c]c_int, @ptrCast(&bytesRead)),
+ );
+
+ if (data == null) return error.FileNotFound;
+
+ return data[0..bytesRead];
+}
+
+/// Unload file data allocated by LoadFileData()
+pub fn UnloadFileData(
+ data: []const u8,
+) void {
+ raylib.UnloadFileData(
+ @as([*c]u8, @ptrFromInt(@intFromPtr(data.ptr))),
+ );
+}
+
+/// Set custom trace log
+pub fn SetTraceLogCallback(
+ _: TraceLogCallback,
+) void {
+ @panic("use log.zig for that");
+}
+
+/// Generate image font atlas using chars info
+pub fn GenImageFontAtlas(
+ chars: [*]const GlyphInfo,
+ recs: [*]const [*]const Rectangle,
+ glyphCount: i32,
+ fontSize: i32,
+ padding: i32,
+ packMethod: i32,
+) Image {
+ var out: Image = undefined;
+ mGenImageFontAtlas(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]raylib.GlyphInfo, @ptrCast(chars)),
+ @as([*c][*c]raylib.Rectangle, @ptrCast(recs)),
+ glyphCount,
+ fontSize,
+ padding,
+ packMethod,
+ );
+ return out;
+}
+export fn mGenImageFontAtlas(
+ out: [*c]raylib.Image,
+ chars: [*c]raylib.GlyphInfo,
+ recs: [*c][*c]raylib.Rectangle,
+ glyphCount: i32,
+ fontSize: i32,
+ padding: i32,
+ packMethod: i32,
+) void {
+ out.* = raylib.GenImageFontAtlas(
+ chars,
+ recs,
+ glyphCount,
+ fontSize,
+ padding,
+ packMethod,
+ );
+}
+
+/// Get native window handle
+pub fn GetWindowHandle() ?*anyopaque {
+ return raylib.GetWindowHandle();
+}
+
+/// Internal memory allocator
+pub fn MemAlloc(
+ size: i32,
+) ?*anyopaque {
+ return raylib.MemAlloc(size);
+}
+
+/// Internal memory reallocator
+pub fn MemRealloc(
+ ptr: ?*anyopaque,
+ size: i32,
+) ?*anyopaque {
+ return raylib.MemRealloc(ptr, size);
+}
+
+/// Internal memory free
+pub fn MemFree(
+ ptr: ?*anyopaque,
+) void {
+ raylib.MemFree(ptr);
+}
+
+/// Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...)
+pub fn TraceLog(
+ logLevel: i32,
+ text: [*:0]const u8,
+) void {
+ raylib.TraceLog(logLevel, text);
+}
+
+/// Text formatting with variables (sprintf() style)
+/// caller owns memory
+pub fn TextFormat(allocator: std.mem.Allocator, comptime fmt: []const u8, args: anytype) std.fmt.AllocPrintError![*:0]const u8 {
+ return (try std.fmt.allocPrintZ(allocator, fmt, args)).ptr;
+}
+
+/// Split text into multiple strings
+pub fn TextSplit(allocator: std.mem.Allocator, text: []const u8, delimiter: []const u8, count: i32) ![]const []const u8 {
+ var list = std.ArrayList([]const u8).init(allocator);
+ var it = std.mem.split(u8, text, delimiter);
+ var i = 0;
+ var n = 0;
+ while (it.next()) |slice| : (i += 1) {
+ if (i >= count) {
+ break;
+ }
+
+ try list.append(slice);
+ n += slice.len;
+ }
+ if (n < text.len) {
+ try list.append(text[n..]);
+ }
+ return list.toOwnedSlice();
+}
+
+/// Join text strings with delimiter
+pub fn TextJoin(allocator: std.mem.Allocator, textList: []const []const u8, delimiter: []const u8) ![:0]const u8 {
+ return (try std.mem.joinZ(allocator, delimiter, textList)).ptr;
+}
+
+/// Append text at specific position and move cursor!
+pub fn TextAppend(allocator: std.mem.Allocator, text: []const u8, append: []const u8, position: i32) std.fmt.AllocPrintError![:0]u8 {
+ return (try std.fmt.allocPrintZ(allocator, "{s}{s}{s}", .{
+ text[0..position],
+ append,
+ text[position..],
+ })).ptr;
+}
+
+//--- RLGL ----------------------------------------------------------------------------------------
+
+pub const DEG2RAD: f32 = PI / 180;
+pub const RAD2DEG: f32 = 180 / PI;
+
+///
+pub const rlglData = extern struct {
+ /// Current render batch
+ currentBatch: ?*rlRenderBatch,
+ /// Default internal render batch
+ defaultBatch: rlRenderBatch,
+
+ pub const State = extern struct {
+ /// Current active render batch vertex counter (generic, used for all batches)
+ vertexCounter: i32,
+ /// Current active texture coordinate X (added on glVertex*())
+ texcoordx: f32,
+ /// Current active texture coordinate Y (added on glVertex*())
+ texcoordy: f32,
+ /// Current active normal X (added on glVertex*())
+ normalx: f32,
+ /// Current active normal Y (added on glVertex*())
+ normaly: f32,
+ /// Current active normal Z (added on glVertex*())
+ normalz: f32,
+ /// Current active color R (added on glVertex*())
+ colorr: u8,
+ /// Current active color G (added on glVertex*())
+ colorg: u8,
+ /// Current active color B (added on glVertex*())
+ colorb: u8,
+ /// Current active color A (added on glVertex*())
+ colora: u8,
+ /// Current matrix mode
+ currentMatrixMode: i32,
+ /// Current matrix pointer
+ currentMatrix: ?*Matrix,
+ /// Default modelview matrix
+ modelview: Matrix,
+ /// Default projection matrix
+ projection: Matrix,
+ /// Transform matrix to be used with rlTranslate, rlRotate, rlScale
+ transform: Matrix,
+ /// Require transform matrix application to current draw-call vertex (if required)
+ transformRequired: bool,
+ /// Matrix stack for push/pop
+ stack: [RL_MAX_MATRIX_STACK_SIZE]Matrix,
+ /// Matrix stack counter
+ stackCounter: i32,
+ /// Default texture used on shapes/poly drawing (required by shader)
+ defaultTextureId: u32,
+ /// Active texture ids to be enabled on batch drawing (0 active by default)
+ activeTextureId: [RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS]u32,
+ /// Default vertex shader id (used by default shader program)
+ defaultVShaderId: u32,
+ /// Default fragment shader id (used by default shader program)
+ defaultFShaderId: u32,
+ /// Default shader program id, supports vertex color and diffuse texture
+ defaultShaderId: u32,
+ /// Default shader locations pointer to be used on rendering
+ defaultShaderLocs: [*]i32,
+ /// Current shader id to be used on rendering (by default, defaultShaderId)
+ currentShaderId: u32,
+ /// Current shader locations pointer to be used on rendering (by default, defaultShaderLocs)
+ currentShaderLocs: [*]i32,
+ /// Stereo rendering flag
+ stereoRender: bool,
+ /// VR stereo rendering eyes projection matrices
+ projectionStereo: [2]Matrix,
+ /// VR stereo rendering eyes view offset matrices
+ viewOffsetStereo: [2]Matrix,
+ /// Blending mode active
+ currentBlendMode: i32,
+ /// Blending source factor
+ glBlendSrcFactor: i32,
+ /// Blending destination factor
+ glBlendDstFactor: i32,
+ /// Blending equation
+ glBlendEquation: i32,
+ /// Current framebuffer width
+ framebufferWidth: i32,
+ /// Current framebuffer height
+ framebufferHeight: i32,
+ };
+
+ pub const ExtSupported = extern struct {
+ /// VAO support (OpenGL ES2 could not support VAO extension) (GL_ARB_vertex_array_object)
+ vao: bool,
+ /// Instancing supported (GL_ANGLE_instanced_arrays, GL_EXT_draw_instanced + GL_EXT_instanced_arrays)
+ instancing: bool,
+ /// NPOT textures full support (GL_ARB_texture_non_power_of_two, GL_OES_texture_npot)
+ texNPOT: bool,
+ /// Depth textures supported (GL_ARB_depth_texture, GL_WEBGL_depth_texture, GL_OES_depth_texture)
+ texDepth: bool,
+ /// float textures support (32 bit per channel) (GL_OES_texture_float)
+ texFloat32: bool,
+ /// DDS texture compression support (GL_EXT_texture_compression_s3tc, GL_WEBGL_compressed_texture_s3tc, GL_WEBKIT_WEBGL_compressed_texture_s3tc)
+ texCompDXT: bool,
+ /// ETC1 texture compression support (GL_OES_compressed_ETC1_RGB8_texture, GL_WEBGL_compressed_texture_etc1)
+ texCompETC1: bool,
+ /// ETC2/EAC texture compression support (GL_ARB_ES3_compatibility)
+ texCompETC2: bool,
+ /// PVR texture compression support (GL_IMG_texture_compression_pvrtc)
+ texCompPVRT: bool,
+ /// ASTC texture compression support (GL_KHR_texture_compression_astc_hdr, GL_KHR_texture_compression_astc_ldr)
+ texCompASTC: bool,
+ /// Clamp mirror wrap mode supported (GL_EXT_texture_mirror_clamp)
+ texMirrorClamp: bool,
+ /// Anisotropic texture filtering support (GL_EXT_texture_filter_anisotropic)
+ texAnisoFilter: bool,
+ /// Compute shaders support (GL_ARB_compute_shader)
+ computeShader: bool,
+ /// Shader storage buffer object support (GL_ARB_shader_storage_buffer_object)
+ ssbo: bool,
+ /// Maximum anisotropy level supported (minimum is 2.0f)
+ maxAnisotropyLevel: f32,
+ /// Maximum bits for depth component
+ maxDepthBits: i32,
+ };
+};
+
+/// Enable attribute state pointer
+pub fn rlEnableStatePointer(
+ vertexAttribType: i32,
+ buffer: *anyopaque,
+) void {
+ raylib.rlEnableStatePointer(
+ vertexAttribType,
+ @as([*c]anyopaque, @ptrCast(buffer)),
+ );
+}
+
+/// Disable attribute state pointer
+pub fn rlDisableStatePointer(
+ vertexAttribType: i32,
+) void {
+ raylib.rlDisableStatePointer(
+ vertexAttribType,
+ );
+}
+
+/// Get the last gamepad button pressed
+pub fn GetGamepadButtonPressed() ?GamepadButton {
+ if (raylib.GetGamepadButtonPressed() == -1) return null;
+
+ return @as(GamepadButton, @enumFromInt(raylib.GetGamepadButtonPressed()));
+}
+
+/// Initialize window and OpenGL context
+pub fn InitWindow(
+ width: i32,
+ height: i32,
+ title: [*:0]const u8,
+) void {
+ raylib.mInitWindow(
+ width,
+ height,
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(title))),
+ );
+}
+
+/// Close window and unload OpenGL context
+pub fn CloseWindow() void {
+ raylib.mCloseWindow();
+}
+
+/// Check if application should close (KEY_ESCAPE pressed or windows close icon clicked)
+pub fn WindowShouldClose() bool {
+ return raylib.mWindowShouldClose();
+}
+
+/// Check if window has been initialized successfully
+pub fn IsWindowReady() bool {
+ return raylib.mIsWindowReady();
+}
+
+/// Check if window is currently fullscreen
+pub fn IsWindowFullscreen() bool {
+ return raylib.mIsWindowFullscreen();
+}
+
+/// Check if window is currently hidden (only PLATFORM_DESKTOP)
+pub fn IsWindowHidden() bool {
+ return raylib.mIsWindowHidden();
+}
+
+/// Check if window is currently minimized (only PLATFORM_DESKTOP)
+pub fn IsWindowMinimized() bool {
+ return raylib.mIsWindowMinimized();
+}
+
+/// Check if window is currently maximized (only PLATFORM_DESKTOP)
+pub fn IsWindowMaximized() bool {
+ return raylib.mIsWindowMaximized();
+}
+
+/// Check if window is currently focused (only PLATFORM_DESKTOP)
+pub fn IsWindowFocused() bool {
+ return raylib.mIsWindowFocused();
+}
+
+/// Check if window has been resized last frame
+pub fn IsWindowResized() bool {
+ return raylib.mIsWindowResized();
+}
+
+/// Check if one specific window flag is enabled
+pub fn IsWindowState(
+ flag: u32,
+) bool {
+ return raylib.mIsWindowState(
+ flag,
+ );
+}
+
+/// Set window configuration state using flags (only PLATFORM_DESKTOP)
+pub fn SetWindowState(
+ flags: u32,
+) void {
+ raylib.mSetWindowState(
+ flags,
+ );
+}
+
+/// Clear window configuration state flags
+pub fn ClearWindowState(
+ flags: u32,
+) void {
+ raylib.mClearWindowState(
+ flags,
+ );
+}
+
+/// Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)
+pub fn ToggleFullscreen() void {
+ raylib.mToggleFullscreen();
+}
+
+/// Toggle window state: borderless windowed (only PLATFORM_DESKTOP)
+pub fn ToggleBorderlessWindowed() void {
+ raylib.mToggleBorderlessWindowed();
+}
+
+/// Set window state: maximized, if resizable (only PLATFORM_DESKTOP)
+pub fn MaximizeWindow() void {
+ raylib.mMaximizeWindow();
+}
+
+/// Set window state: minimized, if resizable (only PLATFORM_DESKTOP)
+pub fn MinimizeWindow() void {
+ raylib.mMinimizeWindow();
+}
+
+/// Set window state: not minimized/maximized (only PLATFORM_DESKTOP)
+pub fn RestoreWindow() void {
+ raylib.mRestoreWindow();
+}
+
+/// Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP)
+pub fn SetWindowIcon(
+ image: Image,
+) void {
+ raylib.mSetWindowIcon(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ );
+}
+
+/// Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP)
+pub fn SetWindowIcons(
+ images: *Image,
+ count: i32,
+) void {
+ raylib.mSetWindowIcons(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(images))),
+ count,
+ );
+}
+
+/// Set title for window (only PLATFORM_DESKTOP and PLATFORM_WEB)
+pub fn SetWindowTitle(
+ title: [*:0]const u8,
+) void {
+ raylib.mSetWindowTitle(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(title))),
+ );
+}
+
+/// Set window position on screen (only PLATFORM_DESKTOP)
+pub fn SetWindowPosition(
+ x: i32,
+ y: i32,
+) void {
+ raylib.mSetWindowPosition(
+ x,
+ y,
+ );
+}
+
+/// Set monitor for the current window
+pub fn SetWindowMonitor(
+ monitor: i32,
+) void {
+ raylib.mSetWindowMonitor(
+ monitor,
+ );
+}
+
+/// Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
+pub fn SetWindowMinSize(
+ width: i32,
+ height: i32,
+) void {
+ raylib.mSetWindowMinSize(
+ width,
+ height,
+ );
+}
+
+/// Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)
+pub fn SetWindowMaxSize(
+ width: i32,
+ height: i32,
+) void {
+ raylib.mSetWindowMaxSize(
+ width,
+ height,
+ );
+}
+
+/// Set window dimensions
+pub fn SetWindowSize(
+ width: i32,
+ height: i32,
+) void {
+ raylib.mSetWindowSize(
+ width,
+ height,
+ );
+}
+
+/// Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)
+pub fn SetWindowOpacity(
+ opacity: f32,
+) void {
+ raylib.mSetWindowOpacity(
+ opacity,
+ );
+}
+
+/// Set window focused (only PLATFORM_DESKTOP)
+pub fn SetWindowFocused() void {
+ raylib.mSetWindowFocused();
+}
+
+/// Get current screen width
+pub fn GetScreenWidth() i32 {
+ return raylib.mGetScreenWidth();
+}
+
+/// Get current screen height
+pub fn GetScreenHeight() i32 {
+ return raylib.mGetScreenHeight();
+}
+
+/// Get current render width (it considers HiDPI)
+pub fn GetRenderWidth() i32 {
+ return raylib.mGetRenderWidth();
+}
+
+/// Get current render height (it considers HiDPI)
+pub fn GetRenderHeight() i32 {
+ return raylib.mGetRenderHeight();
+}
+
+/// Get number of connected monitors
+pub fn GetMonitorCount() i32 {
+ return raylib.mGetMonitorCount();
+}
+
+/// Get current connected monitor
+pub fn GetCurrentMonitor() i32 {
+ return raylib.mGetCurrentMonitor();
+}
+
+/// Get specified monitor position
+pub fn GetMonitorPosition(
+ monitor: i32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetMonitorPosition(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ monitor,
+ );
+ return out;
+}
+
+/// Get specified monitor width (current video mode used by monitor)
+pub fn GetMonitorWidth(
+ monitor: i32,
+) i32 {
+ return raylib.mGetMonitorWidth(
+ monitor,
+ );
+}
+
+/// Get specified monitor height (current video mode used by monitor)
+pub fn GetMonitorHeight(
+ monitor: i32,
+) i32 {
+ return raylib.mGetMonitorHeight(
+ monitor,
+ );
+}
+
+/// Get specified monitor physical width in millimetres
+pub fn GetMonitorPhysicalWidth(
+ monitor: i32,
+) i32 {
+ return raylib.mGetMonitorPhysicalWidth(
+ monitor,
+ );
+}
+
+/// Get specified monitor physical height in millimetres
+pub fn GetMonitorPhysicalHeight(
+ monitor: i32,
+) i32 {
+ return raylib.mGetMonitorPhysicalHeight(
+ monitor,
+ );
+}
+
+/// Get specified monitor refresh rate
+pub fn GetMonitorRefreshRate(
+ monitor: i32,
+) i32 {
+ return raylib.mGetMonitorRefreshRate(
+ monitor,
+ );
+}
+
+/// Get window position XY on monitor
+pub fn GetWindowPosition() Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetWindowPosition(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Get window scale DPI factor
+pub fn GetWindowScaleDPI() Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetWindowScaleDPI(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Get the human-readable, UTF-8 encoded name of the specified monitor
+pub fn GetMonitorName(
+ monitor: i32,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mGetMonitorName(
+ monitor,
+ )),
+ );
+}
+
+/// Set clipboard text content
+pub fn SetClipboardText(
+ text: [*:0]const u8,
+) void {
+ raylib.mSetClipboardText(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ );
+}
+
+/// Get clipboard text content
+pub fn GetClipboardText() [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mGetClipboardText()),
+ );
+}
+
+/// Enable waiting for events on EndDrawing(), no automatic event polling
+pub fn EnableEventWaiting() void {
+ raylib.mEnableEventWaiting();
+}
+
+/// Disable waiting for events on EndDrawing(), automatic events polling
+pub fn DisableEventWaiting() void {
+ raylib.mDisableEventWaiting();
+}
+
+/// Shows cursor
+pub fn ShowCursor() void {
+ raylib.mShowCursor();
+}
+
+/// Hides cursor
+pub fn HideCursor() void {
+ raylib.mHideCursor();
+}
+
+/// Check if cursor is not visible
+pub fn IsCursorHidden() bool {
+ return raylib.mIsCursorHidden();
+}
+
+/// Enables cursor (unlock cursor)
+pub fn EnableCursor() void {
+ raylib.mEnableCursor();
+}
+
+/// Disables cursor (lock cursor)
+pub fn DisableCursor() void {
+ raylib.mDisableCursor();
+}
+
+/// Check if cursor is on the screen
+pub fn IsCursorOnScreen() bool {
+ return raylib.mIsCursorOnScreen();
+}
+
+/// Set background color (framebuffer clear color)
+pub fn ClearBackground(
+ color: Color,
+) void {
+ raylib.mClearBackground(
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Setup canvas (framebuffer) to start drawing
+pub fn BeginDrawing() void {
+ raylib.mBeginDrawing();
+}
+
+/// End canvas drawing and swap buffers (double buffering)
+pub fn EndDrawing() void {
+ raylib.mEndDrawing();
+}
+
+/// Begin 2D mode with custom camera (2D)
+pub fn BeginMode2D(
+ camera: Camera2D,
+) void {
+ raylib.mBeginMode2D(
+ @as([*c]raylib.Camera2D, @ptrFromInt(@intFromPtr(&camera))),
+ );
+}
+
+/// Ends 2D mode with custom camera
+pub fn EndMode2D() void {
+ raylib.mEndMode2D();
+}
+
+/// Begin 3D mode with custom camera (3D)
+pub fn BeginMode3D(
+ camera: Camera3D,
+) void {
+ raylib.mBeginMode3D(
+ @as([*c]raylib.Camera3D, @ptrFromInt(@intFromPtr(&camera))),
+ );
+}
+
+/// Ends 3D mode and returns to default 2D orthographic mode
+pub fn EndMode3D() void {
+ raylib.mEndMode3D();
+}
+
+/// Begin drawing to render texture
+pub fn BeginTextureMode(
+ target: RenderTexture2D,
+) void {
+ raylib.mBeginTextureMode(
+ @as([*c]raylib.RenderTexture2D, @ptrFromInt(@intFromPtr(&target))),
+ );
+}
+
+/// Ends drawing to render texture
+pub fn EndTextureMode() void {
+ raylib.mEndTextureMode();
+}
+
+/// Begin custom shader drawing
+pub fn BeginShaderMode(
+ shader: Shader,
+) void {
+ raylib.mBeginShaderMode(
+ @as([*c]raylib.Shader, @ptrFromInt(@intFromPtr(&shader))),
+ );
+}
+
+/// End custom shader drawing (use default shader)
+pub fn EndShaderMode() void {
+ raylib.mEndShaderMode();
+}
+
+/// Begin blending mode (alpha, additive, multiplied, subtract, custom)
+pub fn BeginBlendMode(
+ mode: i32,
+) void {
+ raylib.mBeginBlendMode(
+ mode,
+ );
+}
+
+/// End blending mode (reset to default: alpha blending)
+pub fn EndBlendMode() void {
+ raylib.mEndBlendMode();
+}
+
+/// Begin scissor mode (define screen area for following drawing)
+pub fn BeginScissorMode(
+ x: i32,
+ y: i32,
+ width: i32,
+ height: i32,
+) void {
+ raylib.mBeginScissorMode(
+ x,
+ y,
+ width,
+ height,
+ );
+}
+
+/// End scissor mode
+pub fn EndScissorMode() void {
+ raylib.mEndScissorMode();
+}
+
+/// Begin stereo rendering (requires VR simulator)
+pub fn BeginVrStereoMode(
+ config: VrStereoConfig,
+) void {
+ raylib.mBeginVrStereoMode(
+ @as([*c]raylib.VrStereoConfig, @ptrFromInt(@intFromPtr(&config))),
+ );
+}
+
+/// End stereo rendering (requires VR simulator)
+pub fn EndVrStereoMode() void {
+ raylib.mEndVrStereoMode();
+}
+
+/// Load VR stereo config for VR simulator device parameters
+pub fn LoadVrStereoConfig(
+ device: VrDeviceInfo,
+) VrStereoConfig {
+ var out: VrStereoConfig = undefined;
+ raylib.mLoadVrStereoConfig(
+ @as([*c]raylib.VrStereoConfig, @ptrCast(&out)),
+ @as([*c]raylib.VrDeviceInfo, @ptrFromInt(@intFromPtr(&device))),
+ );
+ return out;
+}
+
+/// Unload VR stereo config
+pub fn UnloadVrStereoConfig(
+ config: VrStereoConfig,
+) void {
+ raylib.mUnloadVrStereoConfig(
+ @as([*c]raylib.VrStereoConfig, @ptrFromInt(@intFromPtr(&config))),
+ );
+}
+
+/// Load shader from files and bind default locations
+pub fn LoadShader(
+ vsFileName: [*:0]const u8,
+ fsFileName: [*:0]const u8,
+) Shader {
+ var out: Shader = undefined;
+ raylib.mLoadShader(
+ @as([*c]raylib.Shader, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(vsFileName))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fsFileName))),
+ );
+ return out;
+}
+
+/// Load shader from code strings and bind default locations
+pub fn LoadShaderFromMemory(
+ vsCode: [*:0]const u8,
+ fsCode: [*:0]const u8,
+) Shader {
+ var out: Shader = undefined;
+ raylib.mLoadShaderFromMemory(
+ @as([*c]raylib.Shader, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(vsCode))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fsCode))),
+ );
+ return out;
+}
+
+/// Check if a shader is ready
+pub fn IsShaderReady(
+ shader: Shader,
+) bool {
+ return raylib.mIsShaderReady(
+ @as([*c]raylib.Shader, @ptrFromInt(@intFromPtr(&shader))),
+ );
+}
+
+/// Get shader uniform location
+pub fn GetShaderLocation(
+ shader: Shader,
+ uniformName: [*:0]const u8,
+) i32 {
+ return raylib.mGetShaderLocation(
+ @as([*c]raylib.Shader, @ptrFromInt(@intFromPtr(&shader))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(uniformName))),
+ );
+}
+
+/// Get shader attribute location
+pub fn GetShaderLocationAttrib(
+ shader: Shader,
+ attribName: [*:0]const u8,
+) i32 {
+ return raylib.mGetShaderLocationAttrib(
+ @as([*c]raylib.Shader, @ptrFromInt(@intFromPtr(&shader))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(attribName))),
+ );
+}
+
+/// Set shader uniform value
+pub fn SetShaderValue(
+ shader: Shader,
+ locIndex: i32,
+ value: *const anyopaque,
+ uniformType: ShaderUniformDataType,
+) void {
+ raylib.mSetShaderValue(
+ @as([*c]raylib.Shader, @ptrFromInt(@intFromPtr(&shader))),
+ locIndex,
+ value,
+ @intFromEnum(uniformType),
+ );
+}
+
+/// Set shader uniform value vector
+pub fn SetShaderValueV(
+ shader: Shader,
+ locIndex: i32,
+ value: *const anyopaque,
+ uniformType: i32,
+ count: i32,
+) void {
+ raylib.mSetShaderValueV(
+ @as([*c]raylib.Shader, @ptrFromInt(@intFromPtr(&shader))),
+ locIndex,
+ value,
+ uniformType,
+ count,
+ );
+}
+
+/// Set shader uniform value (matrix 4x4)
+pub fn SetShaderValueMatrix(
+ shader: Shader,
+ locIndex: i32,
+ mat: Matrix,
+) void {
+ raylib.mSetShaderValueMatrix(
+ @as([*c]raylib.Shader, @ptrFromInt(@intFromPtr(&shader))),
+ locIndex,
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&mat))),
+ );
+}
+
+/// Set shader uniform value for texture (sampler2d)
+pub fn SetShaderValueTexture(
+ shader: Shader,
+ locIndex: i32,
+ texture: Texture2D,
+) void {
+ raylib.mSetShaderValueTexture(
+ @as([*c]raylib.Shader, @ptrFromInt(@intFromPtr(&shader))),
+ locIndex,
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ );
+}
+
+/// Unload shader from GPU memory (VRAM)
+pub fn UnloadShader(
+ shader: Shader,
+) void {
+ raylib.mUnloadShader(
+ @as([*c]raylib.Shader, @ptrFromInt(@intFromPtr(&shader))),
+ );
+}
+
+/// Get a ray trace from mouse position
+pub fn GetMouseRay(
+ mousePosition: Vector2,
+ camera: Camera3D,
+) Ray {
+ var out: Ray = undefined;
+ raylib.mGetMouseRay(
+ @as([*c]raylib.Ray, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&mousePosition))),
+ @as([*c]raylib.Camera3D, @ptrFromInt(@intFromPtr(&camera))),
+ );
+ return out;
+}
+
+/// Get camera transform matrix (view matrix)
+pub fn GetCameraMatrix(
+ camera: Camera3D,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mGetCameraMatrix(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ @as([*c]raylib.Camera3D, @ptrFromInt(@intFromPtr(&camera))),
+ );
+ return out;
+}
+
+/// Get camera 2d transform matrix
+pub fn GetCameraMatrix2D(
+ camera: Camera2D,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mGetCameraMatrix2D(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ @as([*c]raylib.Camera2D, @ptrFromInt(@intFromPtr(&camera))),
+ );
+ return out;
+}
+
+/// Get the screen space position for a 3d world space position
+pub fn GetWorldToScreen(
+ position: Vector3,
+ camera: Camera3D,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetWorldToScreen(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Camera3D, @ptrFromInt(@intFromPtr(&camera))),
+ );
+ return out;
+}
+
+/// Get the world space position for a 2d camera screen space position
+pub fn GetScreenToWorld2D(
+ position: Vector2,
+ camera: Camera2D,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetScreenToWorld2D(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Camera2D, @ptrFromInt(@intFromPtr(&camera))),
+ );
+ return out;
+}
+
+/// Get size position for a 3d world space position
+pub fn GetWorldToScreenEx(
+ position: Vector3,
+ camera: Camera3D,
+ width: i32,
+ height: i32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetWorldToScreenEx(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Camera3D, @ptrFromInt(@intFromPtr(&camera))),
+ width,
+ height,
+ );
+ return out;
+}
+
+/// Get the screen space position for a 2d camera world space position
+pub fn GetWorldToScreen2D(
+ position: Vector2,
+ camera: Camera2D,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetWorldToScreen2D(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Camera2D, @ptrFromInt(@intFromPtr(&camera))),
+ );
+ return out;
+}
+
+/// Set target FPS (maximum)
+pub fn SetTargetFPS(
+ fps: i32,
+) void {
+ raylib.mSetTargetFPS(
+ fps,
+ );
+}
+
+/// Get time in seconds for last frame drawn (delta time)
+pub fn GetFrameTime() f32 {
+ return raylib.mGetFrameTime();
+}
+
+/// Get elapsed time in seconds since InitWindow()
+pub fn GetTime() f64 {
+ return raylib.mGetTime();
+}
+
+/// Get current FPS
+pub fn GetFPS() i32 {
+ return raylib.mGetFPS();
+}
+
+/// Swap back buffer with front buffer (screen drawing)
+pub fn SwapScreenBuffer() void {
+ raylib.mSwapScreenBuffer();
+}
+
+/// Register all input events
+pub fn PollInputEvents() void {
+ raylib.mPollInputEvents();
+}
+
+/// Wait for some time (halt program execution)
+pub fn WaitTime(
+ seconds: f64,
+) void {
+ raylib.mWaitTime(
+ seconds,
+ );
+}
+
+/// Set the seed for the random number generator
+pub fn SetRandomSeed(
+ seed: u32,
+) void {
+ raylib.mSetRandomSeed(
+ seed,
+ );
+}
+
+/// Get a random value between min and max (both included)
+pub fn GetRandomValue(
+ min: i32,
+ max: i32,
+) i32 {
+ return raylib.mGetRandomValue(
+ min,
+ max,
+ );
+}
+
+/// Load random values sequence, no values repeated
+pub fn LoadRandomSequence(
+ count: u32,
+ min: i32,
+ max: i32,
+) ?[*]i32 {
+ return @as(
+ ?[*]i32,
+ @ptrCast(raylib.mLoadRandomSequence(
+ count,
+ min,
+ max,
+ )),
+ );
+}
+
+/// Unload random values sequence
+pub fn UnloadRandomSequence(
+ sequence: ?[*]i32,
+) void {
+ raylib.mUnloadRandomSequence(
+ @as([*c]i32, @ptrCast(sequence)),
+ );
+}
+
+/// Takes a screenshot of current screen (filename extension defines format)
+pub fn TakeScreenshot(
+ fileName: [*:0]const u8,
+) void {
+ raylib.mTakeScreenshot(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Open URL with default system browser (if available)
+pub fn OpenURL(
+ url: [*:0]const u8,
+) void {
+ raylib.mOpenURL(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(url))),
+ );
+}
+
+/// Set the current threshold (minimum) log level
+pub fn SetTraceLogLevel(
+ logLevel: i32,
+) void {
+ raylib.mSetTraceLogLevel(
+ logLevel,
+ );
+}
+
+/// Set custom file binary data loader
+pub fn SetLoadFileDataCallback(
+ callback: LoadFileDataCallback,
+) void {
+ raylib.mSetLoadFileDataCallback(
+ @ptrCast(callback),
+ );
+}
+
+/// Set custom file binary data saver
+pub fn SetSaveFileDataCallback(
+ callback: SaveFileDataCallback,
+) void {
+ raylib.mSetSaveFileDataCallback(
+ @ptrCast(callback),
+ );
+}
+
+/// Set custom file text data loader
+pub fn SetLoadFileTextCallback(
+ callback: LoadFileTextCallback,
+) void {
+ raylib.mSetLoadFileTextCallback(
+ @ptrCast(callback),
+ );
+}
+
+/// Set custom file text data saver
+pub fn SetSaveFileTextCallback(
+ callback: SaveFileTextCallback,
+) void {
+ raylib.mSetSaveFileTextCallback(
+ @ptrCast(callback),
+ );
+}
+
+/// Save data to file from byte array (write), returns true on success
+pub fn SaveFileData(
+ fileName: [*:0]const u8,
+ data: *anyopaque,
+ dataSize: i32,
+) bool {
+ return raylib.mSaveFileData(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ data,
+ dataSize,
+ );
+}
+
+/// Export data to code (.h), returns true on success
+pub fn ExportDataAsCode(
+ data: [*:0]const u8,
+ dataSize: i32,
+ fileName: [*:0]const u8,
+) bool {
+ return raylib.mExportDataAsCode(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(data))),
+ dataSize,
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Load text data from file (read), returns a '\0' terminated string
+pub fn LoadFileText(
+ fileName: [*:0]const u8,
+) [*:0]const u8 {
+ return @as(
+ ?[*]u8,
+ @ptrCast(raylib.mLoadFileText(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ )),
+ );
+}
+
+/// Unload file text data allocated by LoadFileText()
+pub fn UnloadFileText(
+ text: ?[*]u8,
+) void {
+ raylib.mUnloadFileText(
+ @as([*c]u8, @ptrCast(text)),
+ );
+}
+
+/// Save text data to file (write), string must be '\0' terminated, returns true on success
+pub fn SaveFileText(
+ fileName: [*:0]const u8,
+ text: ?[*]u8,
+) bool {
+ return raylib.mSaveFileText(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ @as([*c]u8, @ptrCast(text)),
+ );
+}
+
+/// Check if file exists
+pub fn FileExists(
+ fileName: [*:0]const u8,
+) bool {
+ return raylib.mFileExists(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Check if a directory path exists
+pub fn DirectoryExists(
+ dirPath: [*:0]const u8,
+) bool {
+ return raylib.mDirectoryExists(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(dirPath))),
+ );
+}
+
+/// Check file extension (including point: .png, .wav)
+pub fn IsFileExtension(
+ fileName: [*:0]const u8,
+ ext: [*:0]const u8,
+) bool {
+ return raylib.mIsFileExtension(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(ext))),
+ );
+}
+
+/// Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h)
+pub fn GetFileLength(
+ fileName: [*:0]const u8,
+) i32 {
+ return raylib.mGetFileLength(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Get pointer to extension for a filename string (includes dot: '.png')
+pub fn GetFileExtension(
+ fileName: [*:0]const u8,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mGetFileExtension(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ )),
+ );
+}
+
+/// Get pointer to filename for a path string
+pub fn GetFileName(
+ filePath: [*:0]const u8,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mGetFileName(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(filePath))),
+ )),
+ );
+}
+
+/// Get filename string without extension (uses static string)
+pub fn GetFileNameWithoutExt(
+ filePath: [*:0]const u8,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mGetFileNameWithoutExt(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(filePath))),
+ )),
+ );
+}
+
+/// Get full path for a given fileName with path (uses static string)
+pub fn GetDirectoryPath(
+ filePath: [*:0]const u8,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mGetDirectoryPath(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(filePath))),
+ )),
+ );
+}
+
+/// Get previous directory path for a given path (uses static string)
+pub fn GetPrevDirectoryPath(
+ dirPath: [*:0]const u8,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mGetPrevDirectoryPath(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(dirPath))),
+ )),
+ );
+}
+
+/// Get current working directory (uses static string)
+pub fn GetWorkingDirectory() [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mGetWorkingDirectory()),
+ );
+}
+
+/// Get the directory of the running application (uses static string)
+pub fn GetApplicationDirectory() [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mGetApplicationDirectory()),
+ );
+}
+
+/// Change working directory, return true on success
+pub fn ChangeDirectory(
+ dir: [*:0]const u8,
+) bool {
+ return raylib.mChangeDirectory(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(dir))),
+ );
+}
+
+/// Check if a given path is a file or a directory
+pub fn IsPathFile(
+ path: [*:0]const u8,
+) bool {
+ return raylib.mIsPathFile(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(path))),
+ );
+}
+
+/// Load directory filepaths
+pub fn LoadDirectoryFiles(
+ dirPath: [*:0]const u8,
+) FilePathList {
+ var out: FilePathList = undefined;
+ raylib.mLoadDirectoryFiles(
+ @as([*c]raylib.FilePathList, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(dirPath))),
+ );
+ return out;
+}
+
+/// Load directory filepaths with extension filtering and recursive directory scan
+pub fn LoadDirectoryFilesEx(
+ basePath: [*:0]const u8,
+ filter: [*:0]const u8,
+ scanSubdirs: bool,
+) FilePathList {
+ var out: FilePathList = undefined;
+ raylib.mLoadDirectoryFilesEx(
+ @as([*c]raylib.FilePathList, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(basePath))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(filter))),
+ scanSubdirs,
+ );
+ return out;
+}
+
+/// Unload filepaths
+pub fn UnloadDirectoryFiles(
+ files: FilePathList,
+) void {
+ raylib.mUnloadDirectoryFiles(
+ @as([*c]raylib.FilePathList, @ptrFromInt(@intFromPtr(&files))),
+ );
+}
+
+/// Check if a file has been dropped into window
+pub fn IsFileDropped() bool {
+ return raylib.mIsFileDropped();
+}
+
+/// Load dropped filepaths
+pub fn LoadDroppedFiles() FilePathList {
+ var out: FilePathList = undefined;
+ raylib.mLoadDroppedFiles(
+ @as([*c]raylib.FilePathList, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Unload dropped filepaths
+pub fn UnloadDroppedFiles(
+ files: FilePathList,
+) void {
+ raylib.mUnloadDroppedFiles(
+ @as([*c]raylib.FilePathList, @ptrFromInt(@intFromPtr(&files))),
+ );
+}
+
+/// Get file modification time (last write time)
+pub fn GetFileModTime(
+ fileName: [*:0]const u8,
+) i64 {
+ return raylib.mGetFileModTime(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Compress data (DEFLATE algorithm), memory must be MemFree()
+pub fn CompressData(
+ data: [*:0]const u8,
+ dataSize: i32,
+ compDataSize: ?[*]i32,
+) [*:0]const u8 {
+ return @as(
+ ?[*]u8,
+ @ptrCast(raylib.mCompressData(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(data))),
+ dataSize,
+ @as([*c]i32, @ptrCast(compDataSize)),
+ )),
+ );
+}
+
+/// Decompress data (DEFLATE algorithm), memory must be MemFree()
+pub fn DecompressData(
+ compData: [*:0]const u8,
+ compDataSize: i32,
+ dataSize: ?[*]i32,
+) [*:0]const u8 {
+ return @as(
+ ?[*]u8,
+ @ptrCast(raylib.mDecompressData(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(compData))),
+ compDataSize,
+ @as([*c]i32, @ptrCast(dataSize)),
+ )),
+ );
+}
+
+/// Encode data to Base64 string, memory must be MemFree()
+pub fn EncodeDataBase64(
+ data: [*:0]const u8,
+ dataSize: i32,
+ outputSize: ?[*]i32,
+) [*:0]const u8 {
+ return @as(
+ ?[*]u8,
+ @ptrCast(raylib.mEncodeDataBase64(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(data))),
+ dataSize,
+ @as([*c]i32, @ptrCast(outputSize)),
+ )),
+ );
+}
+
+/// Decode Base64 string data, memory must be MemFree()
+pub fn DecodeDataBase64(
+ data: [*:0]const u8,
+ outputSize: ?[*]i32,
+) [*:0]const u8 {
+ return @as(
+ ?[*]u8,
+ @ptrCast(raylib.mDecodeDataBase64(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(data))),
+ @as([*c]i32, @ptrCast(outputSize)),
+ )),
+ );
+}
+
+/// Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS
+pub fn LoadAutomationEventList(
+ fileName: [*:0]const u8,
+) AutomationEventList {
+ var out: AutomationEventList = undefined;
+ raylib.mLoadAutomationEventList(
+ @as([*c]raylib.AutomationEventList, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+ return out;
+}
+
+/// Unload automation events list from file
+pub fn UnloadAutomationEventList(
+ list: AutomationEventList,
+) void {
+ raylib.mUnloadAutomationEventList(
+ @as([*c]raylib.AutomationEventList, @ptrFromInt(@intFromPtr(&list))),
+ );
+}
+
+/// Export automation events list as text file
+pub fn ExportAutomationEventList(
+ list: AutomationEventList,
+ fileName: [*:0]const u8,
+) bool {
+ return raylib.mExportAutomationEventList(
+ @as([*c]raylib.AutomationEventList, @ptrFromInt(@intFromPtr(&list))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Set automation event list to record to
+pub fn SetAutomationEventList(
+ list: ?[*]AutomationEventList,
+) void {
+ raylib.mSetAutomationEventList(
+ @as([*c]raylib.AutomationEventList, @ptrFromInt(@intFromPtr(list))),
+ );
+}
+
+/// Set automation event internal base frame to start recording
+pub fn SetAutomationEventBaseFrame(
+ frame: i32,
+) void {
+ raylib.mSetAutomationEventBaseFrame(
+ frame,
+ );
+}
+
+/// Start recording automation events (AutomationEventList must be set)
+pub fn StartAutomationEventRecording() void {
+ raylib.mStartAutomationEventRecording();
+}
+
+/// Stop recording automation events
+pub fn StopAutomationEventRecording() void {
+ raylib.mStopAutomationEventRecording();
+}
+
+/// Play a recorded automation event
+pub fn PlayAutomationEvent(
+ event: AutomationEvent,
+) void {
+ raylib.mPlayAutomationEvent(
+ @as([*c]raylib.AutomationEvent, @ptrFromInt(@intFromPtr(&event))),
+ );
+}
+
+/// Check if a key has been pressed once
+pub fn IsKeyPressed(
+ key: KeyboardKey,
+) bool {
+ return raylib.mIsKeyPressed(
+ @intFromEnum(key),
+ );
+}
+
+/// Check if a key has been pressed again (Only PLATFORM_DESKTOP)
+pub fn IsKeyPressedRepeat(
+ key: i32,
+) bool {
+ return raylib.mIsKeyPressedRepeat(
+ key,
+ );
+}
+
+/// Check if a key is being pressed
+pub fn IsKeyDown(
+ key: KeyboardKey,
+) bool {
+ return raylib.mIsKeyDown(
+ @intFromEnum(key),
+ );
+}
+
+/// Check if a key has been released once
+pub fn IsKeyReleased(
+ key: KeyboardKey,
+) bool {
+ return raylib.mIsKeyReleased(
+ @intFromEnum(key),
+ );
+}
+
+/// Check if a key is NOT being pressed
+pub fn IsKeyUp(
+ key: KeyboardKey,
+) bool {
+ return raylib.mIsKeyUp(
+ @intFromEnum(key),
+ );
+}
+
+/// Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty
+pub fn GetKeyPressed() i32 {
+ return raylib.mGetKeyPressed();
+}
+
+/// Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty
+pub fn GetCharPressed() i32 {
+ return raylib.mGetCharPressed();
+}
+
+/// Set a custom key to exit program (default is ESC)
+pub fn SetExitKey(
+ key: KeyboardKey,
+) void {
+ raylib.mSetExitKey(
+ @intFromEnum(key),
+ );
+}
+
+/// Check if a gamepad is available
+pub fn IsGamepadAvailable(
+ gamepad: i32,
+) bool {
+ return raylib.mIsGamepadAvailable(
+ gamepad,
+ );
+}
+
+/// Get gamepad internal name id
+pub fn GetGamepadName(
+ gamepad: i32,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mGetGamepadName(
+ gamepad,
+ )),
+ );
+}
+
+/// Check if a gamepad button has been pressed once
+pub fn IsGamepadButtonPressed(
+ gamepad: i32,
+ button: GamepadButton,
+) bool {
+ return raylib.mIsGamepadButtonPressed(
+ gamepad,
+ @intFromEnum(button),
+ );
+}
+
+/// Check if a gamepad button is being pressed
+pub fn IsGamepadButtonDown(
+ gamepad: i32,
+ button: GamepadButton,
+) bool {
+ return raylib.mIsGamepadButtonDown(
+ gamepad,
+ @intFromEnum(button),
+ );
+}
+
+/// Check if a gamepad button has been released once
+pub fn IsGamepadButtonReleased(
+ gamepad: i32,
+ button: GamepadButton,
+) bool {
+ return raylib.mIsGamepadButtonReleased(
+ gamepad,
+ @intFromEnum(button),
+ );
+}
+
+/// Check if a gamepad button is NOT being pressed
+pub fn IsGamepadButtonUp(
+ gamepad: i32,
+ button: GamepadButton,
+) bool {
+ return raylib.mIsGamepadButtonUp(
+ gamepad,
+ @intFromEnum(button),
+ );
+}
+
+/// Get gamepad axis count for a gamepad
+pub fn GetGamepadAxisCount(
+ gamepad: i32,
+) i32 {
+ return raylib.mGetGamepadAxisCount(
+ gamepad,
+ );
+}
+
+/// Get axis movement value for a gamepad axis
+pub fn GetGamepadAxisMovement(
+ gamepad: i32,
+ axis: GamepadAxis,
+) f32 {
+ return raylib.mGetGamepadAxisMovement(
+ gamepad,
+ @intFromEnum(axis),
+ );
+}
+
+/// Set internal gamepad mappings (SDL_GameControllerDB)
+pub fn SetGamepadMappings(
+ mappings: [*:0]const u8,
+) i32 {
+ return raylib.mSetGamepadMappings(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(mappings))),
+ );
+}
+
+/// Check if a mouse button has been pressed once
+pub fn IsMouseButtonPressed(
+ button: MouseButton,
+) bool {
+ return raylib.mIsMouseButtonPressed(
+ @intFromEnum(button),
+ );
+}
+
+/// Check if a mouse button is being pressed
+pub fn IsMouseButtonDown(
+ button: MouseButton,
+) bool {
+ return raylib.mIsMouseButtonDown(
+ @intFromEnum(button),
+ );
+}
+
+/// Check if a mouse button has been released once
+pub fn IsMouseButtonReleased(
+ button: MouseButton,
+) bool {
+ return raylib.mIsMouseButtonReleased(
+ @intFromEnum(button),
+ );
+}
+
+/// Check if a mouse button is NOT being pressed
+pub fn IsMouseButtonUp(
+ button: MouseButton,
+) bool {
+ return raylib.mIsMouseButtonUp(
+ @intFromEnum(button),
+ );
+}
+
+/// Get mouse position X
+pub fn GetMouseX() i32 {
+ return raylib.mGetMouseX();
+}
+
+/// Get mouse position Y
+pub fn GetMouseY() i32 {
+ return raylib.mGetMouseY();
+}
+
+/// Get mouse position XY
+pub fn GetMousePosition() Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetMousePosition(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Get mouse delta between frames
+pub fn GetMouseDelta() Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetMouseDelta(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Set mouse position XY
+pub fn SetMousePosition(
+ x: i32,
+ y: i32,
+) void {
+ raylib.mSetMousePosition(
+ x,
+ y,
+ );
+}
+
+/// Set mouse offset
+pub fn SetMouseOffset(
+ offsetX: i32,
+ offsetY: i32,
+) void {
+ raylib.mSetMouseOffset(
+ offsetX,
+ offsetY,
+ );
+}
+
+/// Set mouse scaling
+pub fn SetMouseScale(
+ scaleX: f32,
+ scaleY: f32,
+) void {
+ raylib.mSetMouseScale(
+ scaleX,
+ scaleY,
+ );
+}
+
+/// Get mouse wheel movement for X or Y, whichever is larger
+pub fn GetMouseWheelMove() f32 {
+ return raylib.mGetMouseWheelMove();
+}
+
+/// Get mouse wheel movement for both X and Y
+pub fn GetMouseWheelMoveV() Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetMouseWheelMoveV(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Set mouse cursor
+pub fn SetMouseCursor(
+ cursor: MouseCursor,
+) void {
+ raylib.mSetMouseCursor(
+ @intFromEnum(cursor),
+ );
+}
+
+/// Get touch position X for touch point 0 (relative to screen size)
+pub fn GetTouchX() i32 {
+ return raylib.mGetTouchX();
+}
+
+/// Get touch position Y for touch point 0 (relative to screen size)
+pub fn GetTouchY() i32 {
+ return raylib.mGetTouchY();
+}
+
+/// Get touch position XY for a touch point index (relative to screen size)
+pub fn GetTouchPosition(
+ index: i32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetTouchPosition(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ index,
+ );
+ return out;
+}
+
+/// Get touch point identifier for given index
+pub fn GetTouchPointId(
+ index: i32,
+) i32 {
+ return raylib.mGetTouchPointId(
+ index,
+ );
+}
+
+/// Get number of touch points
+pub fn GetTouchPointCount() i32 {
+ return raylib.mGetTouchPointCount();
+}
+
+/// Enable a set of gestures using flags
+pub fn SetGesturesEnabled(
+ flags: u32,
+) void {
+ raylib.mSetGesturesEnabled(
+ flags,
+ );
+}
+
+/// Check if a gesture have been detected
+pub fn IsGestureDetected(
+ gesture: u32,
+) bool {
+ return raylib.mIsGestureDetected(
+ gesture,
+ );
+}
+
+/// Get latest detected gesture
+pub fn GetGestureDetected() i32 {
+ return raylib.mGetGestureDetected();
+}
+
+/// Get gesture hold time in milliseconds
+pub fn GetGestureHoldDuration() f32 {
+ return raylib.mGetGestureHoldDuration();
+}
+
+/// Get gesture drag vector
+pub fn GetGestureDragVector() Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetGestureDragVector(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Get gesture drag angle
+pub fn GetGestureDragAngle() f32 {
+ return raylib.mGetGestureDragAngle();
+}
+
+/// Get gesture pinch delta
+pub fn GetGesturePinchVector() Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetGesturePinchVector(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Get gesture pinch angle
+pub fn GetGesturePinchAngle() f32 {
+ return raylib.mGetGesturePinchAngle();
+}
+
+/// Update camera position for selected mode
+pub fn UpdateCamera(
+ camera: *Camera3D,
+ mode: CameraMode,
+) void {
+ raylib.mUpdateCamera(
+ @as([*c]raylib.Camera3D, @ptrFromInt(@intFromPtr(camera))),
+ @intFromEnum(mode),
+ );
+}
+
+/// Update camera movement/rotation
+pub fn UpdateCameraPro(
+ camera: ?[*]Camera3D,
+ movement: Vector3,
+ rotation: Vector3,
+ zoom: f32,
+) void {
+ raylib.mUpdateCameraPro(
+ @as([*c]raylib.Camera3D, @ptrFromInt(@intFromPtr(camera))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&movement))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&rotation))),
+ zoom,
+ );
+}
+
+/// Set texture and rectangle to be used on shapes drawing
+pub fn SetShapesTexture(
+ texture: Texture2D,
+ source: Rectangle,
+) void {
+ raylib.mSetShapesTexture(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&source))),
+ );
+}
+
+/// Get texture that is used for shapes drawing
+pub fn GetShapesTexture() Texture2D {
+ var out: Texture2D = undefined;
+ raylib.mGetShapesTexture(
+ @as([*c]raylib.Texture2D, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Get texture source rectangle that is used for shapes drawing
+pub fn GetShapesTextureRectangle() Rectangle {
+ var out: Rectangle = undefined;
+ raylib.mGetShapesTextureRectangle(
+ @as([*c]raylib.Rectangle, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Draw a pixel
+pub fn DrawPixel(
+ posX: i32,
+ posY: i32,
+ color: Color,
+) void {
+ raylib.mDrawPixel(
+ posX,
+ posY,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a pixel (Vector version)
+pub fn DrawPixelV(
+ position: Vector2,
+ color: Color,
+) void {
+ raylib.mDrawPixelV(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a line
+pub fn DrawLine(
+ startPosX: i32,
+ startPosY: i32,
+ endPosX: i32,
+ endPosY: i32,
+ color: Color,
+) void {
+ raylib.mDrawLine(
+ startPosX,
+ startPosY,
+ endPosX,
+ endPosY,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a line (using gl lines)
+pub fn DrawLineV(
+ startPos: Vector2,
+ endPos: Vector2,
+ color: Color,
+) void {
+ raylib.mDrawLineV(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&startPos))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&endPos))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a line (using triangles/quads)
+pub fn DrawLineEx(
+ startPos: Vector2,
+ endPos: Vector2,
+ thick: f32,
+ color: Color,
+) void {
+ raylib.mDrawLineEx(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&startPos))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&endPos))),
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw lines sequence (using gl lines)
+pub fn DrawLineStrip(
+ points: ?[*]Vector2,
+ pointCount: i32,
+ color: Color,
+) void {
+ raylib.mDrawLineStrip(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(points))),
+ pointCount,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw line segment cubic-bezier in-out interpolation
+pub fn DrawLineBezier(
+ startPos: Vector2,
+ endPos: Vector2,
+ thick: f32,
+ color: Color,
+) void {
+ raylib.mDrawLineBezier(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&startPos))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&endPos))),
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a color-filled circle
+pub fn DrawCircle(
+ centerX: i32,
+ centerY: i32,
+ radius: f32,
+ color: Color,
+) void {
+ raylib.mDrawCircle(
+ centerX,
+ centerY,
+ radius,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a piece of a circle
+pub fn DrawCircleSector(
+ center: Vector2,
+ radius: f32,
+ startAngle: f32,
+ endAngle: f32,
+ segments: i32,
+ color: Color,
+) void {
+ raylib.mDrawCircleSector(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ radius,
+ startAngle,
+ endAngle,
+ segments,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw circle sector outline
+pub fn DrawCircleSectorLines(
+ center: Vector2,
+ radius: f32,
+ startAngle: f32,
+ endAngle: f32,
+ segments: i32,
+ color: Color,
+) void {
+ raylib.mDrawCircleSectorLines(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ radius,
+ startAngle,
+ endAngle,
+ segments,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a gradient-filled circle
+pub fn DrawCircleGradient(
+ centerX: i32,
+ centerY: i32,
+ radius: f32,
+ color1: Color,
+ color2: Color,
+) void {
+ raylib.mDrawCircleGradient(
+ centerX,
+ centerY,
+ radius,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color1))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color2))),
+ );
+}
+
+/// Draw a color-filled circle (Vector version)
+pub fn DrawCircleV(
+ center: Vector2,
+ radius: f32,
+ color: Color,
+) void {
+ raylib.mDrawCircleV(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ radius,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw circle outline
+pub fn DrawCircleLines(
+ centerX: i32,
+ centerY: i32,
+ radius: f32,
+ color: Color,
+) void {
+ raylib.mDrawCircleLines(
+ centerX,
+ centerY,
+ radius,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw circle outline (Vector version)
+pub fn DrawCircleLinesV(
+ center: Vector2,
+ radius: f32,
+ color: Color,
+) void {
+ raylib.mDrawCircleLinesV(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ radius,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw ellipse
+pub fn DrawEllipse(
+ centerX: i32,
+ centerY: i32,
+ radiusH: f32,
+ radiusV: f32,
+ color: Color,
+) void {
+ raylib.mDrawEllipse(
+ centerX,
+ centerY,
+ radiusH,
+ radiusV,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw ellipse outline
+pub fn DrawEllipseLines(
+ centerX: i32,
+ centerY: i32,
+ radiusH: f32,
+ radiusV: f32,
+ color: Color,
+) void {
+ raylib.mDrawEllipseLines(
+ centerX,
+ centerY,
+ radiusH,
+ radiusV,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw ring
+pub fn DrawRing(
+ center: Vector2,
+ innerRadius: f32,
+ outerRadius: f32,
+ startAngle: f32,
+ endAngle: f32,
+ segments: i32,
+ color: Color,
+) void {
+ raylib.mDrawRing(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ innerRadius,
+ outerRadius,
+ startAngle,
+ endAngle,
+ segments,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw ring outline
+pub fn DrawRingLines(
+ center: Vector2,
+ innerRadius: f32,
+ outerRadius: f32,
+ startAngle: f32,
+ endAngle: f32,
+ segments: i32,
+ color: Color,
+) void {
+ raylib.mDrawRingLines(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ innerRadius,
+ outerRadius,
+ startAngle,
+ endAngle,
+ segments,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a color-filled rectangle
+pub fn DrawRectangle(
+ posX: i32,
+ posY: i32,
+ width: i32,
+ height: i32,
+ color: Color,
+) void {
+ raylib.mDrawRectangle(
+ posX,
+ posY,
+ width,
+ height,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a color-filled rectangle (Vector version)
+pub fn DrawRectangleV(
+ position: Vector2,
+ size: Vector2,
+ color: Color,
+) void {
+ raylib.mDrawRectangleV(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&size))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a color-filled rectangle
+pub fn DrawRectangleRec(
+ rec: Rectangle,
+ color: Color,
+) void {
+ raylib.mDrawRectangleRec(
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a color-filled rectangle with pro parameters
+pub fn DrawRectanglePro(
+ rec: Rectangle,
+ origin: Vector2,
+ rotation: f32,
+ color: Color,
+) void {
+ raylib.mDrawRectanglePro(
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&origin))),
+ rotation,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a vertical-gradient-filled rectangle
+pub fn DrawRectangleGradientV(
+ posX: i32,
+ posY: i32,
+ width: i32,
+ height: i32,
+ color1: Color,
+ color2: Color,
+) void {
+ raylib.mDrawRectangleGradientV(
+ posX,
+ posY,
+ width,
+ height,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color1))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color2))),
+ );
+}
+
+/// Draw a horizontal-gradient-filled rectangle
+pub fn DrawRectangleGradientH(
+ posX: i32,
+ posY: i32,
+ width: i32,
+ height: i32,
+ color1: Color,
+ color2: Color,
+) void {
+ raylib.mDrawRectangleGradientH(
+ posX,
+ posY,
+ width,
+ height,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color1))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color2))),
+ );
+}
+
+/// Draw a gradient-filled rectangle with custom vertex colors
+pub fn DrawRectangleGradientEx(
+ rec: Rectangle,
+ col1: Color,
+ col2: Color,
+ col3: Color,
+ col4: Color,
+) void {
+ raylib.mDrawRectangleGradientEx(
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&col1))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&col2))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&col3))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&col4))),
+ );
+}
+
+/// Draw rectangle outline
+pub fn DrawRectangleLines(
+ posX: i32,
+ posY: i32,
+ width: i32,
+ height: i32,
+ color: Color,
+) void {
+ raylib.mDrawRectangleLines(
+ posX,
+ posY,
+ width,
+ height,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw rectangle outline with extended parameters
+pub fn DrawRectangleLinesEx(
+ rec: Rectangle,
+ lineThick: f32,
+ color: Color,
+) void {
+ raylib.mDrawRectangleLinesEx(
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec))),
+ lineThick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw rectangle with rounded edges
+pub fn DrawRectangleRounded(
+ rec: Rectangle,
+ roundness: f32,
+ segments: i32,
+ color: Color,
+) void {
+ raylib.mDrawRectangleRounded(
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec))),
+ roundness,
+ segments,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw rectangle with rounded edges outline
+pub fn DrawRectangleRoundedLines(
+ rec: Rectangle,
+ roundness: f32,
+ segments: i32,
+ lineThick: f32,
+ color: Color,
+) void {
+ raylib.mDrawRectangleRoundedLines(
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec))),
+ roundness,
+ segments,
+ lineThick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a color-filled triangle (vertex in counter-clockwise order!)
+pub fn DrawTriangle(
+ v1: Vector2,
+ v2: Vector2,
+ v3: Vector2,
+ color: Color,
+) void {
+ raylib.mDrawTriangle(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v3))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw triangle outline (vertex in counter-clockwise order!)
+pub fn DrawTriangleLines(
+ v1: Vector2,
+ v2: Vector2,
+ v3: Vector2,
+ color: Color,
+) void {
+ raylib.mDrawTriangleLines(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v3))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a triangle fan defined by points (first vertex is the center)
+pub fn DrawTriangleFan(
+ points: ?[*]Vector2,
+ pointCount: i32,
+ color: Color,
+) void {
+ raylib.mDrawTriangleFan(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(points))),
+ pointCount,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a triangle strip defined by points
+pub fn DrawTriangleStrip(
+ points: ?[*]Vector2,
+ pointCount: i32,
+ color: Color,
+) void {
+ raylib.mDrawTriangleStrip(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(points))),
+ pointCount,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a regular polygon (Vector version)
+pub fn DrawPoly(
+ center: Vector2,
+ sides: i32,
+ radius: f32,
+ rotation: f32,
+ color: Color,
+) void {
+ raylib.mDrawPoly(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ sides,
+ radius,
+ rotation,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a polygon outline of n sides
+pub fn DrawPolyLines(
+ center: Vector2,
+ sides: i32,
+ radius: f32,
+ rotation: f32,
+ color: Color,
+) void {
+ raylib.mDrawPolyLines(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ sides,
+ radius,
+ rotation,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a polygon outline of n sides with extended parameters
+pub fn DrawPolyLinesEx(
+ center: Vector2,
+ sides: i32,
+ radius: f32,
+ rotation: f32,
+ lineThick: f32,
+ color: Color,
+) void {
+ raylib.mDrawPolyLinesEx(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ sides,
+ radius,
+ rotation,
+ lineThick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw spline: Linear, minimum 2 points
+pub fn DrawSplineLinear(
+ points: ?[*]Vector2,
+ pointCount: i32,
+ thick: f32,
+ color: Color,
+) void {
+ raylib.mDrawSplineLinear(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(points))),
+ pointCount,
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw spline: B-Spline, minimum 4 points
+pub fn DrawSplineBasis(
+ points: ?[*]Vector2,
+ pointCount: i32,
+ thick: f32,
+ color: Color,
+) void {
+ raylib.mDrawSplineBasis(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(points))),
+ pointCount,
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw spline: Catmull-Rom, minimum 4 points
+pub fn DrawSplineCatmullRom(
+ points: ?[*]Vector2,
+ pointCount: i32,
+ thick: f32,
+ color: Color,
+) void {
+ raylib.mDrawSplineCatmullRom(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(points))),
+ pointCount,
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]
+pub fn DrawSplineBezierQuadratic(
+ points: ?[*]Vector2,
+ pointCount: i32,
+ thick: f32,
+ color: Color,
+) void {
+ raylib.mDrawSplineBezierQuadratic(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(points))),
+ pointCount,
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]
+pub fn DrawSplineBezierCubic(
+ points: ?[*]Vector2,
+ pointCount: i32,
+ thick: f32,
+ color: Color,
+) void {
+ raylib.mDrawSplineBezierCubic(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(points))),
+ pointCount,
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw spline segment: Linear, 2 points
+pub fn DrawSplineSegmentLinear(
+ p1: Vector2,
+ p2: Vector2,
+ thick: f32,
+ color: Color,
+) void {
+ raylib.mDrawSplineSegmentLinear(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p2))),
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw spline segment: B-Spline, 4 points
+pub fn DrawSplineSegmentBasis(
+ p1: Vector2,
+ p2: Vector2,
+ p3: Vector2,
+ p4: Vector2,
+ thick: f32,
+ color: Color,
+) void {
+ raylib.mDrawSplineSegmentBasis(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p3))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p4))),
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw spline segment: Catmull-Rom, 4 points
+pub fn DrawSplineSegmentCatmullRom(
+ p1: Vector2,
+ p2: Vector2,
+ p3: Vector2,
+ p4: Vector2,
+ thick: f32,
+ color: Color,
+) void {
+ raylib.mDrawSplineSegmentCatmullRom(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p3))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p4))),
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw spline segment: Quadratic Bezier, 2 points, 1 control point
+pub fn DrawSplineSegmentBezierQuadratic(
+ p1: Vector2,
+ c2: Vector2,
+ p3: Vector2,
+ thick: f32,
+ color: Color,
+) void {
+ raylib.mDrawSplineSegmentBezierQuadratic(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&c2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p3))),
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw spline segment: Cubic Bezier, 2 points, 2 control points
+pub fn DrawSplineSegmentBezierCubic(
+ p1: Vector2,
+ c2: Vector2,
+ c3: Vector2,
+ p4: Vector2,
+ thick: f32,
+ color: Color,
+) void {
+ raylib.mDrawSplineSegmentBezierCubic(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&c2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&c3))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p4))),
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Get (evaluate) spline point: Linear
+pub fn GetSplinePointLinear(
+ startPos: Vector2,
+ endPos: Vector2,
+ t: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetSplinePointLinear(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&startPos))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&endPos))),
+ t,
+ );
+ return out;
+}
+
+/// Get (evaluate) spline point: B-Spline
+pub fn GetSplinePointBasis(
+ p1: Vector2,
+ p2: Vector2,
+ p3: Vector2,
+ p4: Vector2,
+ t: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetSplinePointBasis(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p3))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p4))),
+ t,
+ );
+ return out;
+}
+
+/// Get (evaluate) spline point: Catmull-Rom
+pub fn GetSplinePointCatmullRom(
+ p1: Vector2,
+ p2: Vector2,
+ p3: Vector2,
+ p4: Vector2,
+ t: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetSplinePointCatmullRom(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p3))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p4))),
+ t,
+ );
+ return out;
+}
+
+/// Get (evaluate) spline point: Quadratic Bezier
+pub fn GetSplinePointBezierQuad(
+ p1: Vector2,
+ c2: Vector2,
+ p3: Vector2,
+ t: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetSplinePointBezierQuad(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&c2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p3))),
+ t,
+ );
+ return out;
+}
+
+/// Get (evaluate) spline point: Cubic Bezier
+pub fn GetSplinePointBezierCubic(
+ p1: Vector2,
+ c2: Vector2,
+ c3: Vector2,
+ p4: Vector2,
+ t: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mGetSplinePointBezierCubic(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&c2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&c3))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p4))),
+ t,
+ );
+ return out;
+}
+
+/// Check collision between two rectangles
+pub fn CheckCollisionRecs(
+ rec1: Rectangle,
+ rec2: Rectangle,
+) bool {
+ return raylib.mCheckCollisionRecs(
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec1))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec2))),
+ );
+}
+
+/// Check collision between two circles
+pub fn CheckCollisionCircles(
+ center1: Vector2,
+ radius1: f32,
+ center2: Vector2,
+ radius2: f32,
+) bool {
+ return raylib.mCheckCollisionCircles(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er1))),
+ radius1,
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er2))),
+ radius2,
+ );
+}
+
+/// Check collision between circle and rectangle
+pub fn CheckCollisionCircleRec(
+ center: Vector2,
+ radius: f32,
+ rec: Rectangle,
+) bool {
+ return raylib.mCheckCollisionCircleRec(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ radius,
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec))),
+ );
+}
+
+/// Check if point is inside rectangle
+pub fn CheckCollisionPointRec(
+ point: Vector2,
+ rec: Rectangle,
+) bool {
+ return raylib.mCheckCollisionPointRec(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&point))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec))),
+ );
+}
+
+/// Check if point is inside circle
+pub fn CheckCollisionPointCircle(
+ point: Vector2,
+ center: Vector2,
+ radius: f32,
+) bool {
+ return raylib.mCheckCollisionPointCircle(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&point))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ radius,
+ );
+}
+
+/// Check if point is inside a triangle
+pub fn CheckCollisionPointTriangle(
+ point: Vector2,
+ p1: Vector2,
+ p2: Vector2,
+ p3: Vector2,
+) bool {
+ return raylib.mCheckCollisionPointTriangle(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&point))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p3))),
+ );
+}
+
+/// Check if point is within a polygon described by array of vertices
+pub fn CheckCollisionPointPoly(
+ point: Vector2,
+ points: ?[*]Vector2,
+ pointCount: i32,
+) bool {
+ return raylib.mCheckCollisionPointPoly(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&point))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(points))),
+ pointCount,
+ );
+}
+
+/// Check the collision between two lines defined by two points each, returns collision point by reference
+pub fn CheckCollisionLines(
+ startPos1: Vector2,
+ endPos1: Vector2,
+ startPos2: Vector2,
+ endPos2: Vector2,
+ collisionPoint: ?[*]Vector2,
+) bool {
+ return raylib.mCheckCollisionLines(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&startPos1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&endPos1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&startPos2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&endPos2))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(collisionPoint))),
+ );
+}
+
+/// Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold]
+pub fn CheckCollisionPointLine(
+ point: Vector2,
+ p1: Vector2,
+ p2: Vector2,
+ threshold: i32,
+) bool {
+ return raylib.mCheckCollisionPointLine(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&point))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p2))),
+ threshold,
+ );
+}
+
+/// Get collision rectangle for two rectangles collision
+pub fn GetCollisionRec(
+ rec1: Rectangle,
+ rec2: Rectangle,
+) Rectangle {
+ var out: Rectangle = undefined;
+ raylib.mGetCollisionRec(
+ @as([*c]raylib.Rectangle, @ptrCast(&out)),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec1))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec2))),
+ );
+ return out;
+}
+
+/// Load image from file into CPU memory (RAM)
+pub fn LoadImage(
+ fileName: [*:0]const u8,
+) Image {
+ var out: Image = undefined;
+ raylib.mLoadImage(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+ return out;
+}
+
+/// Load image from RAW file data
+pub fn LoadImageRaw(
+ fileName: [*:0]const u8,
+ width: i32,
+ height: i32,
+ format: i32,
+ headerSize: i32,
+) Image {
+ var out: Image = undefined;
+ raylib.mLoadImageRaw(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ width,
+ height,
+ format,
+ headerSize,
+ );
+ return out;
+}
+
+/// Load image from SVG file data or string with specified size
+pub fn LoadImageSvg(
+ fileNameOrString: [*:0]const u8,
+ width: i32,
+ height: i32,
+) Image {
+ var out: Image = undefined;
+ raylib.mLoadImageSvg(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileNameOrString))),
+ width,
+ height,
+ );
+ return out;
+}
+
+/// Load image sequence from file (frames appended to image.data)
+pub fn LoadImageAnim(
+ fileName: [*:0]const u8,
+ frames: ?[*]i32,
+) Image {
+ var out: Image = undefined;
+ raylib.mLoadImageAnim(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ @as([*c]i32, @ptrCast(frames)),
+ );
+ return out;
+}
+
+/// Load image sequence from memory buffer
+pub fn LoadImageAnimFromMemory(
+ fileType: [*:0]const u8,
+ fileData: [*:0]const u8,
+ dataSize: i32,
+ frames: ?[*]i32,
+) Image {
+ var out: Image = undefined;
+ raylib.mLoadImageAnimFromMemory(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileType))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileData))),
+ dataSize,
+ @as([*c]i32, @ptrCast(frames)),
+ );
+ return out;
+}
+
+/// Load image from memory buffer, fileType refers to extension: i.e. '.png'
+pub fn LoadImageFromMemory(
+ fileType: [*:0]const u8,
+ fileData: [*:0]const u8,
+ dataSize: i32,
+) Image {
+ var out: Image = undefined;
+ raylib.mLoadImageFromMemory(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileType))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileData))),
+ dataSize,
+ );
+ return out;
+}
+
+/// Load image from GPU texture data
+pub fn LoadImageFromTexture(
+ texture: Texture2D,
+) Image {
+ var out: Image = undefined;
+ raylib.mLoadImageFromTexture(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ );
+ return out;
+}
+
+/// Load image from screen buffer and (screenshot)
+pub fn LoadImageFromScreen() Image {
+ var out: Image = undefined;
+ raylib.mLoadImageFromScreen(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Check if an image is ready
+pub fn IsImageReady(
+ image: Image,
+) bool {
+ return raylib.mIsImageReady(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ );
+}
+
+/// Unload image from CPU memory (RAM)
+pub fn UnloadImage(
+ image: Image,
+) void {
+ raylib.mUnloadImage(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ );
+}
+
+/// Export image data to file, returns true on success
+pub fn ExportImage(
+ image: Image,
+ fileName: [*:0]const u8,
+) bool {
+ return raylib.mExportImage(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Export image to memory buffer
+pub fn ExportImageToMemory(
+ image: Image,
+ fileType: [*:0]const u8,
+ fileSize: ?[*]i32,
+) [*:0]const u8 {
+ return @as(
+ ?[*]u8,
+ @ptrCast(raylib.mExportImageToMemory(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileType))),
+ @as([*c]i32, @ptrCast(fileSize)),
+ )),
+ );
+}
+
+/// Export image as code file defining an array of bytes, returns true on success
+pub fn ExportImageAsCode(
+ image: Image,
+ fileName: [*:0]const u8,
+) bool {
+ return raylib.mExportImageAsCode(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Generate image: plain color
+pub fn GenImageColor(
+ width: i32,
+ height: i32,
+ color: Color,
+) Image {
+ var out: Image = undefined;
+ raylib.mGenImageColor(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ width,
+ height,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+ return out;
+}
+
+/// Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient
+pub fn GenImageGradientLinear(
+ width: i32,
+ height: i32,
+ direction: i32,
+ start: Color,
+ end: Color,
+) Image {
+ var out: Image = undefined;
+ raylib.mGenImageGradientLinear(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ width,
+ height,
+ direction,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&start))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&end))),
+ );
+ return out;
+}
+
+/// Generate image: radial gradient
+pub fn GenImageGradientRadial(
+ width: i32,
+ height: i32,
+ density: f32,
+ inner: Color,
+ outer: Color,
+) Image {
+ var out: Image = undefined;
+ raylib.mGenImageGradientRadial(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ width,
+ height,
+ density,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&inner))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&outer))),
+ );
+ return out;
+}
+
+/// Generate image: square gradient
+pub fn GenImageGradientSquare(
+ width: i32,
+ height: i32,
+ density: f32,
+ inner: Color,
+ outer: Color,
+) Image {
+ var out: Image = undefined;
+ raylib.mGenImageGradientSquare(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ width,
+ height,
+ density,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&inner))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&outer))),
+ );
+ return out;
+}
+
+/// Generate image: checked
+pub fn GenImageChecked(
+ width: i32,
+ height: i32,
+ checksX: i32,
+ checksY: i32,
+ col1: Color,
+ col2: Color,
+) Image {
+ var out: Image = undefined;
+ raylib.mGenImageChecked(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ width,
+ height,
+ checksX,
+ checksY,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&col1))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&col2))),
+ );
+ return out;
+}
+
+/// Generate image: white noise
+pub fn GenImageWhiteNoise(
+ width: i32,
+ height: i32,
+ factor: f32,
+) Image {
+ var out: Image = undefined;
+ raylib.mGenImageWhiteNoise(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ width,
+ height,
+ factor,
+ );
+ return out;
+}
+
+/// Generate image: perlin noise
+pub fn GenImagePerlinNoise(
+ width: i32,
+ height: i32,
+ offsetX: i32,
+ offsetY: i32,
+ scale: f32,
+) Image {
+ var out: Image = undefined;
+ raylib.mGenImagePerlinNoise(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ width,
+ height,
+ offsetX,
+ offsetY,
+ scale,
+ );
+ return out;
+}
+
+/// Generate image: cellular algorithm, bigger tileSize means bigger cells
+pub fn GenImageCellular(
+ width: i32,
+ height: i32,
+ tileSize: i32,
+) Image {
+ var out: Image = undefined;
+ raylib.mGenImageCellular(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ width,
+ height,
+ tileSize,
+ );
+ return out;
+}
+
+/// Generate image: grayscale image from text data
+pub fn GenImageText(
+ width: i32,
+ height: i32,
+ text: [*:0]const u8,
+) Image {
+ var out: Image = undefined;
+ raylib.mGenImageText(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ width,
+ height,
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ );
+ return out;
+}
+
+/// Create an image duplicate (useful for transformations)
+pub fn ImageCopy(
+ image: Image,
+) Image {
+ var out: Image = undefined;
+ raylib.mImageCopy(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ );
+ return out;
+}
+
+/// Create an image from another image piece
+pub fn ImageFromImage(
+ image: Image,
+ rec: Rectangle,
+) Image {
+ var out: Image = undefined;
+ raylib.mImageFromImage(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec))),
+ );
+ return out;
+}
+
+/// Create an image from text (default font)
+pub fn ImageText(
+ text: [*:0]const u8,
+ fontSize: i32,
+ color: Color,
+) Image {
+ var out: Image = undefined;
+ raylib.mImageText(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ fontSize,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+ return out;
+}
+
+/// Create an image from text (custom sprite font)
+pub fn ImageTextEx(
+ font: Font,
+ text: [*:0]const u8,
+ fontSize: f32,
+ spacing: f32,
+ tint: Color,
+) Image {
+ var out: Image = undefined;
+ raylib.mImageTextEx(
+ @as([*c]raylib.Image, @ptrCast(&out)),
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ fontSize,
+ spacing,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+ return out;
+}
+
+/// Convert image data to desired format
+pub fn ImageFormat(
+ image: *Image,
+ newFormat: i32,
+) void {
+ raylib.mImageFormat(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ newFormat,
+ );
+}
+
+/// Convert image to POT (power-of-two)
+pub fn ImageToPOT(
+ image: *Image,
+ fill: Color,
+) void {
+ raylib.mImageToPOT(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&fill))),
+ );
+}
+
+/// Crop an image to a defined rectangle
+pub fn ImageCrop(
+ image: *Image,
+ crop: Rectangle,
+) void {
+ raylib.mImageCrop(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&crop))),
+ );
+}
+
+/// Crop image depending on alpha value
+pub fn ImageAlphaCrop(
+ image: *Image,
+ threshold: f32,
+) void {
+ raylib.mImageAlphaCrop(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ threshold,
+ );
+}
+
+/// Clear alpha channel to desired color
+pub fn ImageAlphaClear(
+ image: *Image,
+ color: Color,
+ threshold: f32,
+) void {
+ raylib.mImageAlphaClear(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ threshold,
+ );
+}
+
+/// Apply alpha mask to image
+pub fn ImageAlphaMask(
+ image: *Image,
+ alphaMask: Image,
+) void {
+ raylib.mImageAlphaMask(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&alphaMask))),
+ );
+}
+
+/// Premultiply alpha channel
+pub fn ImageAlphaPremultiply(
+ image: *Image,
+) void {
+ raylib.mImageAlphaPremultiply(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ );
+}
+
+/// Apply Gaussian blur using a box blur approximation
+pub fn ImageBlurGaussian(
+ image: *Image,
+ blurSize: i32,
+) void {
+ raylib.mImageBlurGaussian(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ blurSize,
+ );
+}
+
+/// Apply Custom Square image convolution kernel
+pub fn ImageKernelConvolution(
+ image: *Image,
+ kernel: ?[*]f32,
+ kernelSize: i32,
+) void {
+ raylib.mImageKernelConvolution(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ @as([*c]f32, @ptrCast(kernel)),
+ kernelSize,
+ );
+}
+
+/// Resize image (Bicubic scaling algorithm)
+pub fn ImageResize(
+ image: *Image,
+ newWidth: i32,
+ newHeight: i32,
+) void {
+ raylib.mImageResize(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ newWidth,
+ newHeight,
+ );
+}
+
+/// Resize image (Nearest-Neighbor scaling algorithm)
+pub fn ImageResizeNN(
+ image: *Image,
+ newWidth: i32,
+ newHeight: i32,
+) void {
+ raylib.mImageResizeNN(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ newWidth,
+ newHeight,
+ );
+}
+
+/// Resize canvas and fill with color
+pub fn ImageResizeCanvas(
+ image: *Image,
+ newWidth: i32,
+ newHeight: i32,
+ offsetX: i32,
+ offsetY: i32,
+ fill: Color,
+) void {
+ raylib.mImageResizeCanvas(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ newWidth,
+ newHeight,
+ offsetX,
+ offsetY,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&fill))),
+ );
+}
+
+/// Compute all mipmap levels for a provided image
+pub fn ImageMipmaps(
+ image: *Image,
+) void {
+ raylib.mImageMipmaps(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ );
+}
+
+/// Dither image data to 16bpp or lower (Floyd-Steinberg dithering)
+pub fn ImageDither(
+ image: *Image,
+ rBpp: i32,
+ gBpp: i32,
+ bBpp: i32,
+ aBpp: i32,
+) void {
+ raylib.mImageDither(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ rBpp,
+ gBpp,
+ bBpp,
+ aBpp,
+ );
+}
+
+/// Flip image vertically
+pub fn ImageFlipVertical(
+ image: *Image,
+) void {
+ raylib.mImageFlipVertical(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ );
+}
+
+/// Flip image horizontally
+pub fn ImageFlipHorizontal(
+ image: *Image,
+) void {
+ raylib.mImageFlipHorizontal(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ );
+}
+
+/// Rotate image by input angle in degrees (-359 to 359)
+pub fn ImageRotate(
+ image: *Image,
+ degrees: i32,
+) void {
+ raylib.mImageRotate(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ degrees,
+ );
+}
+
+/// Rotate image clockwise 90deg
+pub fn ImageRotateCW(
+ image: *Image,
+) void {
+ raylib.mImageRotateCW(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ );
+}
+
+/// Rotate image counter-clockwise 90deg
+pub fn ImageRotateCCW(
+ image: *Image,
+) void {
+ raylib.mImageRotateCCW(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ );
+}
+
+/// Modify image color: tint
+pub fn ImageColorTint(
+ image: *Image,
+ color: Color,
+) void {
+ raylib.mImageColorTint(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Modify image color: invert
+pub fn ImageColorInvert(
+ image: *Image,
+) void {
+ raylib.mImageColorInvert(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ );
+}
+
+/// Modify image color: grayscale
+pub fn ImageColorGrayscale(
+ image: *Image,
+) void {
+ raylib.mImageColorGrayscale(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ );
+}
+
+/// Modify image color: contrast (-100 to 100)
+pub fn ImageColorContrast(
+ image: *Image,
+ contrast: f32,
+) void {
+ raylib.mImageColorContrast(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ contrast,
+ );
+}
+
+/// Modify image color: brightness (-255 to 255)
+pub fn ImageColorBrightness(
+ image: *Image,
+ brightness: i32,
+) void {
+ raylib.mImageColorBrightness(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ brightness,
+ );
+}
+
+/// Modify image color: replace color
+pub fn ImageColorReplace(
+ image: *Image,
+ color: Color,
+ replace: Color,
+) void {
+ raylib.mImageColorReplace(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(image))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&replace))),
+ );
+}
+
+/// Load color data from image as a Color array (RGBA - 32bit)
+pub fn LoadImageColors(
+ image: Image,
+) ?[*]Color {
+ return @as(
+ ?[*]Color,
+ @ptrCast(raylib.mLoadImageColors(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ )),
+ );
+}
+
+/// Load colors palette from image as a Color array (RGBA - 32bit)
+pub fn LoadImagePalette(
+ image: Image,
+ maxPaletteSize: i32,
+ colorCount: ?[*]i32,
+) ?[*]Color {
+ return @as(
+ ?[*]Color,
+ @ptrCast(raylib.mLoadImagePalette(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ maxPaletteSize,
+ @as([*c]i32, @ptrCast(colorCount)),
+ )),
+ );
+}
+
+/// Unload color data loaded with LoadImageColors()
+pub fn UnloadImageColors(
+ colors: ?[*]Color,
+) void {
+ raylib.mUnloadImageColors(
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(colors))),
+ );
+}
+
+/// Unload colors palette loaded with LoadImagePalette()
+pub fn UnloadImagePalette(
+ colors: ?[*]Color,
+) void {
+ raylib.mUnloadImagePalette(
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(colors))),
+ );
+}
+
+/// Get image alpha border rectangle
+pub fn GetImageAlphaBorder(
+ image: Image,
+ threshold: f32,
+) Rectangle {
+ var out: Rectangle = undefined;
+ raylib.mGetImageAlphaBorder(
+ @as([*c]raylib.Rectangle, @ptrCast(&out)),
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ threshold,
+ );
+ return out;
+}
+
+/// Get image pixel color at (x, y) position
+pub fn GetImageColor(
+ image: Image,
+ x: i32,
+ y: i32,
+) Color {
+ var out: Color = undefined;
+ raylib.mGetImageColor(
+ @as([*c]raylib.Color, @ptrCast(&out)),
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ x,
+ y,
+ );
+ return out;
+}
+
+/// Clear image background with given color
+pub fn ImageClearBackground(
+ dst: *Image,
+ color: Color,
+) void {
+ raylib.mImageClearBackground(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw pixel within an image
+pub fn ImageDrawPixel(
+ dst: *Image,
+ posX: i32,
+ posY: i32,
+ color: Color,
+) void {
+ raylib.mImageDrawPixel(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ posX,
+ posY,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw pixel within an image (Vector version)
+pub fn ImageDrawPixelV(
+ dst: *Image,
+ position: Vector2,
+ color: Color,
+) void {
+ raylib.mImageDrawPixelV(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw line within an image
+pub fn ImageDrawLine(
+ dst: *Image,
+ startPosX: i32,
+ startPosY: i32,
+ endPosX: i32,
+ endPosY: i32,
+ color: Color,
+) void {
+ raylib.mImageDrawLine(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ startPosX,
+ startPosY,
+ endPosX,
+ endPosY,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw line within an image (Vector version)
+pub fn ImageDrawLineV(
+ dst: *Image,
+ start: Vector2,
+ end: Vector2,
+ color: Color,
+) void {
+ raylib.mImageDrawLineV(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&start))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&end))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a filled circle within an image
+pub fn ImageDrawCircle(
+ dst: *Image,
+ centerX: i32,
+ centerY: i32,
+ radius: i32,
+ color: Color,
+) void {
+ raylib.mImageDrawCircle(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ centerX,
+ centerY,
+ radius,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a filled circle within an image (Vector version)
+pub fn ImageDrawCircleV(
+ dst: *Image,
+ center: Vector2,
+ radius: i32,
+ color: Color,
+) void {
+ raylib.mImageDrawCircleV(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ radius,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw circle outline within an image
+pub fn ImageDrawCircleLines(
+ dst: *Image,
+ centerX: i32,
+ centerY: i32,
+ radius: i32,
+ color: Color,
+) void {
+ raylib.mImageDrawCircleLines(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ centerX,
+ centerY,
+ radius,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw circle outline within an image (Vector version)
+pub fn ImageDrawCircleLinesV(
+ dst: *Image,
+ center: Vector2,
+ radius: i32,
+ color: Color,
+) void {
+ raylib.mImageDrawCircleLinesV(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(¢er))),
+ radius,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw rectangle within an image
+pub fn ImageDrawRectangle(
+ dst: *Image,
+ posX: i32,
+ posY: i32,
+ width: i32,
+ height: i32,
+ color: Color,
+) void {
+ raylib.mImageDrawRectangle(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ posX,
+ posY,
+ width,
+ height,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw rectangle within an image (Vector version)
+pub fn ImageDrawRectangleV(
+ dst: *Image,
+ position: Vector2,
+ size: Vector2,
+ color: Color,
+) void {
+ raylib.mImageDrawRectangleV(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&size))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw rectangle within an image
+pub fn ImageDrawRectangleRec(
+ dst: *Image,
+ rec: Rectangle,
+ color: Color,
+) void {
+ raylib.mImageDrawRectangleRec(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw rectangle lines within an image
+pub fn ImageDrawRectangleLines(
+ dst: *Image,
+ rec: Rectangle,
+ thick: i32,
+ color: Color,
+) void {
+ raylib.mImageDrawRectangleLines(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec))),
+ thick,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a source image within a destination image (tint applied to source)
+pub fn ImageDraw(
+ dst: *Image,
+ src: Image,
+ srcRec: Rectangle,
+ dstRec: Rectangle,
+ tint: Color,
+) void {
+ raylib.mImageDraw(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&src))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&srcRec))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&dstRec))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw text (using default font) within an image (destination)
+pub fn ImageDrawText(
+ dst: *Image,
+ text: [*:0]const u8,
+ posX: i32,
+ posY: i32,
+ fontSize: i32,
+ color: Color,
+) void {
+ raylib.mImageDrawText(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ posX,
+ posY,
+ fontSize,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw text (custom sprite font) within an image (destination)
+pub fn ImageDrawTextEx(
+ dst: *Image,
+ font: Font,
+ text: [*:0]const u8,
+ position: Vector2,
+ fontSize: f32,
+ spacing: f32,
+ tint: Color,
+) void {
+ raylib.mImageDrawTextEx(
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(dst))),
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ fontSize,
+ spacing,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Load texture from file into GPU memory (VRAM)
+pub fn LoadTexture(
+ fileName: [*:0]const u8,
+) Texture2D {
+ var out: Texture2D = undefined;
+ raylib.mLoadTexture(
+ @as([*c]raylib.Texture2D, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+ return out;
+}
+
+/// Load texture from image data
+pub fn LoadTextureFromImage(
+ image: Image,
+) Texture2D {
+ var out: Texture2D = undefined;
+ raylib.mLoadTextureFromImage(
+ @as([*c]raylib.Texture2D, @ptrCast(&out)),
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ );
+ return out;
+}
+
+/// Load cubemap from image, multiple image cubemap layouts supported
+pub fn LoadTextureCubemap(
+ image: Image,
+ layout: i32,
+) Texture2D {
+ var out: Texture2D = undefined;
+ raylib.mLoadTextureCubemap(
+ @as([*c]raylib.Texture2D, @ptrCast(&out)),
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ layout,
+ );
+ return out;
+}
+
+/// Load texture for rendering (framebuffer)
+pub fn LoadRenderTexture(
+ width: i32,
+ height: i32,
+) RenderTexture2D {
+ var out: RenderTexture2D = undefined;
+ raylib.mLoadRenderTexture(
+ @as([*c]raylib.RenderTexture2D, @ptrCast(&out)),
+ width,
+ height,
+ );
+ return out;
+}
+
+/// Check if a texture is ready
+pub fn IsTextureReady(
+ texture: Texture2D,
+) bool {
+ return raylib.mIsTextureReady(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ );
+}
+
+/// Unload texture from GPU memory (VRAM)
+pub fn UnloadTexture(
+ texture: Texture2D,
+) void {
+ raylib.mUnloadTexture(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ );
+}
+
+/// Check if a render texture is ready
+pub fn IsRenderTextureReady(
+ target: RenderTexture2D,
+) bool {
+ return raylib.mIsRenderTextureReady(
+ @as([*c]raylib.RenderTexture2D, @ptrFromInt(@intFromPtr(&target))),
+ );
+}
+
+/// Unload render texture from GPU memory (VRAM)
+pub fn UnloadRenderTexture(
+ target: RenderTexture2D,
+) void {
+ raylib.mUnloadRenderTexture(
+ @as([*c]raylib.RenderTexture2D, @ptrFromInt(@intFromPtr(&target))),
+ );
+}
+
+/// Update GPU texture with new data
+pub fn UpdateTexture(
+ texture: Texture2D,
+ pixels: *const anyopaque,
+) void {
+ raylib.mUpdateTexture(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ pixels,
+ );
+}
+
+/// Update GPU texture rectangle with new data
+pub fn UpdateTextureRec(
+ texture: Texture2D,
+ rec: Rectangle,
+ pixels: *const anyopaque,
+) void {
+ raylib.mUpdateTextureRec(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&rec))),
+ pixels,
+ );
+}
+
+/// Set texture scaling filter mode
+pub fn SetTextureFilter(
+ texture: Texture2D,
+ filter: i32,
+) void {
+ raylib.mSetTextureFilter(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ filter,
+ );
+}
+
+/// Set texture wrapping mode
+pub fn SetTextureWrap(
+ texture: Texture2D,
+ wrap: i32,
+) void {
+ raylib.mSetTextureWrap(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ wrap,
+ );
+}
+
+/// Draw a Texture2D
+pub fn DrawTexture(
+ texture: Texture2D,
+ posX: i32,
+ posY: i32,
+ tint: Color,
+) void {
+ raylib.mDrawTexture(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ posX,
+ posY,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw a Texture2D with position defined as Vector2
+pub fn DrawTextureV(
+ texture: Texture2D,
+ position: Vector2,
+ tint: Color,
+) void {
+ raylib.mDrawTextureV(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw a Texture2D with extended parameters
+pub fn DrawTextureEx(
+ texture: Texture2D,
+ position: Vector2,
+ rotation: f32,
+ scale: f32,
+ tint: Color,
+) void {
+ raylib.mDrawTextureEx(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ rotation,
+ scale,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw a part of a texture defined by a rectangle
+pub fn DrawTextureRec(
+ texture: Texture2D,
+ source: Rectangle,
+ position: Vector2,
+ tint: Color,
+) void {
+ raylib.mDrawTextureRec(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&source))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw a part of a texture defined by a rectangle with 'pro' parameters
+pub fn DrawTexturePro(
+ texture: Texture2D,
+ source: Rectangle,
+ dest: Rectangle,
+ origin: Vector2,
+ rotation: f32,
+ tint: Color,
+) void {
+ raylib.mDrawTexturePro(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&source))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&dest))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&origin))),
+ rotation,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draws a texture (or part of it) that stretches or shrinks nicely
+pub fn DrawTextureNPatch(
+ texture: Texture2D,
+ nPatchInfo: NPatchInfo,
+ dest: Rectangle,
+ origin: Vector2,
+ rotation: f32,
+ tint: Color,
+) void {
+ raylib.mDrawTextureNPatch(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ @as([*c]raylib.NPatchInfo, @ptrFromInt(@intFromPtr(&nPatchInfo))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&dest))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&origin))),
+ rotation,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Get color with alpha applied, alpha goes from 0.0f to 1.0f
+pub fn Fade(
+ color: Color,
+ alpha: f32,
+) Color {
+ var out: Color = undefined;
+ raylib.mFade(
+ @as([*c]raylib.Color, @ptrCast(&out)),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ alpha,
+ );
+ return out;
+}
+
+/// Get hexadecimal value for a Color
+pub fn ColorToInt(
+ color: Color,
+) i32 {
+ return raylib.mColorToInt(
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Get Color normalized as float [0..1]
+pub fn ColorNormalize(
+ color: Color,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mColorNormalize(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+ return out;
+}
+
+/// Get Color from normalized values [0..1]
+pub fn ColorFromNormalized(
+ normalized: Vector4,
+) Color {
+ var out: Color = undefined;
+ raylib.mColorFromNormalized(
+ @as([*c]raylib.Color, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&normalized))),
+ );
+ return out;
+}
+
+/// Get HSV values for a Color, hue [0..360], saturation/value [0..1]
+pub fn ColorToHSV(
+ color: Color,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mColorToHSV(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+ return out;
+}
+
+/// Get a Color from HSV values, hue [0..360], saturation/value [0..1]
+pub fn ColorFromHSV(
+ hue: f32,
+ saturation: f32,
+ value: f32,
+) Color {
+ var out: Color = undefined;
+ raylib.mColorFromHSV(
+ @as([*c]raylib.Color, @ptrCast(&out)),
+ hue,
+ saturation,
+ value,
+ );
+ return out;
+}
+
+/// Get color multiplied with another color
+pub fn ColorTint(
+ color: Color,
+ tint: Color,
+) Color {
+ var out: Color = undefined;
+ raylib.mColorTint(
+ @as([*c]raylib.Color, @ptrCast(&out)),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+ return out;
+}
+
+/// Get color with brightness correction, brightness factor goes from -1.0f to 1.0f
+pub fn ColorBrightness(
+ color: Color,
+ factor: f32,
+) Color {
+ var out: Color = undefined;
+ raylib.mColorBrightness(
+ @as([*c]raylib.Color, @ptrCast(&out)),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ factor,
+ );
+ return out;
+}
+
+/// Get color with contrast correction, contrast values between -1.0f and 1.0f
+pub fn ColorContrast(
+ color: Color,
+ contrast: f32,
+) Color {
+ var out: Color = undefined;
+ raylib.mColorContrast(
+ @as([*c]raylib.Color, @ptrCast(&out)),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ contrast,
+ );
+ return out;
+}
+
+/// Get color with alpha applied, alpha goes from 0.0f to 1.0f
+pub fn ColorAlpha(
+ color: Color,
+ alpha: f32,
+) Color {
+ var out: Color = undefined;
+ raylib.mColorAlpha(
+ @as([*c]raylib.Color, @ptrCast(&out)),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ alpha,
+ );
+ return out;
+}
+
+/// Get src alpha-blended into dst color with tint
+pub fn ColorAlphaBlend(
+ dst: Color,
+ src: Color,
+ tint: Color,
+) Color {
+ var out: Color = undefined;
+ raylib.mColorAlphaBlend(
+ @as([*c]raylib.Color, @ptrCast(&out)),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&dst))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&src))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+ return out;
+}
+
+/// Get Color structure from hexadecimal value
+pub fn GetColor(
+ hexValue: u32,
+) Color {
+ var out: Color = undefined;
+ raylib.mGetColor(
+ @as([*c]raylib.Color, @ptrCast(&out)),
+ hexValue,
+ );
+ return out;
+}
+
+/// Get Color from a source pixel pointer of certain format
+pub fn GetPixelColor(
+ srcPtr: *anyopaque,
+ format: i32,
+) Color {
+ var out: Color = undefined;
+ raylib.mGetPixelColor(
+ @as([*c]raylib.Color, @ptrCast(&out)),
+ srcPtr,
+ format,
+ );
+ return out;
+}
+
+/// Set color formatted into destination pixel pointer
+pub fn SetPixelColor(
+ dstPtr: *anyopaque,
+ color: Color,
+ format: i32,
+) void {
+ raylib.mSetPixelColor(
+ dstPtr,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ format,
+ );
+}
+
+/// Get pixel data size in bytes for certain format
+pub fn GetPixelDataSize(
+ width: i32,
+ height: i32,
+ format: i32,
+) i32 {
+ return raylib.mGetPixelDataSize(
+ width,
+ height,
+ format,
+ );
+}
+
+/// Get the default Font
+pub fn GetFontDefault() Font {
+ var out: Font = undefined;
+ raylib.mGetFontDefault(
+ @as([*c]raylib.Font, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Load font from file into GPU memory (VRAM)
+pub fn LoadFont(
+ fileName: [*:0]const u8,
+) Font {
+ var out: Font = undefined;
+ raylib.mLoadFont(
+ @as([*c]raylib.Font, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+ return out;
+}
+
+/// Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character setFont
+pub fn LoadFontEx(
+ fileName: [*:0]const u8,
+ fontSize: i32,
+ codepoints: ?[*]i32,
+ codepointCount: i32,
+) Font {
+ var out: Font = undefined;
+ raylib.mLoadFontEx(
+ @as([*c]raylib.Font, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ fontSize,
+ @as([*c]i32, @ptrCast(codepoints)),
+ codepointCount,
+ );
+ return out;
+}
+
+/// Load font from Image (XNA style)
+pub fn LoadFontFromImage(
+ image: Image,
+ key: Color,
+ firstChar: i32,
+) Font {
+ var out: Font = undefined;
+ raylib.mLoadFontFromImage(
+ @as([*c]raylib.Font, @ptrCast(&out)),
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&image))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&key))),
+ firstChar,
+ );
+ return out;
+}
+
+/// Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
+pub fn LoadFontFromMemory(
+ fileType: [*:0]const u8,
+ fileData: [*:0]const u8,
+ dataSize: i32,
+ fontSize: i32,
+ codepoints: ?[*]i32,
+ codepointCount: i32,
+) Font {
+ var out: Font = undefined;
+ raylib.mLoadFontFromMemory(
+ @as([*c]raylib.Font, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileType))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileData))),
+ dataSize,
+ fontSize,
+ @as([*c]i32, @ptrCast(codepoints)),
+ codepointCount,
+ );
+ return out;
+}
+
+/// Check if a font is ready
+pub fn IsFontReady(
+ font: Font,
+) bool {
+ return raylib.mIsFontReady(
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ );
+}
+
+/// Unload font chars info data (RAM)
+pub fn UnloadFontData(
+ glyphs: ?[*]GlyphInfo,
+ glyphCount: i32,
+) void {
+ raylib.mUnloadFontData(
+ @as([*c]raylib.GlyphInfo, @ptrFromInt(@intFromPtr(glyphs))),
+ glyphCount,
+ );
+}
+
+/// Unload font from GPU memory (VRAM)
+pub fn UnloadFont(
+ font: Font,
+) void {
+ raylib.mUnloadFont(
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ );
+}
+
+/// Export font as code file, returns true on success
+pub fn ExportFontAsCode(
+ font: Font,
+ fileName: [*:0]const u8,
+) bool {
+ return raylib.mExportFontAsCode(
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Draw current FPS
+pub fn DrawFPS(
+ posX: i32,
+ posY: i32,
+) void {
+ raylib.mDrawFPS(
+ posX,
+ posY,
+ );
+}
+
+/// Draw text (using default font)
+pub fn DrawText(
+ text: [*:0]const u8,
+ posX: i32,
+ posY: i32,
+ fontSize: i32,
+ color: Color,
+) void {
+ raylib.mDrawText(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ posX,
+ posY,
+ fontSize,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw text using font and additional parameters
+pub fn DrawTextEx(
+ font: Font,
+ text: [*:0]const u8,
+ position: Vector2,
+ fontSize: f32,
+ spacing: f32,
+ tint: Color,
+) void {
+ raylib.mDrawTextEx(
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ fontSize,
+ spacing,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw text using Font and pro parameters (rotation)
+pub fn DrawTextPro(
+ font: Font,
+ text: [*:0]const u8,
+ position: Vector2,
+ origin: Vector2,
+ rotation: f32,
+ fontSize: f32,
+ spacing: f32,
+ tint: Color,
+) void {
+ raylib.mDrawTextPro(
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&origin))),
+ rotation,
+ fontSize,
+ spacing,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw one character (codepoint)
+pub fn DrawTextCodepoint(
+ font: Font,
+ codepoint: i32,
+ position: Vector2,
+ fontSize: f32,
+ tint: Color,
+) void {
+ raylib.mDrawTextCodepoint(
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ codepoint,
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ fontSize,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw multiple character (codepoint)
+pub fn DrawTextCodepoints(
+ font: Font,
+ codepoints: ?[*]const i32,
+ codepointCount: i32,
+ position: Vector2,
+ fontSize: f32,
+ spacing: f32,
+ tint: Color,
+) void {
+ raylib.mDrawTextCodepoints(
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ @as([*c]const i32, @ptrFromInt(@intFromPtr(codepoints))),
+ codepointCount,
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&position))),
+ fontSize,
+ spacing,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Set vertical line spacing when drawing with line-breaks
+pub fn SetTextLineSpacing(
+ spacing: i32,
+) void {
+ raylib.mSetTextLineSpacing(
+ spacing,
+ );
+}
+
+/// Measure string width for default font
+pub fn MeasureText(
+ text: [*:0]const u8,
+ fontSize: i32,
+) i32 {
+ return raylib.mMeasureText(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ fontSize,
+ );
+}
+
+/// Measure string size for Font
+pub fn MeasureTextEx(
+ font: Font,
+ text: [*:0]const u8,
+ fontSize: f32,
+ spacing: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mMeasureTextEx(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ fontSize,
+ spacing,
+ );
+ return out;
+}
+
+/// Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found
+pub fn GetGlyphIndex(
+ font: Font,
+ codepoint: i32,
+) i32 {
+ return raylib.mGetGlyphIndex(
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ codepoint,
+ );
+}
+
+/// Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found
+pub fn GetGlyphInfo(
+ font: Font,
+ codepoint: i32,
+) GlyphInfo {
+ var out: GlyphInfo = undefined;
+ raylib.mGetGlyphInfo(
+ @as([*c]raylib.GlyphInfo, @ptrCast(&out)),
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ codepoint,
+ );
+ return out;
+}
+
+/// Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found
+pub fn GetGlyphAtlasRec(
+ font: Font,
+ codepoint: i32,
+) Rectangle {
+ var out: Rectangle = undefined;
+ raylib.mGetGlyphAtlasRec(
+ @as([*c]raylib.Rectangle, @ptrCast(&out)),
+ @as([*c]raylib.Font, @ptrFromInt(@intFromPtr(&font))),
+ codepoint,
+ );
+ return out;
+}
+
+/// Load UTF-8 text encoded from codepoints array
+pub fn LoadUTF8(
+ codepoints: ?[*]const i32,
+ length: i32,
+) [*:0]const u8 {
+ return @as(
+ ?[*]u8,
+ @ptrCast(raylib.mLoadUTF8(
+ @as([*c]const i32, @ptrFromInt(@intFromPtr(codepoints))),
+ length,
+ )),
+ );
+}
+
+/// Unload UTF-8 text encoded from codepoints array
+pub fn UnloadUTF8(
+ text: ?[*]u8,
+) void {
+ raylib.mUnloadUTF8(
+ @as([*c]u8, @ptrCast(text)),
+ );
+}
+
+/// Load all codepoints from a UTF-8 text string, codepoints count returned by parameter
+pub fn LoadCodepoints(
+ text: [*:0]const u8,
+ count: ?[*]i32,
+) ?[*]i32 {
+ return @as(
+ ?[*]i32,
+ @ptrCast(raylib.mLoadCodepoints(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ @as([*c]i32, @ptrCast(count)),
+ )),
+ );
+}
+
+/// Unload codepoints data from memory
+pub fn UnloadCodepoints(
+ codepoints: ?[*]i32,
+) void {
+ raylib.mUnloadCodepoints(
+ @as([*c]i32, @ptrCast(codepoints)),
+ );
+}
+
+/// Get total number of codepoints in a UTF-8 encoded string
+pub fn GetCodepointCount(
+ text: [*:0]const u8,
+) i32 {
+ return raylib.mGetCodepointCount(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ );
+}
+
+/// Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
+pub fn GetCodepoint(
+ text: [*:0]const u8,
+ codepointSize: ?[*]i32,
+) i32 {
+ return raylib.mGetCodepoint(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ @as([*c]i32, @ptrCast(codepointSize)),
+ );
+}
+
+/// Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
+pub fn GetCodepointNext(
+ text: [*:0]const u8,
+ codepointSize: ?[*]i32,
+) i32 {
+ return raylib.mGetCodepointNext(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ @as([*c]i32, @ptrCast(codepointSize)),
+ );
+}
+
+/// Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
+pub fn GetCodepointPrevious(
+ text: [*:0]const u8,
+ codepointSize: ?[*]i32,
+) i32 {
+ return raylib.mGetCodepointPrevious(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ @as([*c]i32, @ptrCast(codepointSize)),
+ );
+}
+
+/// Encode one codepoint into UTF-8 byte array (array length returned as parameter)
+pub fn CodepointToUTF8(
+ codepoint: i32,
+ utf8Size: ?[*]i32,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mCodepointToUTF8(
+ codepoint,
+ @as([*c]i32, @ptrCast(utf8Size)),
+ )),
+ );
+}
+
+/// Copy one string to another, returns bytes copied
+pub fn TextCopy(
+ dst: ?[*]u8,
+ src: [*:0]const u8,
+) i32 {
+ return raylib.mTextCopy(
+ @as([*c]u8, @ptrCast(dst)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(src))),
+ );
+}
+
+/// Check if two text string are equal
+pub fn TextIsEqual(
+ text1: [*:0]const u8,
+ text2: [*:0]const u8,
+) bool {
+ return raylib.mTextIsEqual(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text1))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text2))),
+ );
+}
+
+/// Get text length, checks for '\0' ending
+pub fn TextLength(
+ text: [*:0]const u8,
+) u32 {
+ return raylib.mTextLength(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ );
+}
+
+/// Generate GPU mipmaps for a texture
+pub fn GenTextureMipmaps(
+ texture: *Texture2D,
+) void {
+ raylib.mGenTextureMipmaps(
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(texture))),
+ );
+}
+
+/// Get a piece of a text string
+pub fn TextSubtext(
+ text: [*:0]const u8,
+ position: i32,
+ length: i32,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mTextSubtext(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ position,
+ length,
+ )),
+ );
+}
+
+/// Replace text string (WARNING: memory must be freed!)
+pub fn TextReplace(
+ text: [*:0]const u8,
+ replace: [*:0]const u8,
+ by: [*:0]const u8,
+) [*:0]const u8 {
+ return @as(
+ ?[*]u8,
+ @ptrCast(raylib.mTextReplace(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(replace))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(by))),
+ )),
+ );
+}
+
+/// Insert text in a position (WARNING: memory must be freed!)
+pub fn TextInsert(
+ text: [*:0]const u8,
+ insert: [*:0]const u8,
+ position: i32,
+) [*:0]const u8 {
+ return @as(
+ ?[*]u8,
+ @ptrCast(raylib.mTextInsert(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(insert))),
+ position,
+ )),
+ );
+}
+
+/// Load font data for further use
+pub fn LoadFontData(
+ fileData: [*:0]const u8,
+ dataSize: i32,
+ fontSize: i32,
+ fontChars: [*]i32,
+ glyphCount: i32,
+ typ: i32,
+) [*]GlyphInfo {
+ return @as(
+ [*]GlyphInfo,
+ @ptrCast(raylib.mLoadFontData(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileData))),
+ dataSize,
+ fontSize,
+ @as([*c]i32, @ptrCast(fontChars)),
+ glyphCount,
+ typ,
+ )),
+ );
+}
+
+///
+pub fn rlSetVertexAttribute(
+ index: u32,
+ compSize: i32,
+ typ: i32,
+ normalized: bool,
+ stride: i32,
+ pointer: *anyopaque,
+) void {
+ raylib.mrlSetVertexAttribute(
+ index,
+ compSize,
+ typ,
+ normalized,
+ stride,
+ pointer,
+ );
+}
+
+/// Find first text occurrence within a string
+pub fn TextFindIndex(
+ text: [*:0]const u8,
+ find: [*:0]const u8,
+) i32 {
+ return raylib.mTextFindIndex(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(find))),
+ );
+}
+
+/// Get upper case version of provided string
+pub fn TextToUpper(
+ text: [*:0]const u8,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mTextToUpper(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ )),
+ );
+}
+
+/// Get lower case version of provided string
+pub fn TextToLower(
+ text: [*:0]const u8,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mTextToLower(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ )),
+ );
+}
+
+/// Get Pascal case notation version of provided string
+pub fn TextToPascal(
+ text: [*:0]const u8,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mTextToPascal(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ )),
+ );
+}
+
+/// Get integer value from text (negative values not supported)
+pub fn TextToInteger(
+ text: [*:0]const u8,
+) i32 {
+ return raylib.mTextToInteger(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ );
+}
+
+/// Get float value from text (negative values not supported)
+pub fn TextToFloat(
+ text: [*:0]const u8,
+) f32 {
+ return raylib.mTextToFloat(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(text))),
+ );
+}
+
+/// Draw a line in 3D world space
+pub fn DrawLine3D(
+ startPos: Vector3,
+ endPos: Vector3,
+ color: Color,
+) void {
+ raylib.mDrawLine3D(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&startPos))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&endPos))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a point in 3D space, actually a small line
+pub fn DrawPoint3D(
+ position: Vector3,
+ color: Color,
+) void {
+ raylib.mDrawPoint3D(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a circle in 3D world space
+pub fn DrawCircle3D(
+ center: Vector3,
+ radius: f32,
+ rotationAxis: Vector3,
+ rotationAngle: f32,
+ color: Color,
+) void {
+ raylib.mDrawCircle3D(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(¢er))),
+ radius,
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&rotationAxis))),
+ rotationAngle,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a color-filled triangle (vertex in counter-clockwise order!)
+pub fn DrawTriangle3D(
+ v1: Vector3,
+ v2: Vector3,
+ v3: Vector3,
+ color: Color,
+) void {
+ raylib.mDrawTriangle3D(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v3))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a triangle strip defined by points
+pub fn DrawTriangleStrip3D(
+ points: ?[*]Vector3,
+ pointCount: i32,
+ color: Color,
+) void {
+ raylib.mDrawTriangleStrip3D(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(points))),
+ pointCount,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw cube
+pub fn DrawCube(
+ position: Vector3,
+ width: f32,
+ height: f32,
+ length: f32,
+ color: Color,
+) void {
+ raylib.mDrawCube(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ width,
+ height,
+ length,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw cube (Vector version)
+pub fn DrawCubeV(
+ position: Vector3,
+ size: Vector3,
+ color: Color,
+) void {
+ raylib.mDrawCubeV(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&size))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw cube wires
+pub fn DrawCubeWires(
+ position: Vector3,
+ width: f32,
+ height: f32,
+ length: f32,
+ color: Color,
+) void {
+ raylib.mDrawCubeWires(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ width,
+ height,
+ length,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw cube wires (Vector version)
+pub fn DrawCubeWiresV(
+ position: Vector3,
+ size: Vector3,
+ color: Color,
+) void {
+ raylib.mDrawCubeWiresV(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&size))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw sphere
+pub fn DrawSphere(
+ centerPos: Vector3,
+ radius: f32,
+ color: Color,
+) void {
+ raylib.mDrawSphere(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(¢erPos))),
+ radius,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw sphere with extended parameters
+pub fn DrawSphereEx(
+ centerPos: Vector3,
+ radius: f32,
+ rings: i32,
+ slices: i32,
+ color: Color,
+) void {
+ raylib.mDrawSphereEx(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(¢erPos))),
+ radius,
+ rings,
+ slices,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw sphere wires
+pub fn DrawSphereWires(
+ centerPos: Vector3,
+ radius: f32,
+ rings: i32,
+ slices: i32,
+ color: Color,
+) void {
+ raylib.mDrawSphereWires(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(¢erPos))),
+ radius,
+ rings,
+ slices,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a cylinder/cone
+pub fn DrawCylinder(
+ position: Vector3,
+ radiusTop: f32,
+ radiusBottom: f32,
+ height: f32,
+ slices: i32,
+ color: Color,
+) void {
+ raylib.mDrawCylinder(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ radiusTop,
+ radiusBottom,
+ height,
+ slices,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a cylinder with base at startPos and top at endPos
+pub fn DrawCylinderEx(
+ startPos: Vector3,
+ endPos: Vector3,
+ startRadius: f32,
+ endRadius: f32,
+ sides: i32,
+ color: Color,
+) void {
+ raylib.mDrawCylinderEx(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&startPos))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&endPos))),
+ startRadius,
+ endRadius,
+ sides,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a cylinder/cone wires
+pub fn DrawCylinderWires(
+ position: Vector3,
+ radiusTop: f32,
+ radiusBottom: f32,
+ height: f32,
+ slices: i32,
+ color: Color,
+) void {
+ raylib.mDrawCylinderWires(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ radiusTop,
+ radiusBottom,
+ height,
+ slices,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a cylinder wires with base at startPos and top at endPos
+pub fn DrawCylinderWiresEx(
+ startPos: Vector3,
+ endPos: Vector3,
+ startRadius: f32,
+ endRadius: f32,
+ sides: i32,
+ color: Color,
+) void {
+ raylib.mDrawCylinderWiresEx(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&startPos))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&endPos))),
+ startRadius,
+ endRadius,
+ sides,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a capsule with the center of its sphere caps at startPos and endPos
+pub fn DrawCapsule(
+ startPos: Vector3,
+ endPos: Vector3,
+ radius: f32,
+ slices: i32,
+ rings: i32,
+ color: Color,
+) void {
+ raylib.mDrawCapsule(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&startPos))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&endPos))),
+ radius,
+ slices,
+ rings,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw capsule wireframe with the center of its sphere caps at startPos and endPos
+pub fn DrawCapsuleWires(
+ startPos: Vector3,
+ endPos: Vector3,
+ radius: f32,
+ slices: i32,
+ rings: i32,
+ color: Color,
+) void {
+ raylib.mDrawCapsuleWires(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&startPos))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&endPos))),
+ radius,
+ slices,
+ rings,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a plane XZ
+pub fn DrawPlane(
+ centerPos: Vector3,
+ size: Vector2,
+ color: Color,
+) void {
+ raylib.mDrawPlane(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(¢erPos))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&size))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a ray line
+pub fn DrawRay(
+ ray: Ray,
+ color: Color,
+) void {
+ raylib.mDrawRay(
+ @as([*c]raylib.Ray, @ptrFromInt(@intFromPtr(&ray))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a grid (centered at (0, 0, 0))
+pub fn DrawGrid(
+ slices: i32,
+ spacing: f32,
+) void {
+ raylib.mDrawGrid(
+ slices,
+ spacing,
+ );
+}
+
+/// Load model from files (meshes and materials)
+pub fn LoadModel(
+ fileName: [*:0]const u8,
+) Model {
+ var out: Model = undefined;
+ raylib.mLoadModel(
+ @as([*c]raylib.Model, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+ return out;
+}
+
+/// Load model from generated mesh (default material)
+pub fn LoadModelFromMesh(
+ mesh: Mesh,
+) Model {
+ var out: Model = undefined;
+ raylib.mLoadModelFromMesh(
+ @as([*c]raylib.Model, @ptrCast(&out)),
+ @as([*c]raylib.Mesh, @ptrFromInt(@intFromPtr(&mesh))),
+ );
+ return out;
+}
+
+/// Check if a model is ready
+pub fn IsModelReady(
+ model: Model,
+) bool {
+ return raylib.mIsModelReady(
+ @as([*c]raylib.Model, @ptrFromInt(@intFromPtr(&model))),
+ );
+}
+
+/// Unload model (including meshes) from memory (RAM and/or VRAM)
+pub fn UnloadModel(
+ model: Model,
+) void {
+ raylib.mUnloadModel(
+ @as([*c]raylib.Model, @ptrFromInt(@intFromPtr(&model))),
+ );
+}
+
+/// Compute model bounding box limits (considers all meshes)
+pub fn GetModelBoundingBox(
+ model: Model,
+) BoundingBox {
+ var out: BoundingBox = undefined;
+ raylib.mGetModelBoundingBox(
+ @as([*c]raylib.BoundingBox, @ptrCast(&out)),
+ @as([*c]raylib.Model, @ptrFromInt(@intFromPtr(&model))),
+ );
+ return out;
+}
+
+/// Draw a model (with texture if set)
+pub fn DrawModel(
+ model: Model,
+ position: Vector3,
+ scale: f32,
+ tint: Color,
+) void {
+ raylib.mDrawModel(
+ @as([*c]raylib.Model, @ptrFromInt(@intFromPtr(&model))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ scale,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw a model with extended parameters
+pub fn DrawModelEx(
+ model: Model,
+ position: Vector3,
+ rotationAxis: Vector3,
+ rotationAngle: f32,
+ scale: Vector3,
+ tint: Color,
+) void {
+ raylib.mDrawModelEx(
+ @as([*c]raylib.Model, @ptrFromInt(@intFromPtr(&model))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&rotationAxis))),
+ rotationAngle,
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&scale))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw a model wires (with texture if set)
+pub fn DrawModelWires(
+ model: Model,
+ position: Vector3,
+ scale: f32,
+ tint: Color,
+) void {
+ raylib.mDrawModelWires(
+ @as([*c]raylib.Model, @ptrFromInt(@intFromPtr(&model))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ scale,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw a model wires (with texture if set) with extended parameters
+pub fn DrawModelWiresEx(
+ model: Model,
+ position: Vector3,
+ rotationAxis: Vector3,
+ rotationAngle: f32,
+ scale: Vector3,
+ tint: Color,
+) void {
+ raylib.mDrawModelWiresEx(
+ @as([*c]raylib.Model, @ptrFromInt(@intFromPtr(&model))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&rotationAxis))),
+ rotationAngle,
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&scale))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw bounding box (wires)
+pub fn DrawBoundingBox(
+ box: BoundingBox,
+ color: Color,
+) void {
+ raylib.mDrawBoundingBox(
+ @as([*c]raylib.BoundingBox, @ptrFromInt(@intFromPtr(&box))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&color))),
+ );
+}
+
+/// Draw a billboard texture
+pub fn DrawBillboard(
+ camera: Camera3D,
+ texture: Texture2D,
+ position: Vector3,
+ size: f32,
+ tint: Color,
+) void {
+ raylib.mDrawBillboard(
+ @as([*c]raylib.Camera3D, @ptrFromInt(@intFromPtr(&camera))),
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ size,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw a billboard texture defined by source
+pub fn DrawBillboardRec(
+ camera: Camera3D,
+ texture: Texture2D,
+ source: Rectangle,
+ position: Vector3,
+ size: Vector2,
+ tint: Color,
+) void {
+ raylib.mDrawBillboardRec(
+ @as([*c]raylib.Camera3D, @ptrFromInt(@intFromPtr(&camera))),
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&source))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&size))),
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Draw a billboard texture defined by source and rotation
+pub fn DrawBillboardPro(
+ camera: Camera3D,
+ texture: Texture2D,
+ source: Rectangle,
+ position: Vector3,
+ up: Vector3,
+ size: Vector2,
+ origin: Vector2,
+ rotation: f32,
+ tint: Color,
+) void {
+ raylib.mDrawBillboardPro(
+ @as([*c]raylib.Camera3D, @ptrFromInt(@intFromPtr(&camera))),
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ @as([*c]raylib.Rectangle, @ptrFromInt(@intFromPtr(&source))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&position))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&up))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&size))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&origin))),
+ rotation,
+ @as([*c]raylib.Color, @ptrFromInt(@intFromPtr(&tint))),
+ );
+}
+
+/// Upload mesh vertex data in GPU and provide VAO/VBO ids
+pub fn UploadMesh(
+ mesh: ?[*]Mesh,
+ dynamic: bool,
+) void {
+ raylib.mUploadMesh(
+ @as([*c]raylib.Mesh, @ptrFromInt(@intFromPtr(mesh))),
+ dynamic,
+ );
+}
+
+/// Update mesh vertex data in GPU for a specific buffer index
+pub fn UpdateMeshBuffer(
+ mesh: Mesh,
+ index: i32,
+ data: *const anyopaque,
+ dataSize: i32,
+ offset: i32,
+) void {
+ raylib.mUpdateMeshBuffer(
+ @as([*c]raylib.Mesh, @ptrFromInt(@intFromPtr(&mesh))),
+ index,
+ data,
+ dataSize,
+ offset,
+ );
+}
+
+/// Unload mesh data from CPU and GPU
+pub fn UnloadMesh(
+ mesh: Mesh,
+) void {
+ raylib.mUnloadMesh(
+ @as([*c]raylib.Mesh, @ptrFromInt(@intFromPtr(&mesh))),
+ );
+}
+
+/// Draw a 3d mesh with material and transform
+pub fn DrawMesh(
+ mesh: Mesh,
+ material: Material,
+ transform: Matrix,
+) void {
+ raylib.mDrawMesh(
+ @as([*c]raylib.Mesh, @ptrFromInt(@intFromPtr(&mesh))),
+ @as([*c]raylib.Material, @ptrFromInt(@intFromPtr(&material))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&transform))),
+ );
+}
+
+/// Draw multiple mesh instances with material and different transforms
+pub fn DrawMeshInstanced(
+ mesh: Mesh,
+ material: Material,
+ transforms: ?[*]const Matrix,
+ instances: i32,
+) void {
+ raylib.mDrawMeshInstanced(
+ @as([*c]raylib.Mesh, @ptrFromInt(@intFromPtr(&mesh))),
+ @as([*c]raylib.Material, @ptrFromInt(@intFromPtr(&material))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(transforms))),
+ instances,
+ );
+}
+
+/// Compute mesh bounding box limits
+pub fn GetMeshBoundingBox(
+ mesh: Mesh,
+) BoundingBox {
+ var out: BoundingBox = undefined;
+ raylib.mGetMeshBoundingBox(
+ @as([*c]raylib.BoundingBox, @ptrCast(&out)),
+ @as([*c]raylib.Mesh, @ptrFromInt(@intFromPtr(&mesh))),
+ );
+ return out;
+}
+
+/// Compute mesh tangents
+pub fn GenMeshTangents(
+ mesh: ?[*]Mesh,
+) void {
+ raylib.mGenMeshTangents(
+ @as([*c]raylib.Mesh, @ptrFromInt(@intFromPtr(mesh))),
+ );
+}
+
+/// Export mesh data to file, returns true on success
+pub fn ExportMesh(
+ mesh: Mesh,
+ fileName: [*:0]const u8,
+) bool {
+ return raylib.mExportMesh(
+ @as([*c]raylib.Mesh, @ptrFromInt(@intFromPtr(&mesh))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Export mesh as code file (.h) defining multiple arrays of vertex attributes
+pub fn ExportMeshAsCode(
+ mesh: Mesh,
+ fileName: [*:0]const u8,
+) bool {
+ return raylib.mExportMeshAsCode(
+ @as([*c]raylib.Mesh, @ptrFromInt(@intFromPtr(&mesh))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Generate polygonal mesh
+pub fn GenMeshPoly(
+ sides: i32,
+ radius: f32,
+) Mesh {
+ var out: Mesh = undefined;
+ raylib.mGenMeshPoly(
+ @as([*c]raylib.Mesh, @ptrCast(&out)),
+ sides,
+ radius,
+ );
+ return out;
+}
+
+/// Generate plane mesh (with subdivisions)
+pub fn GenMeshPlane(
+ width: f32,
+ length: f32,
+ resX: i32,
+ resZ: i32,
+) Mesh {
+ var out: Mesh = undefined;
+ raylib.mGenMeshPlane(
+ @as([*c]raylib.Mesh, @ptrCast(&out)),
+ width,
+ length,
+ resX,
+ resZ,
+ );
+ return out;
+}
+
+/// Generate cuboid mesh
+pub fn GenMeshCube(
+ width: f32,
+ height: f32,
+ length: f32,
+) Mesh {
+ var out: Mesh = undefined;
+ raylib.mGenMeshCube(
+ @as([*c]raylib.Mesh, @ptrCast(&out)),
+ width,
+ height,
+ length,
+ );
+ return out;
+}
+
+/// Generate sphere mesh (standard sphere)
+pub fn GenMeshSphere(
+ radius: f32,
+ rings: i32,
+ slices: i32,
+) Mesh {
+ var out: Mesh = undefined;
+ raylib.mGenMeshSphere(
+ @as([*c]raylib.Mesh, @ptrCast(&out)),
+ radius,
+ rings,
+ slices,
+ );
+ return out;
+}
+
+/// Generate half-sphere mesh (no bottom cap)
+pub fn GenMeshHemiSphere(
+ radius: f32,
+ rings: i32,
+ slices: i32,
+) Mesh {
+ var out: Mesh = undefined;
+ raylib.mGenMeshHemiSphere(
+ @as([*c]raylib.Mesh, @ptrCast(&out)),
+ radius,
+ rings,
+ slices,
+ );
+ return out;
+}
+
+/// Generate cylinder mesh
+pub fn GenMeshCylinder(
+ radius: f32,
+ height: f32,
+ slices: i32,
+) Mesh {
+ var out: Mesh = undefined;
+ raylib.mGenMeshCylinder(
+ @as([*c]raylib.Mesh, @ptrCast(&out)),
+ radius,
+ height,
+ slices,
+ );
+ return out;
+}
+
+/// Generate cone/pyramid mesh
+pub fn GenMeshCone(
+ radius: f32,
+ height: f32,
+ slices: i32,
+) Mesh {
+ var out: Mesh = undefined;
+ raylib.mGenMeshCone(
+ @as([*c]raylib.Mesh, @ptrCast(&out)),
+ radius,
+ height,
+ slices,
+ );
+ return out;
+}
+
+/// Generate torus mesh
+pub fn GenMeshTorus(
+ radius: f32,
+ size: f32,
+ radSeg: i32,
+ sides: i32,
+) Mesh {
+ var out: Mesh = undefined;
+ raylib.mGenMeshTorus(
+ @as([*c]raylib.Mesh, @ptrCast(&out)),
+ radius,
+ size,
+ radSeg,
+ sides,
+ );
+ return out;
+}
+
+/// Generate trefoil knot mesh
+pub fn GenMeshKnot(
+ radius: f32,
+ size: f32,
+ radSeg: i32,
+ sides: i32,
+) Mesh {
+ var out: Mesh = undefined;
+ raylib.mGenMeshKnot(
+ @as([*c]raylib.Mesh, @ptrCast(&out)),
+ radius,
+ size,
+ radSeg,
+ sides,
+ );
+ return out;
+}
+
+/// Generate heightmap mesh from image data
+pub fn GenMeshHeightmap(
+ heightmap: Image,
+ size: Vector3,
+) Mesh {
+ var out: Mesh = undefined;
+ raylib.mGenMeshHeightmap(
+ @as([*c]raylib.Mesh, @ptrCast(&out)),
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&heightmap))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&size))),
+ );
+ return out;
+}
+
+/// Generate cubes-based map mesh from image data
+pub fn GenMeshCubicmap(
+ cubicmap: Image,
+ cubeSize: Vector3,
+) Mesh {
+ var out: Mesh = undefined;
+ raylib.mGenMeshCubicmap(
+ @as([*c]raylib.Mesh, @ptrCast(&out)),
+ @as([*c]raylib.Image, @ptrFromInt(@intFromPtr(&cubicmap))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&cubeSize))),
+ );
+ return out;
+}
+
+/// Load materials from model file
+pub fn LoadMaterials(
+ fileName: [*:0]const u8,
+ materialCount: ?[*]i32,
+) ?[*]Material {
+ return @as(
+ ?[*]Material,
+ @ptrCast(raylib.mLoadMaterials(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ @as([*c]i32, @ptrCast(materialCount)),
+ )),
+ );
+}
+
+/// Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)
+pub fn LoadMaterialDefault() Material {
+ var out: Material = undefined;
+ raylib.mLoadMaterialDefault(
+ @as([*c]raylib.Material, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Check if a material is ready
+pub fn IsMaterialReady(
+ material: Material,
+) bool {
+ return raylib.mIsMaterialReady(
+ @as([*c]raylib.Material, @ptrFromInt(@intFromPtr(&material))),
+ );
+}
+
+/// Unload material from GPU memory (VRAM)
+pub fn UnloadMaterial(
+ material: Material,
+) void {
+ raylib.mUnloadMaterial(
+ @as([*c]raylib.Material, @ptrFromInt(@intFromPtr(&material))),
+ );
+}
+
+/// Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)
+pub fn SetMaterialTexture(
+ material: ?[*]Material,
+ mapType: i32,
+ texture: Texture2D,
+) void {
+ raylib.mSetMaterialTexture(
+ @as([*c]raylib.Material, @ptrFromInt(@intFromPtr(material))),
+ mapType,
+ @as([*c]raylib.Texture2D, @ptrFromInt(@intFromPtr(&texture))),
+ );
+}
+
+/// Set material for a mesh
+pub fn SetModelMeshMaterial(
+ model: ?[*]Model,
+ meshId: i32,
+ materialId: i32,
+) void {
+ raylib.mSetModelMeshMaterial(
+ @as([*c]raylib.Model, @ptrFromInt(@intFromPtr(model))),
+ meshId,
+ materialId,
+ );
+}
+
+/// Load model animations from file
+pub fn LoadModelAnimations(
+ fileName: [*:0]const u8,
+ animCount: ?[*]i32,
+) ?[*]ModelAnimation {
+ return @as(
+ ?[*]ModelAnimation,
+ @ptrCast(raylib.mLoadModelAnimations(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ @as([*c]i32, @ptrCast(animCount)),
+ )),
+ );
+}
+
+/// Update model animation pose
+pub fn UpdateModelAnimation(
+ model: Model,
+ anim: ModelAnimation,
+ frame: i32,
+) void {
+ raylib.mUpdateModelAnimation(
+ @as([*c]raylib.Model, @ptrFromInt(@intFromPtr(&model))),
+ @as([*c]raylib.ModelAnimation, @ptrFromInt(@intFromPtr(&anim))),
+ frame,
+ );
+}
+
+/// Unload animation data
+pub fn UnloadModelAnimation(
+ anim: ModelAnimation,
+) void {
+ raylib.mUnloadModelAnimation(
+ @as([*c]raylib.ModelAnimation, @ptrFromInt(@intFromPtr(&anim))),
+ );
+}
+
+/// Unload animation array data
+pub fn UnloadModelAnimations(
+ animations: ?[*]ModelAnimation,
+ animCount: i32,
+) void {
+ raylib.mUnloadModelAnimations(
+ @as([*c]raylib.ModelAnimation, @ptrFromInt(@intFromPtr(animations))),
+ animCount,
+ );
+}
+
+/// Check model animation skeleton match
+pub fn IsModelAnimationValid(
+ model: Model,
+ anim: ModelAnimation,
+) bool {
+ return raylib.mIsModelAnimationValid(
+ @as([*c]raylib.Model, @ptrFromInt(@intFromPtr(&model))),
+ @as([*c]raylib.ModelAnimation, @ptrFromInt(@intFromPtr(&anim))),
+ );
+}
+
+/// Check collision between two spheres
+pub fn CheckCollisionSpheres(
+ center1: Vector3,
+ radius1: f32,
+ center2: Vector3,
+ radius2: f32,
+) bool {
+ return raylib.mCheckCollisionSpheres(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(¢er1))),
+ radius1,
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(¢er2))),
+ radius2,
+ );
+}
+
+/// Check collision between two bounding boxes
+pub fn CheckCollisionBoxes(
+ box1: BoundingBox,
+ box2: BoundingBox,
+) bool {
+ return raylib.mCheckCollisionBoxes(
+ @as([*c]raylib.BoundingBox, @ptrFromInt(@intFromPtr(&box1))),
+ @as([*c]raylib.BoundingBox, @ptrFromInt(@intFromPtr(&box2))),
+ );
+}
+
+/// Check collision between box and sphere
+pub fn CheckCollisionBoxSphere(
+ box: BoundingBox,
+ center: Vector3,
+ radius: f32,
+) bool {
+ return raylib.mCheckCollisionBoxSphere(
+ @as([*c]raylib.BoundingBox, @ptrFromInt(@intFromPtr(&box))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(¢er))),
+ radius,
+ );
+}
+
+/// Get collision info between ray and sphere
+pub fn GetRayCollisionSphere(
+ ray: Ray,
+ center: Vector3,
+ radius: f32,
+) RayCollision {
+ var out: RayCollision = undefined;
+ raylib.mGetRayCollisionSphere(
+ @as([*c]raylib.RayCollision, @ptrCast(&out)),
+ @as([*c]raylib.Ray, @ptrFromInt(@intFromPtr(&ray))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(¢er))),
+ radius,
+ );
+ return out;
+}
+
+/// Get collision info between ray and box
+pub fn GetRayCollisionBox(
+ ray: Ray,
+ box: BoundingBox,
+) RayCollision {
+ var out: RayCollision = undefined;
+ raylib.mGetRayCollisionBox(
+ @as([*c]raylib.RayCollision, @ptrCast(&out)),
+ @as([*c]raylib.Ray, @ptrFromInt(@intFromPtr(&ray))),
+ @as([*c]raylib.BoundingBox, @ptrFromInt(@intFromPtr(&box))),
+ );
+ return out;
+}
+
+/// Get collision info between ray and mesh
+pub fn GetRayCollisionMesh(
+ ray: Ray,
+ mesh: Mesh,
+ transform: Matrix,
+) RayCollision {
+ var out: RayCollision = undefined;
+ raylib.mGetRayCollisionMesh(
+ @as([*c]raylib.RayCollision, @ptrCast(&out)),
+ @as([*c]raylib.Ray, @ptrFromInt(@intFromPtr(&ray))),
+ @as([*c]raylib.Mesh, @ptrFromInt(@intFromPtr(&mesh))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&transform))),
+ );
+ return out;
+}
+
+/// Get collision info between ray and triangle
+pub fn GetRayCollisionTriangle(
+ ray: Ray,
+ p1: Vector3,
+ p2: Vector3,
+ p3: Vector3,
+) RayCollision {
+ var out: RayCollision = undefined;
+ raylib.mGetRayCollisionTriangle(
+ @as([*c]raylib.RayCollision, @ptrCast(&out)),
+ @as([*c]raylib.Ray, @ptrFromInt(@intFromPtr(&ray))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&p2))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&p3))),
+ );
+ return out;
+}
+
+/// Get collision info between ray and quad
+pub fn GetRayCollisionQuad(
+ ray: Ray,
+ p1: Vector3,
+ p2: Vector3,
+ p3: Vector3,
+ p4: Vector3,
+) RayCollision {
+ var out: RayCollision = undefined;
+ raylib.mGetRayCollisionQuad(
+ @as([*c]raylib.RayCollision, @ptrCast(&out)),
+ @as([*c]raylib.Ray, @ptrFromInt(@intFromPtr(&ray))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&p1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&p2))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&p3))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&p4))),
+ );
+ return out;
+}
+
+/// Initialize audio device and context
+pub fn InitAudioDevice() void {
+ raylib.mInitAudioDevice();
+}
+
+/// Close the audio device and context
+pub fn CloseAudioDevice() void {
+ raylib.mCloseAudioDevice();
+}
+
+/// Check if audio device has been initialized successfully
+pub fn IsAudioDeviceReady() bool {
+ return raylib.mIsAudioDeviceReady();
+}
+
+/// Set master volume (listener)
+pub fn SetMasterVolume(
+ volume: f32,
+) void {
+ raylib.mSetMasterVolume(
+ volume,
+ );
+}
+
+/// Get master volume (listener)
+pub fn GetMasterVolume() f32 {
+ return raylib.mGetMasterVolume();
+}
+
+/// Load wave data from file
+pub fn LoadWave(
+ fileName: [*:0]const u8,
+) Wave {
+ var out: Wave = undefined;
+ raylib.mLoadWave(
+ @as([*c]raylib.Wave, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+ return out;
+}
+
+/// Load wave from memory buffer, fileType refers to extension: i.e. '.wav'
+pub fn LoadWaveFromMemory(
+ fileType: [*:0]const u8,
+ fileData: [*:0]const u8,
+ dataSize: i32,
+) Wave {
+ var out: Wave = undefined;
+ raylib.mLoadWaveFromMemory(
+ @as([*c]raylib.Wave, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileType))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileData))),
+ dataSize,
+ );
+ return out;
+}
+
+/// Checks if wave data is ready
+pub fn IsWaveReady(
+ wave: Wave,
+) bool {
+ return raylib.mIsWaveReady(
+ @as([*c]raylib.Wave, @ptrFromInt(@intFromPtr(&wave))),
+ );
+}
+
+/// Load sound from file
+pub fn LoadSound(
+ fileName: [*:0]const u8,
+) Sound {
+ var out: Sound = undefined;
+ raylib.mLoadSound(
+ @as([*c]raylib.Sound, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+ return out;
+}
+
+/// Load sound from wave data
+pub fn LoadSoundFromWave(
+ wave: Wave,
+) Sound {
+ var out: Sound = undefined;
+ raylib.mLoadSoundFromWave(
+ @as([*c]raylib.Sound, @ptrCast(&out)),
+ @as([*c]raylib.Wave, @ptrFromInt(@intFromPtr(&wave))),
+ );
+ return out;
+}
+
+/// Create a new sound that shares the same sample data as the source sound, does not own the sound data
+pub fn LoadSoundAlias(
+ source: Sound,
+) Sound {
+ var out: Sound = undefined;
+ raylib.mLoadSoundAlias(
+ @as([*c]raylib.Sound, @ptrCast(&out)),
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&source))),
+ );
+ return out;
+}
+
+/// Checks if a sound is ready
+pub fn IsSoundReady(
+ sound: Sound,
+) bool {
+ return raylib.mIsSoundReady(
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&sound))),
+ );
+}
+
+/// Update sound buffer with new data
+pub fn UpdateSound(
+ sound: Sound,
+ data: *const anyopaque,
+ sampleCount: i32,
+) void {
+ raylib.mUpdateSound(
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&sound))),
+ data,
+ sampleCount,
+ );
+}
+
+/// Unload wave data
+pub fn UnloadWave(
+ wave: Wave,
+) void {
+ raylib.mUnloadWave(
+ @as([*c]raylib.Wave, @ptrFromInt(@intFromPtr(&wave))),
+ );
+}
+
+/// Unload sound
+pub fn UnloadSound(
+ sound: Sound,
+) void {
+ raylib.mUnloadSound(
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&sound))),
+ );
+}
+
+/// Unload a sound alias (does not deallocate sample data)
+pub fn UnloadSoundAlias(
+ alias: Sound,
+) void {
+ raylib.mUnloadSoundAlias(
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&alias))),
+ );
+}
+
+/// Export wave data to file, returns true on success
+pub fn ExportWave(
+ wave: Wave,
+ fileName: [*:0]const u8,
+) bool {
+ return raylib.mExportWave(
+ @as([*c]raylib.Wave, @ptrFromInt(@intFromPtr(&wave))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Export wave sample data to code (.h), returns true on success
+pub fn ExportWaveAsCode(
+ wave: Wave,
+ fileName: [*:0]const u8,
+) bool {
+ return raylib.mExportWaveAsCode(
+ @as([*c]raylib.Wave, @ptrFromInt(@intFromPtr(&wave))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+}
+
+/// Play a sound
+pub fn PlaySound(
+ sound: Sound,
+) void {
+ raylib.mPlaySound(
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&sound))),
+ );
+}
+
+/// Stop playing a sound
+pub fn StopSound(
+ sound: Sound,
+) void {
+ raylib.mStopSound(
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&sound))),
+ );
+}
+
+/// Pause a sound
+pub fn PauseSound(
+ sound: Sound,
+) void {
+ raylib.mPauseSound(
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&sound))),
+ );
+}
+
+/// Resume a paused sound
+pub fn ResumeSound(
+ sound: Sound,
+) void {
+ raylib.mResumeSound(
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&sound))),
+ );
+}
+
+/// Check if a sound is currently playing
+pub fn IsSoundPlaying(
+ sound: Sound,
+) bool {
+ return raylib.mIsSoundPlaying(
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&sound))),
+ );
+}
+
+/// Set volume for a sound (1.0 is max level)
+pub fn SetSoundVolume(
+ sound: Sound,
+ volume: f32,
+) void {
+ raylib.mSetSoundVolume(
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&sound))),
+ volume,
+ );
+}
+
+/// Set pitch for a sound (1.0 is base level)
+pub fn SetSoundPitch(
+ sound: Sound,
+ pitch: f32,
+) void {
+ raylib.mSetSoundPitch(
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&sound))),
+ pitch,
+ );
+}
+
+/// Set pan for a sound (0.5 is center)
+pub fn SetSoundPan(
+ sound: Sound,
+ pan: f32,
+) void {
+ raylib.mSetSoundPan(
+ @as([*c]raylib.Sound, @ptrFromInt(@intFromPtr(&sound))),
+ pan,
+ );
+}
+
+/// Copy a wave to a new wave
+pub fn WaveCopy(
+ wave: Wave,
+) Wave {
+ var out: Wave = undefined;
+ raylib.mWaveCopy(
+ @as([*c]raylib.Wave, @ptrCast(&out)),
+ @as([*c]raylib.Wave, @ptrFromInt(@intFromPtr(&wave))),
+ );
+ return out;
+}
+
+/// Crop a wave to defined samples range
+pub fn WaveCrop(
+ wave: ?[*]Wave,
+ initSample: i32,
+ finalSample: i32,
+) void {
+ raylib.mWaveCrop(
+ @as([*c]raylib.Wave, @ptrFromInt(@intFromPtr(wave))),
+ initSample,
+ finalSample,
+ );
+}
+
+/// Convert wave data to desired format
+pub fn WaveFormat(
+ wave: ?[*]Wave,
+ sampleRate: i32,
+ sampleSize: i32,
+ channels: i32,
+) void {
+ raylib.mWaveFormat(
+ @as([*c]raylib.Wave, @ptrFromInt(@intFromPtr(wave))),
+ sampleRate,
+ sampleSize,
+ channels,
+ );
+}
+
+/// Load samples data from wave as a 32bit float data array
+pub fn LoadWaveSamples(
+ wave: Wave,
+) ?[*]f32 {
+ return @as(
+ ?[*]f32,
+ @ptrCast(raylib.mLoadWaveSamples(
+ @as([*c]raylib.Wave, @ptrFromInt(@intFromPtr(&wave))),
+ )),
+ );
+}
+
+/// Unload samples data loaded with LoadWaveSamples()
+pub fn UnloadWaveSamples(
+ samples: ?[*]f32,
+) void {
+ raylib.mUnloadWaveSamples(
+ @as([*c]f32, @ptrCast(samples)),
+ );
+}
+
+/// Load music stream from file
+pub fn LoadMusicStream(
+ fileName: [*:0]const u8,
+) Music {
+ var out: Music = undefined;
+ raylib.mLoadMusicStream(
+ @as([*c]raylib.Music, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileName))),
+ );
+ return out;
+}
+
+/// Load music stream from data
+pub fn LoadMusicStreamFromMemory(
+ fileType: [*:0]const u8,
+ data: [*:0]const u8,
+ dataSize: i32,
+) Music {
+ var out: Music = undefined;
+ raylib.mLoadMusicStreamFromMemory(
+ @as([*c]raylib.Music, @ptrCast(&out)),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fileType))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(data))),
+ dataSize,
+ );
+ return out;
+}
+
+/// Checks if a music stream is ready
+pub fn IsMusicReady(
+ music: Music,
+) bool {
+ return raylib.mIsMusicReady(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ );
+}
+
+/// Unload music stream
+pub fn UnloadMusicStream(
+ music: Music,
+) void {
+ raylib.mUnloadMusicStream(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ );
+}
+
+/// Start music playing
+pub fn PlayMusicStream(
+ music: Music,
+) void {
+ raylib.mPlayMusicStream(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ );
+}
+
+/// Check if music is playing
+pub fn IsMusicStreamPlaying(
+ music: Music,
+) bool {
+ return raylib.mIsMusicStreamPlaying(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ );
+}
+
+/// Updates buffers for music streaming
+pub fn UpdateMusicStream(
+ music: Music,
+) void {
+ raylib.mUpdateMusicStream(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ );
+}
+
+/// Stop music playing
+pub fn StopMusicStream(
+ music: Music,
+) void {
+ raylib.mStopMusicStream(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ );
+}
+
+/// Pause music playing
+pub fn PauseMusicStream(
+ music: Music,
+) void {
+ raylib.mPauseMusicStream(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ );
+}
+
+/// Resume playing paused music
+pub fn ResumeMusicStream(
+ music: Music,
+) void {
+ raylib.mResumeMusicStream(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ );
+}
+
+/// Seek music to a position (in seconds)
+pub fn SeekMusicStream(
+ music: Music,
+ position: f32,
+) void {
+ raylib.mSeekMusicStream(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ position,
+ );
+}
+
+/// Set volume for music (1.0 is max level)
+pub fn SetMusicVolume(
+ music: Music,
+ volume: f32,
+) void {
+ raylib.mSetMusicVolume(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ volume,
+ );
+}
+
+/// Set pitch for a music (1.0 is base level)
+pub fn SetMusicPitch(
+ music: Music,
+ pitch: f32,
+) void {
+ raylib.mSetMusicPitch(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ pitch,
+ );
+}
+
+/// Set pan for a music (0.5 is center)
+pub fn SetMusicPan(
+ music: Music,
+ pan: f32,
+) void {
+ raylib.mSetMusicPan(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ pan,
+ );
+}
+
+/// Get music time length (in seconds)
+pub fn GetMusicTimeLength(
+ music: Music,
+) f32 {
+ return raylib.mGetMusicTimeLength(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ );
+}
+
+/// Get current music time played (in seconds)
+pub fn GetMusicTimePlayed(
+ music: Music,
+) f32 {
+ return raylib.mGetMusicTimePlayed(
+ @as([*c]raylib.Music, @ptrFromInt(@intFromPtr(&music))),
+ );
+}
+
+/// Load audio stream (to stream raw audio pcm data)
+pub fn LoadAudioStream(
+ sampleRate: u32,
+ sampleSize: u32,
+ channels: u32,
+) AudioStream {
+ var out: AudioStream = undefined;
+ raylib.mLoadAudioStream(
+ @as([*c]raylib.AudioStream, @ptrCast(&out)),
+ sampleRate,
+ sampleSize,
+ channels,
+ );
+ return out;
+}
+
+/// Checks if an audio stream is ready
+pub fn IsAudioStreamReady(
+ stream: AudioStream,
+) bool {
+ return raylib.mIsAudioStreamReady(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ );
+}
+
+/// Unload audio stream and free memory
+pub fn UnloadAudioStream(
+ stream: AudioStream,
+) void {
+ raylib.mUnloadAudioStream(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ );
+}
+
+/// Update audio stream buffers with data
+pub fn UpdateAudioStream(
+ stream: AudioStream,
+ data: *const anyopaque,
+ frameCount: i32,
+) void {
+ raylib.mUpdateAudioStream(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ data,
+ frameCount,
+ );
+}
+
+/// Check if any audio stream buffers requires refill
+pub fn IsAudioStreamProcessed(
+ stream: AudioStream,
+) bool {
+ return raylib.mIsAudioStreamProcessed(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ );
+}
+
+/// Play audio stream
+pub fn PlayAudioStream(
+ stream: AudioStream,
+) void {
+ raylib.mPlayAudioStream(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ );
+}
+
+/// Pause audio stream
+pub fn PauseAudioStream(
+ stream: AudioStream,
+) void {
+ raylib.mPauseAudioStream(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ );
+}
+
+/// Resume audio stream
+pub fn ResumeAudioStream(
+ stream: AudioStream,
+) void {
+ raylib.mResumeAudioStream(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ );
+}
+
+/// Check if audio stream is playing
+pub fn IsAudioStreamPlaying(
+ stream: AudioStream,
+) bool {
+ return raylib.mIsAudioStreamPlaying(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ );
+}
+
+/// Stop audio stream
+pub fn StopAudioStream(
+ stream: AudioStream,
+) void {
+ raylib.mStopAudioStream(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ );
+}
+
+/// Set volume for audio stream (1.0 is max level)
+pub fn SetAudioStreamVolume(
+ stream: AudioStream,
+ volume: f32,
+) void {
+ raylib.mSetAudioStreamVolume(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ volume,
+ );
+}
+
+/// Set pitch for audio stream (1.0 is base level)
+pub fn SetAudioStreamPitch(
+ stream: AudioStream,
+ pitch: f32,
+) void {
+ raylib.mSetAudioStreamPitch(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ pitch,
+ );
+}
+
+/// Set pan for audio stream (0.5 is centered)
+pub fn SetAudioStreamPan(
+ stream: AudioStream,
+ pan: f32,
+) void {
+ raylib.mSetAudioStreamPan(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ pan,
+ );
+}
+
+/// Default size for new audio streams
+pub fn SetAudioStreamBufferSizeDefault(
+ size: i32,
+) void {
+ raylib.mSetAudioStreamBufferSizeDefault(
+ size,
+ );
+}
+
+/// Audio thread callback to request new data
+pub fn SetAudioStreamCallback(
+ stream: AudioStream,
+ callback: AudioCallback,
+) void {
+ raylib.mSetAudioStreamCallback(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ @ptrCast(callback),
+ );
+}
+
+/// Attach audio stream processor to stream, receives the samples as s
+pub fn AttachAudioStreamProcessor(
+ stream: AudioStream,
+ processor: AudioCallback,
+) void {
+ raylib.mAttachAudioStreamProcessor(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ @ptrCast(processor),
+ );
+}
+
+/// Detach audio stream processor from stream
+pub fn DetachAudioStreamProcessor(
+ stream: AudioStream,
+ processor: AudioCallback,
+) void {
+ raylib.mDetachAudioStreamProcessor(
+ @as([*c]raylib.AudioStream, @ptrFromInt(@intFromPtr(&stream))),
+ @ptrCast(processor),
+ );
+}
+
+/// Attach audio stream processor to the entire audio pipeline, receives the samples as s
+pub fn AttachAudioMixedProcessor(
+ processor: AudioCallback,
+) void {
+ raylib.mAttachAudioMixedProcessor(
+ @ptrCast(processor),
+ );
+}
+
+/// Detach audio stream processor from the entire audio pipeline
+pub fn DetachAudioMixedProcessor(
+ processor: AudioCallback,
+) void {
+ raylib.mDetachAudioMixedProcessor(
+ @ptrCast(processor),
+ );
+}
+
+/// Choose the current matrix to be transformed
+pub fn rlMatrixMode(
+ mode: i32,
+) void {
+ raylib.mrlMatrixMode(
+ mode,
+ );
+}
+
+/// Push the current matrix to stack
+pub fn rlPushMatrix() void {
+ raylib.mrlPushMatrix();
+}
+
+/// Pop latest inserted matrix from stack
+pub fn rlPopMatrix() void {
+ raylib.mrlPopMatrix();
+}
+
+/// Reset current matrix to identity matrix
+pub fn rlLoadIdentity() void {
+ raylib.mrlLoadIdentity();
+}
+
+/// Multiply the current matrix by a translation matrix
+pub fn rlTranslatef(
+ x: f32,
+ y: f32,
+ z: f32,
+) void {
+ raylib.mrlTranslatef(
+ x,
+ y,
+ z,
+ );
+}
+
+/// Multiply the current matrix by a rotation matrix
+pub fn rlRotatef(
+ angle: f32,
+ x: f32,
+ y: f32,
+ z: f32,
+) void {
+ raylib.mrlRotatef(
+ angle,
+ x,
+ y,
+ z,
+ );
+}
+
+/// Multiply the current matrix by a scaling matrix
+pub fn rlScalef(
+ x: f32,
+ y: f32,
+ z: f32,
+) void {
+ raylib.mrlScalef(
+ x,
+ y,
+ z,
+ );
+}
+
+/// Multiply the current matrix by another matrix
+pub fn rlMultMatrixf(
+ matf: ?[*]const f32,
+) void {
+ raylib.mrlMultMatrixf(
+ @as([*c]const f32, @ptrFromInt(@intFromPtr(matf))),
+ );
+}
+
+///
+pub fn rlFrustum(
+ left: f64,
+ right: f64,
+ bottom: f64,
+ top: f64,
+ znear: f64,
+ zfar: f64,
+) void {
+ raylib.mrlFrustum(
+ left,
+ right,
+ bottom,
+ top,
+ znear,
+ zfar,
+ );
+}
+
+///
+pub fn rlOrtho(
+ left: f64,
+ right: f64,
+ bottom: f64,
+ top: f64,
+ znear: f64,
+ zfar: f64,
+) void {
+ raylib.mrlOrtho(
+ left,
+ right,
+ bottom,
+ top,
+ znear,
+ zfar,
+ );
+}
+
+/// Set the viewport area
+pub fn rlViewport(
+ x: i32,
+ y: i32,
+ width: i32,
+ height: i32,
+) void {
+ raylib.mrlViewport(
+ x,
+ y,
+ width,
+ height,
+ );
+}
+
+/// Initialize drawing mode (how to organize vertex)
+pub fn rlBegin(
+ mode: i32,
+) void {
+ raylib.mrlBegin(
+ mode,
+ );
+}
+
+/// Finish vertex providing
+pub fn rlEnd() void {
+ raylib.mrlEnd();
+}
+
+/// Define one vertex (position) - 2 int
+pub fn rlVertex2i(
+ x: i32,
+ y: i32,
+) void {
+ raylib.mrlVertex2i(
+ x,
+ y,
+ );
+}
+
+/// Define one vertex (position) - 2 float
+pub fn rlVertex2f(
+ x: f32,
+ y: f32,
+) void {
+ raylib.mrlVertex2f(
+ x,
+ y,
+ );
+}
+
+/// Define one vertex (position) - 3 float
+pub fn rlVertex3f(
+ x: f32,
+ y: f32,
+ z: f32,
+) void {
+ raylib.mrlVertex3f(
+ x,
+ y,
+ z,
+ );
+}
+
+/// Define one vertex (texture coordinate) - 2 float
+pub fn rlTexCoord2f(
+ x: f32,
+ y: f32,
+) void {
+ raylib.mrlTexCoord2f(
+ x,
+ y,
+ );
+}
+
+/// Define one vertex (normal) - 3 float
+pub fn rlNormal3f(
+ x: f32,
+ y: f32,
+ z: f32,
+) void {
+ raylib.mrlNormal3f(
+ x,
+ y,
+ z,
+ );
+}
+
+/// Define one vertex (color) - 4 byte
+pub fn rlColor4ub(
+ r: u8,
+ g: u8,
+ b: u8,
+ a: u8,
+) void {
+ raylib.mrlColor4ub(
+ r,
+ g,
+ b,
+ a,
+ );
+}
+
+/// Define one vertex (color) - 3 float
+pub fn rlColor3f(
+ x: f32,
+ y: f32,
+ z: f32,
+) void {
+ raylib.mrlColor3f(
+ x,
+ y,
+ z,
+ );
+}
+
+/// Define one vertex (color) - 4 float
+pub fn rlColor4f(
+ x: f32,
+ y: f32,
+ z: f32,
+ w: f32,
+) void {
+ raylib.mrlColor4f(
+ x,
+ y,
+ z,
+ w,
+ );
+}
+
+/// Enable vertex array (VAO, if supported)
+pub fn rlEnableVertexArray(
+ vaoId: u32,
+) bool {
+ return raylib.mrlEnableVertexArray(
+ vaoId,
+ );
+}
+
+/// Disable vertex array (VAO, if supported)
+pub fn rlDisableVertexArray() void {
+ raylib.mrlDisableVertexArray();
+}
+
+/// Enable vertex buffer (VBO)
+pub fn rlEnableVertexBuffer(
+ id: u32,
+) void {
+ raylib.mrlEnableVertexBuffer(
+ id,
+ );
+}
+
+/// Disable vertex buffer (VBO)
+pub fn rlDisableVertexBuffer() void {
+ raylib.mrlDisableVertexBuffer();
+}
+
+/// Enable vertex buffer element (VBO element)
+pub fn rlEnableVertexBufferElement(
+ id: u32,
+) void {
+ raylib.mrlEnableVertexBufferElement(
+ id,
+ );
+}
+
+/// Disable vertex buffer element (VBO element)
+pub fn rlDisableVertexBufferElement() void {
+ raylib.mrlDisableVertexBufferElement();
+}
+
+/// Enable vertex attribute index
+pub fn rlEnableVertexAttribute(
+ index: u32,
+) void {
+ raylib.mrlEnableVertexAttribute(
+ index,
+ );
+}
+
+/// Disable vertex attribute index
+pub fn rlDisableVertexAttribute(
+ index: u32,
+) void {
+ raylib.mrlDisableVertexAttribute(
+ index,
+ );
+}
+
+/// Select and active a texture slot
+pub fn rlActiveTextureSlot(
+ slot: i32,
+) void {
+ raylib.mrlActiveTextureSlot(
+ slot,
+ );
+}
+
+/// Enable texture
+pub fn rlEnableTexture(
+ id: u32,
+) void {
+ raylib.mrlEnableTexture(
+ id,
+ );
+}
+
+/// Disable texture
+pub fn rlDisableTexture() void {
+ raylib.mrlDisableTexture();
+}
+
+/// Enable texture cubemap
+pub fn rlEnableTextureCubemap(
+ id: u32,
+) void {
+ raylib.mrlEnableTextureCubemap(
+ id,
+ );
+}
+
+/// Disable texture cubemap
+pub fn rlDisableTextureCubemap() void {
+ raylib.mrlDisableTextureCubemap();
+}
+
+/// Set texture parameters (filter, wrap)
+pub fn rlTextureParameters(
+ id: u32,
+ param: i32,
+ value: i32,
+) void {
+ raylib.mrlTextureParameters(
+ id,
+ param,
+ value,
+ );
+}
+
+/// Set cubemap parameters (filter, wrap)
+pub fn rlCubemapParameters(
+ id: u32,
+ param: i32,
+ value: i32,
+) void {
+ raylib.mrlCubemapParameters(
+ id,
+ param,
+ value,
+ );
+}
+
+/// Enable shader program
+pub fn rlEnableShader(
+ id: u32,
+) void {
+ raylib.mrlEnableShader(
+ id,
+ );
+}
+
+/// Disable shader program
+pub fn rlDisableShader() void {
+ raylib.mrlDisableShader();
+}
+
+/// Enable render texture (fbo)
+pub fn rlEnableFramebuffer(
+ id: u32,
+) void {
+ raylib.mrlEnableFramebuffer(
+ id,
+ );
+}
+
+/// Disable render texture (fbo), return to default framebuffer
+pub fn rlDisableFramebuffer() void {
+ raylib.mrlDisableFramebuffer();
+}
+
+/// Activate multiple draw color buffers
+pub fn rlActiveDrawBuffers(
+ count: i32,
+) void {
+ raylib.mrlActiveDrawBuffers(
+ count,
+ );
+}
+
+/// Blit active framebuffer to main framebuffer
+pub fn rlBlitFramebuffer(
+ srcX: i32,
+ srcY: i32,
+ srcWidth: i32,
+ srcHeight: i32,
+ dstX: i32,
+ dstY: i32,
+ dstWidth: i32,
+ dstHeight: i32,
+ bufferMask: i32,
+) void {
+ raylib.mrlBlitFramebuffer(
+ srcX,
+ srcY,
+ srcWidth,
+ srcHeight,
+ dstX,
+ dstY,
+ dstWidth,
+ dstHeight,
+ bufferMask,
+ );
+}
+
+/// Bind framebuffer (FBO)
+pub fn rlBindFramebuffer(
+ target: u32,
+ framebuffer: u32,
+) void {
+ raylib.mrlBindFramebuffer(
+ target,
+ framebuffer,
+ );
+}
+
+/// Enable color blending
+pub fn rlEnableColorBlend() void {
+ raylib.mrlEnableColorBlend();
+}
+
+/// Disable color blending
+pub fn rlDisableColorBlend() void {
+ raylib.mrlDisableColorBlend();
+}
+
+/// Enable depth test
+pub fn rlEnableDepthTest() void {
+ raylib.mrlEnableDepthTest();
+}
+
+/// Disable depth test
+pub fn rlDisableDepthTest() void {
+ raylib.mrlDisableDepthTest();
+}
+
+/// Enable depth write
+pub fn rlEnableDepthMask() void {
+ raylib.mrlEnableDepthMask();
+}
+
+/// Disable depth write
+pub fn rlDisableDepthMask() void {
+ raylib.mrlDisableDepthMask();
+}
+
+/// Enable backface culling
+pub fn rlEnableBackfaceCulling() void {
+ raylib.mrlEnableBackfaceCulling();
+}
+
+/// Disable backface culling
+pub fn rlDisableBackfaceCulling() void {
+ raylib.mrlDisableBackfaceCulling();
+}
+
+/// Color mask control
+pub fn rlColorMask(
+ r: bool,
+ g: bool,
+ b: bool,
+ a: bool,
+) void {
+ raylib.mrlColorMask(
+ r,
+ g,
+ b,
+ a,
+ );
+}
+
+/// Set face culling mode
+pub fn rlSetCullFace(
+ mode: i32,
+) void {
+ raylib.mrlSetCullFace(
+ mode,
+ );
+}
+
+/// Enable scissor test
+pub fn rlEnableScissorTest() void {
+ raylib.mrlEnableScissorTest();
+}
+
+/// Disable scissor test
+pub fn rlDisableScissorTest() void {
+ raylib.mrlDisableScissorTest();
+}
+
+/// Scissor test
+pub fn rlScissor(
+ x: i32,
+ y: i32,
+ width: i32,
+ height: i32,
+) void {
+ raylib.mrlScissor(
+ x,
+ y,
+ width,
+ height,
+ );
+}
+
+/// Enable wire mode
+pub fn rlEnableWireMode() void {
+ raylib.mrlEnableWireMode();
+}
+
+/// Enable point mode
+pub fn rlEnablePointMode() void {
+ raylib.mrlEnablePointMode();
+}
+
+/// Disable wire mode ( and point ) maybe rename
+pub fn rlDisableWireMode() void {
+ raylib.mrlDisableWireMode();
+}
+
+/// Set the line drawing width
+pub fn rlSetLineWidth(
+ width: f32,
+) void {
+ raylib.mrlSetLineWidth(
+ width,
+ );
+}
+
+/// Get the line drawing width
+pub fn rlGetLineWidth() f32 {
+ return raylib.mrlGetLineWidth();
+}
+
+/// Enable line aliasing
+pub fn rlEnableSmoothLines() void {
+ raylib.mrlEnableSmoothLines();
+}
+
+/// Disable line aliasing
+pub fn rlDisableSmoothLines() void {
+ raylib.mrlDisableSmoothLines();
+}
+
+/// Enable stereo rendering
+pub fn rlEnableStereoRender() void {
+ raylib.mrlEnableStereoRender();
+}
+
+/// Disable stereo rendering
+pub fn rlDisableStereoRender() void {
+ raylib.mrlDisableStereoRender();
+}
+
+/// Check if stereo render is enabled
+pub fn rlIsStereoRenderEnabled() bool {
+ return raylib.mrlIsStereoRenderEnabled();
+}
+
+/// Clear color buffer with color
+pub fn rlClearColor(
+ r: u8,
+ g: u8,
+ b: u8,
+ a: u8,
+) void {
+ raylib.mrlClearColor(
+ r,
+ g,
+ b,
+ a,
+ );
+}
+
+/// Clear used screen buffers (color and depth)
+pub fn rlClearScreenBuffers() void {
+ raylib.mrlClearScreenBuffers();
+}
+
+/// Check and log OpenGL error codes
+pub fn rlCheckErrors() void {
+ raylib.mrlCheckErrors();
+}
+
+/// Set blending mode
+pub fn rlSetBlendMode(
+ mode: i32,
+) void {
+ raylib.mrlSetBlendMode(
+ mode,
+ );
+}
+
+/// Set blending mode factor and equation (using OpenGL factors)
+pub fn rlSetBlendFactors(
+ glSrcFactor: i32,
+ glDstFactor: i32,
+ glEquation: i32,
+) void {
+ raylib.mrlSetBlendFactors(
+ glSrcFactor,
+ glDstFactor,
+ glEquation,
+ );
+}
+
+/// Set blending mode factors and equations separately (using OpenGL factors)
+pub fn rlSetBlendFactorsSeparate(
+ glSrcRGB: i32,
+ glDstRGB: i32,
+ glSrcAlpha: i32,
+ glDstAlpha: i32,
+ glEqRGB: i32,
+ glEqAlpha: i32,
+) void {
+ raylib.mrlSetBlendFactorsSeparate(
+ glSrcRGB,
+ glDstRGB,
+ glSrcAlpha,
+ glDstAlpha,
+ glEqRGB,
+ glEqAlpha,
+ );
+}
+
+/// Initialize rlgl (buffers, shaders, textures, states)
+pub fn rlglInit(
+ width: i32,
+ height: i32,
+) void {
+ raylib.mrlglInit(
+ width,
+ height,
+ );
+}
+
+/// De-initialize rlgl (buffers, shaders, textures)
+pub fn rlglClose() void {
+ raylib.mrlglClose();
+}
+
+/// Load OpenGL extensions (loader function required)
+pub fn rlLoadExtensions(
+ loader: *anyopaque,
+) void {
+ raylib.mrlLoadExtensions(
+ loader,
+ );
+}
+
+/// Get current OpenGL version
+pub fn rlGetVersion() i32 {
+ return raylib.mrlGetVersion();
+}
+
+/// Set current framebuffer width
+pub fn rlSetFramebufferWidth(
+ width: i32,
+) void {
+ raylib.mrlSetFramebufferWidth(
+ width,
+ );
+}
+
+/// Get default framebuffer width
+pub fn rlGetFramebufferWidth() i32 {
+ return raylib.mrlGetFramebufferWidth();
+}
+
+/// Set current framebuffer height
+pub fn rlSetFramebufferHeight(
+ height: i32,
+) void {
+ raylib.mrlSetFramebufferHeight(
+ height,
+ );
+}
+
+/// Get default framebuffer height
+pub fn rlGetFramebufferHeight() i32 {
+ return raylib.mrlGetFramebufferHeight();
+}
+
+/// Get default texture id
+pub fn rlGetTextureIdDefault() u32 {
+ return raylib.mrlGetTextureIdDefault();
+}
+
+/// Get default shader id
+pub fn rlGetShaderIdDefault() u32 {
+ return raylib.mrlGetShaderIdDefault();
+}
+
+/// Get default shader locations
+pub fn rlGetShaderLocsDefault() ?[*]i32 {
+ return @as(
+ ?[*]i32,
+ @ptrCast(raylib.mrlGetShaderLocsDefault()),
+ );
+}
+
+/// Load a render batch system
+pub fn rlLoadRenderBatch(
+ numBuffers: i32,
+ bufferElements: i32,
+) rlRenderBatch {
+ var out: rlRenderBatch = undefined;
+ raylib.mrlLoadRenderBatch(
+ @as([*c]raylib.rlRenderBatch, @ptrCast(&out)),
+ numBuffers,
+ bufferElements,
+ );
+ return out;
+}
+
+/// Unload render batch system
+pub fn rlUnloadRenderBatch(
+ batch: rlRenderBatch,
+) void {
+ raylib.mrlUnloadRenderBatch(
+ @as([*c]raylib.rlRenderBatch, @ptrFromInt(@intFromPtr(&batch))),
+ );
+}
+
+/// Draw render batch data (Update->Draw->Reset)
+pub fn rlDrawRenderBatch(
+ batch: ?[*]rlRenderBatch,
+) void {
+ raylib.mrlDrawRenderBatch(
+ @as([*c]raylib.rlRenderBatch, @ptrFromInt(@intFromPtr(batch))),
+ );
+}
+
+/// Set the active render batch for rlgl (NULL for default internal)
+pub fn rlSetRenderBatchActive(
+ batch: ?[*]rlRenderBatch,
+) void {
+ raylib.mrlSetRenderBatchActive(
+ @as([*c]raylib.rlRenderBatch, @ptrFromInt(@intFromPtr(batch))),
+ );
+}
+
+/// Update and draw internal render batch
+pub fn rlDrawRenderBatchActive() void {
+ raylib.mrlDrawRenderBatchActive();
+}
+
+/// Check internal buffer overflow for a given number of vertex
+pub fn rlCheckRenderBatchLimit(
+ vCount: i32,
+) bool {
+ return raylib.mrlCheckRenderBatchLimit(
+ vCount,
+ );
+}
+
+/// Set current texture for render batch and check buffers limits
+pub fn rlSetTexture(
+ id: u32,
+) void {
+ raylib.mrlSetTexture(
+ id,
+ );
+}
+
+/// Load vertex array (vao) if supported
+pub fn rlLoadVertexArray() u32 {
+ return raylib.mrlLoadVertexArray();
+}
+
+/// Load a vertex buffer object
+pub fn rlLoadVertexBuffer(
+ buffer: *const anyopaque,
+ size: i32,
+ dynamic: bool,
+) u32 {
+ return raylib.mrlLoadVertexBuffer(
+ buffer,
+ size,
+ dynamic,
+ );
+}
+
+/// Load vertex buffer elements object
+pub fn rlLoadVertexBufferElement(
+ buffer: *const anyopaque,
+ size: i32,
+ dynamic: bool,
+) u32 {
+ return raylib.mrlLoadVertexBufferElement(
+ buffer,
+ size,
+ dynamic,
+ );
+}
+
+/// Update vertex buffer object data on GPU buffer
+pub fn rlUpdateVertexBuffer(
+ bufferId: u32,
+ data: *const anyopaque,
+ dataSize: i32,
+ offset: i32,
+) void {
+ raylib.mrlUpdateVertexBuffer(
+ bufferId,
+ data,
+ dataSize,
+ offset,
+ );
+}
+
+/// Update vertex buffer elements data on GPU buffer
+pub fn rlUpdateVertexBufferElements(
+ id: u32,
+ data: *const anyopaque,
+ dataSize: i32,
+ offset: i32,
+) void {
+ raylib.mrlUpdateVertexBufferElements(
+ id,
+ data,
+ dataSize,
+ offset,
+ );
+}
+
+/// Unload vertex array (vao)
+pub fn rlUnloadVertexArray(
+ vaoId: u32,
+) void {
+ raylib.mrlUnloadVertexArray(
+ vaoId,
+ );
+}
+
+/// Unload vertex buffer object
+pub fn rlUnloadVertexBuffer(
+ vboId: u32,
+) void {
+ raylib.mrlUnloadVertexBuffer(
+ vboId,
+ );
+}
+
+/// Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER)
+pub fn rlCompileShader(
+ shaderCode: [*:0]const u8,
+ typ: i32,
+) u32 {
+ return raylib.mrlCompileShader(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(shaderCode))),
+ typ,
+ );
+}
+
+/// Set vertex attribute data divisor
+pub fn rlSetVertexAttributeDivisor(
+ index: u32,
+ divisor: i32,
+) void {
+ raylib.mrlSetVertexAttributeDivisor(
+ index,
+ divisor,
+ );
+}
+
+/// Set vertex attribute default value, when attribute to provided
+pub fn rlSetVertexAttributeDefault(
+ locIndex: i32,
+ value: *const anyopaque,
+ attribType: i32,
+ count: i32,
+) void {
+ raylib.mrlSetVertexAttributeDefault(
+ locIndex,
+ value,
+ attribType,
+ count,
+ );
+}
+
+/// Draw vertex array (currently active vao)
+pub fn rlDrawVertexArray(
+ offset: i32,
+ count: i32,
+) void {
+ raylib.mrlDrawVertexArray(
+ offset,
+ count,
+ );
+}
+
+/// Draw vertex array elements
+pub fn rlDrawVertexArrayElements(
+ offset: i32,
+ count: i32,
+ buffer: *const anyopaque,
+) void {
+ raylib.mrlDrawVertexArrayElements(
+ offset,
+ count,
+ buffer,
+ );
+}
+
+/// Draw vertex array (currently active vao) with instancing
+pub fn rlDrawVertexArrayInstanced(
+ offset: i32,
+ count: i32,
+ instances: i32,
+) void {
+ raylib.mrlDrawVertexArrayInstanced(
+ offset,
+ count,
+ instances,
+ );
+}
+
+/// Draw vertex array elements with instancing
+pub fn rlDrawVertexArrayElementsInstanced(
+ offset: i32,
+ count: i32,
+ buffer: *const anyopaque,
+ instances: i32,
+) void {
+ raylib.mrlDrawVertexArrayElementsInstanced(
+ offset,
+ count,
+ buffer,
+ instances,
+ );
+}
+
+/// Load texture data
+pub fn rlLoadTexture(
+ data: *const anyopaque,
+ width: i32,
+ height: i32,
+ format: i32,
+ mipmapCount: i32,
+) u32 {
+ return raylib.mrlLoadTexture(
+ data,
+ width,
+ height,
+ format,
+ mipmapCount,
+ );
+}
+
+/// Load depth texture/renderbuffer (to be attached to fbo)
+pub fn rlLoadTextureDepth(
+ width: i32,
+ height: i32,
+ useRenderBuffer: bool,
+) u32 {
+ return raylib.mrlLoadTextureDepth(
+ width,
+ height,
+ useRenderBuffer,
+ );
+}
+
+/// Load texture cubemap data
+pub fn rlLoadTextureCubemap(
+ data: *const anyopaque,
+ size: i32,
+ format: i32,
+) u32 {
+ return raylib.mrlLoadTextureCubemap(
+ data,
+ size,
+ format,
+ );
+}
+
+/// Update texture with new data on GPU
+pub fn rlUpdateTexture(
+ id: u32,
+ offsetX: i32,
+ offsetY: i32,
+ width: i32,
+ height: i32,
+ format: i32,
+ data: *const anyopaque,
+) void {
+ raylib.mrlUpdateTexture(
+ id,
+ offsetX,
+ offsetY,
+ width,
+ height,
+ format,
+ data,
+ );
+}
+
+/// Get OpenGL internal formats
+pub fn rlGetGlTextureFormats(
+ format: i32,
+ glInternalFormat: ?[*]u32,
+ glFormat: ?[*]u32,
+ glType: ?[*]u32,
+) void {
+ raylib.mrlGetGlTextureFormats(
+ format,
+ @as([*c]u32, @ptrCast(glInternalFormat)),
+ @as([*c]u32, @ptrCast(glFormat)),
+ @as([*c]u32, @ptrCast(glType)),
+ );
+}
+
+/// Get name string for pixel format
+pub fn rlGetPixelFormatName(
+ format: u32,
+) [*:0]const u8 {
+ return @as(
+ [*:0]const u8,
+ @ptrCast(raylib.mrlGetPixelFormatName(
+ format,
+ )),
+ );
+}
+
+/// Unload texture from GPU memory
+pub fn rlUnloadTexture(
+ id: u32,
+) void {
+ raylib.mrlUnloadTexture(
+ id,
+ );
+}
+
+/// Generate mipmap data for selected texture
+pub fn rlGenTextureMipmaps(
+ id: u32,
+ width: i32,
+ height: i32,
+ format: i32,
+ mipmaps: ?[*]i32,
+) void {
+ raylib.mrlGenTextureMipmaps(
+ id,
+ width,
+ height,
+ format,
+ @as([*c]i32, @ptrCast(mipmaps)),
+ );
+}
+
+/// Read texture pixel data
+pub fn rlReadTexturePixels(
+ id: u32,
+ width: i32,
+ height: i32,
+ format: i32,
+) *anyopaque {
+ return @as(
+ *anyopaque,
+ @ptrCast(raylib.mrlReadTexturePixels(
+ id,
+ width,
+ height,
+ format,
+ )),
+ );
+}
+
+/// Read screen pixel data (color buffer)
+pub fn rlReadScreenPixels(
+ width: i32,
+ height: i32,
+) [*:0]const u8 {
+ return @as(
+ ?[*]u8,
+ @ptrCast(raylib.mrlReadScreenPixels(
+ width,
+ height,
+ )),
+ );
+}
+
+/// Load an empty framebuffer
+pub fn rlLoadFramebuffer(
+ width: i32,
+ height: i32,
+) u32 {
+ return raylib.mrlLoadFramebuffer(
+ width,
+ height,
+ );
+}
+
+/// Attach texture/renderbuffer to a framebuffer
+pub fn rlFramebufferAttach(
+ fboId: u32,
+ texId: u32,
+ attachType: i32,
+ texType: i32,
+ mipLevel: i32,
+) void {
+ raylib.mrlFramebufferAttach(
+ fboId,
+ texId,
+ attachType,
+ texType,
+ mipLevel,
+ );
+}
+
+/// Verify framebuffer is complete
+pub fn rlFramebufferComplete(
+ id: u32,
+) bool {
+ return raylib.mrlFramebufferComplete(
+ id,
+ );
+}
+
+/// Delete framebuffer from GPU
+pub fn rlUnloadFramebuffer(
+ id: u32,
+) void {
+ raylib.mrlUnloadFramebuffer(
+ id,
+ );
+}
+
+/// Load shader from code strings
+pub fn rlLoadShaderCode(
+ vsCode: [*:0]const u8,
+ fsCode: [*:0]const u8,
+) u32 {
+ return raylib.mrlLoadShaderCode(
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(vsCode))),
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(fsCode))),
+ );
+}
+
+/// Load custom shader program
+pub fn rlLoadShaderProgram(
+ vShaderId: u32,
+ fShaderId: u32,
+) u32 {
+ return raylib.mrlLoadShaderProgram(
+ vShaderId,
+ fShaderId,
+ );
+}
+
+/// Unload shader program
+pub fn rlUnloadShaderProgram(
+ id: u32,
+) void {
+ raylib.mrlUnloadShaderProgram(
+ id,
+ );
+}
+
+/// Get shader location uniform
+pub fn rlGetLocationUniform(
+ shaderId: u32,
+ uniformName: [*:0]const u8,
+) i32 {
+ return raylib.mrlGetLocationUniform(
+ shaderId,
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(uniformName))),
+ );
+}
+
+/// Get shader location attribute
+pub fn rlGetLocationAttrib(
+ shaderId: u32,
+ attribName: [*:0]const u8,
+) i32 {
+ return raylib.mrlGetLocationAttrib(
+ shaderId,
+ @as([*c]const u8, @ptrFromInt(@intFromPtr(attribName))),
+ );
+}
+
+/// Set shader value uniform
+pub fn rlSetUniform(
+ locIndex: i32,
+ value: *const anyopaque,
+ uniformType: i32,
+ count: i32,
+) void {
+ raylib.mrlSetUniform(
+ locIndex,
+ value,
+ uniformType,
+ count,
+ );
+}
+
+/// Set shader value matrix
+pub fn rlSetUniformMatrix(
+ locIndex: i32,
+ mat: Matrix,
+) void {
+ raylib.mrlSetUniformMatrix(
+ locIndex,
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&mat))),
+ );
+}
+
+/// Set shader value sampler
+pub fn rlSetUniformSampler(
+ locIndex: i32,
+ textureId: u32,
+) void {
+ raylib.mrlSetUniformSampler(
+ locIndex,
+ textureId,
+ );
+}
+
+/// Set shader currently active (id and locations)
+pub fn rlSetShader(
+ id: u32,
+ locs: ?[*]i32,
+) void {
+ raylib.mrlSetShader(
+ id,
+ @as([*c]i32, @ptrCast(locs)),
+ );
+}
+
+/// Load compute shader program
+pub fn rlLoadComputeShaderProgram(
+ shaderId: u32,
+) u32 {
+ return raylib.mrlLoadComputeShaderProgram(
+ shaderId,
+ );
+}
+
+/// Dispatch compute shader (equivalent to *draw* for graphics pipeline)
+pub fn rlComputeShaderDispatch(
+ groupX: u32,
+ groupY: u32,
+ groupZ: u32,
+) void {
+ raylib.mrlComputeShaderDispatch(
+ groupX,
+ groupY,
+ groupZ,
+ );
+}
+
+/// Load shader storage buffer object (SSBO)
+pub fn rlLoadShaderBuffer(
+ size: u32,
+ data: *const anyopaque,
+ usageHint: i32,
+) u32 {
+ return raylib.mrlLoadShaderBuffer(
+ size,
+ data,
+ usageHint,
+ );
+}
+
+/// Unload shader storage buffer object (SSBO)
+pub fn rlUnloadShaderBuffer(
+ ssboId: u32,
+) void {
+ raylib.mrlUnloadShaderBuffer(
+ ssboId,
+ );
+}
+
+/// Update SSBO buffer data
+pub fn rlUpdateShaderBuffer(
+ id: u32,
+ data: *const anyopaque,
+ dataSize: u32,
+ offset: u32,
+) void {
+ raylib.mrlUpdateShaderBuffer(
+ id,
+ data,
+ dataSize,
+ offset,
+ );
+}
+
+/// Bind SSBO buffer
+pub fn rlBindShaderBuffer(
+ id: u32,
+ index: u32,
+) void {
+ raylib.mrlBindShaderBuffer(
+ id,
+ index,
+ );
+}
+
+/// Read SSBO buffer data (GPU->CPU)
+pub fn rlReadShaderBuffer(
+ id: u32,
+ dest: *anyopaque,
+ count: u32,
+ offset: u32,
+) void {
+ raylib.mrlReadShaderBuffer(
+ id,
+ dest,
+ count,
+ offset,
+ );
+}
+
+/// Copy SSBO data between buffers
+pub fn rlCopyShaderBuffer(
+ destId: u32,
+ srcId: u32,
+ destOffset: u32,
+ srcOffset: u32,
+ count: u32,
+) void {
+ raylib.mrlCopyShaderBuffer(
+ destId,
+ srcId,
+ destOffset,
+ srcOffset,
+ count,
+ );
+}
+
+/// Get SSBO buffer size
+pub fn rlGetShaderBufferSize(
+ id: u32,
+) u32 {
+ return raylib.mrlGetShaderBufferSize(
+ id,
+ );
+}
+
+/// Bind image texture
+pub fn rlBindImageTexture(
+ id: u32,
+ index: u32,
+ format: i32,
+ readonly: bool,
+) void {
+ raylib.mrlBindImageTexture(
+ id,
+ index,
+ format,
+ readonly,
+ );
+}
+
+/// Get internal modelview matrix
+pub fn rlGetMatrixModelview() Matrix {
+ var out: Matrix = undefined;
+ raylib.mrlGetMatrixModelview(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Get internal projection matrix
+pub fn rlGetMatrixProjection() Matrix {
+ var out: Matrix = undefined;
+ raylib.mrlGetMatrixProjection(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ );
+ return out;
+}
+
+/// Get internal accumulated transform matrix
+pub fn rlGetMatrixTransform() Matrix {
+ var out: Matrix = undefined;
+ raylib.mrlGetMatrixTransform(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ );
+ return out;
+}
+
+///
+pub fn rlGetMatrixProjectionStereo(
+ eye: i32,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mrlGetMatrixProjectionStereo(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ eye,
+ );
+ return out;
+}
+
+///
+pub fn rlGetMatrixViewOffsetStereo(
+ eye: i32,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mrlGetMatrixViewOffsetStereo(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ eye,
+ );
+ return out;
+}
+
+/// Set a custom projection matrix (replaces internal projection matrix)
+pub fn rlSetMatrixProjection(
+ proj: Matrix,
+) void {
+ raylib.mrlSetMatrixProjection(
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&proj))),
+ );
+}
+
+/// Set a custom modelview matrix (replaces internal modelview matrix)
+pub fn rlSetMatrixModelview(
+ view: Matrix,
+) void {
+ raylib.mrlSetMatrixModelview(
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&view))),
+ );
+}
+
+/// Set eyes projection matrices for stereo rendering
+pub fn rlSetMatrixProjectionStereo(
+ right: Matrix,
+ left: Matrix,
+) void {
+ raylib.mrlSetMatrixProjectionStereo(
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&right))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&left))),
+ );
+}
+
+/// Set eyes view offsets matrices for stereo rendering
+pub fn rlSetMatrixViewOffsetStereo(
+ right: Matrix,
+ left: Matrix,
+) void {
+ raylib.mrlSetMatrixViewOffsetStereo(
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&right))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&left))),
+ );
+}
+
+/// Load and draw a cube
+pub fn rlLoadDrawCube() void {
+ raylib.mrlLoadDrawCube();
+}
+
+/// Load and draw a quad
+pub fn rlLoadDrawQuad() void {
+ raylib.mrlLoadDrawQuad();
+}
+
+///
+pub fn Clamp(
+ value: f32,
+ min: f32,
+ max: f32,
+) f32 {
+ return raylib.mClamp(
+ value,
+ min,
+ max,
+ );
+}
+
+///
+pub fn Lerp(
+ start: f32,
+ end: f32,
+ amount: f32,
+) f32 {
+ return raylib.mLerp(
+ start,
+ end,
+ amount,
+ );
+}
+
+///
+pub fn Normalize(
+ value: f32,
+ start: f32,
+ end: f32,
+) f32 {
+ return raylib.mNormalize(
+ value,
+ start,
+ end,
+ );
+}
+
+///
+pub fn Remap(
+ value: f32,
+ inputStart: f32,
+ inputEnd: f32,
+ outputStart: f32,
+ outputEnd: f32,
+) f32 {
+ return raylib.mRemap(
+ value,
+ inputStart,
+ inputEnd,
+ outputStart,
+ outputEnd,
+ );
+}
+
+///
+pub fn Wrap(
+ value: f32,
+ min: f32,
+ max: f32,
+) f32 {
+ return raylib.mWrap(
+ value,
+ min,
+ max,
+ );
+}
+
+///
+pub fn FloatEquals(
+ x: f32,
+ y: f32,
+) i32 {
+ return raylib.mFloatEquals(
+ x,
+ y,
+ );
+}
+
+///
+pub fn Vector2Zero() Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Zero(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ );
+ return out;
+}
+
+///
+pub fn Vector2One() Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2One(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ );
+ return out;
+}
+
+///
+pub fn Vector2Add(
+ v1: Vector2,
+ v2: Vector2,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Add(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector2AddValue(
+ v: Vector2,
+ add: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2AddValue(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ add,
+ );
+ return out;
+}
+
+///
+pub fn Vector2Subtract(
+ v1: Vector2,
+ v2: Vector2,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Subtract(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector2SubtractValue(
+ v: Vector2,
+ sub: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2SubtractValue(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ sub,
+ );
+ return out;
+}
+
+///
+pub fn Vector2Length(
+ v: Vector2,
+) f32 {
+ return raylib.mVector2Length(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ );
+}
+
+///
+pub fn Vector2LengthSqr(
+ v: Vector2,
+) f32 {
+ return raylib.mVector2LengthSqr(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ );
+}
+
+///
+pub fn Vector2DotProduct(
+ v1: Vector2,
+ v2: Vector2,
+) f32 {
+ return raylib.mVector2DotProduct(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v2))),
+ );
+}
+
+///
+pub fn Vector2Distance(
+ v1: Vector2,
+ v2: Vector2,
+) f32 {
+ return raylib.mVector2Distance(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v2))),
+ );
+}
+
+///
+pub fn Vector2DistanceSqr(
+ v1: Vector2,
+ v2: Vector2,
+) f32 {
+ return raylib.mVector2DistanceSqr(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v2))),
+ );
+}
+
+///
+pub fn Vector2Angle(
+ v1: Vector2,
+ v2: Vector2,
+) f32 {
+ return raylib.mVector2Angle(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v2))),
+ );
+}
+
+///
+pub fn Vector2LineAngle(
+ start: Vector2,
+ end: Vector2,
+) f32 {
+ return raylib.mVector2LineAngle(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&start))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&end))),
+ );
+}
+
+///
+pub fn Vector2Scale(
+ v: Vector2,
+ scale: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Scale(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ scale,
+ );
+ return out;
+}
+
+///
+pub fn Vector2Multiply(
+ v1: Vector2,
+ v2: Vector2,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Multiply(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector2Negate(
+ v: Vector2,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Negate(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ );
+ return out;
+}
+
+///
+pub fn Vector2Divide(
+ v1: Vector2,
+ v2: Vector2,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Divide(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector2Normalize(
+ v: Vector2,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Normalize(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ );
+ return out;
+}
+
+///
+pub fn Vector2Transform(
+ v: Vector2,
+ mat: Matrix,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Transform(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&mat))),
+ );
+ return out;
+}
+
+///
+pub fn Vector2Lerp(
+ v1: Vector2,
+ v2: Vector2,
+ amount: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Lerp(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v2))),
+ amount,
+ );
+ return out;
+}
+
+///
+pub fn Vector2Reflect(
+ v: Vector2,
+ normal: Vector2,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Reflect(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&normal))),
+ );
+ return out;
+}
+
+///
+pub fn Vector2Rotate(
+ v: Vector2,
+ angle: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Rotate(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ angle,
+ );
+ return out;
+}
+
+///
+pub fn Vector2MoveTowards(
+ v: Vector2,
+ target: Vector2,
+ maxDistance: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2MoveTowards(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&target))),
+ maxDistance,
+ );
+ return out;
+}
+
+///
+pub fn Vector2Invert(
+ v: Vector2,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Invert(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ );
+ return out;
+}
+
+///
+pub fn Vector2Clamp(
+ v: Vector2,
+ min: Vector2,
+ max: Vector2,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2Clamp(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&min))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&max))),
+ );
+ return out;
+}
+
+///
+pub fn Vector2ClampValue(
+ v: Vector2,
+ min: f32,
+ max: f32,
+) Vector2 {
+ var out: Vector2 = undefined;
+ raylib.mVector2ClampValue(
+ @as([*c]raylib.Vector2, @ptrCast(&out)),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&v))),
+ min,
+ max,
+ );
+ return out;
+}
+
+///
+pub fn Vector2Equals(
+ p: Vector2,
+ q: Vector2,
+) i32 {
+ return raylib.mVector2Equals(
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&p))),
+ @as([*c]raylib.Vector2, @ptrFromInt(@intFromPtr(&q))),
+ );
+}
+
+///
+pub fn Vector3Zero() Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Zero(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ );
+ return out;
+}
+
+///
+pub fn Vector3One() Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3One(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Add(
+ v1: Vector3,
+ v2: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Add(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3AddValue(
+ v: Vector3,
+ add: f32,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3AddValue(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ add,
+ );
+ return out;
+}
+
+///
+pub fn Vector3Subtract(
+ v1: Vector3,
+ v2: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Subtract(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3SubtractValue(
+ v: Vector3,
+ sub: f32,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3SubtractValue(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ sub,
+ );
+ return out;
+}
+
+///
+pub fn Vector3Scale(
+ v: Vector3,
+ scalar: f32,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Scale(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ scalar,
+ );
+ return out;
+}
+
+///
+pub fn Vector3Multiply(
+ v1: Vector3,
+ v2: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Multiply(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3CrossProduct(
+ v1: Vector3,
+ v2: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3CrossProduct(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Perpendicular(
+ v: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Perpendicular(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Length(
+ v: Vector3,
+) f32 {
+ return raylib.mVector3Length(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ );
+}
+
+///
+pub fn Vector3LengthSqr(
+ v: Vector3,
+) f32 {
+ return raylib.mVector3LengthSqr(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ );
+}
+
+///
+pub fn Vector3DotProduct(
+ v1: Vector3,
+ v2: Vector3,
+) f32 {
+ return raylib.mVector3DotProduct(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+}
+
+///
+pub fn Vector3Distance(
+ v1: Vector3,
+ v2: Vector3,
+) f32 {
+ return raylib.mVector3Distance(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+}
+
+///
+pub fn Vector3DistanceSqr(
+ v1: Vector3,
+ v2: Vector3,
+) f32 {
+ return raylib.mVector3DistanceSqr(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+}
+
+///
+pub fn Vector3Angle(
+ v1: Vector3,
+ v2: Vector3,
+) f32 {
+ return raylib.mVector3Angle(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+}
+
+///
+pub fn Vector3Negate(
+ v: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Negate(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Divide(
+ v1: Vector3,
+ v2: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Divide(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Normalize(
+ v: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Normalize(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Project(
+ v1: Vector3,
+ v2: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Project(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Reject(
+ v1: Vector3,
+ v2: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Reject(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3OrthoNormalize(
+ v1: ?[*]Vector3,
+ v2: ?[*]Vector3,
+) void {
+ raylib.mVector3OrthoNormalize(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(v2))),
+ );
+}
+
+///
+pub fn Vector3Transform(
+ v: Vector3,
+ mat: Matrix,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Transform(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&mat))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3RotateByQuaternion(
+ v: Vector3,
+ q: Vector4,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3RotateByQuaternion(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3RotateByAxisAngle(
+ v: Vector3,
+ axis: Vector3,
+ angle: f32,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3RotateByAxisAngle(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&axis))),
+ angle,
+ );
+ return out;
+}
+
+///
+pub fn Vector3Lerp(
+ v1: Vector3,
+ v2: Vector3,
+ amount: f32,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Lerp(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ amount,
+ );
+ return out;
+}
+
+///
+pub fn Vector3Reflect(
+ v: Vector3,
+ normal: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Reflect(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&normal))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Min(
+ v1: Vector3,
+ v2: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Min(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Max(
+ v1: Vector3,
+ v2: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Max(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v1))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v2))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Barycenter(
+ p: Vector3,
+ a: Vector3,
+ b: Vector3,
+ c: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Barycenter(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&p))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&a))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&b))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&c))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Unproject(
+ source: Vector3,
+ projection: Matrix,
+ view: Matrix,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Unproject(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&source))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&projection))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&view))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3ToFloatV(
+ v: Vector3,
+) float3 {
+ var out: float3 = undefined;
+ raylib.mVector3ToFloatV(
+ @as([*c]raylib.float3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Invert(
+ v: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Invert(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3Clamp(
+ v: Vector3,
+ min: Vector3,
+ max: Vector3,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Clamp(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&min))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&max))),
+ );
+ return out;
+}
+
+///
+pub fn Vector3ClampValue(
+ v: Vector3,
+ min: f32,
+ max: f32,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3ClampValue(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ min,
+ max,
+ );
+ return out;
+}
+
+///
+pub fn Vector3Equals(
+ p: Vector3,
+ q: Vector3,
+) i32 {
+ return raylib.mVector3Equals(
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&p))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&q))),
+ );
+}
+
+///
+pub fn Vector3Refract(
+ v: Vector3,
+ n: Vector3,
+ r: f32,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mVector3Refract(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&v))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&n))),
+ r,
+ );
+ return out;
+}
+
+///
+pub fn MatrixDeterminant(
+ mat: Matrix,
+) f32 {
+ return raylib.mMatrixDeterminant(
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&mat))),
+ );
+}
+
+///
+pub fn MatrixTrace(
+ mat: Matrix,
+) f32 {
+ return raylib.mMatrixTrace(
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&mat))),
+ );
+}
+
+///
+pub fn MatrixTranspose(
+ mat: Matrix,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixTranspose(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&mat))),
+ );
+ return out;
+}
+
+///
+pub fn MatrixInvert(
+ mat: Matrix,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixInvert(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&mat))),
+ );
+ return out;
+}
+
+///
+pub fn MatrixIdentity() Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixIdentity(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ );
+ return out;
+}
+
+///
+pub fn MatrixAdd(
+ left: Matrix,
+ right: Matrix,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixAdd(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&left))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&right))),
+ );
+ return out;
+}
+
+///
+pub fn MatrixSubtract(
+ left: Matrix,
+ right: Matrix,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixSubtract(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&left))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&right))),
+ );
+ return out;
+}
+
+///
+pub fn MatrixMultiply(
+ left: Matrix,
+ right: Matrix,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixMultiply(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&left))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&right))),
+ );
+ return out;
+}
+
+///
+pub fn MatrixTranslate(
+ x: f32,
+ y: f32,
+ z: f32,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixTranslate(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ x,
+ y,
+ z,
+ );
+ return out;
+}
+
+///
+pub fn MatrixRotate(
+ axis: Vector3,
+ angle: f32,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixRotate(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&axis))),
+ angle,
+ );
+ return out;
+}
+
+///
+pub fn MatrixRotateX(
+ angle: f32,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixRotateX(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ angle,
+ );
+ return out;
+}
+
+///
+pub fn MatrixRotateY(
+ angle: f32,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixRotateY(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ angle,
+ );
+ return out;
+}
+
+///
+pub fn MatrixRotateZ(
+ angle: f32,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixRotateZ(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ angle,
+ );
+ return out;
+}
+
+///
+pub fn MatrixRotateXYZ(
+ angle: Vector3,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixRotateXYZ(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&angle))),
+ );
+ return out;
+}
+
+///
+pub fn MatrixRotateZYX(
+ angle: Vector3,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixRotateZYX(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&angle))),
+ );
+ return out;
+}
+
+///
+pub fn MatrixScale(
+ x: f32,
+ y: f32,
+ z: f32,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixScale(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ x,
+ y,
+ z,
+ );
+ return out;
+}
+
+///
+pub fn MatrixFrustum(
+ left: f64,
+ right: f64,
+ bottom: f64,
+ top: f64,
+ near: f64,
+ far: f64,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixFrustum(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ left,
+ right,
+ bottom,
+ top,
+ near,
+ far,
+ );
+ return out;
+}
+
+///
+pub fn MatrixPerspective(
+ fovY: f64,
+ aspect: f64,
+ nearPlane: f64,
+ farPlane: f64,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixPerspective(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ fovY,
+ aspect,
+ nearPlane,
+ farPlane,
+ );
+ return out;
+}
+
+///
+pub fn MatrixOrtho(
+ left: f64,
+ right: f64,
+ bottom: f64,
+ top: f64,
+ nearPlane: f64,
+ farPlane: f64,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixOrtho(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ left,
+ right,
+ bottom,
+ top,
+ nearPlane,
+ farPlane,
+ );
+ return out;
+}
+
+///
+pub fn MatrixLookAt(
+ eye: Vector3,
+ target: Vector3,
+ up: Vector3,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mMatrixLookAt(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&eye))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&target))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&up))),
+ );
+ return out;
+}
+
+///
+pub fn MatrixToFloatV(
+ mat: Matrix,
+) float16 {
+ var out: float16 = undefined;
+ raylib.mMatrixToFloatV(
+ @as([*c]raylib.float16, @ptrCast(&out)),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&mat))),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionAdd(
+ q1: Vector4,
+ q2: Vector4,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionAdd(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q1))),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q2))),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionAddValue(
+ q: Vector4,
+ add: f32,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionAddValue(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q))),
+ add,
+ );
+ return out;
+}
+
+///
+pub fn QuaternionSubtract(
+ q1: Vector4,
+ q2: Vector4,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionSubtract(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q1))),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q2))),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionSubtractValue(
+ q: Vector4,
+ sub: f32,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionSubtractValue(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q))),
+ sub,
+ );
+ return out;
+}
+
+///
+pub fn QuaternionIdentity() Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionIdentity(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionLength(
+ q: Vector4,
+) f32 {
+ return raylib.mQuaternionLength(
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q))),
+ );
+}
+
+///
+pub fn QuaternionNormalize(
+ q: Vector4,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionNormalize(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q))),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionInvert(
+ q: Vector4,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionInvert(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q))),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionMultiply(
+ q1: Vector4,
+ q2: Vector4,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionMultiply(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q1))),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q2))),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionScale(
+ q: Vector4,
+ mul: f32,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionScale(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q))),
+ mul,
+ );
+ return out;
+}
+
+///
+pub fn QuaternionDivide(
+ q1: Vector4,
+ q2: Vector4,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionDivide(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q1))),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q2))),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionLerp(
+ q1: Vector4,
+ q2: Vector4,
+ amount: f32,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionLerp(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q1))),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q2))),
+ amount,
+ );
+ return out;
+}
+
+///
+pub fn QuaternionNlerp(
+ q1: Vector4,
+ q2: Vector4,
+ amount: f32,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionNlerp(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q1))),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q2))),
+ amount,
+ );
+ return out;
+}
+
+///
+pub fn QuaternionSlerp(
+ q1: Vector4,
+ q2: Vector4,
+ amount: f32,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionSlerp(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q1))),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q2))),
+ amount,
+ );
+ return out;
+}
+
+///
+pub fn QuaternionFromVector3ToVector3(
+ from: Vector3,
+ to: Vector3,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionFromVector3ToVector3(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&from))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&to))),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionFromMatrix(
+ mat: Matrix,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionFromMatrix(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&mat))),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionToMatrix(
+ q: Vector4,
+) Matrix {
+ var out: Matrix = undefined;
+ raylib.mQuaternionToMatrix(
+ @as([*c]raylib.Matrix, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q))),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionFromAxisAngle(
+ axis: Vector3,
+ angle: f32,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionFromAxisAngle(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(&axis))),
+ angle,
+ );
+ return out;
+}
+
+///
+pub fn QuaternionToAxisAngle(
+ q: Vector4,
+ outAxis: ?[*]Vector3,
+ outAngle: ?[*]f32,
+) void {
+ raylib.mQuaternionToAxisAngle(
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q))),
+ @as([*c]raylib.Vector3, @ptrFromInt(@intFromPtr(outAxis))),
+ @as([*c]f32, @ptrCast(outAngle)),
+ );
+}
+
+///
+pub fn QuaternionFromEuler(
+ pitch: f32,
+ yaw: f32,
+ roll: f32,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionFromEuler(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ pitch,
+ yaw,
+ roll,
+ );
+ return out;
+}
+
+///
+pub fn QuaternionToEuler(
+ q: Vector4,
+) Vector3 {
+ var out: Vector3 = undefined;
+ raylib.mQuaternionToEuler(
+ @as([*c]raylib.Vector3, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q))),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionTransform(
+ q: Vector4,
+ mat: Matrix,
+) Vector4 {
+ var out: Vector4 = undefined;
+ raylib.mQuaternionTransform(
+ @as([*c]raylib.Vector4, @ptrCast(&out)),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q))),
+ @as([*c]raylib.Matrix, @ptrFromInt(@intFromPtr(&mat))),
+ );
+ return out;
+}
+
+///
+pub fn QuaternionEquals(
+ p: Vector4,
+ q: Vector4,
+) i32 {
+ return raylib.mQuaternionEquals(
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&p))),
+ @as([*c]raylib.Vector4, @ptrFromInt(@intFromPtr(&q))),
+ );
+}
+
+/// Image, pixel data stored in CPU memory (RAM)
+pub const Image = extern struct {
+ /// Image raw data
+ data: *anyopaque,
+ /// Image base width
+ width: i32,
+ /// Image base height
+ height: i32,
+ /// Mipmap levels, 1 by default
+ mipmaps: i32,
+ /// Data format (PixelFormat type)
+ format: i32,
+};
+
+/// Texture, tex data stored in GPU memory (VRAM)
+pub const Texture2D = extern struct {
+ /// OpenGL texture id
+ id: u32,
+ /// Texture base width
+ width: i32,
+ /// Texture base height
+ height: i32,
+ /// Mipmap levels, 1 by default
+ mipmaps: i32,
+ /// Data format (PixelFormat type)
+ format: i32,
+};
+
+/// RenderTexture, fbo for texture rendering
+pub const RenderTexture2D = extern struct {
+ /// OpenGL framebuffer object id
+ id: u32,
+ /// Color buffer attachment texture
+ texture: Texture2D,
+ /// Depth buffer attachment texture
+ depth: Texture2D,
+};
+
+/// NPatchInfo, n-patch layout info
+pub const NPatchInfo = extern struct {
+ /// Texture source rectangle
+ source: Rectangle,
+ /// Left border offset
+ left: i32,
+ /// Top border offset
+ top: i32,
+ /// Right border offset
+ right: i32,
+ /// Bottom border offset
+ bottom: i32,
+ /// Layout of the n-patch: 3x3, 1x3 or 3x1
+ layout: i32,
+};
+
+/// GlyphInfo, font characters glyphs info
+pub const GlyphInfo = extern struct {
+ /// Character value (Unicode)
+ value: i32,
+ /// Character offset X when drawing
+ offsetX: i32,
+ /// Character offset Y when drawing
+ offsetY: i32,
+ /// Character advance position X
+ advanceX: i32,
+ /// Character image data
+ image: Image,
+};
+
+/// Font, font texture and GlyphInfo array data
+pub const Font = extern struct {
+ /// Base size (default chars height)
+ baseSize: i32,
+ /// Number of glyph characters
+ glyphCount: i32,
+ /// Padding around the glyph characters
+ glyphPadding: i32,
+ /// Texture atlas containing the glyphs
+ texture: Texture2D,
+ /// Rectangles in texture for the glyphs
+ recs: ?[*]Rectangle,
+ /// Glyphs info data
+ glyphs: ?[*]GlyphInfo,
+};
+
+/// Camera, defines position/orientation in 3d space
+pub const Camera3D = extern struct {
+ /// Camera position
+ position: Vector3,
+ /// Camera target it looks-at
+ target: Vector3,
+ /// Camera up vector (rotation over its axis)
+ up: Vector3,
+ /// Camera field-of-view apperture in Y (degrees) in perspective, used as near plane width in orthographic
+ fovy: f32,
+ /// Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC
+ projection: CameraProjection,
+};
+
+/// Mesh, vertex data and vao/vbo
+pub const Mesh = extern struct {
+ /// Number of vertices stored in arrays
+ vertexCount: i32,
+ /// Number of triangles stored (indexed or not)
+ triangleCount: i32,
+ /// Vertex position (XYZ - 3 components per vertex) (shader-location = 0)
+ vertices: ?[*]f32,
+ /// Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
+ texcoords: ?[*]f32,
+ /// Vertex texture second coordinates (UV - 2 components per vertex) (shader-location = 5)
+ texcoords2: ?[*]f32,
+ /// Vertex normals (XYZ - 3 components per vertex) (shader-location = 2)
+ normals: ?[*]f32,
+ /// Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4)
+ tangents: ?[*]f32,
+ /// Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
+ colors: ?[*]u8,
+ /// Vertex indices (in case vertex data comes indexed)
+ indices: ?[*]u16,
+ /// Animated vertex positions (after bones transformations)
+ animVertices: ?[*]f32,
+ /// Animated normals (after bones transformations)
+ animNormals: ?[*]f32,
+ /// Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning)
+ boneIds: ?[*]u8,
+ /// Vertex bone weight, up to 4 bones influence by vertex (skinning)
+ boneWeights: ?[*]f32,
+ /// OpenGL Vertex Array Object id
+ vaoId: u32,
+ /// OpenGL Vertex Buffer Objects id (default vertex data)
+ vboId: ?[*]u32,
+};
+
+/// Shader
+pub const Shader = extern struct {
+ /// Shader program id
+ id: u32,
+ /// Shader locations array (RL_MAX_SHADER_LOCATIONS)
+ locs: ?[*]i32,
+};
+
+/// MaterialMap
+pub const MaterialMap = extern struct {
+ /// Material map texture
+ texture: Texture2D,
+ /// Material map color
+ color: Color,
+ /// Material map value
+ value: f32,
+};
+
+/// Material, includes shader and maps
+pub const Material = extern struct {
+ /// Material shader
+ shader: Shader,
+ /// Material maps array (MAX_MATERIAL_MAPS)
+ maps: ?[*]MaterialMap,
+ /// Material generic parameters (if required)
+ params: [4]f32,
+};
+
+/// Bone, skeletal animation bone
+pub const BoneInfo = extern struct {
+ /// Bone name
+ name: [32]u8,
+ /// Bone parent
+ parent: i32,
+};
+
+/// Model, meshes, materials and animation data
+pub const Model = extern struct {
+ /// Local transform matrix
+ transform: Matrix,
+ /// Number of meshes
+ meshCount: i32,
+ /// Number of materials
+ materialCount: i32,
+ /// Meshes array
+ meshes: ?[*]Mesh,
+ /// Materials array
+ materials: ?[*]Material,
+ /// Mesh material number
+ meshMaterial: ?[*]i32,
+ /// Number of bones
+ boneCount: i32,
+ /// Bones information (skeleton)
+ bones: ?[*]BoneInfo,
+ /// Bones base transformation (pose)
+ bindPose: ?[*]Transform,
+};
+
+/// ModelAnimation
+pub const ModelAnimation = extern struct {
+ /// Number of bones
+ boneCount: i32,
+ /// Number of animation frames
+ frameCount: i32,
+ /// Bones information (skeleton)
+ bones: ?[*]BoneInfo,
+ /// Poses array by frame
+ framePoses: ?[*][*]Transform,
+ /// Animation name
+ name: [32]u8,
+};
+
+/// Ray, ray for raycasting
+pub const Ray = extern struct {
+ /// Ray position (origin)
+ position: Vector3,
+ /// Ray direction
+ direction: Vector3,
+};
+
+/// RayCollision, ray hit information
+pub const RayCollision = extern struct {
+ /// Did the ray hit something?
+ hit: bool,
+ /// Distance to the nearest hit
+ distance: f32,
+ /// Point of the nearest hit
+ point: Vector3,
+ /// Surface normal of hit
+ normal: Vector3,
+};
+
+/// BoundingBox
+pub const BoundingBox = extern struct {
+ /// Minimum vertex box-corner
+ min: Vector3,
+ /// Maximum vertex box-corner
+ max: Vector3,
+};
+
+/// Wave, audio wave data
+pub const Wave = extern struct {
+ /// Total number of frames (considering channels)
+ frameCount: u32,
+ /// Frequency (samples per second)
+ sampleRate: u32,
+ /// Bit depth (bits per sample): 8, 16, 32 (24 not supported)
+ sampleSize: u32,
+ /// Number of channels (1-mono, 2-stereo, ...)
+ channels: u32,
+ /// Buffer data pointer
+ data: *anyopaque,
+};
+
+/// AudioStream, custom audio stream
+pub const AudioStream = extern struct {
+ /// Pointer to internal data used by the audio system
+ buffer: *anyopaque,
+ /// Pointer to internal data processor, useful for audio effects
+ processor: *anyopaque,
+ /// Frequency (samples per second)
+ sampleRate: u32,
+ /// Bit depth (bits per sample): 8, 16, 32 (24 not supported)
+ sampleSize: u32,
+ /// Number of channels (1-mono, 2-stereo, ...)
+ channels: u32,
+};
+
+/// Sound
+pub const Sound = extern struct {
+ /// Audio stream
+ stream: AudioStream,
+ /// Total number of frames (considering channels)
+ frameCount: u32,
+};
+
+/// Music, audio stream, anything longer than ~10 seconds should be streamed
+pub const Music = extern struct {
+ /// Audio stream
+ stream: AudioStream,
+ /// Total number of frames (considering channels)
+ frameCount: u32,
+ /// Music looping enable
+ looping: bool,
+ /// Type of music context (audio filetype)
+ ctxType: i32,
+ /// Audio context data, depends on type
+ ctxData: *anyopaque,
+};
+
+/// VrDeviceInfo, Head-Mounted-Display device parameters
+pub const VrDeviceInfo = extern struct {
+ /// Horizontal resolution in pixels
+ hResolution: i32,
+ /// Vertical resolution in pixels
+ vResolution: i32,
+ /// Horizontal size in meters
+ hScreenSize: f32,
+ /// Vertical size in meters
+ vScreenSize: f32,
+ /// Distance between eye and display in meters
+ eyeToScreenDistance: f32,
+ /// Lens separation distance in meters
+ lensSeparationDistance: f32,
+ /// IPD (distance between pupils) in meters
+ interpupillaryDistance: f32,
+ /// Lens distortion constant parameters
+ lensDistortionValues: [4]f32,
+ /// Chromatic aberration correction parameters
+ chromaAbCorrection: [4]f32,
+};
+
+/// VrStereoConfig, VR stereo rendering configuration for simulator
+pub const VrStereoConfig = extern struct {
+ /// VR projection matrices (per eye)
+ projection: [2]Matrix,
+ /// VR view offset matrices (per eye)
+ viewOffset: [2]Matrix,
+ /// VR left lens center
+ leftLensCenter: [2]f32,
+ /// VR right lens center
+ rightLensCenter: [2]f32,
+ /// VR left screen center
+ leftScreenCenter: [2]f32,
+ /// VR right screen center
+ rightScreenCenter: [2]f32,
+ /// VR distortion scale
+ scale: [2]f32,
+ /// VR distortion scale in
+ scaleIn: [2]f32,
+};
+
+/// File path list
+pub const FilePathList = extern struct {
+ /// Filepaths max entries
+ capacity: u32,
+ /// Filepaths entries count
+ count: u32,
+ /// Filepaths entries
+ paths: [*][*:0]u8,
+};
+
+/// Automation event
+pub const AutomationEvent = extern struct {
+ /// Event frame
+ frame: u32,
+ /// Event type (AutomationEventType)
+ type: u32,
+ /// Event parameters (if required)
+ params: [4]i32,
+};
+
+/// Automation event list
+pub const AutomationEventList = extern struct {
+ /// Events max entries (MAX_AUTOMATION_EVENTS)
+ capacity: u32,
+ /// Events entries count
+ count: u32,
+ /// Events entries
+ events: ?[*]AutomationEvent,
+};
+
+/// Dynamic vertex buffers (position + texcoords + colors + indices arrays)
+pub const rlVertexBuffer = extern struct {
+ /// Number of elements in the buffer (QUADS)
+ elementCount: i32,
+ /// Vertex position (XYZ - 3 components per vertex) (shader-location = 0)
+ vertices: [*]f32,
+ /// Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
+ texcoords: [*]f32,
+ /// Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
+ colors: [*]u8,
+ /// Vertex indices (in case vertex data comes indexed) (6 indices per quad)
+ indices: [*]u16,
+ /// OpenGL Vertex Array Object id
+ vaoId: u32,
+ /// OpenGL Vertex Buffer Objects id (4 types of vertex data)
+ vboId: [4]u32,
+};
+
+/// of those state-change happens (this is done in core module)
+pub const rlDrawCall = extern struct {
+ /// Drawing mode: LINES, TRIANGLES, QUADS
+ mode: i32,
+ /// Number of vertex of the draw
+ vertexCount: i32,
+ /// Number of vertex required for index alignment (LINES, TRIANGLES)
+ vertexAlignment: i32,
+ /// Texture id to be used on the draw -> Use to create new draw call if changes
+ textureId: u32,
+};
+
+/// rlRenderBatch type
+pub const rlRenderBatch = extern struct {
+ /// Number of vertex buffers (multi-buffering support)
+ bufferCount: i32,
+ /// Current buffer tracking in case of multi-buffering
+ currentBuffer: i32,
+ /// Dynamic buffer(s) for vertex data
+ vertexBuffer: ?[*]rlVertexBuffer,
+ /// Draw calls array, depends on textureId
+ draws: ?[*]rlDrawCall,
+ /// Draw calls counter
+ drawCounter: i32,
+ /// Current depth value for next draw
+ currentDepth: f32,
+};
+
+/// NOTE: Helper types to be used instead of array return types for *ToFloat functions
+pub const float3 = extern struct {
+ ///
+ v: [3]f32,
+};
+
+///
+pub const float16 = extern struct {
+ ///
+ v: [16]f32,
+};
+
+/// Trace log level
+pub const TraceLogLevel = enum(i32) {
+ /// Display all logs
+ LOG_ALL = 0,
+ /// Trace logging, intended for internal use only
+ LOG_TRACE = 1,
+ /// Debug logging, used for internal debugging, it should be disabled on release builds
+ LOG_DEBUG = 2,
+ /// Info logging, used for program execution info
+ LOG_INFO = 3,
+ /// Warning logging, used on recoverable failures
+ LOG_WARNING = 4,
+ /// Error logging, used on unrecoverable failures
+ LOG_ERROR = 5,
+ /// Fatal logging, used to abort program: exit(EXIT_FAILURE)
+ LOG_FATAL = 6,
+ /// Disable logging
+ LOG_NONE = 7,
+};
+
+/// Keyboard keys (US keyboard layout)
+pub const KeyboardKey = enum(i32) {
+ /// Key: NULL, used for no key pressed
+ KEY_NULL = 0,
+ /// Key: '
+ KEY_APOSTROPHE = 39,
+ /// Key: ,
+ KEY_COMMA = 44,
+ /// Key: -
+ KEY_MINUS = 45,
+ /// Key: .
+ KEY_PERIOD = 46,
+ /// Key: /
+ KEY_SLASH = 47,
+ /// Key: 0
+ KEY_ZERO = 48,
+ /// Key: 1
+ KEY_ONE = 49,
+ /// Key: 2
+ KEY_TWO = 50,
+ /// Key: 3
+ KEY_THREE = 51,
+ /// Key: 4
+ KEY_FOUR = 52,
+ /// Key: 5
+ KEY_FIVE = 53,
+ /// Key: 6
+ KEY_SIX = 54,
+ /// Key: 7
+ KEY_SEVEN = 55,
+ /// Key: 8
+ KEY_EIGHT = 56,
+ /// Key: 9
+ KEY_NINE = 57,
+ /// Key: ;
+ KEY_SEMICOLON = 59,
+ /// Key: =
+ KEY_EQUAL = 61,
+ /// Key: A | a
+ KEY_A = 65,
+ /// Key: B | b
+ KEY_B = 66,
+ /// Key: C | c
+ KEY_C = 67,
+ /// Key: D | d
+ KEY_D = 68,
+ /// Key: E | e
+ KEY_E = 69,
+ /// Key: F | f
+ KEY_F = 70,
+ /// Key: G | g
+ KEY_G = 71,
+ /// Key: H | h
+ KEY_H = 72,
+ /// Key: I | i
+ KEY_I = 73,
+ /// Key: J | j
+ KEY_J = 74,
+ /// Key: K | k
+ KEY_K = 75,
+ /// Key: L | l
+ KEY_L = 76,
+ /// Key: M | m
+ KEY_M = 77,
+ /// Key: N | n
+ KEY_N = 78,
+ /// Key: O | o
+ KEY_O = 79,
+ /// Key: P | p
+ KEY_P = 80,
+ /// Key: Q | q
+ KEY_Q = 81,
+ /// Key: R | r
+ KEY_R = 82,
+ /// Key: S | s
+ KEY_S = 83,
+ /// Key: T | t
+ KEY_T = 84,
+ /// Key: U | u
+ KEY_U = 85,
+ /// Key: V | v
+ KEY_V = 86,
+ /// Key: W | w
+ KEY_W = 87,
+ /// Key: X | x
+ KEY_X = 88,
+ /// Key: Y | y
+ KEY_Y = 89,
+ /// Key: Z | z
+ KEY_Z = 90,
+ /// Key: [
+ KEY_LEFT_BRACKET = 91,
+ /// Key: '\'
+ KEY_BACKSLASH = 92,
+ /// Key: ]
+ KEY_RIGHT_BRACKET = 93,
+ /// Key: `
+ KEY_GRAVE = 96,
+ /// Key: Space
+ KEY_SPACE = 32,
+ /// Key: Esc
+ KEY_ESCAPE = 256,
+ /// Key: Enter
+ KEY_ENTER = 257,
+ /// Key: Tab
+ KEY_TAB = 258,
+ /// Key: Backspace
+ KEY_BACKSPACE = 259,
+ /// Key: Ins
+ KEY_INSERT = 260,
+ /// Key: Del
+ KEY_DELETE = 261,
+ /// Key: Cursor right
+ KEY_RIGHT = 262,
+ /// Key: Cursor left
+ KEY_LEFT = 263,
+ /// Key: Cursor down
+ KEY_DOWN = 264,
+ /// Key: Cursor up
+ KEY_UP = 265,
+ /// Key: Page up
+ KEY_PAGE_UP = 266,
+ /// Key: Page down
+ KEY_PAGE_DOWN = 267,
+ /// Key: Home
+ KEY_HOME = 268,
+ /// Key: End
+ KEY_END = 269,
+ /// Key: Caps lock
+ KEY_CAPS_LOCK = 280,
+ /// Key: Scroll down
+ KEY_SCROLL_LOCK = 281,
+ /// Key: Num lock
+ KEY_NUM_LOCK = 282,
+ /// Key: Print screen
+ KEY_PRINT_SCREEN = 283,
+ /// Key: Pause
+ KEY_PAUSE = 284,
+ /// Key: F1
+ KEY_F1 = 290,
+ /// Key: F2
+ KEY_F2 = 291,
+ /// Key: F3
+ KEY_F3 = 292,
+ /// Key: F4
+ KEY_F4 = 293,
+ /// Key: F5
+ KEY_F5 = 294,
+ /// Key: F6
+ KEY_F6 = 295,
+ /// Key: F7
+ KEY_F7 = 296,
+ /// Key: F8
+ KEY_F8 = 297,
+ /// Key: F9
+ KEY_F9 = 298,
+ /// Key: F10
+ KEY_F10 = 299,
+ /// Key: F11
+ KEY_F11 = 300,
+ /// Key: F12
+ KEY_F12 = 301,
+ /// Key: Shift left
+ KEY_LEFT_SHIFT = 340,
+ /// Key: Control left
+ KEY_LEFT_CONTROL = 341,
+ /// Key: Alt left
+ KEY_LEFT_ALT = 342,
+ /// Key: Super left
+ KEY_LEFT_SUPER = 343,
+ /// Key: Shift right
+ KEY_RIGHT_SHIFT = 344,
+ /// Key: Control right
+ KEY_RIGHT_CONTROL = 345,
+ /// Key: Alt right
+ KEY_RIGHT_ALT = 346,
+ /// Key: Super right
+ KEY_RIGHT_SUPER = 347,
+ /// Key: KB menu
+ KEY_KB_MENU = 348,
+ /// Key: Keypad 0
+ KEY_KP_0 = 320,
+ /// Key: Keypad 1
+ KEY_KP_1 = 321,
+ /// Key: Keypad 2
+ KEY_KP_2 = 322,
+ /// Key: Keypad 3
+ KEY_KP_3 = 323,
+ /// Key: Keypad 4
+ KEY_KP_4 = 324,
+ /// Key: Keypad 5
+ KEY_KP_5 = 325,
+ /// Key: Keypad 6
+ KEY_KP_6 = 326,
+ /// Key: Keypad 7
+ KEY_KP_7 = 327,
+ /// Key: Keypad 8
+ KEY_KP_8 = 328,
+ /// Key: Keypad 9
+ KEY_KP_9 = 329,
+ /// Key: Keypad .
+ KEY_KP_DECIMAL = 330,
+ /// Key: Keypad /
+ KEY_KP_DIVIDE = 331,
+ /// Key: Keypad *
+ KEY_KP_MULTIPLY = 332,
+ /// Key: Keypad -
+ KEY_KP_SUBTRACT = 333,
+ /// Key: Keypad +
+ KEY_KP_ADD = 334,
+ /// Key: Keypad Enter
+ KEY_KP_ENTER = 335,
+ /// Key: Keypad =
+ KEY_KP_EQUAL = 336,
+ /// Key: Android back button
+ KEY_BACK = 4,
+ /// Key: Android volume up button
+ KEY_VOLUME_UP = 24,
+ /// Key: Android volume down button
+ KEY_VOLUME_DOWN = 25,
+};
+
+/// Mouse buttons
+pub const MouseButton = enum(i32) {
+ /// Mouse button left
+ MOUSE_BUTTON_LEFT = 0,
+ /// Mouse button right
+ MOUSE_BUTTON_RIGHT = 1,
+ /// Mouse button middle (pressed wheel)
+ MOUSE_BUTTON_MIDDLE = 2,
+ /// Mouse button side (advanced mouse device)
+ MOUSE_BUTTON_SIDE = 3,
+ /// Mouse button extra (advanced mouse device)
+ MOUSE_BUTTON_EXTRA = 4,
+ /// Mouse button forward (advanced mouse device)
+ MOUSE_BUTTON_FORWARD = 5,
+ /// Mouse button back (advanced mouse device)
+ MOUSE_BUTTON_BACK = 6,
+};
+
+/// Mouse cursor
+pub const MouseCursor = enum(i32) {
+ /// Default pointer shape
+ MOUSE_CURSOR_DEFAULT = 0,
+ /// Arrow shape
+ MOUSE_CURSOR_ARROW = 1,
+ /// Text writing cursor shape
+ MOUSE_CURSOR_IBEAM = 2,
+ /// Cross shape
+ MOUSE_CURSOR_CROSSHAIR = 3,
+ /// Pointing hand cursor
+ MOUSE_CURSOR_POINTING_HAND = 4,
+ /// Horizontal resize/move arrow shape
+ MOUSE_CURSOR_RESIZE_EW = 5,
+ /// Vertical resize/move arrow shape
+ MOUSE_CURSOR_RESIZE_NS = 6,
+ /// Top-left to bottom-right diagonal resize/move arrow shape
+ MOUSE_CURSOR_RESIZE_NWSE = 7,
+ /// The top-right to bottom-left diagonal resize/move arrow shape
+ MOUSE_CURSOR_RESIZE_NESW = 8,
+ /// The omnidirectional resize/move cursor shape
+ MOUSE_CURSOR_RESIZE_ALL = 9,
+ /// The operation-not-allowed shape
+ MOUSE_CURSOR_NOT_ALLOWED = 10,
+};
+
+/// Gamepad buttons
+pub const GamepadButton = enum(i32) {
+ /// Unknown button, just for error checking
+ GAMEPAD_BUTTON_UNKNOWN = 0,
+ /// Gamepad left DPAD up button
+ GAMEPAD_BUTTON_LEFT_FACE_UP = 1,
+ /// Gamepad left DPAD right button
+ GAMEPAD_BUTTON_LEFT_FACE_RIGHT = 2,
+ /// Gamepad left DPAD down button
+ GAMEPAD_BUTTON_LEFT_FACE_DOWN = 3,
+ /// Gamepad left DPAD left button
+ GAMEPAD_BUTTON_LEFT_FACE_LEFT = 4,
+ /// Gamepad right button up (i.e. PS3: Triangle, Xbox: Y)
+ GAMEPAD_BUTTON_RIGHT_FACE_UP = 5,
+ /// Gamepad right button right (i.e. PS3: Square, Xbox: X)
+ GAMEPAD_BUTTON_RIGHT_FACE_RIGHT = 6,
+ /// Gamepad right button down (i.e. PS3: Cross, Xbox: A)
+ GAMEPAD_BUTTON_RIGHT_FACE_DOWN = 7,
+ /// Gamepad right button left (i.e. PS3: Circle, Xbox: B)
+ GAMEPAD_BUTTON_RIGHT_FACE_LEFT = 8,
+ /// Gamepad top/back trigger left (first), it could be a trailing button
+ GAMEPAD_BUTTON_LEFT_TRIGGER_1 = 9,
+ /// Gamepad top/back trigger left (second), it could be a trailing button
+ GAMEPAD_BUTTON_LEFT_TRIGGER_2 = 10,
+ /// Gamepad top/back trigger right (one), it could be a trailing button
+ GAMEPAD_BUTTON_RIGHT_TRIGGER_1 = 11,
+ /// Gamepad top/back trigger right (second), it could be a trailing button
+ GAMEPAD_BUTTON_RIGHT_TRIGGER_2 = 12,
+ /// Gamepad center buttons, left one (i.e. PS3: Select)
+ GAMEPAD_BUTTON_MIDDLE_LEFT = 13,
+ /// Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX)
+ GAMEPAD_BUTTON_MIDDLE = 14,
+ /// Gamepad center buttons, right one (i.e. PS3: Start)
+ GAMEPAD_BUTTON_MIDDLE_RIGHT = 15,
+ /// Gamepad joystick pressed button left
+ GAMEPAD_BUTTON_LEFT_THUMB = 16,
+ /// Gamepad joystick pressed button right
+ GAMEPAD_BUTTON_RIGHT_THUMB = 17,
+};
+
+/// Gamepad axis
+pub const GamepadAxis = enum(i32) {
+ /// Gamepad left stick X axis
+ GAMEPAD_AXIS_LEFT_X = 0,
+ /// Gamepad left stick Y axis
+ GAMEPAD_AXIS_LEFT_Y = 1,
+ /// Gamepad right stick X axis
+ GAMEPAD_AXIS_RIGHT_X = 2,
+ /// Gamepad right stick Y axis
+ GAMEPAD_AXIS_RIGHT_Y = 3,
+ /// Gamepad back trigger left, pressure level: [1..-1]
+ GAMEPAD_AXIS_LEFT_TRIGGER = 4,
+ /// Gamepad back trigger right, pressure level: [1..-1]
+ GAMEPAD_AXIS_RIGHT_TRIGGER = 5,
+};
+
+/// Material map index
+pub const MaterialMapIndex = enum(i32) {
+ /// Albedo material (same as: MATERIAL_MAP_DIFFUSE)
+ MATERIAL_MAP_ALBEDO = 0,
+ /// Metalness material (same as: MATERIAL_MAP_SPECULAR)
+ MATERIAL_MAP_METALNESS = 1,
+ /// Normal material
+ MATERIAL_MAP_NORMAL = 2,
+ /// Roughness material
+ MATERIAL_MAP_ROUGHNESS = 3,
+ /// Ambient occlusion material
+ MATERIAL_MAP_OCCLUSION = 4,
+ /// Emission material
+ MATERIAL_MAP_EMISSION = 5,
+ /// Heightmap material
+ MATERIAL_MAP_HEIGHT = 6,
+ /// Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
+ MATERIAL_MAP_CUBEMAP = 7,
+ /// Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
+ MATERIAL_MAP_IRRADIANCE = 8,
+ /// Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
+ MATERIAL_MAP_PREFILTER = 9,
+ /// Brdf material
+ MATERIAL_MAP_BRDF = 10,
+};
+
+/// Shader location index
+pub const ShaderLocationIndex = enum(i32) {
+ /// Shader location: vertex attribute: position
+ SHADER_LOC_VERTEX_POSITION = 0,
+ /// Shader location: vertex attribute: texcoord01
+ SHADER_LOC_VERTEX_TEXCOORD01 = 1,
+ /// Shader location: vertex attribute: texcoord02
+ SHADER_LOC_VERTEX_TEXCOORD02 = 2,
+ /// Shader location: vertex attribute: normal
+ SHADER_LOC_VERTEX_NORMAL = 3,
+ /// Shader location: vertex attribute: tangent
+ SHADER_LOC_VERTEX_TANGENT = 4,
+ /// Shader location: vertex attribute: color
+ SHADER_LOC_VERTEX_COLOR = 5,
+ /// Shader location: matrix uniform: model-view-projection
+ SHADER_LOC_MATRIX_MVP = 6,
+ /// Shader location: matrix uniform: view (camera transform)
+ SHADER_LOC_MATRIX_VIEW = 7,
+ /// Shader location: matrix uniform: projection
+ SHADER_LOC_MATRIX_PROJECTION = 8,
+ /// Shader location: matrix uniform: model (transform)
+ SHADER_LOC_MATRIX_MODEL = 9,
+ /// Shader location: matrix uniform: normal
+ SHADER_LOC_MATRIX_NORMAL = 10,
+ /// Shader location: vector uniform: view
+ SHADER_LOC_VECTOR_VIEW = 11,
+ /// Shader location: vector uniform: diffuse color
+ SHADER_LOC_COLOR_DIFFUSE = 12,
+ /// Shader location: vector uniform: specular color
+ SHADER_LOC_COLOR_SPECULAR = 13,
+ /// Shader location: vector uniform: ambient color
+ SHADER_LOC_COLOR_AMBIENT = 14,
+ /// Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE)
+ SHADER_LOC_MAP_ALBEDO = 15,
+ /// Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR)
+ SHADER_LOC_MAP_METALNESS = 16,
+ /// Shader location: sampler2d texture: normal
+ SHADER_LOC_MAP_NORMAL = 17,
+ /// Shader location: sampler2d texture: roughness
+ SHADER_LOC_MAP_ROUGHNESS = 18,
+ /// Shader location: sampler2d texture: occlusion
+ SHADER_LOC_MAP_OCCLUSION = 19,
+ /// Shader location: sampler2d texture: emission
+ SHADER_LOC_MAP_EMISSION = 20,
+ /// Shader location: sampler2d texture: height
+ SHADER_LOC_MAP_HEIGHT = 21,
+ /// Shader location: samplerCube texture: cubemap
+ SHADER_LOC_MAP_CUBEMAP = 22,
+ /// Shader location: samplerCube texture: irradiance
+ SHADER_LOC_MAP_IRRADIANCE = 23,
+ /// Shader location: samplerCube texture: prefilter
+ SHADER_LOC_MAP_PREFILTER = 24,
+ /// Shader location: sampler2d texture: brdf
+ SHADER_LOC_MAP_BRDF = 25,
+};
+
+/// Shader uniform data type
+pub const ShaderUniformDataType = enum(i32) {
+ /// Shader uniform type: float
+ SHADER_UNIFORM_FLOAT = 0,
+ /// Shader uniform type: vec2 (2 float)
+ SHADER_UNIFORM_VEC2 = 1,
+ /// Shader uniform type: vec3 (3 float)
+ SHADER_UNIFORM_VEC3 = 2,
+ /// Shader uniform type: vec4 (4 float)
+ SHADER_UNIFORM_VEC4 = 3,
+ /// Shader uniform type: int
+ SHADER_UNIFORM_INT = 4,
+ /// Shader uniform type: ivec2 (2 int)
+ SHADER_UNIFORM_IVEC2 = 5,
+ /// Shader uniform type: ivec3 (3 int)
+ SHADER_UNIFORM_IVEC3 = 6,
+ /// Shader uniform type: ivec4 (4 int)
+ SHADER_UNIFORM_IVEC4 = 7,
+ /// Shader uniform type: sampler2d
+ SHADER_UNIFORM_SAMPLER2D = 8,
+};
+
+/// Shader attribute data types
+pub const ShaderAttributeDataType = enum(i32) {
+ /// Shader attribute type: float
+ SHADER_ATTRIB_FLOAT = 0,
+ /// Shader attribute type: vec2 (2 float)
+ SHADER_ATTRIB_VEC2 = 1,
+ /// Shader attribute type: vec3 (3 float)
+ SHADER_ATTRIB_VEC3 = 2,
+ /// Shader attribute type: vec4 (4 float)
+ SHADER_ATTRIB_VEC4 = 3,
+};
+
+/// Pixel formats
+pub const PixelFormat = enum(i32) {
+ /// 8 bit per pixel (no alpha)
+ PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1,
+ /// 8*2 bpp (2 channels)
+ PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA = 2,
+ /// 16 bpp
+ PIXELFORMAT_UNCOMPRESSED_R5G6B5 = 3,
+ /// 24 bpp
+ PIXELFORMAT_UNCOMPRESSED_R8G8B8 = 4,
+ /// 16 bpp (1 bit alpha)
+ PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 = 5,
+ /// 16 bpp (4 bit alpha)
+ PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 = 6,
+ /// 32 bpp
+ PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 = 7,
+ /// 32 bpp (1 channel - float)
+ PIXELFORMAT_UNCOMPRESSED_R32 = 8,
+ /// 32*3 bpp (3 channels - float)
+ PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9,
+ /// 32*4 bpp (4 channels - float)
+ PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10,
+ /// 16 bpp (1 channel - half float)
+ PIXELFORMAT_UNCOMPRESSED_R16 = 11,
+ /// 16*3 bpp (3 channels - half float)
+ PIXELFORMAT_UNCOMPRESSED_R16G16B16 = 12,
+ /// 16*4 bpp (4 channels - half float)
+ PIXELFORMAT_UNCOMPRESSED_R16G16B16A16 = 13,
+ /// 4 bpp (no alpha)
+ PIXELFORMAT_COMPRESSED_DXT1_RGB = 14,
+ /// 4 bpp (1 bit alpha)
+ PIXELFORMAT_COMPRESSED_DXT1_RGBA = 15,
+ /// 8 bpp
+ PIXELFORMAT_COMPRESSED_DXT3_RGBA = 16,
+ /// 8 bpp
+ PIXELFORMAT_COMPRESSED_DXT5_RGBA = 17,
+ /// 4 bpp
+ PIXELFORMAT_COMPRESSED_ETC1_RGB = 18,
+ /// 4 bpp
+ PIXELFORMAT_COMPRESSED_ETC2_RGB = 19,
+ /// 8 bpp
+ PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 20,
+ /// 4 bpp
+ PIXELFORMAT_COMPRESSED_PVRT_RGB = 21,
+ /// 4 bpp
+ PIXELFORMAT_COMPRESSED_PVRT_RGBA = 22,
+ /// 8 bpp
+ PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 23,
+ /// 2 bpp
+ PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 24,
+};
+
+/// Texture parameters: filter mode
+pub const TextureFilter = enum(i32) {
+ /// No filter, just pixel approximation
+ TEXTURE_FILTER_POINT = 0,
+ /// Linear filtering
+ TEXTURE_FILTER_BILINEAR = 1,
+ /// Trilinear filtering (linear with mipmaps)
+ TEXTURE_FILTER_TRILINEAR = 2,
+ /// Anisotropic filtering 4x
+ TEXTURE_FILTER_ANISOTROPIC_4X = 3,
+ /// Anisotropic filtering 8x
+ TEXTURE_FILTER_ANISOTROPIC_8X = 4,
+ /// Anisotropic filtering 16x
+ TEXTURE_FILTER_ANISOTROPIC_16X = 5,
+};
+
+/// Texture parameters: wrap mode
+pub const TextureWrap = enum(i32) {
+ /// Repeats texture in tiled mode
+ TEXTURE_WRAP_REPEAT = 0,
+ /// Clamps texture to edge pixel in tiled mode
+ TEXTURE_WRAP_CLAMP = 1,
+ /// Mirrors and repeats the texture in tiled mode
+ TEXTURE_WRAP_MIRROR_REPEAT = 2,
+ /// Mirrors and clamps to border the texture in tiled mode
+ TEXTURE_WRAP_MIRROR_CLAMP = 3,
+};
+
+/// Cubemap layouts
+pub const CubemapLayout = enum(i32) {
+ /// Automatically detect layout type
+ CUBEMAP_LAYOUT_AUTO_DETECT = 0,
+ /// Layout is defined by a vertical line with faces
+ CUBEMAP_LAYOUT_LINE_VERTICAL = 1,
+ /// Layout is defined by a horizontal line with faces
+ CUBEMAP_LAYOUT_LINE_HORIZONTAL = 2,
+ /// Layout is defined by a 3x4 cross with cubemap faces
+ CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR = 3,
+ /// Layout is defined by a 4x3 cross with cubemap faces
+ CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE = 4,
+ /// Layout is defined by a panorama image (equirrectangular map)
+ CUBEMAP_LAYOUT_PANORAMA = 5,
+};
+
+/// Font type, defines generation method
+pub const FontType = enum(i32) {
+ /// Default font generation, anti-aliased
+ FONT_DEFAULT = 0,
+ /// Bitmap font generation, no anti-aliasing
+ FONT_BITMAP = 1,
+ /// SDF font generation, requires external shader
+ FONT_SDF = 2,
+};
+
+/// Color blending modes (pre-defined)
+pub const BlendMode = enum(i32) {
+ /// Blend textures considering alpha (default)
+ BLEND_ALPHA = 0,
+ /// Blend textures adding colors
+ BLEND_ADDITIVE = 1,
+ /// Blend textures multiplying colors
+ BLEND_MULTIPLIED = 2,
+ /// Blend textures adding colors (alternative)
+ BLEND_ADD_COLORS = 3,
+ /// Blend textures subtracting colors (alternative)
+ BLEND_SUBTRACT_COLORS = 4,
+ /// Blend premultiplied textures considering alpha
+ BLEND_ALPHA_PREMULTIPLY = 5,
+ /// Blend textures using custom src/dst factors (use rlSetBlendFactors())
+ BLEND_CUSTOM = 6,
+ /// Blend textures using custom rgb/alpha separate src/dst factors (use rlSetBlendFactorsSeparate())
+ BLEND_CUSTOM_SEPARATE = 7,
+};
+
+/// Gesture
+pub const Gesture = enum(i32) {
+ /// No gesture
+ GESTURE_NONE = 0,
+ /// Tap gesture
+ GESTURE_TAP = 1,
+ /// Double tap gesture
+ GESTURE_DOUBLETAP = 2,
+ /// Hold gesture
+ GESTURE_HOLD = 4,
+ /// Drag gesture
+ GESTURE_DRAG = 8,
+ /// Swipe right gesture
+ GESTURE_SWIPE_RIGHT = 16,
+ /// Swipe left gesture
+ GESTURE_SWIPE_LEFT = 32,
+ /// Swipe up gesture
+ GESTURE_SWIPE_UP = 64,
+ /// Swipe down gesture
+ GESTURE_SWIPE_DOWN = 128,
+ /// Pinch in gesture
+ GESTURE_PINCH_IN = 256,
+ /// Pinch out gesture
+ GESTURE_PINCH_OUT = 512,
+};
+
+/// Camera system modes
+pub const CameraMode = enum(i32) {
+ /// Custom camera
+ CAMERA_CUSTOM = 0,
+ /// Free camera
+ CAMERA_FREE = 1,
+ /// Orbital camera
+ CAMERA_ORBITAL = 2,
+ /// First person camera
+ CAMERA_FIRST_PERSON = 3,
+ /// Third person camera
+ CAMERA_THIRD_PERSON = 4,
+};
+
+/// Camera projection
+pub const CameraProjection = enum(i32) {
+ /// Perspective projection
+ CAMERA_PERSPECTIVE = 0,
+ /// Orthographic projection
+ CAMERA_ORTHOGRAPHIC = 1,
+};
+
+/// N-patch layout
+pub const NPatchLayout = enum(i32) {
+ /// Npatch layout: 3x3 tiles
+ NPATCH_NINE_PATCH = 0,
+ /// Npatch layout: 1x3 tiles
+ NPATCH_THREE_PATCH_VERTICAL = 1,
+ /// Npatch layout: 3x1 tiles
+ NPATCH_THREE_PATCH_HORIZONTAL = 2,
+};
+
+/// OpenGL version
+pub const rlGlVersion = enum(i32) {
+ /// OpenGL 1.1
+ RL_OPENGL_11 = 1,
+ /// OpenGL 2.1 (GLSL 120)
+ RL_OPENGL_21 = 2,
+ /// OpenGL 3.3 (GLSL 330)
+ RL_OPENGL_33 = 3,
+ /// OpenGL 4.3 (using GLSL 330)
+ RL_OPENGL_43 = 4,
+ /// OpenGL ES 2.0 (GLSL 100)
+ RL_OPENGL_ES_20 = 5,
+ /// OpenGL ES 3.0 (GLSL 300 es)
+ RL_OPENGL_ES_30 = 6,
+};
+
+/// Trace log level
+pub const rlTraceLogLevel = enum(i32) {
+ /// Display all logs
+ RL_LOG_ALL = 0,
+ /// Trace logging, intended for internal use only
+ RL_LOG_TRACE = 1,
+ /// Debug logging, used for internal debugging, it should be disabled on release builds
+ RL_LOG_DEBUG = 2,
+ /// Info logging, used for program execution info
+ RL_LOG_INFO = 3,
+ /// Warning logging, used on recoverable failures
+ RL_LOG_WARNING = 4,
+ /// Error logging, used on unrecoverable failures
+ RL_LOG_ERROR = 5,
+ /// Fatal logging, used to abort program: exit(EXIT_FAILURE)
+ RL_LOG_FATAL = 6,
+ /// Disable logging
+ RL_LOG_NONE = 7,
+};
+
+/// Texture pixel formats
+pub const rlPixelFormat = enum(i32) {
+ /// 8 bit per pixel (no alpha)
+ RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1,
+ /// 8*2 bpp (2 channels)
+ RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA = 2,
+ /// 16 bpp
+ RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5 = 3,
+ /// 24 bpp
+ RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8 = 4,
+ /// 16 bpp (1 bit alpha)
+ RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 = 5,
+ /// 16 bpp (4 bit alpha)
+ RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 = 6,
+ /// 32 bpp
+ RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 = 7,
+ /// 32 bpp (1 channel - float)
+ RL_PIXELFORMAT_UNCOMPRESSED_R32 = 8,
+ /// 32*3 bpp (3 channels - float)
+ RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9,
+ /// 32*4 bpp (4 channels - float)
+ RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10,
+ /// 16 bpp (1 channel - half float)
+ RL_PIXELFORMAT_UNCOMPRESSED_R16 = 11,
+ /// 16*3 bpp (3 channels - half float)
+ RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16 = 12,
+ /// 16*4 bpp (4 channels - half float)
+ RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16 = 13,
+ /// 4 bpp (no alpha)
+ RL_PIXELFORMAT_COMPRESSED_DXT1_RGB = 14,
+ /// 4 bpp (1 bit alpha)
+ RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA = 15,
+ /// 8 bpp
+ RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA = 16,
+ /// 8 bpp
+ RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA = 17,
+ /// 4 bpp
+ RL_PIXELFORMAT_COMPRESSED_ETC1_RGB = 18,
+ /// 4 bpp
+ RL_PIXELFORMAT_COMPRESSED_ETC2_RGB = 19,
+ /// 8 bpp
+ RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 20,
+ /// 4 bpp
+ RL_PIXELFORMAT_COMPRESSED_PVRT_RGB = 21,
+ /// 4 bpp
+ RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA = 22,
+ /// 8 bpp
+ RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 23,
+ /// 2 bpp
+ RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 24,
+};
+
+/// Texture parameters: filter mode
+pub const rlTextureFilter = enum(i32) {
+ /// No filter, just pixel approximation
+ RL_TEXTURE_FILTER_POINT = 0,
+ /// Linear filtering
+ RL_TEXTURE_FILTER_BILINEAR = 1,
+ /// Trilinear filtering (linear with mipmaps)
+ RL_TEXTURE_FILTER_TRILINEAR = 2,
+ /// Anisotropic filtering 4x
+ RL_TEXTURE_FILTER_ANISOTROPIC_4X = 3,
+ /// Anisotropic filtering 8x
+ RL_TEXTURE_FILTER_ANISOTROPIC_8X = 4,
+ /// Anisotropic filtering 16x
+ RL_TEXTURE_FILTER_ANISOTROPIC_16X = 5,
+};
+
+/// Color blending modes (pre-defined)
+pub const rlBlendMode = enum(i32) {
+ /// Blend textures considering alpha (default)
+ RL_BLEND_ALPHA = 0,
+ /// Blend textures adding colors
+ RL_BLEND_ADDITIVE = 1,
+ /// Blend textures multiplying colors
+ RL_BLEND_MULTIPLIED = 2,
+ /// Blend textures adding colors (alternative)
+ RL_BLEND_ADD_COLORS = 3,
+ /// Blend textures subtracting colors (alternative)
+ RL_BLEND_SUBTRACT_COLORS = 4,
+ /// Blend premultiplied textures considering alpha
+ RL_BLEND_ALPHA_PREMULTIPLY = 5,
+ /// Blend textures using custom src/dst factors (use rlSetBlendFactors())
+ RL_BLEND_CUSTOM = 6,
+ /// Blend textures using custom src/dst factors (use rlSetBlendFactorsSeparate())
+ RL_BLEND_CUSTOM_SEPARATE = 7,
+};
+
+/// Shader location point type
+pub const rlShaderLocationIndex = enum(i32) {
+ /// Shader location: vertex attribute: position
+ RL_SHADER_LOC_VERTEX_POSITION = 0,
+ /// Shader location: vertex attribute: texcoord01
+ RL_SHADER_LOC_VERTEX_TEXCOORD01 = 1,
+ /// Shader location: vertex attribute: texcoord02
+ RL_SHADER_LOC_VERTEX_TEXCOORD02 = 2,
+ /// Shader location: vertex attribute: normal
+ RL_SHADER_LOC_VERTEX_NORMAL = 3,
+ /// Shader location: vertex attribute: tangent
+ RL_SHADER_LOC_VERTEX_TANGENT = 4,
+ /// Shader location: vertex attribute: color
+ RL_SHADER_LOC_VERTEX_COLOR = 5,
+ /// Shader location: matrix uniform: model-view-projection
+ RL_SHADER_LOC_MATRIX_MVP = 6,
+ /// Shader location: matrix uniform: view (camera transform)
+ RL_SHADER_LOC_MATRIX_VIEW = 7,
+ /// Shader location: matrix uniform: projection
+ RL_SHADER_LOC_MATRIX_PROJECTION = 8,
+ /// Shader location: matrix uniform: model (transform)
+ RL_SHADER_LOC_MATRIX_MODEL = 9,
+ /// Shader location: matrix uniform: normal
+ RL_SHADER_LOC_MATRIX_NORMAL = 10,
+ /// Shader location: vector uniform: view
+ RL_SHADER_LOC_VECTOR_VIEW = 11,
+ /// Shader location: vector uniform: diffuse color
+ RL_SHADER_LOC_COLOR_DIFFUSE = 12,
+ /// Shader location: vector uniform: specular color
+ RL_SHADER_LOC_COLOR_SPECULAR = 13,
+ /// Shader location: vector uniform: ambient color
+ RL_SHADER_LOC_COLOR_AMBIENT = 14,
+ /// Shader location: sampler2d texture: albedo (same as: RL_SHADER_LOC_MAP_DIFFUSE)
+ RL_SHADER_LOC_MAP_ALBEDO = 15,
+ /// Shader location: sampler2d texture: metalness (same as: RL_SHADER_LOC_MAP_SPECULAR)
+ RL_SHADER_LOC_MAP_METALNESS = 16,
+ /// Shader location: sampler2d texture: normal
+ RL_SHADER_LOC_MAP_NORMAL = 17,
+ /// Shader location: sampler2d texture: roughness
+ RL_SHADER_LOC_MAP_ROUGHNESS = 18,
+ /// Shader location: sampler2d texture: occlusion
+ RL_SHADER_LOC_MAP_OCCLUSION = 19,
+ /// Shader location: sampler2d texture: emission
+ RL_SHADER_LOC_MAP_EMISSION = 20,
+ /// Shader location: sampler2d texture: height
+ RL_SHADER_LOC_MAP_HEIGHT = 21,
+ /// Shader location: samplerCube texture: cubemap
+ RL_SHADER_LOC_MAP_CUBEMAP = 22,
+ /// Shader location: samplerCube texture: irradiance
+ RL_SHADER_LOC_MAP_IRRADIANCE = 23,
+ /// Shader location: samplerCube texture: prefilter
+ RL_SHADER_LOC_MAP_PREFILTER = 24,
+ /// Shader location: sampler2d texture: brdf
+ RL_SHADER_LOC_MAP_BRDF = 25,
+};
+
+/// Shader uniform data type
+pub const rlShaderUniformDataType = enum(i32) {
+ /// Shader uniform type: float
+ RL_SHADER_UNIFORM_FLOAT = 0,
+ /// Shader uniform type: vec2 (2 float)
+ RL_SHADER_UNIFORM_VEC2 = 1,
+ /// Shader uniform type: vec3 (3 float)
+ RL_SHADER_UNIFORM_VEC3 = 2,
+ /// Shader uniform type: vec4 (4 float)
+ RL_SHADER_UNIFORM_VEC4 = 3,
+ /// Shader uniform type: int
+ RL_SHADER_UNIFORM_INT = 4,
+ /// Shader uniform type: ivec2 (2 int)
+ RL_SHADER_UNIFORM_IVEC2 = 5,
+ /// Shader uniform type: ivec3 (3 int)
+ RL_SHADER_UNIFORM_IVEC3 = 6,
+ /// Shader uniform type: ivec4 (4 int)
+ RL_SHADER_UNIFORM_IVEC4 = 7,
+ /// Shader uniform type: sampler2d
+ RL_SHADER_UNIFORM_SAMPLER2D = 8,
+};
+
+/// Shader attribute data types
+pub const rlShaderAttributeDataType = enum(i32) {
+ /// Shader attribute type: float
+ RL_SHADER_ATTRIB_FLOAT = 0,
+ /// Shader attribute type: vec2 (2 float)
+ RL_SHADER_ATTRIB_VEC2 = 1,
+ /// Shader attribute type: vec3 (3 float)
+ RL_SHADER_ATTRIB_VEC3 = 2,
+ /// Shader attribute type: vec4 (4 float)
+ RL_SHADER_ATTRIB_VEC4 = 3,
+};
+
+/// Framebuffer attachment type
+pub const rlFramebufferAttachType = enum(i32) {
+ /// Framebuffer attachment type: color 0
+ RL_ATTACHMENT_COLOR_CHANNEL0 = 0,
+ /// Framebuffer attachment type: color 1
+ RL_ATTACHMENT_COLOR_CHANNEL1 = 1,
+ /// Framebuffer attachment type: color 2
+ RL_ATTACHMENT_COLOR_CHANNEL2 = 2,
+ /// Framebuffer attachment type: color 3
+ RL_ATTACHMENT_COLOR_CHANNEL3 = 3,
+ /// Framebuffer attachment type: color 4
+ RL_ATTACHMENT_COLOR_CHANNEL4 = 4,
+ /// Framebuffer attachment type: color 5
+ RL_ATTACHMENT_COLOR_CHANNEL5 = 5,
+ /// Framebuffer attachment type: color 6
+ RL_ATTACHMENT_COLOR_CHANNEL6 = 6,
+ /// Framebuffer attachment type: color 7
+ RL_ATTACHMENT_COLOR_CHANNEL7 = 7,
+ /// Framebuffer attachment type: depth
+ RL_ATTACHMENT_DEPTH = 100,
+ /// Framebuffer attachment type: stencil
+ RL_ATTACHMENT_STENCIL = 200,
+};
+
+/// Framebuffer texture attachment type
+pub const rlFramebufferAttachTextureType = enum(i32) {
+ /// Framebuffer texture attachment type: cubemap, +X side
+ RL_ATTACHMENT_CUBEMAP_POSITIVE_X = 0,
+ /// Framebuffer texture attachment type: cubemap, -X side
+ RL_ATTACHMENT_CUBEMAP_NEGATIVE_X = 1,
+ /// Framebuffer texture attachment type: cubemap, +Y side
+ RL_ATTACHMENT_CUBEMAP_POSITIVE_Y = 2,
+ /// Framebuffer texture attachment type: cubemap, -Y side
+ RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y = 3,
+ /// Framebuffer texture attachment type: cubemap, +Z side
+ RL_ATTACHMENT_CUBEMAP_POSITIVE_Z = 4,
+ /// Framebuffer texture attachment type: cubemap, -Z side
+ RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z = 5,
+ /// Framebuffer texture attachment type: texture2d
+ RL_ATTACHMENT_TEXTURE2D = 100,
+ /// Framebuffer texture attachment type: renderbuffer
+ RL_ATTACHMENT_RENDERBUFFER = 200,
+};
+
+/// Face culling mode
+pub const rlCullMode = enum(i32) {
+ ///
+ RL_CULL_FACE_FRONT = 0,
+ ///
+ RL_CULL_FACE_BACK = 1,
+};
+
+/// circle or polygon
+pub const PhysicsShapeType = enum(i32) {
+ /// physics shape is a circle
+ PHYSICS_CIRCLE = 0,
+ /// physics shape is a polygon
+ PHYSICS_POLYGON = 1,
+};
+
+///
+pub const RAYLIB_VERSION_MAJOR: i32 = 5;
+
+///
+pub const RAYLIB_VERSION_MINOR: i32 = 1;
+
+///
+pub const RAYLIB_VERSION_PATCH: i32 = 0;
+
+///
+pub const RAYLIB_VERSION: []const u8 = "5.1-dev";
+
+///
+pub const PI: f32 = 3.14159265358979323846;
+
+/// Light Gray
+pub const LIGHTGRAY: Color = .{ .r = 200, .g = 200, .b = 200, .a = 255 };
+
+/// Gray
+pub const GRAY: Color = .{ .r = 130, .g = 130, .b = 130, .a = 255 };
+
+/// Dark Gray
+pub const DARKGRAY: Color = .{ .r = 80, .g = 80, .b = 80, .a = 255 };
+
+/// Yellow
+pub const YELLOW: Color = .{ .r = 253, .g = 249, .b = 0, .a = 255 };
+
+/// Gold
+pub const GOLD: Color = .{ .r = 255, .g = 203, .b = 0, .a = 255 };
+
+/// Orange
+pub const ORANGE: Color = .{ .r = 255, .g = 161, .b = 0, .a = 255 };
+
+/// Pink
+pub const PINK: Color = .{ .r = 255, .g = 109, .b = 194, .a = 255 };
+
+/// Red
+pub const RED: Color = .{ .r = 230, .g = 41, .b = 55, .a = 255 };
+
+/// Maroon
+pub const MAROON: Color = .{ .r = 190, .g = 33, .b = 55, .a = 255 };
+
+/// Green
+pub const GREEN: Color = .{ .r = 0, .g = 228, .b = 48, .a = 255 };
+
+/// Lime
+pub const LIME: Color = .{ .r = 0, .g = 158, .b = 47, .a = 255 };
+
+/// Dark Green
+pub const DARKGREEN: Color = .{ .r = 0, .g = 117, .b = 44, .a = 255 };
+
+/// Sky Blue
+pub const SKYBLUE: Color = .{ .r = 102, .g = 191, .b = 255, .a = 255 };
+
+/// Blue
+pub const BLUE: Color = .{ .r = 0, .g = 121, .b = 241, .a = 255 };
+
+/// Dark Blue
+pub const DARKBLUE: Color = .{ .r = 0, .g = 82, .b = 172, .a = 255 };
+
+/// Purple
+pub const PURPLE: Color = .{ .r = 200, .g = 122, .b = 255, .a = 255 };
+
+/// Violet
+pub const VIOLET: Color = .{ .r = 135, .g = 60, .b = 190, .a = 255 };
+
+/// Dark Purple
+pub const DARKPURPLE: Color = .{ .r = 112, .g = 31, .b = 126, .a = 255 };
+
+/// Beige
+pub const BEIGE: Color = .{ .r = 211, .g = 176, .b = 131, .a = 255 };
+
+/// Brown
+pub const BROWN: Color = .{ .r = 127, .g = 106, .b = 79, .a = 255 };
+
+/// Dark Brown
+pub const DARKBROWN: Color = .{ .r = 76, .g = 63, .b = 47, .a = 255 };
+
+/// White
+pub const WHITE: Color = .{ .r = 255, .g = 255, .b = 255, .a = 255 };
+
+/// Black
+pub const BLACK: Color = .{ .r = 0, .g = 0, .b = 0, .a = 255 };
+
+/// Blank (Transparent)
+pub const BLANK: Color = .{ .r = 0, .g = 0, .b = 0, .a = 0 };
+
+/// Magenta
+pub const MAGENTA: Color = .{ .r = 255, .g = 0, .b = 255, .a = 255 };
+
+/// My own White (raylib logo)
+pub const RAYWHITE: Color = .{ .r = 245, .g = 245, .b = 245, .a = 255 };
+
+///
+pub const RLGL_VERSION: []const u8 = "4.5";
+
+///
+pub const RL_DEFAULT_BATCH_BUFFER_ELEMENTS: i32 = 8192;
+
+/// Default number of batch buffers (multi-buffering)
+pub const RL_DEFAULT_BATCH_BUFFERS: i32 = 1;
+
+/// Default number of batch draw calls (by state changes: mode, texture)
+pub const RL_DEFAULT_BATCH_DRAWCALLS: i32 = 256;
+
+/// Maximum number of textures units that can be activated on batch drawing (SetShaderValueTexture())
+pub const RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS: i32 = 4;
+
+/// Maximum size of Matrix stack
+pub const RL_MAX_MATRIX_STACK_SIZE: i32 = 32;
+
+/// Maximum number of shader locations supported
+pub const RL_MAX_SHADER_LOCATIONS: i32 = 32;
+
+/// Default near cull distance
+pub const RL_CULL_DISTANCE_NEAR: f64 = 0.01;
+
+/// Default far cull distance
+pub const RL_CULL_DISTANCE_FAR: f64 = 1000.0;
+
+/// GL_TEXTURE_WRAP_S
+pub const RL_TEXTURE_WRAP_S: i32 = 10242;
+
+/// GL_TEXTURE_WRAP_T
+pub const RL_TEXTURE_WRAP_T: i32 = 10243;
+
+/// GL_TEXTURE_MAG_FILTER
+pub const RL_TEXTURE_MAG_FILTER: i32 = 10240;
+
+/// GL_TEXTURE_MIN_FILTER
+pub const RL_TEXTURE_MIN_FILTER: i32 = 10241;
+
+/// GL_NEAREST
+pub const RL_TEXTURE_FILTER_NEAREST: i32 = 9728;
+
+/// GL_LINEAR
+pub const RL_TEXTURE_FILTER_LINEAR: i32 = 9729;
+
+/// GL_NEAREST_MIPMAP_NEAREST
+pub const RL_TEXTURE_FILTER_MIP_NEAREST: i32 = 9984;
+
+/// GL_NEAREST_MIPMAP_LINEAR
+pub const RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR: i32 = 9986;
+
+/// GL_LINEAR_MIPMAP_NEAREST
+pub const RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST: i32 = 9985;
+
+/// GL_LINEAR_MIPMAP_LINEAR
+pub const RL_TEXTURE_FILTER_MIP_LINEAR: i32 = 9987;
+
+/// Anisotropic filter (custom identifier)
+pub const RL_TEXTURE_FILTER_ANISOTROPIC: i32 = 12288;
+
+/// Texture mipmap bias, percentage ratio (custom identifier)
+pub const RL_TEXTURE_MIPMAP_BIAS_RATIO: i32 = 16384;
+
+/// GL_REPEAT
+pub const RL_TEXTURE_WRAP_REPEAT: i32 = 10497;
+
+/// GL_CLAMP_TO_EDGE
+pub const RL_TEXTURE_WRAP_CLAMP: i32 = 33071;
+
+/// GL_MIRRORED_REPEAT
+pub const RL_TEXTURE_WRAP_MIRROR_REPEAT: i32 = 33648;
+
+/// GL_MIRROR_CLAMP_EXT
+pub const RL_TEXTURE_WRAP_MIRROR_CLAMP: i32 = 34626;
+
+/// GL_MODELVIEW
+pub const RL_MODELVIEW: i32 = 5888;
+
+/// GL_PROJECTION
+pub const RL_PROJECTION: i32 = 5889;
+
+/// GL_TEXTURE
+pub const RL_TEXTURE: i32 = 5890;
+
+/// GL_LINES
+pub const RL_LINES: i32 = 1;
+
+/// GL_TRIANGLES
+pub const RL_TRIANGLES: i32 = 4;
+
+/// GL_QUADS
+pub const RL_QUADS: i32 = 7;
+
+/// GL_UNSIGNED_BYTE
+pub const RL_UNSIGNED_BYTE: i32 = 5121;
+
+/// GL_FLOAT
+pub const RL_FLOAT: i32 = 5126;
+
+/// GL_STREAM_DRAW
+pub const RL_STREAM_DRAW: i32 = 35040;
+
+/// GL_STREAM_READ
+pub const RL_STREAM_READ: i32 = 35041;
+
+/// GL_STREAM_COPY
+pub const RL_STREAM_COPY: i32 = 35042;
+
+/// GL_STATIC_DRAW
+pub const RL_STATIC_DRAW: i32 = 35044;
+
+/// GL_STATIC_READ
+pub const RL_STATIC_READ: i32 = 35045;
+
+/// GL_STATIC_COPY
+pub const RL_STATIC_COPY: i32 = 35046;
+
+/// GL_DYNAMIC_DRAW
+pub const RL_DYNAMIC_DRAW: i32 = 35048;
+
+/// GL_DYNAMIC_READ
+pub const RL_DYNAMIC_READ: i32 = 35049;
+
+/// GL_DYNAMIC_COPY
+pub const RL_DYNAMIC_COPY: i32 = 35050;
+
+/// GL_FRAGMENT_SHADER
+pub const RL_FRAGMENT_SHADER: i32 = 35632;
+
+/// GL_VERTEX_SHADER
+pub const RL_VERTEX_SHADER: i32 = 35633;
+
+/// GL_COMPUTE_SHADER
+pub const RL_COMPUTE_SHADER: i32 = 37305;
+
+/// GL_ZERO
+pub const RL_ZERO: i32 = 0;
+
+/// GL_ONE
+pub const RL_ONE: i32 = 1;
+
+/// GL_SRC_COLOR
+pub const RL_SRC_COLOR: i32 = 768;
+
+/// GL_ONE_MINUS_SRC_COLOR
+pub const RL_ONE_MINUS_SRC_COLOR: i32 = 769;
+
+/// GL_SRC_ALPHA
+pub const RL_SRC_ALPHA: i32 = 770;
+
+/// GL_ONE_MINUS_SRC_ALPHA
+pub const RL_ONE_MINUS_SRC_ALPHA: i32 = 771;
+
+/// GL_DST_ALPHA
+pub const RL_DST_ALPHA: i32 = 772;
+
+/// GL_ONE_MINUS_DST_ALPHA
+pub const RL_ONE_MINUS_DST_ALPHA: i32 = 773;
+
+/// GL_DST_COLOR
+pub const RL_DST_COLOR: i32 = 774;
+
+/// GL_ONE_MINUS_DST_COLOR
+pub const RL_ONE_MINUS_DST_COLOR: i32 = 775;
+
+/// GL_SRC_ALPHA_SATURATE
+pub const RL_SRC_ALPHA_SATURATE: i32 = 776;
+
+/// GL_CONSTANT_COLOR
+pub const RL_CONSTANT_COLOR: i32 = 32769;
+
+/// GL_ONE_MINUS_CONSTANT_COLOR
+pub const RL_ONE_MINUS_CONSTANT_COLOR: i32 = 32770;
+
+/// GL_CONSTANT_ALPHA
+pub const RL_CONSTANT_ALPHA: i32 = 32771;
+
+/// GL_ONE_MINUS_CONSTANT_ALPHA
+pub const RL_ONE_MINUS_CONSTANT_ALPHA: i32 = 32772;
+
+/// GL_FUNC_ADD
+pub const RL_FUNC_ADD: i32 = 32774;
+
+/// GL_MIN
+pub const RL_MIN: i32 = 32775;
+
+/// GL_MAX
+pub const RL_MAX: i32 = 32776;
+
+/// GL_FUNC_SUBTRACT
+pub const RL_FUNC_SUBTRACT: i32 = 32778;
+
+/// GL_FUNC_REVERSE_SUBTRACT
+pub const RL_FUNC_REVERSE_SUBTRACT: i32 = 32779;
+
+/// GL_BLEND_EQUATION
+pub const RL_BLEND_EQUATION: i32 = 32777;
+
+/// GL_BLEND_EQUATION_RGB // (Same as BLEND_EQUATION)
+pub const RL_BLEND_EQUATION_RGB: i32 = 32777;
+
+/// GL_BLEND_EQUATION_ALPHA
+pub const RL_BLEND_EQUATION_ALPHA: i32 = 34877;
+
+/// GL_BLEND_DST_RGB
+pub const RL_BLEND_DST_RGB: i32 = 32968;
+
+/// GL_BLEND_SRC_RGB
+pub const RL_BLEND_SRC_RGB: i32 = 32969;
+
+/// GL_BLEND_DST_ALPHA
+pub const RL_BLEND_DST_ALPHA: i32 = 32970;
+
+/// GL_BLEND_SRC_ALPHA
+pub const RL_BLEND_SRC_ALPHA: i32 = 32971;
+
+/// GL_BLEND_COLOR
+pub const RL_BLEND_COLOR: i32 = 32773;
+
+/// GL_READ_FRAMEBUFFER
+pub const RL_READ_FRAMEBUFFER: i32 = 36008;
+
+/// GL_DRAW_FRAMEBUFFER
+pub const RL_DRAW_FRAMEBUFFER: i32 = 36009;
+
+///
+pub const GL_SHADING_LANGUAGE_VERSION: i32 = 35724;
+
+///
+pub const GL_COMPRESSED_RGB_S3TC_DXT1_EXT: i32 = 33776;
+
+///
+pub const GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: i32 = 33777;
+
+///
+pub const GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: i32 = 33778;
+
+///
+pub const GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: i32 = 33779;
+
+///
+pub const GL_ETC1_RGB8_OES: i32 = 36196;
+
+///
+pub const GL_COMPRESSED_RGB8_ETC2: i32 = 37492;
+
+///
+pub const GL_COMPRESSED_RGBA8_ETC2_EAC: i32 = 37496;
+
+///
+pub const GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG: i32 = 35840;
+
+///
+pub const GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: i32 = 35842;
+
+///
+pub const GL_COMPRESSED_RGBA_ASTC_4x4_KHR: i32 = 37808;
+
+///
+pub const GL_COMPRESSED_RGBA_ASTC_8x8_KHR: i32 = 37815;
+
+///
+pub const GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: i32 = 34047;
+
+///
+pub const GL_TEXTURE_MAX_ANISOTROPY_EXT: i32 = 34046;
+
+///
+pub const GL_UNSIGNED_SHORT_5_6_5: i32 = 33635;
+
+///
+pub const GL_UNSIGNED_SHORT_5_5_5_1: i32 = 32820;
+
+///
+pub const GL_UNSIGNED_SHORT_4_4_4_4: i32 = 32819;
+
+///
+pub const GL_LUMINANCE: i32 = 6409;
+
+///
+pub const GL_LUMINANCE_ALPHA: i32 = 6410;
+
+/// Bound by default to shader location: 0
+pub const RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION: []const u8 = "vertexPosition";
+
+/// Bound by default to shader location: 1
+pub const RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD: []const u8 = "vertexTexCoord";
+
+/// Bound by default to shader location: 2
+pub const RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL: []const u8 = "vertexNormal";
+
+/// Bound by default to shader location: 3
+pub const RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR: []const u8 = "vertexColor";
+
+/// Bound by default to shader location: 4
+pub const RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT: []const u8 = "vertexTangent";
+
+/// Bound by default to shader location: 5
+pub const RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2: []const u8 = "vertexTexCoord2";
+
+/// model-view-projection matrix
+pub const RL_DEFAULT_SHADER_UNIFORM_NAME_MVP: []const u8 = "mvp";
+
+/// view matrix
+pub const RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW: []const u8 = "matView";
+
+/// projection matrix
+pub const RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION: []const u8 = "matProjection";
+
+/// model matrix
+pub const RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL: []const u8 = "matModel";
+
+/// normal matrix (transpose(inverse(matModelView))
+pub const RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL: []const u8 = "matNormal";
+
+/// color diffuse (base tint color, multiplied by texture color)
+pub const RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR: []const u8 = "colDiffuse";
+
+/// texture0 (texture slot active 0)
+pub const RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0: []const u8 = "texture0";
+
+/// texture1 (texture slot active 1)
+pub const RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1: []const u8 = "texture1";
+
+/// texture2 (texture slot active 2)
+pub const RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2: []const u8 = "texture2";
+
+///
+pub const EPSILON: f32 = 0.000001;
diff --git a/libs/raylib/raylib_parser.zig b/libs/raylib/raylib_parser.zig
new file mode 100644
index 0000000..0190fc3
--- /dev/null
+++ b/libs/raylib/raylib_parser.zig
@@ -0,0 +1,6 @@
+//! run 'zig build jsons' to generate bindings for raylib
+//! run 'zig build raylib_parser' to build the raylib_parser.exe
+
+/// this needs to be here so the zig compiler won't complain that there is no entry point
+/// but actually we are using main() of 'raylib/src/parser/raylib_parser.c'
+pub extern fn main() c_int;
diff --git a/libs/raylib/raymath.json b/libs/raylib/raymath.json
new file mode 100644
index 0000000..997d27a
--- /dev/null
+++ b/libs/raylib/raymath.json
@@ -0,0 +1,1954 @@
+{
+ "defines": [
+ {
+ "name": "RAYMATH_H",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RMAPI",
+ "type": "UNKNOWN",
+ "value": "__declspec(dllexport) extern inline",
+ "description": "We are building raylib as a Win32 shared library (.dll)"
+ },
+ {
+ "name": "PI",
+ "type": "FLOAT",
+ "value": "3.14159265358979323846",
+ "description": ""
+ },
+ {
+ "name": "EPSILON",
+ "type": "FLOAT",
+ "value": "0.000001",
+ "description": ""
+ },
+ {
+ "name": "DEG2RAD",
+ "type": "FLOAT_MATH",
+ "value": "(PI/180.0f)",
+ "description": ""
+ },
+ {
+ "name": "RAD2DEG",
+ "type": "FLOAT_MATH",
+ "value": "(180.0f/PI)",
+ "description": ""
+ },
+ {
+ "name": "MatrixToFloat(mat)",
+ "type": "MACRO",
+ "value": "(MatrixToFloatV(mat).v)",
+ "description": ""
+ },
+ {
+ "name": "Vector3ToFloat(vec)",
+ "type": "MACRO",
+ "value": "(Vector3ToFloatV(vec).v)",
+ "description": ""
+ },
+ {
+ "name": "RL_VECTOR2_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RL_VECTOR3_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RL_VECTOR4_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RL_QUATERNION_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RL_MATRIX_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ }
+ ],
+ "structs": [
+ {
+ "name": "Vector2",
+ "description": "Vector2 type",
+ "fields": [
+ {
+ "type": "float",
+ "name": "x",
+ "description": ""
+ },
+ {
+ "type": "float",
+ "name": "y",
+ "description": ""
+ }
+ ]
+ },
+ {
+ "name": "Vector3",
+ "description": "Vector3 type",
+ "fields": [
+ {
+ "type": "float",
+ "name": "x",
+ "description": ""
+ },
+ {
+ "type": "float",
+ "name": "y",
+ "description": ""
+ },
+ {
+ "type": "float",
+ "name": "z",
+ "description": ""
+ }
+ ]
+ },
+ {
+ "name": "Vector4",
+ "description": "Vector4 type",
+ "fields": [
+ {
+ "type": "float",
+ "name": "x",
+ "description": ""
+ },
+ {
+ "type": "float",
+ "name": "y",
+ "description": ""
+ },
+ {
+ "type": "float",
+ "name": "z",
+ "description": ""
+ },
+ {
+ "type": "float",
+ "name": "w",
+ "description": ""
+ }
+ ]
+ },
+ {
+ "name": "Matrix",
+ "description": "Matrix type (OpenGL style 4x4 - right handed, column major)",
+ "fields": [
+ {
+ "type": "float",
+ "name": "m0",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m4",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m8",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m12",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m1",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m5",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m9",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m13",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m2",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m6",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m10",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m14",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m3",
+ "description": "Matrix fourth row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m7",
+ "description": "Matrix fourth row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m11",
+ "description": "Matrix fourth row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m15",
+ "description": "Matrix fourth row (4 components)"
+ }
+ ]
+ },
+ {
+ "name": "float3",
+ "description": "NOTE: Helper types to be used instead of array return types for *ToFloat functions",
+ "fields": [
+ {
+ "type": "float[3]",
+ "name": "v",
+ "description": ""
+ }
+ ]
+ },
+ {
+ "name": "float16",
+ "description": "",
+ "fields": [
+ {
+ "type": "float[16]",
+ "name": "v",
+ "description": ""
+ }
+ ]
+ }
+ ],
+ "aliases": [
+ {
+ "type": "Vector4",
+ "name": "Quaternion",
+ "description": "Quaternion type"
+ }
+ ],
+ "enums": [
+ ],
+ "callbacks": [
+ ],
+ "functions": [
+ {
+ "name": "Clamp",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "float",
+ "name": "value"
+ },
+ {
+ "type": "float",
+ "name": "min"
+ },
+ {
+ "type": "float",
+ "name": "max"
+ }
+ ]
+ },
+ {
+ "name": "Lerp",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "float",
+ "name": "start"
+ },
+ {
+ "type": "float",
+ "name": "end"
+ },
+ {
+ "type": "float",
+ "name": "amount"
+ }
+ ]
+ },
+ {
+ "name": "Normalize",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "float",
+ "name": "value"
+ },
+ {
+ "type": "float",
+ "name": "start"
+ },
+ {
+ "type": "float",
+ "name": "end"
+ }
+ ]
+ },
+ {
+ "name": "Remap",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "float",
+ "name": "value"
+ },
+ {
+ "type": "float",
+ "name": "inputStart"
+ },
+ {
+ "type": "float",
+ "name": "inputEnd"
+ },
+ {
+ "type": "float",
+ "name": "outputStart"
+ },
+ {
+ "type": "float",
+ "name": "outputEnd"
+ }
+ ]
+ },
+ {
+ "name": "Wrap",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "float",
+ "name": "value"
+ },
+ {
+ "type": "float",
+ "name": "min"
+ },
+ {
+ "type": "float",
+ "name": "max"
+ }
+ ]
+ },
+ {
+ "name": "FloatEquals",
+ "description": "",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "float",
+ "name": "x"
+ },
+ {
+ "type": "float",
+ "name": "y"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Zero",
+ "description": "",
+ "returnType": "Vector2"
+ },
+ {
+ "name": "Vector2One",
+ "description": "",
+ "returnType": "Vector2"
+ },
+ {
+ "name": "Vector2Add",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v1"
+ },
+ {
+ "type": "Vector2",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector2AddValue",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ },
+ {
+ "type": "float",
+ "name": "add"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Subtract",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v1"
+ },
+ {
+ "type": "Vector2",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector2SubtractValue",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ },
+ {
+ "type": "float",
+ "name": "sub"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Length",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ }
+ ]
+ },
+ {
+ "name": "Vector2LengthSqr",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ }
+ ]
+ },
+ {
+ "name": "Vector2DotProduct",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v1"
+ },
+ {
+ "type": "Vector2",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Distance",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v1"
+ },
+ {
+ "type": "Vector2",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector2DistanceSqr",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v1"
+ },
+ {
+ "type": "Vector2",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Angle",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v1"
+ },
+ {
+ "type": "Vector2",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector2LineAngle",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "start"
+ },
+ {
+ "type": "Vector2",
+ "name": "end"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Scale",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ },
+ {
+ "type": "float",
+ "name": "scale"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Multiply",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v1"
+ },
+ {
+ "type": "Vector2",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Negate",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Divide",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v1"
+ },
+ {
+ "type": "Vector2",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Normalize",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Transform",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ },
+ {
+ "type": "Matrix",
+ "name": "mat"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Lerp",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v1"
+ },
+ {
+ "type": "Vector2",
+ "name": "v2"
+ },
+ {
+ "type": "float",
+ "name": "amount"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Reflect",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ },
+ {
+ "type": "Vector2",
+ "name": "normal"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Rotate",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ },
+ {
+ "type": "float",
+ "name": "angle"
+ }
+ ]
+ },
+ {
+ "name": "Vector2MoveTowards",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ },
+ {
+ "type": "Vector2",
+ "name": "target"
+ },
+ {
+ "type": "float",
+ "name": "maxDistance"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Invert",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Clamp",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ },
+ {
+ "type": "Vector2",
+ "name": "min"
+ },
+ {
+ "type": "Vector2",
+ "name": "max"
+ }
+ ]
+ },
+ {
+ "name": "Vector2ClampValue",
+ "description": "",
+ "returnType": "Vector2",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "v"
+ },
+ {
+ "type": "float",
+ "name": "min"
+ },
+ {
+ "type": "float",
+ "name": "max"
+ }
+ ]
+ },
+ {
+ "name": "Vector2Equals",
+ "description": "",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "Vector2",
+ "name": "p"
+ },
+ {
+ "type": "Vector2",
+ "name": "q"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Zero",
+ "description": "",
+ "returnType": "Vector3"
+ },
+ {
+ "name": "Vector3One",
+ "description": "",
+ "returnType": "Vector3"
+ },
+ {
+ "name": "Vector3Add",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3AddValue",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ },
+ {
+ "type": "float",
+ "name": "add"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Subtract",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3SubtractValue",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ },
+ {
+ "type": "float",
+ "name": "sub"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Scale",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ },
+ {
+ "type": "float",
+ "name": "scalar"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Multiply",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3CrossProduct",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Perpendicular",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Length",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "const Vector3",
+ "name": "v"
+ }
+ ]
+ },
+ {
+ "name": "Vector3LengthSqr",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "const Vector3",
+ "name": "v"
+ }
+ ]
+ },
+ {
+ "name": "Vector3DotProduct",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Distance",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3DistanceSqr",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Angle",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Negate",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Divide",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Normalize",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Project",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Reject",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3OrthoNormalize",
+ "description": "",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Vector3 *",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3 *",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Transform",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ },
+ {
+ "type": "Matrix",
+ "name": "mat"
+ }
+ ]
+ },
+ {
+ "name": "Vector3RotateByQuaternion",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ },
+ {
+ "type": "Quaternion",
+ "name": "q"
+ }
+ ]
+ },
+ {
+ "name": "Vector3RotateByAxisAngle",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ },
+ {
+ "type": "Vector3",
+ "name": "axis"
+ },
+ {
+ "type": "float",
+ "name": "angle"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Lerp",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ },
+ {
+ "type": "float",
+ "name": "amount"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Reflect",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ },
+ {
+ "type": "Vector3",
+ "name": "normal"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Min",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Max",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v1"
+ },
+ {
+ "type": "Vector3",
+ "name": "v2"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Barycenter",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "p"
+ },
+ {
+ "type": "Vector3",
+ "name": "a"
+ },
+ {
+ "type": "Vector3",
+ "name": "b"
+ },
+ {
+ "type": "Vector3",
+ "name": "c"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Unproject",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "source"
+ },
+ {
+ "type": "Matrix",
+ "name": "projection"
+ },
+ {
+ "type": "Matrix",
+ "name": "view"
+ }
+ ]
+ },
+ {
+ "name": "Vector3ToFloatV",
+ "description": "",
+ "returnType": "float3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Invert",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Clamp",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ },
+ {
+ "type": "Vector3",
+ "name": "min"
+ },
+ {
+ "type": "Vector3",
+ "name": "max"
+ }
+ ]
+ },
+ {
+ "name": "Vector3ClampValue",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ },
+ {
+ "type": "float",
+ "name": "min"
+ },
+ {
+ "type": "float",
+ "name": "max"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Equals",
+ "description": "",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "p"
+ },
+ {
+ "type": "Vector3",
+ "name": "q"
+ }
+ ]
+ },
+ {
+ "name": "Vector3Refract",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "v"
+ },
+ {
+ "type": "Vector3",
+ "name": "n"
+ },
+ {
+ "type": "float",
+ "name": "r"
+ }
+ ]
+ },
+ {
+ "name": "MatrixDeterminant",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "mat"
+ }
+ ]
+ },
+ {
+ "name": "MatrixTrace",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "mat"
+ }
+ ]
+ },
+ {
+ "name": "MatrixTranspose",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "mat"
+ }
+ ]
+ },
+ {
+ "name": "MatrixInvert",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "mat"
+ }
+ ]
+ },
+ {
+ "name": "MatrixIdentity",
+ "description": "",
+ "returnType": "Matrix"
+ },
+ {
+ "name": "MatrixAdd",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "left"
+ },
+ {
+ "type": "Matrix",
+ "name": "right"
+ }
+ ]
+ },
+ {
+ "name": "MatrixSubtract",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "left"
+ },
+ {
+ "type": "Matrix",
+ "name": "right"
+ }
+ ]
+ },
+ {
+ "name": "MatrixMultiply",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "left"
+ },
+ {
+ "type": "Matrix",
+ "name": "right"
+ }
+ ]
+ },
+ {
+ "name": "MatrixTranslate",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "float",
+ "name": "x"
+ },
+ {
+ "type": "float",
+ "name": "y"
+ },
+ {
+ "type": "float",
+ "name": "z"
+ }
+ ]
+ },
+ {
+ "name": "MatrixRotate",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "axis"
+ },
+ {
+ "type": "float",
+ "name": "angle"
+ }
+ ]
+ },
+ {
+ "name": "MatrixRotateX",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "float",
+ "name": "angle"
+ }
+ ]
+ },
+ {
+ "name": "MatrixRotateY",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "float",
+ "name": "angle"
+ }
+ ]
+ },
+ {
+ "name": "MatrixRotateZ",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "float",
+ "name": "angle"
+ }
+ ]
+ },
+ {
+ "name": "MatrixRotateXYZ",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "angle"
+ }
+ ]
+ },
+ {
+ "name": "MatrixRotateZYX",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "angle"
+ }
+ ]
+ },
+ {
+ "name": "MatrixScale",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "float",
+ "name": "x"
+ },
+ {
+ "type": "float",
+ "name": "y"
+ },
+ {
+ "type": "float",
+ "name": "z"
+ }
+ ]
+ },
+ {
+ "name": "MatrixFrustum",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "double",
+ "name": "left"
+ },
+ {
+ "type": "double",
+ "name": "right"
+ },
+ {
+ "type": "double",
+ "name": "bottom"
+ },
+ {
+ "type": "double",
+ "name": "top"
+ },
+ {
+ "type": "double",
+ "name": "near"
+ },
+ {
+ "type": "double",
+ "name": "far"
+ }
+ ]
+ },
+ {
+ "name": "MatrixPerspective",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "double",
+ "name": "fovY"
+ },
+ {
+ "type": "double",
+ "name": "aspect"
+ },
+ {
+ "type": "double",
+ "name": "nearPlane"
+ },
+ {
+ "type": "double",
+ "name": "farPlane"
+ }
+ ]
+ },
+ {
+ "name": "MatrixOrtho",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "double",
+ "name": "left"
+ },
+ {
+ "type": "double",
+ "name": "right"
+ },
+ {
+ "type": "double",
+ "name": "bottom"
+ },
+ {
+ "type": "double",
+ "name": "top"
+ },
+ {
+ "type": "double",
+ "name": "nearPlane"
+ },
+ {
+ "type": "double",
+ "name": "farPlane"
+ }
+ ]
+ },
+ {
+ "name": "MatrixLookAt",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "eye"
+ },
+ {
+ "type": "Vector3",
+ "name": "target"
+ },
+ {
+ "type": "Vector3",
+ "name": "up"
+ }
+ ]
+ },
+ {
+ "name": "MatrixToFloatV",
+ "description": "",
+ "returnType": "float16",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "mat"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionAdd",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q1"
+ },
+ {
+ "type": "Quaternion",
+ "name": "q2"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionAddValue",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q"
+ },
+ {
+ "type": "float",
+ "name": "add"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionSubtract",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q1"
+ },
+ {
+ "type": "Quaternion",
+ "name": "q2"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionSubtractValue",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q"
+ },
+ {
+ "type": "float",
+ "name": "sub"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionIdentity",
+ "description": "",
+ "returnType": "Quaternion"
+ },
+ {
+ "name": "QuaternionLength",
+ "description": "",
+ "returnType": "float",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionNormalize",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionInvert",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionMultiply",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q1"
+ },
+ {
+ "type": "Quaternion",
+ "name": "q2"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionScale",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q"
+ },
+ {
+ "type": "float",
+ "name": "mul"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionDivide",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q1"
+ },
+ {
+ "type": "Quaternion",
+ "name": "q2"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionLerp",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q1"
+ },
+ {
+ "type": "Quaternion",
+ "name": "q2"
+ },
+ {
+ "type": "float",
+ "name": "amount"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionNlerp",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q1"
+ },
+ {
+ "type": "Quaternion",
+ "name": "q2"
+ },
+ {
+ "type": "float",
+ "name": "amount"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionSlerp",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q1"
+ },
+ {
+ "type": "Quaternion",
+ "name": "q2"
+ },
+ {
+ "type": "float",
+ "name": "amount"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionFromVector3ToVector3",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "from"
+ },
+ {
+ "type": "Vector3",
+ "name": "to"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionFromMatrix",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "mat"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionToMatrix",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionFromAxisAngle",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Vector3",
+ "name": "axis"
+ },
+ {
+ "type": "float",
+ "name": "angle"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionToAxisAngle",
+ "description": "",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q"
+ },
+ {
+ "type": "Vector3 *",
+ "name": "outAxis"
+ },
+ {
+ "type": "float *",
+ "name": "outAngle"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionFromEuler",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "float",
+ "name": "pitch"
+ },
+ {
+ "type": "float",
+ "name": "yaw"
+ },
+ {
+ "type": "float",
+ "name": "roll"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionToEuler",
+ "description": "",
+ "returnType": "Vector3",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionTransform",
+ "description": "",
+ "returnType": "Quaternion",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "q"
+ },
+ {
+ "type": "Matrix",
+ "name": "mat"
+ }
+ ]
+ },
+ {
+ "name": "QuaternionEquals",
+ "description": "",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "Quaternion",
+ "name": "p"
+ },
+ {
+ "type": "Quaternion",
+ "name": "q"
+ }
+ ]
+ }
+ ]
+}
diff --git a/libs/raylib/rlgl.json b/libs/raylib/rlgl.json
new file mode 100644
index 0000000..0f29ffb
--- /dev/null
+++ b/libs/raylib/rlgl.json
@@ -0,0 +1,3928 @@
+{
+ "defines": [
+ {
+ "name": "RLGL_H",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RLGL_VERSION",
+ "type": "STRING",
+ "value": "4.5",
+ "description": ""
+ },
+ {
+ "name": "RLAPI",
+ "type": "UNKNOWN",
+ "value": "__declspec(dllexport)",
+ "description": "We are building the library as a Win32 shared library (.dll)"
+ },
+ {
+ "name": "TRACELOG(level, ...)",
+ "type": "MACRO",
+ "value": "(void)0",
+ "description": ""
+ },
+ {
+ "name": "TRACELOGD(...)",
+ "type": "MACRO",
+ "value": "(void)0",
+ "description": ""
+ },
+ {
+ "name": "RL_MALLOC(sz)",
+ "type": "MACRO",
+ "value": "malloc(sz)",
+ "description": ""
+ },
+ {
+ "name": "RL_CALLOC(n,sz)",
+ "type": "MACRO",
+ "value": "calloc(n,sz)",
+ "description": ""
+ },
+ {
+ "name": "RL_REALLOC(n,sz)",
+ "type": "MACRO",
+ "value": "realloc(n,sz)",
+ "description": ""
+ },
+ {
+ "name": "RL_FREE(p)",
+ "type": "MACRO",
+ "value": "free(p)",
+ "description": ""
+ },
+ {
+ "name": "GRAPHICS_API_OPENGL_33",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "GRAPHICS_API_OPENGL_ES2",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RLGL_RENDER_TEXTURES_HINT",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RL_DEFAULT_BATCH_BUFFER_ELEMENTS",
+ "type": "INT",
+ "value": "8192",
+ "description": ""
+ },
+ {
+ "name": "RL_DEFAULT_BATCH_BUFFERS",
+ "type": "INT",
+ "value": "1",
+ "description": "Default number of batch buffers (multi-buffering)"
+ },
+ {
+ "name": "RL_DEFAULT_BATCH_DRAWCALLS",
+ "type": "INT",
+ "value": "256",
+ "description": "Default number of batch draw calls (by state changes: mode, texture)"
+ },
+ {
+ "name": "RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS",
+ "type": "INT",
+ "value": "4",
+ "description": "Maximum number of textures units that can be activated on batch drawing (SetShaderValueTexture())"
+ },
+ {
+ "name": "RL_MAX_MATRIX_STACK_SIZE",
+ "type": "INT",
+ "value": "32",
+ "description": "Maximum size of Matrix stack"
+ },
+ {
+ "name": "RL_MAX_SHADER_LOCATIONS",
+ "type": "INT",
+ "value": "32",
+ "description": "Maximum number of shader locations supported"
+ },
+ {
+ "name": "RL_CULL_DISTANCE_NEAR",
+ "type": "DOUBLE",
+ "value": "0.01",
+ "description": "Default near cull distance"
+ },
+ {
+ "name": "RL_CULL_DISTANCE_FAR",
+ "type": "DOUBLE",
+ "value": "1000.0",
+ "description": "Default far cull distance"
+ },
+ {
+ "name": "RL_TEXTURE_WRAP_S",
+ "type": "INT",
+ "value": "10242",
+ "description": "GL_TEXTURE_WRAP_S"
+ },
+ {
+ "name": "RL_TEXTURE_WRAP_T",
+ "type": "INT",
+ "value": "10243",
+ "description": "GL_TEXTURE_WRAP_T"
+ },
+ {
+ "name": "RL_TEXTURE_MAG_FILTER",
+ "type": "INT",
+ "value": "10240",
+ "description": "GL_TEXTURE_MAG_FILTER"
+ },
+ {
+ "name": "RL_TEXTURE_MIN_FILTER",
+ "type": "INT",
+ "value": "10241",
+ "description": "GL_TEXTURE_MIN_FILTER"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_NEAREST",
+ "type": "INT",
+ "value": "9728",
+ "description": "GL_NEAREST"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_LINEAR",
+ "type": "INT",
+ "value": "9729",
+ "description": "GL_LINEAR"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_MIP_NEAREST",
+ "type": "INT",
+ "value": "9984",
+ "description": "GL_NEAREST_MIPMAP_NEAREST"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR",
+ "type": "INT",
+ "value": "9986",
+ "description": "GL_NEAREST_MIPMAP_LINEAR"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST",
+ "type": "INT",
+ "value": "9985",
+ "description": "GL_LINEAR_MIPMAP_NEAREST"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_MIP_LINEAR",
+ "type": "INT",
+ "value": "9987",
+ "description": "GL_LINEAR_MIPMAP_LINEAR"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_ANISOTROPIC",
+ "type": "INT",
+ "value": "12288",
+ "description": "Anisotropic filter (custom identifier)"
+ },
+ {
+ "name": "RL_TEXTURE_MIPMAP_BIAS_RATIO",
+ "type": "INT",
+ "value": "16384",
+ "description": "Texture mipmap bias, percentage ratio (custom identifier)"
+ },
+ {
+ "name": "RL_TEXTURE_WRAP_REPEAT",
+ "type": "INT",
+ "value": "10497",
+ "description": "GL_REPEAT"
+ },
+ {
+ "name": "RL_TEXTURE_WRAP_CLAMP",
+ "type": "INT",
+ "value": "33071",
+ "description": "GL_CLAMP_TO_EDGE"
+ },
+ {
+ "name": "RL_TEXTURE_WRAP_MIRROR_REPEAT",
+ "type": "INT",
+ "value": "33648",
+ "description": "GL_MIRRORED_REPEAT"
+ },
+ {
+ "name": "RL_TEXTURE_WRAP_MIRROR_CLAMP",
+ "type": "INT",
+ "value": "34626",
+ "description": "GL_MIRROR_CLAMP_EXT"
+ },
+ {
+ "name": "RL_MODELVIEW",
+ "type": "INT",
+ "value": "5888",
+ "description": "GL_MODELVIEW"
+ },
+ {
+ "name": "RL_PROJECTION",
+ "type": "INT",
+ "value": "5889",
+ "description": "GL_PROJECTION"
+ },
+ {
+ "name": "RL_TEXTURE",
+ "type": "INT",
+ "value": "5890",
+ "description": "GL_TEXTURE"
+ },
+ {
+ "name": "RL_LINES",
+ "type": "INT",
+ "value": "1",
+ "description": "GL_LINES"
+ },
+ {
+ "name": "RL_TRIANGLES",
+ "type": "INT",
+ "value": "4",
+ "description": "GL_TRIANGLES"
+ },
+ {
+ "name": "RL_QUADS",
+ "type": "INT",
+ "value": "7",
+ "description": "GL_QUADS"
+ },
+ {
+ "name": "RL_UNSIGNED_BYTE",
+ "type": "INT",
+ "value": "5121",
+ "description": "GL_UNSIGNED_BYTE"
+ },
+ {
+ "name": "RL_FLOAT",
+ "type": "INT",
+ "value": "5126",
+ "description": "GL_FLOAT"
+ },
+ {
+ "name": "RL_STREAM_DRAW",
+ "type": "INT",
+ "value": "35040",
+ "description": "GL_STREAM_DRAW"
+ },
+ {
+ "name": "RL_STREAM_READ",
+ "type": "INT",
+ "value": "35041",
+ "description": "GL_STREAM_READ"
+ },
+ {
+ "name": "RL_STREAM_COPY",
+ "type": "INT",
+ "value": "35042",
+ "description": "GL_STREAM_COPY"
+ },
+ {
+ "name": "RL_STATIC_DRAW",
+ "type": "INT",
+ "value": "35044",
+ "description": "GL_STATIC_DRAW"
+ },
+ {
+ "name": "RL_STATIC_READ",
+ "type": "INT",
+ "value": "35045",
+ "description": "GL_STATIC_READ"
+ },
+ {
+ "name": "RL_STATIC_COPY",
+ "type": "INT",
+ "value": "35046",
+ "description": "GL_STATIC_COPY"
+ },
+ {
+ "name": "RL_DYNAMIC_DRAW",
+ "type": "INT",
+ "value": "35048",
+ "description": "GL_DYNAMIC_DRAW"
+ },
+ {
+ "name": "RL_DYNAMIC_READ",
+ "type": "INT",
+ "value": "35049",
+ "description": "GL_DYNAMIC_READ"
+ },
+ {
+ "name": "RL_DYNAMIC_COPY",
+ "type": "INT",
+ "value": "35050",
+ "description": "GL_DYNAMIC_COPY"
+ },
+ {
+ "name": "RL_FRAGMENT_SHADER",
+ "type": "INT",
+ "value": "35632",
+ "description": "GL_FRAGMENT_SHADER"
+ },
+ {
+ "name": "RL_VERTEX_SHADER",
+ "type": "INT",
+ "value": "35633",
+ "description": "GL_VERTEX_SHADER"
+ },
+ {
+ "name": "RL_COMPUTE_SHADER",
+ "type": "INT",
+ "value": "37305",
+ "description": "GL_COMPUTE_SHADER"
+ },
+ {
+ "name": "RL_ZERO",
+ "type": "INT",
+ "value": "0",
+ "description": "GL_ZERO"
+ },
+ {
+ "name": "RL_ONE",
+ "type": "INT",
+ "value": "1",
+ "description": "GL_ONE"
+ },
+ {
+ "name": "RL_SRC_COLOR",
+ "type": "INT",
+ "value": "768",
+ "description": "GL_SRC_COLOR"
+ },
+ {
+ "name": "RL_ONE_MINUS_SRC_COLOR",
+ "type": "INT",
+ "value": "769",
+ "description": "GL_ONE_MINUS_SRC_COLOR"
+ },
+ {
+ "name": "RL_SRC_ALPHA",
+ "type": "INT",
+ "value": "770",
+ "description": "GL_SRC_ALPHA"
+ },
+ {
+ "name": "RL_ONE_MINUS_SRC_ALPHA",
+ "type": "INT",
+ "value": "771",
+ "description": "GL_ONE_MINUS_SRC_ALPHA"
+ },
+ {
+ "name": "RL_DST_ALPHA",
+ "type": "INT",
+ "value": "772",
+ "description": "GL_DST_ALPHA"
+ },
+ {
+ "name": "RL_ONE_MINUS_DST_ALPHA",
+ "type": "INT",
+ "value": "773",
+ "description": "GL_ONE_MINUS_DST_ALPHA"
+ },
+ {
+ "name": "RL_DST_COLOR",
+ "type": "INT",
+ "value": "774",
+ "description": "GL_DST_COLOR"
+ },
+ {
+ "name": "RL_ONE_MINUS_DST_COLOR",
+ "type": "INT",
+ "value": "775",
+ "description": "GL_ONE_MINUS_DST_COLOR"
+ },
+ {
+ "name": "RL_SRC_ALPHA_SATURATE",
+ "type": "INT",
+ "value": "776",
+ "description": "GL_SRC_ALPHA_SATURATE"
+ },
+ {
+ "name": "RL_CONSTANT_COLOR",
+ "type": "INT",
+ "value": "32769",
+ "description": "GL_CONSTANT_COLOR"
+ },
+ {
+ "name": "RL_ONE_MINUS_CONSTANT_COLOR",
+ "type": "INT",
+ "value": "32770",
+ "description": "GL_ONE_MINUS_CONSTANT_COLOR"
+ },
+ {
+ "name": "RL_CONSTANT_ALPHA",
+ "type": "INT",
+ "value": "32771",
+ "description": "GL_CONSTANT_ALPHA"
+ },
+ {
+ "name": "RL_ONE_MINUS_CONSTANT_ALPHA",
+ "type": "INT",
+ "value": "32772",
+ "description": "GL_ONE_MINUS_CONSTANT_ALPHA"
+ },
+ {
+ "name": "RL_FUNC_ADD",
+ "type": "INT",
+ "value": "32774",
+ "description": "GL_FUNC_ADD"
+ },
+ {
+ "name": "RL_MIN",
+ "type": "INT",
+ "value": "32775",
+ "description": "GL_MIN"
+ },
+ {
+ "name": "RL_MAX",
+ "type": "INT",
+ "value": "32776",
+ "description": "GL_MAX"
+ },
+ {
+ "name": "RL_FUNC_SUBTRACT",
+ "type": "INT",
+ "value": "32778",
+ "description": "GL_FUNC_SUBTRACT"
+ },
+ {
+ "name": "RL_FUNC_REVERSE_SUBTRACT",
+ "type": "INT",
+ "value": "32779",
+ "description": "GL_FUNC_REVERSE_SUBTRACT"
+ },
+ {
+ "name": "RL_BLEND_EQUATION",
+ "type": "INT",
+ "value": "32777",
+ "description": "GL_BLEND_EQUATION"
+ },
+ {
+ "name": "RL_BLEND_EQUATION_RGB",
+ "type": "INT",
+ "value": "32777",
+ "description": "GL_BLEND_EQUATION_RGB // (Same as BLEND_EQUATION)"
+ },
+ {
+ "name": "RL_BLEND_EQUATION_ALPHA",
+ "type": "INT",
+ "value": "34877",
+ "description": "GL_BLEND_EQUATION_ALPHA"
+ },
+ {
+ "name": "RL_BLEND_DST_RGB",
+ "type": "INT",
+ "value": "32968",
+ "description": "GL_BLEND_DST_RGB"
+ },
+ {
+ "name": "RL_BLEND_SRC_RGB",
+ "type": "INT",
+ "value": "32969",
+ "description": "GL_BLEND_SRC_RGB"
+ },
+ {
+ "name": "RL_BLEND_DST_ALPHA",
+ "type": "INT",
+ "value": "32970",
+ "description": "GL_BLEND_DST_ALPHA"
+ },
+ {
+ "name": "RL_BLEND_SRC_ALPHA",
+ "type": "INT",
+ "value": "32971",
+ "description": "GL_BLEND_SRC_ALPHA"
+ },
+ {
+ "name": "RL_BLEND_COLOR",
+ "type": "INT",
+ "value": "32773",
+ "description": "GL_BLEND_COLOR"
+ },
+ {
+ "name": "RL_READ_FRAMEBUFFER",
+ "type": "INT",
+ "value": "36008",
+ "description": "GL_READ_FRAMEBUFFER"
+ },
+ {
+ "name": "RL_DRAW_FRAMEBUFFER",
+ "type": "INT",
+ "value": "36009",
+ "description": "GL_DRAW_FRAMEBUFFER"
+ },
+ {
+ "name": "RL_MATRIX_TYPE",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_DIFFUSE",
+ "type": "UNKNOWN",
+ "value": "RL_SHADER_LOC_MAP_ALBEDO",
+ "description": ""
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_SPECULAR",
+ "type": "UNKNOWN",
+ "value": "RL_SHADER_LOC_MAP_METALNESS",
+ "description": ""
+ },
+ {
+ "name": "GLAD_API_CALL_EXPORT",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "GLAD_API_CALL_EXPORT_BUILD",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "APIENTRY",
+ "type": "UNKNOWN",
+ "value": "__stdcall",
+ "description": ""
+ },
+ {
+ "name": "WINGDIAPI",
+ "type": "UNKNOWN",
+ "value": "__declspec(dllimport)",
+ "description": ""
+ },
+ {
+ "name": "GLAD_MALLOC",
+ "type": "UNKNOWN",
+ "value": "RL_MALLOC",
+ "description": ""
+ },
+ {
+ "name": "GLAD_FREE",
+ "type": "UNKNOWN",
+ "value": "RL_FREE",
+ "description": ""
+ },
+ {
+ "name": "GLAD_GL_IMPLEMENTATION",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "GL_GLEXT_PROTOTYPES",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "GLAD_GLES2_IMPLEMENTATION",
+ "type": "GUARD",
+ "value": "",
+ "description": ""
+ },
+ {
+ "name": "PI",
+ "type": "FLOAT",
+ "value": "3.14159265358979323846",
+ "description": ""
+ },
+ {
+ "name": "DEG2RAD",
+ "type": "FLOAT_MATH",
+ "value": "(PI/180.0f)",
+ "description": ""
+ },
+ {
+ "name": "RAD2DEG",
+ "type": "FLOAT_MATH",
+ "value": "(180.0f/PI)",
+ "description": ""
+ },
+ {
+ "name": "GL_SHADING_LANGUAGE_VERSION",
+ "type": "INT",
+ "value": "35724",
+ "description": ""
+ },
+ {
+ "name": "GL_COMPRESSED_RGB_S3TC_DXT1_EXT",
+ "type": "INT",
+ "value": "33776",
+ "description": ""
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT",
+ "type": "INT",
+ "value": "33777",
+ "description": ""
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA_S3TC_DXT3_EXT",
+ "type": "INT",
+ "value": "33778",
+ "description": ""
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA_S3TC_DXT5_EXT",
+ "type": "INT",
+ "value": "33779",
+ "description": ""
+ },
+ {
+ "name": "GL_ETC1_RGB8_OES",
+ "type": "INT",
+ "value": "36196",
+ "description": ""
+ },
+ {
+ "name": "GL_COMPRESSED_RGB8_ETC2",
+ "type": "INT",
+ "value": "37492",
+ "description": ""
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA8_ETC2_EAC",
+ "type": "INT",
+ "value": "37496",
+ "description": ""
+ },
+ {
+ "name": "GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG",
+ "type": "INT",
+ "value": "35840",
+ "description": ""
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",
+ "type": "INT",
+ "value": "35842",
+ "description": ""
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA_ASTC_4x4_KHR",
+ "type": "INT",
+ "value": "37808",
+ "description": ""
+ },
+ {
+ "name": "GL_COMPRESSED_RGBA_ASTC_8x8_KHR",
+ "type": "INT",
+ "value": "37815",
+ "description": ""
+ },
+ {
+ "name": "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT",
+ "type": "INT",
+ "value": "34047",
+ "description": ""
+ },
+ {
+ "name": "GL_TEXTURE_MAX_ANISOTROPY_EXT",
+ "type": "INT",
+ "value": "34046",
+ "description": ""
+ },
+ {
+ "name": "GL_UNSIGNED_SHORT_5_6_5",
+ "type": "INT",
+ "value": "33635",
+ "description": ""
+ },
+ {
+ "name": "GL_UNSIGNED_SHORT_5_5_5_1",
+ "type": "INT",
+ "value": "32820",
+ "description": ""
+ },
+ {
+ "name": "GL_UNSIGNED_SHORT_4_4_4_4",
+ "type": "INT",
+ "value": "32819",
+ "description": ""
+ },
+ {
+ "name": "GL_LUMINANCE",
+ "type": "INT",
+ "value": "6409",
+ "description": ""
+ },
+ {
+ "name": "GL_LUMINANCE_ALPHA",
+ "type": "INT",
+ "value": "6410",
+ "description": ""
+ },
+ {
+ "name": "glClearDepth",
+ "type": "UNKNOWN",
+ "value": "glClearDepthf",
+ "description": ""
+ },
+ {
+ "name": "GL_READ_FRAMEBUFFER",
+ "type": "UNKNOWN",
+ "value": "GL_FRAMEBUFFER",
+ "description": ""
+ },
+ {
+ "name": "GL_DRAW_FRAMEBUFFER",
+ "type": "UNKNOWN",
+ "value": "GL_FRAMEBUFFER",
+ "description": ""
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION",
+ "type": "STRING",
+ "value": "vertexPosition",
+ "description": "Bound by default to shader location: 0"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD",
+ "type": "STRING",
+ "value": "vertexTexCoord",
+ "description": "Bound by default to shader location: 1"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL",
+ "type": "STRING",
+ "value": "vertexNormal",
+ "description": "Bound by default to shader location: 2"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR",
+ "type": "STRING",
+ "value": "vertexColor",
+ "description": "Bound by default to shader location: 3"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT",
+ "type": "STRING",
+ "value": "vertexTangent",
+ "description": "Bound by default to shader location: 4"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2",
+ "type": "STRING",
+ "value": "vertexTexCoord2",
+ "description": "Bound by default to shader location: 5"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_UNIFORM_NAME_MVP",
+ "type": "STRING",
+ "value": "mvp",
+ "description": "model-view-projection matrix"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW",
+ "type": "STRING",
+ "value": "matView",
+ "description": "view matrix"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION",
+ "type": "STRING",
+ "value": "matProjection",
+ "description": "projection matrix"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL",
+ "type": "STRING",
+ "value": "matModel",
+ "description": "model matrix"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL",
+ "type": "STRING",
+ "value": "matNormal",
+ "description": "normal matrix (transpose(inverse(matModelView))"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR",
+ "type": "STRING",
+ "value": "colDiffuse",
+ "description": "color diffuse (base tint color, multiplied by texture color)"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0",
+ "type": "STRING",
+ "value": "texture0",
+ "description": "texture0 (texture slot active 0)"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1",
+ "type": "STRING",
+ "value": "texture1",
+ "description": "texture1 (texture slot active 1)"
+ },
+ {
+ "name": "RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2",
+ "type": "STRING",
+ "value": "texture2",
+ "description": "texture2 (texture slot active 2)"
+ },
+ {
+ "name": "MIN(a,b)",
+ "type": "MACRO",
+ "value": "(((a)<(b))? (a):(b))",
+ "description": ""
+ },
+ {
+ "name": "MAX(a,b)",
+ "type": "MACRO",
+ "value": "(((a)>(b))? (a):(b))",
+ "description": ""
+ }
+ ],
+ "structs": [
+ {
+ "name": "Matrix",
+ "description": "Matrix, 4x4 components, column major, OpenGL style, right handed",
+ "fields": [
+ {
+ "type": "float",
+ "name": "m0",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m4",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m8",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m12",
+ "description": "Matrix first row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m1",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m5",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m9",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m13",
+ "description": "Matrix second row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m2",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m6",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m10",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m14",
+ "description": "Matrix third row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m3",
+ "description": "Matrix fourth row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m7",
+ "description": "Matrix fourth row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m11",
+ "description": "Matrix fourth row (4 components)"
+ },
+ {
+ "type": "float",
+ "name": "m15",
+ "description": "Matrix fourth row (4 components)"
+ }
+ ]
+ },
+ {
+ "name": "rlVertexBuffer",
+ "description": "Dynamic vertex buffers (position + texcoords + colors + indices arrays)",
+ "fields": [
+ {
+ "type": "int",
+ "name": "elementCount",
+ "description": "Number of elements in the buffer (QUADS)"
+ },
+ {
+ "type": "float *",
+ "name": "vertices",
+ "description": "Vertex position (XYZ - 3 components per vertex) (shader-location = 0)"
+ },
+ {
+ "type": "float *",
+ "name": "texcoords",
+ "description": "Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)"
+ },
+ {
+ "type": "unsigned char *",
+ "name": "colors",
+ "description": "Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)"
+ },
+ {
+ "type": "unsigned int *",
+ "name": "indices",
+ "description": "Vertex indices (in case vertex data comes indexed) (6 indices per quad)"
+ },
+ {
+ "type": "unsigned int",
+ "name": "vaoId",
+ "description": "OpenGL Vertex Array Object id"
+ },
+ {
+ "type": "unsigned int[4]",
+ "name": "vboId",
+ "description": "OpenGL Vertex Buffer Objects id (4 types of vertex data)"
+ }
+ ]
+ },
+ {
+ "name": "rlDrawCall",
+ "description": "of those state-change happens (this is done in core module)",
+ "fields": [
+ {
+ "type": "int",
+ "name": "mode",
+ "description": "Drawing mode: LINES, TRIANGLES, QUADS"
+ },
+ {
+ "type": "int",
+ "name": "vertexCount",
+ "description": "Number of vertex of the draw"
+ },
+ {
+ "type": "int",
+ "name": "vertexAlignment",
+ "description": "Number of vertex required for index alignment (LINES, TRIANGLES)"
+ },
+ {
+ "type": "unsigned int",
+ "name": "textureId",
+ "description": "Texture id to be used on the draw -> Use to create new draw call if changes"
+ }
+ ]
+ },
+ {
+ "name": "rlRenderBatch",
+ "description": "rlRenderBatch type",
+ "fields": [
+ {
+ "type": "int",
+ "name": "bufferCount",
+ "description": "Number of vertex buffers (multi-buffering support)"
+ },
+ {
+ "type": "int",
+ "name": "currentBuffer",
+ "description": "Current buffer tracking in case of multi-buffering"
+ },
+ {
+ "type": "rlVertexBuffer *",
+ "name": "vertexBuffer",
+ "description": "Dynamic buffer(s) for vertex data"
+ },
+ {
+ "type": "rlDrawCall *",
+ "name": "draws",
+ "description": "Draw calls array, depends on textureId"
+ },
+ {
+ "type": "int",
+ "name": "drawCounter",
+ "description": "Draw calls counter"
+ },
+ {
+ "type": "float",
+ "name": "currentDepth",
+ "description": "Current depth value for next draw"
+ }
+ ]
+ },
+ {
+ "name": "rlglData",
+ "description": "",
+ "fields": [
+ {
+ "type": "rlRenderBatch *",
+ "name": "currentBatch",
+ "description": "Current render batch"
+ },
+ {
+ "type": "rlRenderBatch",
+ "name": "defaultBatch",
+ "description": "Default internal render batch"
+ },
+ {
+ "type": "int",
+ "name": "vertexCounter",
+ "description": "Current active render batch vertex counter (generic, used for all batches)"
+ },
+ {
+ "type": "float",
+ "name": "texcoordx",
+ "description": "Current active texture coordinate (added on glVertex*())"
+ },
+ {
+ "type": "float",
+ "name": "texcoordy",
+ "description": "Current active texture coordinate (added on glVertex*())"
+ },
+ {
+ "type": "float",
+ "name": "normalx",
+ "description": "Current active normal (added on glVertex*())"
+ },
+ {
+ "type": "float",
+ "name": "normaly",
+ "description": "Current active normal (added on glVertex*())"
+ },
+ {
+ "type": "float",
+ "name": "normalz",
+ "description": "Current active normal (added on glVertex*())"
+ },
+ {
+ "type": "unsigned char",
+ "name": "colorr",
+ "description": "Current active color (added on glVertex*())"
+ },
+ {
+ "type": "unsigned char",
+ "name": "colorg",
+ "description": "Current active color (added on glVertex*())"
+ },
+ {
+ "type": "unsigned char",
+ "name": "colorb",
+ "description": "Current active color (added on glVertex*())"
+ },
+ {
+ "type": "unsigned char",
+ "name": "colora",
+ "description": "Current active color (added on glVertex*())"
+ },
+ {
+ "type": "int",
+ "name": "currentMatrixMode",
+ "description": "Current matrix mode"
+ },
+ {
+ "type": "Matrix *",
+ "name": "currentMatrix",
+ "description": "Current matrix pointer"
+ },
+ {
+ "type": "Matrix",
+ "name": "modelview",
+ "description": "Default modelview matrix"
+ },
+ {
+ "type": "Matrix",
+ "name": "projection",
+ "description": "Default projection matrix"
+ },
+ {
+ "type": "Matrix",
+ "name": "transform",
+ "description": "Transform matrix to be used with rlTranslate, rlRotate, rlScale"
+ },
+ {
+ "type": "bool",
+ "name": "transformRequired",
+ "description": "Require transform matrix application to current draw-call vertex (if required)"
+ },
+ {
+ "type": "Matrix[RL_MAX_MATRIX_STACK_SIZE]",
+ "name": "stack",
+ "description": "Matrix stack for push/pop"
+ },
+ {
+ "type": "int",
+ "name": "stackCounter",
+ "description": "Matrix stack counter"
+ },
+ {
+ "type": "unsigned int",
+ "name": "defaultTextureId",
+ "description": "Default texture used on shapes/poly drawing (required by shader)"
+ },
+ {
+ "type": "unsigned int[RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS]",
+ "name": "activeTextureId",
+ "description": "Active texture ids to be enabled on batch drawing (0 active by default)"
+ },
+ {
+ "type": "unsigned int",
+ "name": "defaultVShaderId",
+ "description": "Default vertex shader id (used by default shader program)"
+ },
+ {
+ "type": "unsigned int",
+ "name": "defaultFShaderId",
+ "description": "Default fragment shader id (used by default shader program)"
+ },
+ {
+ "type": "unsigned int",
+ "name": "defaultShaderId",
+ "description": "Default shader program id, supports vertex color and diffuse texture"
+ },
+ {
+ "type": "int *",
+ "name": "defaultShaderLocs",
+ "description": "Default shader locations pointer to be used on rendering"
+ },
+ {
+ "type": "unsigned int",
+ "name": "currentShaderId",
+ "description": "Current shader id to be used on rendering (by default, defaultShaderId)"
+ },
+ {
+ "type": "int *",
+ "name": "currentShaderLocs",
+ "description": "Current shader locations pointer to be used on rendering (by default, defaultShaderLocs)"
+ },
+ {
+ "type": "bool",
+ "name": "stereoRender",
+ "description": "Stereo rendering flag"
+ },
+ {
+ "type": "Matrix[2]",
+ "name": "projectionStereo",
+ "description": "VR stereo rendering eyes projection matrices"
+ },
+ {
+ "type": "Matrix[2]",
+ "name": "viewOffsetStereo",
+ "description": "VR stereo rendering eyes view offset matrices"
+ },
+ {
+ "type": "int",
+ "name": "currentBlendMode",
+ "description": "Blending mode active"
+ },
+ {
+ "type": "int",
+ "name": "glBlendSrcFactor",
+ "description": "Blending source factor"
+ },
+ {
+ "type": "int",
+ "name": "glBlendDstFactor",
+ "description": "Blending destination factor"
+ },
+ {
+ "type": "int",
+ "name": "glBlendEquation",
+ "description": "Blending equation"
+ },
+ {
+ "type": "int",
+ "name": "glBlendSrcFactorRGB",
+ "description": "Blending source RGB factor"
+ },
+ {
+ "type": "int",
+ "name": "glBlendDestFactorRGB",
+ "description": "Blending destination RGB factor"
+ },
+ {
+ "type": "int",
+ "name": "glBlendSrcFactorAlpha",
+ "description": "Blending source alpha factor"
+ },
+ {
+ "type": "int",
+ "name": "glBlendDestFactorAlpha",
+ "description": "Blending destination alpha factor"
+ },
+ {
+ "type": "int",
+ "name": "glBlendEquationRGB",
+ "description": "Blending equation for RGB"
+ },
+ {
+ "type": "int",
+ "name": "glBlendEquationAlpha",
+ "description": "Blending equation for alpha"
+ },
+ {
+ "type": "bool",
+ "name": "glCustomBlendModeModified",
+ "description": "Custom blending factor and equation modification status"
+ },
+ {
+ "type": "int",
+ "name": "framebufferWidth",
+ "description": "Current framebuffer width"
+ },
+ {
+ "type": "int",
+ "name": "framebufferHeight",
+ "description": "Current framebuffer height"
+ }
+ ]
+ }
+ ],
+ "aliases": [
+ ],
+ "enums": [
+ {
+ "name": "rlGlVersion",
+ "description": "OpenGL version",
+ "values": [
+ {
+ "name": "RL_OPENGL_11",
+ "value": 1,
+ "description": "OpenGL 1.1"
+ },
+ {
+ "name": "RL_OPENGL_21",
+ "value": 2,
+ "description": "OpenGL 2.1 (GLSL 120)"
+ },
+ {
+ "name": "RL_OPENGL_33",
+ "value": 3,
+ "description": "OpenGL 3.3 (GLSL 330)"
+ },
+ {
+ "name": "RL_OPENGL_43",
+ "value": 4,
+ "description": "OpenGL 4.3 (using GLSL 330)"
+ },
+ {
+ "name": "RL_OPENGL_ES_20",
+ "value": 5,
+ "description": "OpenGL ES 2.0 (GLSL 100)"
+ },
+ {
+ "name": "RL_OPENGL_ES_30",
+ "value": 6,
+ "description": "OpenGL ES 3.0 (GLSL 300 es)"
+ }
+ ]
+ },
+ {
+ "name": "rlTraceLogLevel",
+ "description": "Trace log level",
+ "values": [
+ {
+ "name": "RL_LOG_ALL",
+ "value": 0,
+ "description": "Display all logs"
+ },
+ {
+ "name": "RL_LOG_TRACE",
+ "value": 1,
+ "description": "Trace logging, intended for internal use only"
+ },
+ {
+ "name": "RL_LOG_DEBUG",
+ "value": 2,
+ "description": "Debug logging, used for internal debugging, it should be disabled on release builds"
+ },
+ {
+ "name": "RL_LOG_INFO",
+ "value": 3,
+ "description": "Info logging, used for program execution info"
+ },
+ {
+ "name": "RL_LOG_WARNING",
+ "value": 4,
+ "description": "Warning logging, used on recoverable failures"
+ },
+ {
+ "name": "RL_LOG_ERROR",
+ "value": 5,
+ "description": "Error logging, used on unrecoverable failures"
+ },
+ {
+ "name": "RL_LOG_FATAL",
+ "value": 6,
+ "description": "Fatal logging, used to abort program: exit(EXIT_FAILURE)"
+ },
+ {
+ "name": "RL_LOG_NONE",
+ "value": 7,
+ "description": "Disable logging"
+ }
+ ]
+ },
+ {
+ "name": "rlPixelFormat",
+ "description": "Texture pixel formats",
+ "values": [
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE",
+ "value": 1,
+ "description": "8 bit per pixel (no alpha)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA",
+ "value": 2,
+ "description": "8*2 bpp (2 channels)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5",
+ "value": 3,
+ "description": "16 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8",
+ "value": 4,
+ "description": "24 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1",
+ "value": 5,
+ "description": "16 bpp (1 bit alpha)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4",
+ "value": 6,
+ "description": "16 bpp (4 bit alpha)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8",
+ "value": 7,
+ "description": "32 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R32",
+ "value": 8,
+ "description": "32 bpp (1 channel - float)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32",
+ "value": 9,
+ "description": "32*3 bpp (3 channels - float)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32",
+ "value": 10,
+ "description": "32*4 bpp (4 channels - float)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R16",
+ "value": 11,
+ "description": "16 bpp (1 channel - half float)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16",
+ "value": 12,
+ "description": "16*3 bpp (3 channels - half float)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16",
+ "value": 13,
+ "description": "16*4 bpp (4 channels - half float)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_DXT1_RGB",
+ "value": 14,
+ "description": "4 bpp (no alpha)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA",
+ "value": 15,
+ "description": "4 bpp (1 bit alpha)"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA",
+ "value": 16,
+ "description": "8 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA",
+ "value": 17,
+ "description": "8 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_ETC1_RGB",
+ "value": 18,
+ "description": "4 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_ETC2_RGB",
+ "value": 19,
+ "description": "4 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA",
+ "value": 20,
+ "description": "8 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_PVRT_RGB",
+ "value": 21,
+ "description": "4 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA",
+ "value": 22,
+ "description": "4 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA",
+ "value": 23,
+ "description": "8 bpp"
+ },
+ {
+ "name": "RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA",
+ "value": 24,
+ "description": "2 bpp"
+ }
+ ]
+ },
+ {
+ "name": "rlTextureFilter",
+ "description": "Texture parameters: filter mode",
+ "values": [
+ {
+ "name": "RL_TEXTURE_FILTER_POINT",
+ "value": 0,
+ "description": "No filter, just pixel approximation"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_BILINEAR",
+ "value": 1,
+ "description": "Linear filtering"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_TRILINEAR",
+ "value": 2,
+ "description": "Trilinear filtering (linear with mipmaps)"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_ANISOTROPIC_4X",
+ "value": 3,
+ "description": "Anisotropic filtering 4x"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_ANISOTROPIC_8X",
+ "value": 4,
+ "description": "Anisotropic filtering 8x"
+ },
+ {
+ "name": "RL_TEXTURE_FILTER_ANISOTROPIC_16X",
+ "value": 5,
+ "description": "Anisotropic filtering 16x"
+ }
+ ]
+ },
+ {
+ "name": "rlBlendMode",
+ "description": "Color blending modes (pre-defined)",
+ "values": [
+ {
+ "name": "RL_BLEND_ALPHA",
+ "value": 0,
+ "description": "Blend textures considering alpha (default)"
+ },
+ {
+ "name": "RL_BLEND_ADDITIVE",
+ "value": 1,
+ "description": "Blend textures adding colors"
+ },
+ {
+ "name": "RL_BLEND_MULTIPLIED",
+ "value": 2,
+ "description": "Blend textures multiplying colors"
+ },
+ {
+ "name": "RL_BLEND_ADD_COLORS",
+ "value": 3,
+ "description": "Blend textures adding colors (alternative)"
+ },
+ {
+ "name": "RL_BLEND_SUBTRACT_COLORS",
+ "value": 4,
+ "description": "Blend textures subtracting colors (alternative)"
+ },
+ {
+ "name": "RL_BLEND_ALPHA_PREMULTIPLY",
+ "value": 5,
+ "description": "Blend premultiplied textures considering alpha"
+ },
+ {
+ "name": "RL_BLEND_CUSTOM",
+ "value": 6,
+ "description": "Blend textures using custom src/dst factors (use rlSetBlendFactors())"
+ },
+ {
+ "name": "RL_BLEND_CUSTOM_SEPARATE",
+ "value": 7,
+ "description": "Blend textures using custom src/dst factors (use rlSetBlendFactorsSeparate())"
+ }
+ ]
+ },
+ {
+ "name": "rlShaderLocationIndex",
+ "description": "Shader location point type",
+ "values": [
+ {
+ "name": "RL_SHADER_LOC_VERTEX_POSITION",
+ "value": 0,
+ "description": "Shader location: vertex attribute: position"
+ },
+ {
+ "name": "RL_SHADER_LOC_VERTEX_TEXCOORD01",
+ "value": 1,
+ "description": "Shader location: vertex attribute: texcoord01"
+ },
+ {
+ "name": "RL_SHADER_LOC_VERTEX_TEXCOORD02",
+ "value": 2,
+ "description": "Shader location: vertex attribute: texcoord02"
+ },
+ {
+ "name": "RL_SHADER_LOC_VERTEX_NORMAL",
+ "value": 3,
+ "description": "Shader location: vertex attribute: normal"
+ },
+ {
+ "name": "RL_SHADER_LOC_VERTEX_TANGENT",
+ "value": 4,
+ "description": "Shader location: vertex attribute: tangent"
+ },
+ {
+ "name": "RL_SHADER_LOC_VERTEX_COLOR",
+ "value": 5,
+ "description": "Shader location: vertex attribute: color"
+ },
+ {
+ "name": "RL_SHADER_LOC_MATRIX_MVP",
+ "value": 6,
+ "description": "Shader location: matrix uniform: model-view-projection"
+ },
+ {
+ "name": "RL_SHADER_LOC_MATRIX_VIEW",
+ "value": 7,
+ "description": "Shader location: matrix uniform: view (camera transform)"
+ },
+ {
+ "name": "RL_SHADER_LOC_MATRIX_PROJECTION",
+ "value": 8,
+ "description": "Shader location: matrix uniform: projection"
+ },
+ {
+ "name": "RL_SHADER_LOC_MATRIX_MODEL",
+ "value": 9,
+ "description": "Shader location: matrix uniform: model (transform)"
+ },
+ {
+ "name": "RL_SHADER_LOC_MATRIX_NORMAL",
+ "value": 10,
+ "description": "Shader location: matrix uniform: normal"
+ },
+ {
+ "name": "RL_SHADER_LOC_VECTOR_VIEW",
+ "value": 11,
+ "description": "Shader location: vector uniform: view"
+ },
+ {
+ "name": "RL_SHADER_LOC_COLOR_DIFFUSE",
+ "value": 12,
+ "description": "Shader location: vector uniform: diffuse color"
+ },
+ {
+ "name": "RL_SHADER_LOC_COLOR_SPECULAR",
+ "value": 13,
+ "description": "Shader location: vector uniform: specular color"
+ },
+ {
+ "name": "RL_SHADER_LOC_COLOR_AMBIENT",
+ "value": 14,
+ "description": "Shader location: vector uniform: ambient color"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_ALBEDO",
+ "value": 15,
+ "description": "Shader location: sampler2d texture: albedo (same as: RL_SHADER_LOC_MAP_DIFFUSE)"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_METALNESS",
+ "value": 16,
+ "description": "Shader location: sampler2d texture: metalness (same as: RL_SHADER_LOC_MAP_SPECULAR)"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_NORMAL",
+ "value": 17,
+ "description": "Shader location: sampler2d texture: normal"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_ROUGHNESS",
+ "value": 18,
+ "description": "Shader location: sampler2d texture: roughness"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_OCCLUSION",
+ "value": 19,
+ "description": "Shader location: sampler2d texture: occlusion"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_EMISSION",
+ "value": 20,
+ "description": "Shader location: sampler2d texture: emission"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_HEIGHT",
+ "value": 21,
+ "description": "Shader location: sampler2d texture: height"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_CUBEMAP",
+ "value": 22,
+ "description": "Shader location: samplerCube texture: cubemap"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_IRRADIANCE",
+ "value": 23,
+ "description": "Shader location: samplerCube texture: irradiance"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_PREFILTER",
+ "value": 24,
+ "description": "Shader location: samplerCube texture: prefilter"
+ },
+ {
+ "name": "RL_SHADER_LOC_MAP_BRDF",
+ "value": 25,
+ "description": "Shader location: sampler2d texture: brdf"
+ }
+ ]
+ },
+ {
+ "name": "rlShaderUniformDataType",
+ "description": "Shader uniform data type",
+ "values": [
+ {
+ "name": "RL_SHADER_UNIFORM_FLOAT",
+ "value": 0,
+ "description": "Shader uniform type: float"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_VEC2",
+ "value": 1,
+ "description": "Shader uniform type: vec2 (2 float)"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_VEC3",
+ "value": 2,
+ "description": "Shader uniform type: vec3 (3 float)"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_VEC4",
+ "value": 3,
+ "description": "Shader uniform type: vec4 (4 float)"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_INT",
+ "value": 4,
+ "description": "Shader uniform type: int"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_IVEC2",
+ "value": 5,
+ "description": "Shader uniform type: ivec2 (2 int)"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_IVEC3",
+ "value": 6,
+ "description": "Shader uniform type: ivec3 (3 int)"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_IVEC4",
+ "value": 7,
+ "description": "Shader uniform type: ivec4 (4 int)"
+ },
+ {
+ "name": "RL_SHADER_UNIFORM_SAMPLER2D",
+ "value": 8,
+ "description": "Shader uniform type: sampler2d"
+ }
+ ]
+ },
+ {
+ "name": "rlShaderAttributeDataType",
+ "description": "Shader attribute data types",
+ "values": [
+ {
+ "name": "RL_SHADER_ATTRIB_FLOAT",
+ "value": 0,
+ "description": "Shader attribute type: float"
+ },
+ {
+ "name": "RL_SHADER_ATTRIB_VEC2",
+ "value": 1,
+ "description": "Shader attribute type: vec2 (2 float)"
+ },
+ {
+ "name": "RL_SHADER_ATTRIB_VEC3",
+ "value": 2,
+ "description": "Shader attribute type: vec3 (3 float)"
+ },
+ {
+ "name": "RL_SHADER_ATTRIB_VEC4",
+ "value": 3,
+ "description": "Shader attribute type: vec4 (4 float)"
+ }
+ ]
+ },
+ {
+ "name": "rlFramebufferAttachType",
+ "description": "Framebuffer attachment type",
+ "values": [
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL0",
+ "value": 0,
+ "description": "Framebuffer attachment type: color 0"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL1",
+ "value": 1,
+ "description": "Framebuffer attachment type: color 1"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL2",
+ "value": 2,
+ "description": "Framebuffer attachment type: color 2"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL3",
+ "value": 3,
+ "description": "Framebuffer attachment type: color 3"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL4",
+ "value": 4,
+ "description": "Framebuffer attachment type: color 4"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL5",
+ "value": 5,
+ "description": "Framebuffer attachment type: color 5"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL6",
+ "value": 6,
+ "description": "Framebuffer attachment type: color 6"
+ },
+ {
+ "name": "RL_ATTACHMENT_COLOR_CHANNEL7",
+ "value": 7,
+ "description": "Framebuffer attachment type: color 7"
+ },
+ {
+ "name": "RL_ATTACHMENT_DEPTH",
+ "value": 100,
+ "description": "Framebuffer attachment type: depth"
+ },
+ {
+ "name": "RL_ATTACHMENT_STENCIL",
+ "value": 200,
+ "description": "Framebuffer attachment type: stencil"
+ }
+ ]
+ },
+ {
+ "name": "rlFramebufferAttachTextureType",
+ "description": "Framebuffer texture attachment type",
+ "values": [
+ {
+ "name": "RL_ATTACHMENT_CUBEMAP_POSITIVE_X",
+ "value": 0,
+ "description": "Framebuffer texture attachment type: cubemap, +X side"
+ },
+ {
+ "name": "RL_ATTACHMENT_CUBEMAP_NEGATIVE_X",
+ "value": 1,
+ "description": "Framebuffer texture attachment type: cubemap, -X side"
+ },
+ {
+ "name": "RL_ATTACHMENT_CUBEMAP_POSITIVE_Y",
+ "value": 2,
+ "description": "Framebuffer texture attachment type: cubemap, +Y side"
+ },
+ {
+ "name": "RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y",
+ "value": 3,
+ "description": "Framebuffer texture attachment type: cubemap, -Y side"
+ },
+ {
+ "name": "RL_ATTACHMENT_CUBEMAP_POSITIVE_Z",
+ "value": 4,
+ "description": "Framebuffer texture attachment type: cubemap, +Z side"
+ },
+ {
+ "name": "RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z",
+ "value": 5,
+ "description": "Framebuffer texture attachment type: cubemap, -Z side"
+ },
+ {
+ "name": "RL_ATTACHMENT_TEXTURE2D",
+ "value": 100,
+ "description": "Framebuffer texture attachment type: texture2d"
+ },
+ {
+ "name": "RL_ATTACHMENT_RENDERBUFFER",
+ "value": 200,
+ "description": "Framebuffer texture attachment type: renderbuffer"
+ }
+ ]
+ },
+ {
+ "name": "rlCullMode",
+ "description": "Face culling mode",
+ "values": [
+ {
+ "name": "RL_CULL_FACE_FRONT",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "RL_CULL_FACE_BACK",
+ "value": 1,
+ "description": ""
+ }
+ ]
+ }
+ ],
+ "callbacks": [
+ {
+ "name": "rlglLoadProc",
+ "description": "OpenGL extension functions loader signature (same as GLADloadproc)",
+ "returnType": "void *",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "name"
+ }
+ ]
+ }
+ ],
+ "functions": [
+ {
+ "name": "rlMatrixMode",
+ "description": "Choose the current matrix to be transformed",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "mode"
+ }
+ ]
+ },
+ {
+ "name": "rlPushMatrix",
+ "description": "Push the current matrix to stack",
+ "returnType": "void"
+ },
+ {
+ "name": "rlPopMatrix",
+ "description": "Pop latest inserted matrix from stack",
+ "returnType": "void"
+ },
+ {
+ "name": "rlLoadIdentity",
+ "description": "Reset current matrix to identity matrix",
+ "returnType": "void"
+ },
+ {
+ "name": "rlTranslatef",
+ "description": "Multiply the current matrix by a translation matrix",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "x"
+ },
+ {
+ "type": "float",
+ "name": "y"
+ },
+ {
+ "type": "float",
+ "name": "z"
+ }
+ ]
+ },
+ {
+ "name": "rlRotatef",
+ "description": "Multiply the current matrix by a rotation matrix",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "angle"
+ },
+ {
+ "type": "float",
+ "name": "x"
+ },
+ {
+ "type": "float",
+ "name": "y"
+ },
+ {
+ "type": "float",
+ "name": "z"
+ }
+ ]
+ },
+ {
+ "name": "rlScalef",
+ "description": "Multiply the current matrix by a scaling matrix",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "x"
+ },
+ {
+ "type": "float",
+ "name": "y"
+ },
+ {
+ "type": "float",
+ "name": "z"
+ }
+ ]
+ },
+ {
+ "name": "rlMultMatrixf",
+ "description": "Multiply the current matrix by another matrix",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "const float *",
+ "name": "matf"
+ }
+ ]
+ },
+ {
+ "name": "rlFrustum",
+ "description": "",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "double",
+ "name": "left"
+ },
+ {
+ "type": "double",
+ "name": "right"
+ },
+ {
+ "type": "double",
+ "name": "bottom"
+ },
+ {
+ "type": "double",
+ "name": "top"
+ },
+ {
+ "type": "double",
+ "name": "znear"
+ },
+ {
+ "type": "double",
+ "name": "zfar"
+ }
+ ]
+ },
+ {
+ "name": "rlOrtho",
+ "description": "",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "double",
+ "name": "left"
+ },
+ {
+ "type": "double",
+ "name": "right"
+ },
+ {
+ "type": "double",
+ "name": "bottom"
+ },
+ {
+ "type": "double",
+ "name": "top"
+ },
+ {
+ "type": "double",
+ "name": "znear"
+ },
+ {
+ "type": "double",
+ "name": "zfar"
+ }
+ ]
+ },
+ {
+ "name": "rlViewport",
+ "description": "Set the viewport area",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "x"
+ },
+ {
+ "type": "int",
+ "name": "y"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "rlBegin",
+ "description": "Initialize drawing mode (how to organize vertex)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "mode"
+ }
+ ]
+ },
+ {
+ "name": "rlEnd",
+ "description": "Finish vertex providing",
+ "returnType": "void"
+ },
+ {
+ "name": "rlVertex2i",
+ "description": "Define one vertex (position) - 2 int",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "x"
+ },
+ {
+ "type": "int",
+ "name": "y"
+ }
+ ]
+ },
+ {
+ "name": "rlVertex2f",
+ "description": "Define one vertex (position) - 2 float",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "x"
+ },
+ {
+ "type": "float",
+ "name": "y"
+ }
+ ]
+ },
+ {
+ "name": "rlVertex3f",
+ "description": "Define one vertex (position) - 3 float",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "x"
+ },
+ {
+ "type": "float",
+ "name": "y"
+ },
+ {
+ "type": "float",
+ "name": "z"
+ }
+ ]
+ },
+ {
+ "name": "rlTexCoord2f",
+ "description": "Define one vertex (texture coordinate) - 2 float",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "x"
+ },
+ {
+ "type": "float",
+ "name": "y"
+ }
+ ]
+ },
+ {
+ "name": "rlNormal3f",
+ "description": "Define one vertex (normal) - 3 float",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "x"
+ },
+ {
+ "type": "float",
+ "name": "y"
+ },
+ {
+ "type": "float",
+ "name": "z"
+ }
+ ]
+ },
+ {
+ "name": "rlColor4ub",
+ "description": "Define one vertex (color) - 4 byte",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned char",
+ "name": "r"
+ },
+ {
+ "type": "unsigned char",
+ "name": "g"
+ },
+ {
+ "type": "unsigned char",
+ "name": "b"
+ },
+ {
+ "type": "unsigned char",
+ "name": "a"
+ }
+ ]
+ },
+ {
+ "name": "rlColor3f",
+ "description": "Define one vertex (color) - 3 float",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "x"
+ },
+ {
+ "type": "float",
+ "name": "y"
+ },
+ {
+ "type": "float",
+ "name": "z"
+ }
+ ]
+ },
+ {
+ "name": "rlColor4f",
+ "description": "Define one vertex (color) - 4 float",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "x"
+ },
+ {
+ "type": "float",
+ "name": "y"
+ },
+ {
+ "type": "float",
+ "name": "z"
+ },
+ {
+ "type": "float",
+ "name": "w"
+ }
+ ]
+ },
+ {
+ "name": "rlEnableVertexArray",
+ "description": "Enable vertex array (VAO, if supported)",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "vaoId"
+ }
+ ]
+ },
+ {
+ "name": "rlDisableVertexArray",
+ "description": "Disable vertex array (VAO, if supported)",
+ "returnType": "void"
+ },
+ {
+ "name": "rlEnableVertexBuffer",
+ "description": "Enable vertex buffer (VBO)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "rlDisableVertexBuffer",
+ "description": "Disable vertex buffer (VBO)",
+ "returnType": "void"
+ },
+ {
+ "name": "rlEnableVertexBufferElement",
+ "description": "Enable vertex buffer element (VBO element)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "rlDisableVertexBufferElement",
+ "description": "Disable vertex buffer element (VBO element)",
+ "returnType": "void"
+ },
+ {
+ "name": "rlEnableVertexAttribute",
+ "description": "Enable vertex attribute index",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "index"
+ }
+ ]
+ },
+ {
+ "name": "rlDisableVertexAttribute",
+ "description": "Disable vertex attribute index",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "index"
+ }
+ ]
+ },
+ {
+ "name": "rlEnableStatePointer",
+ "description": "Enable attribute state pointer",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "vertexAttribType"
+ },
+ {
+ "type": "void *",
+ "name": "buffer"
+ }
+ ]
+ },
+ {
+ "name": "rlDisableStatePointer",
+ "description": "Disable attribute state pointer",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "vertexAttribType"
+ }
+ ]
+ },
+ {
+ "name": "rlActiveTextureSlot",
+ "description": "Select and active a texture slot",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "slot"
+ }
+ ]
+ },
+ {
+ "name": "rlEnableTexture",
+ "description": "Enable texture",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "rlDisableTexture",
+ "description": "Disable texture",
+ "returnType": "void"
+ },
+ {
+ "name": "rlEnableTextureCubemap",
+ "description": "Enable texture cubemap",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "rlDisableTextureCubemap",
+ "description": "Disable texture cubemap",
+ "returnType": "void"
+ },
+ {
+ "name": "rlTextureParameters",
+ "description": "Set texture parameters (filter, wrap)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ },
+ {
+ "type": "int",
+ "name": "param"
+ },
+ {
+ "type": "int",
+ "name": "value"
+ }
+ ]
+ },
+ {
+ "name": "rlCubemapParameters",
+ "description": "Set cubemap parameters (filter, wrap)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ },
+ {
+ "type": "int",
+ "name": "param"
+ },
+ {
+ "type": "int",
+ "name": "value"
+ }
+ ]
+ },
+ {
+ "name": "rlEnableShader",
+ "description": "Enable shader program",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "rlDisableShader",
+ "description": "Disable shader program",
+ "returnType": "void"
+ },
+ {
+ "name": "rlEnableFramebuffer",
+ "description": "Enable render texture (fbo)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "rlDisableFramebuffer",
+ "description": "Disable render texture (fbo), return to default framebuffer",
+ "returnType": "void"
+ },
+ {
+ "name": "rlActiveDrawBuffers",
+ "description": "Activate multiple draw color buffers",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "count"
+ }
+ ]
+ },
+ {
+ "name": "rlBlitFramebuffer",
+ "description": "Blit active framebuffer to main framebuffer",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "srcX"
+ },
+ {
+ "type": "int",
+ "name": "srcY"
+ },
+ {
+ "type": "int",
+ "name": "srcWidth"
+ },
+ {
+ "type": "int",
+ "name": "srcHeight"
+ },
+ {
+ "type": "int",
+ "name": "dstX"
+ },
+ {
+ "type": "int",
+ "name": "dstY"
+ },
+ {
+ "type": "int",
+ "name": "dstWidth"
+ },
+ {
+ "type": "int",
+ "name": "dstHeight"
+ },
+ {
+ "type": "int",
+ "name": "bufferMask"
+ }
+ ]
+ },
+ {
+ "name": "rlBindFramebuffer",
+ "description": "Bind framebuffer (FBO) ",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "target"
+ },
+ {
+ "type": "unsigned int",
+ "name": "framebuffer"
+ }
+ ]
+ },
+ {
+ "name": "rlEnableColorBlend",
+ "description": "Enable color blending",
+ "returnType": "void"
+ },
+ {
+ "name": "rlDisableColorBlend",
+ "description": "Disable color blending",
+ "returnType": "void"
+ },
+ {
+ "name": "rlEnableDepthTest",
+ "description": "Enable depth test",
+ "returnType": "void"
+ },
+ {
+ "name": "rlDisableDepthTest",
+ "description": "Disable depth test",
+ "returnType": "void"
+ },
+ {
+ "name": "rlEnableDepthMask",
+ "description": "Enable depth write",
+ "returnType": "void"
+ },
+ {
+ "name": "rlDisableDepthMask",
+ "description": "Disable depth write",
+ "returnType": "void"
+ },
+ {
+ "name": "rlEnableBackfaceCulling",
+ "description": "Enable backface culling",
+ "returnType": "void"
+ },
+ {
+ "name": "rlDisableBackfaceCulling",
+ "description": "Disable backface culling",
+ "returnType": "void"
+ },
+ {
+ "name": "rlColorMask",
+ "description": "Color mask control",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "bool",
+ "name": "r"
+ },
+ {
+ "type": "bool",
+ "name": "g"
+ },
+ {
+ "type": "bool",
+ "name": "b"
+ },
+ {
+ "type": "bool",
+ "name": "a"
+ }
+ ]
+ },
+ {
+ "name": "rlSetCullFace",
+ "description": "Set face culling mode",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "mode"
+ }
+ ]
+ },
+ {
+ "name": "rlEnableScissorTest",
+ "description": "Enable scissor test",
+ "returnType": "void"
+ },
+ {
+ "name": "rlDisableScissorTest",
+ "description": "Disable scissor test",
+ "returnType": "void"
+ },
+ {
+ "name": "rlScissor",
+ "description": "Scissor test",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "x"
+ },
+ {
+ "type": "int",
+ "name": "y"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "rlEnableWireMode",
+ "description": "Enable wire mode",
+ "returnType": "void"
+ },
+ {
+ "name": "rlEnablePointMode",
+ "description": "Enable point mode",
+ "returnType": "void"
+ },
+ {
+ "name": "rlDisableWireMode",
+ "description": "Disable wire mode ( and point ) maybe rename",
+ "returnType": "void"
+ },
+ {
+ "name": "rlSetLineWidth",
+ "description": "Set the line drawing width",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "float",
+ "name": "width"
+ }
+ ]
+ },
+ {
+ "name": "rlGetLineWidth",
+ "description": "Get the line drawing width",
+ "returnType": "float"
+ },
+ {
+ "name": "rlEnableSmoothLines",
+ "description": "Enable line aliasing",
+ "returnType": "void"
+ },
+ {
+ "name": "rlDisableSmoothLines",
+ "description": "Disable line aliasing",
+ "returnType": "void"
+ },
+ {
+ "name": "rlEnableStereoRender",
+ "description": "Enable stereo rendering",
+ "returnType": "void"
+ },
+ {
+ "name": "rlDisableStereoRender",
+ "description": "Disable stereo rendering",
+ "returnType": "void"
+ },
+ {
+ "name": "rlIsStereoRenderEnabled",
+ "description": "Check if stereo render is enabled",
+ "returnType": "bool"
+ },
+ {
+ "name": "rlClearColor",
+ "description": "Clear color buffer with color",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned char",
+ "name": "r"
+ },
+ {
+ "type": "unsigned char",
+ "name": "g"
+ },
+ {
+ "type": "unsigned char",
+ "name": "b"
+ },
+ {
+ "type": "unsigned char",
+ "name": "a"
+ }
+ ]
+ },
+ {
+ "name": "rlClearScreenBuffers",
+ "description": "Clear used screen buffers (color and depth)",
+ "returnType": "void"
+ },
+ {
+ "name": "rlCheckErrors",
+ "description": "Check and log OpenGL error codes",
+ "returnType": "void"
+ },
+ {
+ "name": "rlSetBlendMode",
+ "description": "Set blending mode",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "mode"
+ }
+ ]
+ },
+ {
+ "name": "rlSetBlendFactors",
+ "description": "Set blending mode factor and equation (using OpenGL factors)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "glSrcFactor"
+ },
+ {
+ "type": "int",
+ "name": "glDstFactor"
+ },
+ {
+ "type": "int",
+ "name": "glEquation"
+ }
+ ]
+ },
+ {
+ "name": "rlSetBlendFactorsSeparate",
+ "description": "Set blending mode factors and equations separately (using OpenGL factors)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "glSrcRGB"
+ },
+ {
+ "type": "int",
+ "name": "glDstRGB"
+ },
+ {
+ "type": "int",
+ "name": "glSrcAlpha"
+ },
+ {
+ "type": "int",
+ "name": "glDstAlpha"
+ },
+ {
+ "type": "int",
+ "name": "glEqRGB"
+ },
+ {
+ "type": "int",
+ "name": "glEqAlpha"
+ }
+ ]
+ },
+ {
+ "name": "rlglInit",
+ "description": "Initialize rlgl (buffers, shaders, textures, states)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "rlglClose",
+ "description": "De-initialize rlgl (buffers, shaders, textures)",
+ "returnType": "void"
+ },
+ {
+ "name": "rlLoadExtensions",
+ "description": "Load OpenGL extensions (loader function required)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "void *",
+ "name": "loader"
+ }
+ ]
+ },
+ {
+ "name": "rlGetVersion",
+ "description": "Get current OpenGL version",
+ "returnType": "int"
+ },
+ {
+ "name": "rlSetFramebufferWidth",
+ "description": "Set current framebuffer width",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ }
+ ]
+ },
+ {
+ "name": "rlGetFramebufferWidth",
+ "description": "Get default framebuffer width",
+ "returnType": "int"
+ },
+ {
+ "name": "rlSetFramebufferHeight",
+ "description": "Set current framebuffer height",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "rlGetFramebufferHeight",
+ "description": "Get default framebuffer height",
+ "returnType": "int"
+ },
+ {
+ "name": "rlGetTextureIdDefault",
+ "description": "Get default texture id",
+ "returnType": "unsigned int"
+ },
+ {
+ "name": "rlGetShaderIdDefault",
+ "description": "Get default shader id",
+ "returnType": "unsigned int"
+ },
+ {
+ "name": "rlGetShaderLocsDefault",
+ "description": "Get default shader locations",
+ "returnType": "int *"
+ },
+ {
+ "name": "rlLoadRenderBatch",
+ "description": "Load a render batch system",
+ "returnType": "rlRenderBatch",
+ "params": [
+ {
+ "type": "int",
+ "name": "numBuffers"
+ },
+ {
+ "type": "int",
+ "name": "bufferElements"
+ }
+ ]
+ },
+ {
+ "name": "rlUnloadRenderBatch",
+ "description": "Unload render batch system",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "rlRenderBatch",
+ "name": "batch"
+ }
+ ]
+ },
+ {
+ "name": "rlDrawRenderBatch",
+ "description": "Draw render batch data (Update->Draw->Reset)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "rlRenderBatch *",
+ "name": "batch"
+ }
+ ]
+ },
+ {
+ "name": "rlSetRenderBatchActive",
+ "description": "Set the active render batch for rlgl (NULL for default internal)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "rlRenderBatch *",
+ "name": "batch"
+ }
+ ]
+ },
+ {
+ "name": "rlDrawRenderBatchActive",
+ "description": "Update and draw internal render batch",
+ "returnType": "void"
+ },
+ {
+ "name": "rlCheckRenderBatchLimit",
+ "description": "Check internal buffer overflow for a given number of vertex",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "int",
+ "name": "vCount"
+ }
+ ]
+ },
+ {
+ "name": "rlSetTexture",
+ "description": "Set current texture for render batch and check buffers limits",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "rlLoadVertexArray",
+ "description": "Load vertex array (vao) if supported",
+ "returnType": "unsigned int"
+ },
+ {
+ "name": "rlLoadVertexBuffer",
+ "description": "Load a vertex buffer object",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "const void *",
+ "name": "buffer"
+ },
+ {
+ "type": "int",
+ "name": "size"
+ },
+ {
+ "type": "bool",
+ "name": "dynamic"
+ }
+ ]
+ },
+ {
+ "name": "rlLoadVertexBufferElement",
+ "description": "Load vertex buffer elements object",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "const void *",
+ "name": "buffer"
+ },
+ {
+ "type": "int",
+ "name": "size"
+ },
+ {
+ "type": "bool",
+ "name": "dynamic"
+ }
+ ]
+ },
+ {
+ "name": "rlUpdateVertexBuffer",
+ "description": "Update vertex buffer object data on GPU buffer",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "bufferId"
+ },
+ {
+ "type": "const void *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ },
+ {
+ "type": "int",
+ "name": "offset"
+ }
+ ]
+ },
+ {
+ "name": "rlUpdateVertexBufferElements",
+ "description": "Update vertex buffer elements data on GPU buffer",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ },
+ {
+ "type": "const void *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "dataSize"
+ },
+ {
+ "type": "int",
+ "name": "offset"
+ }
+ ]
+ },
+ {
+ "name": "rlUnloadVertexArray",
+ "description": "Unload vertex array (vao)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "vaoId"
+ }
+ ]
+ },
+ {
+ "name": "rlUnloadVertexBuffer",
+ "description": "Unload vertex buffer object",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "vboId"
+ }
+ ]
+ },
+ {
+ "name": "rlSetVertexAttribute",
+ "description": "Set vertex attribute data configuration",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "index"
+ },
+ {
+ "type": "int",
+ "name": "compSize"
+ },
+ {
+ "type": "int",
+ "name": "type"
+ },
+ {
+ "type": "bool",
+ "name": "normalized"
+ },
+ {
+ "type": "int",
+ "name": "stride"
+ },
+ {
+ "type": "const void *",
+ "name": "pointer"
+ }
+ ]
+ },
+ {
+ "name": "rlSetVertexAttributeDivisor",
+ "description": "Set vertex attribute data divisor",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "index"
+ },
+ {
+ "type": "int",
+ "name": "divisor"
+ }
+ ]
+ },
+ {
+ "name": "rlSetVertexAttributeDefault",
+ "description": "Set vertex attribute default value, when attribute to provided",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "locIndex"
+ },
+ {
+ "type": "const void *",
+ "name": "value"
+ },
+ {
+ "type": "int",
+ "name": "attribType"
+ },
+ {
+ "type": "int",
+ "name": "count"
+ }
+ ]
+ },
+ {
+ "name": "rlDrawVertexArray",
+ "description": "Draw vertex array (currently active vao)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "offset"
+ },
+ {
+ "type": "int",
+ "name": "count"
+ }
+ ]
+ },
+ {
+ "name": "rlDrawVertexArrayElements",
+ "description": "Draw vertex array elements",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "offset"
+ },
+ {
+ "type": "int",
+ "name": "count"
+ },
+ {
+ "type": "const void *",
+ "name": "buffer"
+ }
+ ]
+ },
+ {
+ "name": "rlDrawVertexArrayInstanced",
+ "description": "Draw vertex array (currently active vao) with instancing",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "offset"
+ },
+ {
+ "type": "int",
+ "name": "count"
+ },
+ {
+ "type": "int",
+ "name": "instances"
+ }
+ ]
+ },
+ {
+ "name": "rlDrawVertexArrayElementsInstanced",
+ "description": "Draw vertex array elements with instancing",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "offset"
+ },
+ {
+ "type": "int",
+ "name": "count"
+ },
+ {
+ "type": "const void *",
+ "name": "buffer"
+ },
+ {
+ "type": "int",
+ "name": "instances"
+ }
+ ]
+ },
+ {
+ "name": "rlLoadTexture",
+ "description": "Load texture data",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "const void *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "format"
+ },
+ {
+ "type": "int",
+ "name": "mipmapCount"
+ }
+ ]
+ },
+ {
+ "name": "rlLoadTextureDepth",
+ "description": "Load depth texture/renderbuffer (to be attached to fbo)",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "bool",
+ "name": "useRenderBuffer"
+ }
+ ]
+ },
+ {
+ "name": "rlLoadTextureCubemap",
+ "description": "Load texture cubemap data",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "const void *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "size"
+ },
+ {
+ "type": "int",
+ "name": "format"
+ }
+ ]
+ },
+ {
+ "name": "rlUpdateTexture",
+ "description": "Update texture with new data on GPU",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ },
+ {
+ "type": "int",
+ "name": "offsetX"
+ },
+ {
+ "type": "int",
+ "name": "offsetY"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "format"
+ },
+ {
+ "type": "const void *",
+ "name": "data"
+ }
+ ]
+ },
+ {
+ "name": "rlGetGlTextureFormats",
+ "description": "Get OpenGL internal formats",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "format"
+ },
+ {
+ "type": "unsigned int *",
+ "name": "glInternalFormat"
+ },
+ {
+ "type": "unsigned int *",
+ "name": "glFormat"
+ },
+ {
+ "type": "unsigned int *",
+ "name": "glType"
+ }
+ ]
+ },
+ {
+ "name": "rlGetPixelFormatName",
+ "description": "Get name string for pixel format",
+ "returnType": "const char *",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "format"
+ }
+ ]
+ },
+ {
+ "name": "rlUnloadTexture",
+ "description": "Unload texture from GPU memory",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "rlGenTextureMipmaps",
+ "description": "Generate mipmap data for selected texture",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "format"
+ },
+ {
+ "type": "int *",
+ "name": "mipmaps"
+ }
+ ]
+ },
+ {
+ "name": "rlReadTexturePixels",
+ "description": "Read texture pixel data",
+ "returnType": "void *",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ },
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ },
+ {
+ "type": "int",
+ "name": "format"
+ }
+ ]
+ },
+ {
+ "name": "rlReadScreenPixels",
+ "description": "Read screen pixel data (color buffer)",
+ "returnType": "unsigned char *",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "rlLoadFramebuffer",
+ "description": "Load an empty framebuffer",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "int",
+ "name": "width"
+ },
+ {
+ "type": "int",
+ "name": "height"
+ }
+ ]
+ },
+ {
+ "name": "rlFramebufferAttach",
+ "description": "Attach texture/renderbuffer to a framebuffer",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "fboId"
+ },
+ {
+ "type": "unsigned int",
+ "name": "texId"
+ },
+ {
+ "type": "int",
+ "name": "attachType"
+ },
+ {
+ "type": "int",
+ "name": "texType"
+ },
+ {
+ "type": "int",
+ "name": "mipLevel"
+ }
+ ]
+ },
+ {
+ "name": "rlFramebufferComplete",
+ "description": "Verify framebuffer is complete",
+ "returnType": "bool",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "rlUnloadFramebuffer",
+ "description": "Delete framebuffer from GPU",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "rlLoadShaderCode",
+ "description": "Load shader from code strings",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "vsCode"
+ },
+ {
+ "type": "const char *",
+ "name": "fsCode"
+ }
+ ]
+ },
+ {
+ "name": "rlCompileShader",
+ "description": "Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER)",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "const char *",
+ "name": "shaderCode"
+ },
+ {
+ "type": "int",
+ "name": "type"
+ }
+ ]
+ },
+ {
+ "name": "rlLoadShaderProgram",
+ "description": "Load custom shader program",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "vShaderId"
+ },
+ {
+ "type": "unsigned int",
+ "name": "fShaderId"
+ }
+ ]
+ },
+ {
+ "name": "rlUnloadShaderProgram",
+ "description": "Unload shader program",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "rlGetLocationUniform",
+ "description": "Get shader location uniform",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "shaderId"
+ },
+ {
+ "type": "const char *",
+ "name": "uniformName"
+ }
+ ]
+ },
+ {
+ "name": "rlGetLocationAttrib",
+ "description": "Get shader location attribute",
+ "returnType": "int",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "shaderId"
+ },
+ {
+ "type": "const char *",
+ "name": "attribName"
+ }
+ ]
+ },
+ {
+ "name": "rlSetUniform",
+ "description": "Set shader value uniform",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "locIndex"
+ },
+ {
+ "type": "const void *",
+ "name": "value"
+ },
+ {
+ "type": "int",
+ "name": "uniformType"
+ },
+ {
+ "type": "int",
+ "name": "count"
+ }
+ ]
+ },
+ {
+ "name": "rlSetUniformMatrix",
+ "description": "Set shader value matrix",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "locIndex"
+ },
+ {
+ "type": "Matrix",
+ "name": "mat"
+ }
+ ]
+ },
+ {
+ "name": "rlSetUniformSampler",
+ "description": "Set shader value sampler",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "int",
+ "name": "locIndex"
+ },
+ {
+ "type": "unsigned int",
+ "name": "textureId"
+ }
+ ]
+ },
+ {
+ "name": "rlSetShader",
+ "description": "Set shader currently active (id and locations)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ },
+ {
+ "type": "int *",
+ "name": "locs"
+ }
+ ]
+ },
+ {
+ "name": "rlLoadComputeShaderProgram",
+ "description": "Load compute shader program",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "shaderId"
+ }
+ ]
+ },
+ {
+ "name": "rlComputeShaderDispatch",
+ "description": "Dispatch compute shader (equivalent to *draw* for graphics pipeline)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "groupX"
+ },
+ {
+ "type": "unsigned int",
+ "name": "groupY"
+ },
+ {
+ "type": "unsigned int",
+ "name": "groupZ"
+ }
+ ]
+ },
+ {
+ "name": "rlLoadShaderBuffer",
+ "description": "Load shader storage buffer object (SSBO)",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "size"
+ },
+ {
+ "type": "const void *",
+ "name": "data"
+ },
+ {
+ "type": "int",
+ "name": "usageHint"
+ }
+ ]
+ },
+ {
+ "name": "rlUnloadShaderBuffer",
+ "description": "Unload shader storage buffer object (SSBO)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "ssboId"
+ }
+ ]
+ },
+ {
+ "name": "rlUpdateShaderBuffer",
+ "description": "Update SSBO buffer data",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ },
+ {
+ "type": "const void *",
+ "name": "data"
+ },
+ {
+ "type": "unsigned int",
+ "name": "dataSize"
+ },
+ {
+ "type": "unsigned int",
+ "name": "offset"
+ }
+ ]
+ },
+ {
+ "name": "rlBindShaderBuffer",
+ "description": "Bind SSBO buffer",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ },
+ {
+ "type": "unsigned int",
+ "name": "index"
+ }
+ ]
+ },
+ {
+ "name": "rlReadShaderBuffer",
+ "description": "Read SSBO buffer data (GPU->CPU)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ },
+ {
+ "type": "void *",
+ "name": "dest"
+ },
+ {
+ "type": "unsigned int",
+ "name": "count"
+ },
+ {
+ "type": "unsigned int",
+ "name": "offset"
+ }
+ ]
+ },
+ {
+ "name": "rlCopyShaderBuffer",
+ "description": "Copy SSBO data between buffers",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "destId"
+ },
+ {
+ "type": "unsigned int",
+ "name": "srcId"
+ },
+ {
+ "type": "unsigned int",
+ "name": "destOffset"
+ },
+ {
+ "type": "unsigned int",
+ "name": "srcOffset"
+ },
+ {
+ "type": "unsigned int",
+ "name": "count"
+ }
+ ]
+ },
+ {
+ "name": "rlGetShaderBufferSize",
+ "description": "Get SSBO buffer size",
+ "returnType": "unsigned int",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ }
+ ]
+ },
+ {
+ "name": "rlBindImageTexture",
+ "description": "Bind image texture",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "unsigned int",
+ "name": "id"
+ },
+ {
+ "type": "unsigned int",
+ "name": "index"
+ },
+ {
+ "type": "int",
+ "name": "format"
+ },
+ {
+ "type": "bool",
+ "name": "readonly"
+ }
+ ]
+ },
+ {
+ "name": "rlGetMatrixModelview",
+ "description": "Get internal modelview matrix",
+ "returnType": "Matrix"
+ },
+ {
+ "name": "rlGetMatrixProjection",
+ "description": "Get internal projection matrix",
+ "returnType": "Matrix"
+ },
+ {
+ "name": "rlGetMatrixTransform",
+ "description": "Get internal accumulated transform matrix",
+ "returnType": "Matrix"
+ },
+ {
+ "name": "rlGetMatrixProjectionStereo",
+ "description": "Get internal projection matrix for stereo render (selected eye)",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "int",
+ "name": "eye"
+ }
+ ]
+ },
+ {
+ "name": "rlGetMatrixViewOffsetStereo",
+ "description": "Get internal view offset matrix for stereo render (selected eye)",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "int",
+ "name": "eye"
+ }
+ ]
+ },
+ {
+ "name": "rlSetMatrixProjection",
+ "description": "Set a custom projection matrix (replaces internal projection matrix)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "proj"
+ }
+ ]
+ },
+ {
+ "name": "rlSetMatrixModelview",
+ "description": "Set a custom modelview matrix (replaces internal modelview matrix)",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "view"
+ }
+ ]
+ },
+ {
+ "name": "rlSetMatrixProjectionStereo",
+ "description": "Set eyes projection matrices for stereo rendering",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "right"
+ },
+ {
+ "type": "Matrix",
+ "name": "left"
+ }
+ ]
+ },
+ {
+ "name": "rlSetMatrixViewOffsetStereo",
+ "description": "Set eyes view offsets matrices for stereo rendering",
+ "returnType": "void",
+ "params": [
+ {
+ "type": "Matrix",
+ "name": "right"
+ },
+ {
+ "type": "Matrix",
+ "name": "left"
+ }
+ ]
+ },
+ {
+ "name": "rlLoadDrawCube",
+ "description": "Load and draw a cube",
+ "returnType": "void"
+ },
+ {
+ "name": "rlLoadDrawQuad",
+ "description": "Load and draw a quad",
+ "returnType": "void"
+ },
+ {
+ "name": "rlGetMatrixProjectionStereo",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "int",
+ "name": "eye"
+ }
+ ]
+ },
+ {
+ "name": "rlGetMatrixViewOffsetStereo",
+ "description": "",
+ "returnType": "Matrix",
+ "params": [
+ {
+ "type": "int",
+ "name": "eye"
+ }
+ ]
+ }
+ ]
+}
diff --git a/libs/raylib/type_mapping.zig b/libs/raylib/type_mapping.zig
new file mode 100644
index 0000000..6131e59
--- /dev/null
+++ b/libs/raylib/type_mapping.zig
@@ -0,0 +1,691 @@
+//! Strategy:
+//! 1. generate raylib JSONs
+//! 2. combine in a union RaylibJson
+//! 3. convert to intermediate representation
+//! 4. read adjusted intermediate JSONs
+//! 5. generate raylib.zig // wrap paramters and pass them to marshall versions of the raylib functions
+//! 6. generate marshall.c // unwrap parameters from zig function and call the actual raylib function
+//! 7. generate marshall.h // C signatures for all marshalled functions
+
+const std = @import("std");
+const json = std.json;
+const memoryConstrain: usize = 1024 * 1024 * 1024; // 1 GiB
+const Allocator = std.mem.Allocator;
+const fmt = std.fmt.allocPrint;
+const talloc = std.testing.allocator;
+const expect = std.testing.expect;
+const expectEqualStrings = std.testing.expectEqualStrings;
+
+//--- Intermediate Format -------------------------------------------------------------------------
+
+pub const Intermediate = struct {
+ functions: []Function,
+ enums: []Enum,
+ structs: []Struct,
+ defines: []Define,
+
+ pub fn loadCustoms(allocator: Allocator, jsonFile: []const u8) !@This() {
+ var enums = std.ArrayList(Enum).init(allocator);
+ var structs = std.ArrayList(Struct).init(allocator);
+ var functions = std.ArrayList(Function).init(allocator);
+ var defines = std.ArrayList(Define).init(allocator);
+
+ const jsonData = try std.fs.cwd().readFileAlloc(allocator, jsonFile, memoryConstrain);
+
+ const bindingJson = try json.parseFromSliceLeaky(Intermediate, allocator, jsonData, .{
+ .ignore_unknown_fields = true,
+ });
+
+ for (bindingJson.enums) |t| {
+ if (t.custom) {
+ try enums.append(t);
+ }
+ }
+
+ for (bindingJson.structs) |t| {
+ if (t.custom) {
+ try structs.append(t);
+ }
+ }
+
+ for (bindingJson.functions) |f| {
+ if (f.custom) {
+ try functions.append(f);
+ }
+ }
+
+ for (bindingJson.defines) |f| {
+ if (f.custom) {
+ try defines.append(f);
+ }
+ }
+
+ return @This(){
+ .enums = try enums.toOwnedSlice(),
+ .structs = try structs.toOwnedSlice(),
+ .functions = try functions.toOwnedSlice(),
+ .defines = try defines.toOwnedSlice(),
+ };
+ }
+
+ pub fn addNonCustom(self: *@This(), allocator: Allocator, rlJson: CombinedRaylib) !void {
+ var enums = std.ArrayList(Enum).init(allocator);
+ try enums.appendSlice(self.enums);
+ var structs = std.ArrayList(Struct).init(allocator);
+ try structs.appendSlice(self.structs);
+ var functions = std.ArrayList(Function).init(allocator);
+ try functions.appendSlice(self.functions);
+ var defines = std.ArrayList(Define).init(allocator);
+ try defines.appendSlice(self.defines);
+
+ outer: for (rlJson.defines.values(), 0..) |d, i| {
+ for (defines.items) |added| {
+ if (eql(added.name, d.name)) {
+ std.log.debug("{s} is customized", .{d.name});
+ continue :outer;
+ }
+ }
+ const define = parseRaylibDefine(allocator, d) orelse continue :outer;
+
+ if (i < defines.items.len) {
+ try defines.insert(i, define);
+ } else {
+ try defines.append(define);
+ }
+ }
+ outer: for (rlJson.enums.values(), 0..) |e, i| {
+ const name = if (alias.get(e.name)) |n| n else e.name;
+ for (enums.items) |added| {
+ if (eql(added.name, name)) {
+ std.log.debug("{s} is customized", .{name});
+ continue :outer;
+ }
+ }
+
+ if (i < enums.items.len) {
+ try enums.insert(i, try parseRaylibEnum(allocator, e));
+ } else {
+ try enums.append(try parseRaylibEnum(allocator, e));
+ }
+ }
+ outer: for (rlJson.structs.values(), 0..) |s, i| {
+ const name = if (alias.get(s.name)) |n| n else s.name;
+ for (structs.items) |added| {
+ if (eql(added.name, name)) {
+ std.log.debug("{s} is customized", .{name});
+ continue :outer;
+ }
+ }
+ if (i < structs.items.len) {
+ try structs.insert(i, try parseRaylibStruct(allocator, s));
+ } else {
+ try structs.append(try parseRaylibStruct(allocator, s));
+ }
+ }
+ for (rlJson.defines.values()) |_| {}
+
+ outer: for (rlJson.functions.values(), 0..) |f, i| {
+ for (functions.items) |added| {
+ if (eql(added.name, f.name)) {
+ std.log.debug("{s} is customized", .{f.name});
+ continue :outer;
+ }
+ }
+ if (i < functions.items.len) {
+ try functions.insert(i, try parseRaylibFunction(allocator, f));
+ } else {
+ try functions.append(try parseRaylibFunction(allocator, f));
+ }
+ }
+
+ self.enums = try enums.toOwnedSlice();
+ self.structs = try structs.toOwnedSlice();
+ self.functions = try functions.toOwnedSlice();
+ self.defines = try defines.toOwnedSlice();
+ }
+
+ pub fn containsStruct(self: @This(), name: []const u8) bool {
+ for (self.structs) |s| {
+ if (eql(s.name, name)) return true;
+ }
+ return false;
+ }
+
+ pub fn containsEnum(self: @This(), name: []const u8) bool {
+ for (self.enums) |e| {
+ if (eql(e.name, name)) return true;
+ }
+ return false;
+ }
+
+ pub fn containsDefine(self: @This(), name: []const u8) bool {
+ for (self.defines) |d| {
+ if (eql(d.name, name)) return true;
+ }
+ return false;
+ }
+};
+
+pub const Function = struct {
+ name: []const u8,
+ params: []FunctionParameter,
+ returnType: []const u8,
+ description: ?[]const u8 = null,
+ custom: bool = false,
+};
+
+pub const FunctionParameter = struct {
+ name: []const u8,
+ typ: []const u8,
+ description: ?[]const u8 = null,
+};
+
+pub fn parseRaylibFunction(allocator: Allocator, func: RaylibFunction) !Function {
+ var args = std.ArrayList(FunctionParameter).init(allocator);
+ if (func.params) |params| {
+ for (params) |p| {
+ const t = try toZig(allocator, p.type);
+
+ try args.append(.{
+ .name = p.name,
+ .typ = t,
+ .description = p.description,
+ });
+ }
+ }
+
+ const returnType = try toZig(allocator, func.returnType);
+
+ return Function{
+ .name = func.name,
+ .params = try args.toOwnedSlice(),
+ .returnType = returnType,
+ .description = func.description,
+ };
+}
+
+pub const Struct = struct {
+ name: []const u8,
+ fields: []const StructField,
+ description: ?[]const u8 = null,
+ custom: bool = false,
+};
+
+pub const StructField = struct {
+ name: []const u8,
+ typ: []const u8,
+ description: ?[]const u8 = null,
+};
+
+pub fn parseRaylibStruct(allocator: Allocator, s: RaylibStruct) !Struct {
+ var fields = std.ArrayList(StructField).init(allocator);
+ for (s.fields) |field| {
+ var typ = try toZig(allocator, getTypeWithoutArrayNotation(field.type));
+
+ if (getArraySize(field.type)) |size| {
+ typ = try std.fmt.allocPrint(allocator, "[{d}]{s}", .{ size, typ });
+ }
+
+ try fields.append(.{
+ .name = field.name,
+ .typ = typ,
+ .description = field.description,
+ });
+ }
+
+ return Struct{
+ .name = if (alias.get(s.name)) |a| a else s.name,
+ .fields = try fields.toOwnedSlice(),
+ .description = s.description,
+ };
+}
+
+pub const Define = struct {
+ name: []const u8,
+ typ: []const u8,
+ value: []const u8,
+ description: ?[]const u8 = null,
+ custom: bool = false,
+};
+
+pub fn parseRaylibDefine(allocator: Allocator, s: RaylibDefine) ?Define {
+ var typ: []const u8 = undefined;
+ var value: []const u8 = undefined;
+
+ if (eql("INT", s.type)) {
+ typ = "i32";
+ value = std.fmt.allocPrint(allocator, "{s}", .{s.value}) catch return null;
+ } else if (eql("LONG", s.type)) {
+ typ = "i64";
+ value = std.fmt.allocPrint(allocator, "{s}", .{s.value}) catch return null;
+ } else if (eql("FLOAT", s.type)) {
+ typ = "f32";
+ value = std.fmt.allocPrint(allocator, "{s}", .{s.value}) catch return null;
+ } else if (eql("DOUBLE", s.type)) {
+ typ = "f64";
+ value = std.fmt.allocPrint(allocator, "{s}", .{s.value}) catch return null;
+ } else if (eql("STRING", s.type)) {
+ typ = "[]const u8";
+ value = std.fmt.allocPrint(allocator, "\"{s}\"", .{s.value}) catch return null;
+ } else if (eql("COLOR", s.type)) {
+ typ = "Color";
+ std.debug.assert(startsWith(s.value, "CLITERAL(Color){"));
+ std.debug.assert(endsWith(s.value, "}"));
+
+ const componentString = s.value["CLITERAL(Color){".len .. s.value.len - 1];
+ var spliterator = std.mem.split(u8, componentString, ",");
+ var r = spliterator.next() orelse return null;
+ r = std.mem.trim(u8, r, " \t\r\n");
+ var g = spliterator.next() orelse return null;
+ g = std.mem.trim(u8, g, " \t\r\n");
+ var b = spliterator.next() orelse return null;
+ b = std.mem.trim(u8, b, " \t\r\n");
+ var a = spliterator.next() orelse return null;
+ a = std.mem.trim(u8, a, " \t\r\n");
+ value = std.fmt.allocPrint(allocator, ".{{.r={s}, .g={s}, .b={s}, .a={s}}}", .{ r, g, b, a }) catch return null;
+ } else {
+ return null;
+ }
+
+ return Define{
+ .name = s.name,
+ .typ = typ,
+ .value = value,
+ .description = s.description,
+ };
+}
+
+pub const Enum = struct {
+ name: []const u8,
+ values: []const EnumValue,
+ description: ?[]const u8 = null,
+ custom: bool = false,
+};
+
+pub const EnumValue = struct {
+ name: []const u8,
+ value: c_int,
+ description: ?[]const u8 = null,
+};
+
+pub fn parseRaylibEnum(allocator: Allocator, e: RaylibEnum) !Enum {
+ var values = std.ArrayList(EnumValue).init(allocator);
+ for (e.values) |value| {
+ try values.append(.{
+ .name = value.name,
+ .value = value.value,
+ .description = value.description,
+ });
+ }
+
+ return Enum{
+ .name = e.name,
+ .values = try values.toOwnedSlice(),
+ .description = e.description,
+ };
+}
+
+/// is c const type
+pub fn isConst(c: []const u8) bool {
+ return startsWith(c, "const ");
+}
+test "isConst" {
+ try expect(!isConst("char *"));
+ try expect(!isConst("unsigned char *"));
+ try expect(isConst("const unsigned char *"));
+ try expect(isConst("const unsigned int *"));
+ try expect(isConst("const void *"));
+ try expect(!isConst("Vector2 *"));
+ try expect(!isConst("Vector2"));
+ try expect(!isConst("int"));
+}
+
+/// is c pointer type
+pub fn isPointer(c: []const u8) bool {
+ return endsWith(c, "*");
+}
+test "isPointer" {
+ try expect(isPointer("char *"));
+ try expect(isPointer("unsigned char *"));
+ try expect(isPointer("const unsigned char *"));
+ try expect(isPointer("const unsigned int *"));
+ try expect(isPointer("Vector2 *"));
+ try expect(!isPointer("Vector2"));
+ try expect(!isPointer("int"));
+}
+
+pub fn isPointerToPointer(c: []const u8) bool {
+ return endsWith(c, "**");
+}
+test "isPointerToPointer" {
+ try expect(!isPointerToPointer("char *"));
+ try expect(!isPointerToPointer("unsigned char *"));
+ try expect(isPointerToPointer("const unsigned char **"));
+ try expect(isPointerToPointer("const unsigned int **"));
+ try expect(isPointerToPointer("Vector2 **"));
+ try expect(!isPointerToPointer("Vector2*"));
+ try expect(!isPointerToPointer("int"));
+}
+
+pub fn isVoid(c: []const u8) bool {
+ return eql(stripType(c), "void");
+}
+test "isVoid" {
+ try expect(!isVoid("char *"));
+ try expect(!isVoid("unsigned char *"));
+ try expect(!isVoid("const unsigned char *"));
+ try expect(isVoid("const void *"));
+ try expect(isVoid("void *"));
+ try expect(isVoid("void"));
+ try expect(isVoid("void **"));
+}
+
+/// strips const and pointer annotations
+/// const TName * -> TName
+pub fn stripType(c: []const u8) []const u8 {
+ var name = if (isConst(c)) c["const ".len..] else c;
+ name = if (isPointer(name)) name[0 .. name.len - 1] else name;
+ // double pointer?
+ name = if (isPointer(name)) name[0 .. name.len - 1] else name;
+ name = std.mem.trim(u8, name, " \t\n");
+ if (alias.get(name)) |ali| {
+ name = ali;
+ }
+ return name;
+}
+test "stripType" {
+ try expectEqualStrings("void", stripType("const void *"));
+ try expectEqualStrings("unsinged int", stripType("unsinged int *"));
+ try expectEqualStrings("Vector2", stripType("const Vector2 *"));
+}
+
+pub fn getArraySize(typ: []const u8) ?usize {
+ if (std.mem.indexOf(u8, typ, "[")) |open| {
+ if (std.mem.indexOf(u8, typ, "]")) |close| {
+ return std.fmt.parseInt(usize, typ[open + 1 .. close], 10) catch null;
+ }
+ }
+ return null;
+}
+test "getArraySize" {
+ const expectEqual = std.testing.expectEqual;
+
+ try expectEqual(@as(?usize, 4), getArraySize("float[4]"));
+ try expectEqual(@as(?usize, 44), getArraySize("int[44]"));
+ try expectEqual(@as(?usize, 123456), getArraySize("a[123456]"));
+ try expectEqual(@as(?usize, 1), getArraySize("test[1] "));
+ try expectEqual(@as(?usize, null), getArraySize("foo[]"));
+ try expectEqual(@as(?usize, null), getArraySize("bar"));
+ try expectEqual(@as(?usize, null), getArraySize("foo["));
+ try expectEqual(@as(?usize, null), getArraySize("bar]"));
+ try expectEqual(@as(?usize, 42), getArraySize(" lol this is ok[42] "));
+}
+
+pub fn getTypeWithoutArrayNotation(typ: []const u8) []const u8 {
+ if (std.mem.indexOf(u8, typ, "[")) |open| {
+ return typ[0..open];
+ }
+ return typ;
+}
+
+fn toZig(allocator: Allocator, c: []const u8) ![]const u8 {
+ if (fixedMapping.get(c)) |fixed| {
+ return fixed;
+ }
+
+ const consT = if (isConst(c)) "const " else "";
+ const pointeR = if (isPointer(c)) "?[*]" else "";
+ const stripped = stripType(c);
+
+ const name = if (raylibToZigType.get(stripped)) |primitive| primitive else stripped;
+
+ if (isPointer(c)) {
+ return try fmt(allocator, "{s}{s}{s}", .{ pointeR, consT, name });
+ }
+ return name;
+}
+test "toZig" {
+ var arena = std.heap.ArenaAllocator.init(talloc);
+ defer arena.deinit();
+ const a = arena.allocator();
+
+ try expectEqualStrings("i32", try toZig(a, "int"));
+ try expectEqualStrings("const i32", try toZig(a, "const int"));
+ try expectEqualStrings("?[*]Vector2", try toZig(a, "Vector2 *"));
+}
+
+const raylibToZigType = std.ComptimeStringMap([]const u8, .{
+ .{ "void", "void" },
+ .{ "bool", "bool" },
+ .{ "char", "u8" },
+ .{ "unsigned char", "u8" },
+ .{ "short", "i16" },
+ .{ "unsigned short", "u16" },
+ .{ "int", "i32" },
+ .{ "unsigned int", "u32" },
+ .{ "long", "i64" },
+ .{ "unsigned long", "u64" },
+ .{ "unsigned long long", "u64" },
+ .{ "float", "f32" },
+ .{ "double", "f64" },
+});
+
+const fixedMapping = std.ComptimeStringMap([]const u8, .{
+ .{ "void *", "*anyopaque" },
+ .{ "const void *", "*const anyopaque" },
+ .{ "const unsigned char *", "[*:0]const u8" },
+ .{ "const char *", "[*:0]const u8" },
+ .{ "const char **", "[*]const [*:0]const u8" },
+ .{ "char **", "[*][*:0]u8" },
+ .{ "rAudioBuffer *", "*anyopaque" },
+ .{ "rAudioProcessor *", "*anyopaque" },
+ .{ "Image *", "*Image" },
+});
+
+//--- Raylib parser JSONs -------------------------------------------------------------------------
+
+const alias = std.ComptimeStringMap([]const u8, .{
+ .{ "Camera", "Camera3D" },
+ .{ "Texture", "Texture2D" },
+ .{ "TextureCubemap", "Texture2D" },
+ .{ "RenderTexture", "RenderTexture2D" },
+ .{ "GuiStyle", "u32" },
+ .{ "Quaternion", "Vector4" },
+ .{ "PhysicsBody", "*PhysicsBodyData" },
+});
+
+const cAlias = std.ComptimeStringMap([]const u8, .{
+ .{ "Camera", "Camera3D" },
+ .{ "Texture", "Texture2D" },
+ .{ "TextureCubemap", "Texture2D" },
+ .{ "RenderTexture", "RenderTexture2D" },
+ .{ "Quaternion", "Vector4" },
+ .{ "PhysicsBody", "PhysicsBodyData *" },
+});
+
+pub const CombinedRaylib = struct {
+ structs: std.StringArrayHashMap(RaylibStruct),
+ enums: std.StringArrayHashMap(RaylibEnum),
+ defines: std.StringArrayHashMap(RaylibDefine),
+ functions: std.StringArrayHashMap(RaylibFunction),
+
+ pub fn load(allocator: Allocator, jsonFiles: []const []const u8) !@This() {
+ var structs = std.StringArrayHashMap(RaylibStruct).init(allocator);
+ var enums = std.StringArrayHashMap(RaylibEnum).init(allocator);
+ var defines = std.StringArrayHashMap(RaylibDefine).init(allocator);
+ var functions = std.StringArrayHashMap(RaylibFunction).init(allocator);
+
+ for (jsonFiles) |jsonFile| {
+ std.log.info("parsing {s}", .{jsonFile});
+ const jsonData = try std.fs.cwd().readFileAlloc(allocator, jsonFile, memoryConstrain);
+
+ const bindingJson = try json.parseFromSliceLeaky(RaylibJson, allocator, jsonData, .{
+ .ignore_unknown_fields = true,
+ .duplicate_field_behavior = .use_last,
+ });
+
+ for (bindingJson.structs) |*s| {
+ for (s.fields) |*f| {
+ f.type = cAlias.get(f.type) orelse f.type;
+ }
+ try structs.put(s.name, s.*);
+ }
+
+ for (bindingJson.enums) |e| {
+ try enums.put(e.name, e);
+ }
+
+ for (bindingJson.defines) |d| {
+ try defines.put(d.name, d);
+ }
+
+ for (bindingJson.functions) |*f| {
+ f.returnType = cAlias.get(f.returnType) orelse f.returnType;
+ if (f.params) |params| {
+ for (params) |*p| {
+ p.type = cAlias.get(p.type) orelse p.type;
+ }
+ }
+ try functions.put(f.name, f.*);
+ }
+ }
+
+ return @This(){
+ .structs = structs,
+ .enums = enums,
+ .defines = defines,
+ .functions = functions,
+ };
+ }
+
+ pub fn toIntermediate(self: @This(), allocator: Allocator, customs: Intermediate) !Intermediate {
+ var functions = std.ArrayList(Function).init(allocator);
+ var enums = std.ArrayList(Enum).init(allocator);
+ var structs = std.ArrayList(Struct).init(allocator);
+
+ enums: for (self.enums.values()) |e| {
+ for (customs.enums) |tt| {
+ if (eql(tt.name, e.name)) break :enums;
+ }
+ try enums.append(try parseRaylibEnum(allocator, e));
+ }
+ structs: for (self.structs.values()) |s| {
+ for (customs.structs) |tt| {
+ if (eql(tt.name, s.name)) break :structs;
+ }
+ try structs.append(try parseRaylibStruct(allocator, s, customs));
+ }
+ for (self.defines.values()) |_| {}
+
+ funcs: for (self.functions.values()) |f| {
+ for (customs.functions) |ff| {
+ if (eql(ff.name, f.name)) break :funcs;
+ }
+ try functions.append(try parseRaylibFunction(allocator, f, customs.types));
+ }
+
+ return Intermediate{
+ .functions = try functions.toOwnedSlice(),
+ .enums = try enums.toOwnedSlice(),
+ .structs = try structs.toOwnedSlice(),
+ };
+ }
+
+ fn containsStruct(self: @This(), name: []const u8) bool {
+ return self.structs.contains(name);
+ }
+
+ fn containsEnum(self: @This(), name: []const u8) bool {
+ return self.enums.contains(name);
+ }
+
+ fn containsFunction(self: @This(), name: []const u8) bool {
+ return self.functions.contains(name);
+ }
+};
+
+const RaylibJson = struct {
+ structs: []RaylibStruct,
+ enums: []RaylibEnum,
+ defines: []RaylibDefine,
+ functions: []RaylibFunction,
+};
+
+pub const RaylibStruct = struct {
+ name: []const u8,
+ description: []const u8,
+ fields: []RaylibField,
+};
+
+pub const RaylibField = struct {
+ name: []const u8,
+ description: []const u8,
+ type: []const u8,
+};
+
+pub const RaylibEnum = struct {
+ name: []const u8,
+ description: []const u8,
+ values: []RaylibEnumValue,
+};
+
+pub const RaylibEnumValue = struct {
+ name: []const u8,
+ description: []const u8,
+ value: c_int,
+};
+
+pub const RaylibFunction = struct {
+ name: []const u8,
+ description: []const u8,
+ returnType: []const u8,
+ params: ?[]RaylibFunctionParam = null,
+};
+
+pub const RaylibFunctionParam = struct {
+ name: []const u8,
+ type: []const u8,
+ description: ?[]const u8 = null,
+};
+
+pub const RaylibDefine = struct {
+ name: []const u8,
+ type: []const u8,
+ value: []const u8,
+ description: ?[]const u8 = null,
+};
+
+//--- Helpers -------------------------------------------------------------------------------------
+
+/// true if C type is primitive or a pointer to anything
+/// this means we don't need to wrap it in a pointer
+pub fn isPrimitiveOrPointer(c: []const u8) bool {
+ const primitiveTypes = std.ComptimeStringMap(void, .{
+ .{ "void", {} },
+ .{ "bool", {} },
+ .{ "char", {} },
+ .{ "unsigned char", {} },
+ .{ "short", {} },
+ .{ "unsigned short", {} },
+ .{ "int", {} },
+ .{ "unsigned int", {} },
+ .{ "long", {} },
+ .{ "unsigned long", {} },
+ .{ "unsigned long long", {} },
+ .{ "float", {} },
+ .{ "double", {} },
+ });
+ return primitiveTypes.has(stripType(c)) or endsWith(c, "*");
+}
+
+fn eql(a: []const u8, b: []const u8) bool {
+ return std.mem.eql(u8, a, b);
+}
+
+fn startsWith(haystack: []const u8, needle: []const u8) bool {
+ return std.mem.startsWith(u8, haystack, needle);
+}
+
+fn endsWith(haystack: []const u8, needle: []const u8) bool {
+ return std.mem.endsWith(u8, haystack, needle);
+}