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 @@ +![logo](logo.png) + +# 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); +}