// raylib-zig (c) Nikolas Wipper 2023

const rl = @import("raylib.zig");

pub extern "c" fn InitWindow(width: c_int, height: c_int, title: [*c]const u8) void;
pub extern "c" fn CloseWindow() void;
pub extern "c" fn WindowShouldClose() bool;
pub extern "c" fn IsWindowReady() bool;
pub extern "c" fn IsWindowFullscreen() bool;
pub extern "c" fn IsWindowHidden() bool;
pub extern "c" fn IsWindowMinimized() bool;
pub extern "c" fn IsWindowMaximized() bool;
pub extern "c" fn IsWindowFocused() bool;
pub extern "c" fn IsWindowResized() bool;
pub extern "c" fn IsWindowState(flag: rl.ConfigFlags) bool;
pub extern "c" fn SetWindowState(flags: rl.ConfigFlags) void;
pub extern "c" fn ClearWindowState(flags: rl.ConfigFlags) void;
pub extern "c" fn ToggleFullscreen() void;
pub extern "c" fn ToggleBorderlessWindowed() void;
pub extern "c" fn MaximizeWindow() void;
pub extern "c" fn MinimizeWindow() void;
pub extern "c" fn RestoreWindow() void;
pub extern "c" fn SetWindowIcon(image: rl.Image) void;
pub extern "c" fn SetWindowIcons(images: [*c]rl.Image, count: c_int) void;
pub extern "c" fn SetWindowTitle(title: [*c]const u8) void;
pub extern "c" fn SetWindowPosition(x: c_int, y: c_int) void;
pub extern "c" fn SetWindowMonitor(monitor: c_int) void;
pub extern "c" fn SetWindowMinSize(width: c_int, height: c_int) void;
pub extern "c" fn SetWindowMaxSize(width: c_int, height: c_int) void;
pub extern "c" fn SetWindowSize(width: c_int, height: c_int) void;
pub extern "c" fn SetWindowOpacity(opacity: f32) void;
pub extern "c" fn SetWindowFocused() void;
pub extern "c" fn GetWindowHandle() *anyopaque;
pub extern "c" fn GetScreenWidth() c_int;
pub extern "c" fn GetScreenHeight() c_int;
pub extern "c" fn GetRenderWidth() c_int;
pub extern "c" fn GetRenderHeight() c_int;
pub extern "c" fn GetMonitorCount() c_int;
pub extern "c" fn GetCurrentMonitor() c_int;
pub extern "c" fn GetMonitorPosition(monitor: c_int) rl.Vector2;
pub extern "c" fn GetMonitorWidth(monitor: c_int) c_int;
pub extern "c" fn GetMonitorHeight(monitor: c_int) c_int;
pub extern "c" fn GetMonitorPhysicalWidth(monitor: c_int) c_int;
pub extern "c" fn GetMonitorPhysicalHeight(monitor: c_int) c_int;
pub extern "c" fn GetMonitorRefreshRate(monitor: c_int) c_int;
pub extern "c" fn GetWindowPosition() rl.Vector2;
pub extern "c" fn GetWindowScaleDPI() rl.Vector2;
pub extern "c" fn GetMonitorName(monitor: c_int) [*c]const u8;
pub extern "c" fn SetClipboardText(text: [*c]const u8) void;
pub extern "c" fn GetClipboardText() [*c]const u8;
pub extern "c" fn GetClipboardImage() rl.Image;
pub extern "c" fn EnableEventWaiting() void;
pub extern "c" fn DisableEventWaiting() void;
pub extern "c" fn ShowCursor() void;
pub extern "c" fn HideCursor() void;
pub extern "c" fn IsCursorHidden() bool;
pub extern "c" fn EnableCursor() void;
pub extern "c" fn DisableCursor() void;
pub extern "c" fn IsCursorOnScreen() bool;
pub extern "c" fn ClearBackground(color: rl.Color) void;
pub extern "c" fn BeginDrawing() void;
pub extern "c" fn EndDrawing() void;
pub extern "c" fn BeginMode2D(camera: rl.Camera2D) void;
pub extern "c" fn EndMode2D() void;
pub extern "c" fn BeginMode3D(camera: rl.Camera3D) void;
pub extern "c" fn EndMode3D() void;
pub extern "c" fn BeginTextureMode(target: rl.RenderTexture2D) void;
pub extern "c" fn EndTextureMode() void;
pub extern "c" fn BeginShaderMode(shader: rl.Shader) void;
pub extern "c" fn EndShaderMode() void;
pub extern "c" fn BeginBlendMode(mode: rl.BlendMode) void;
pub extern "c" fn EndBlendMode() void;
pub extern "c" fn BeginScissorMode(x: c_int, y: c_int, width: c_int, height: c_int) void;
pub extern "c" fn EndScissorMode() void;
pub extern "c" fn BeginVrStereoMode(config: rl.VrStereoConfig) void;
pub extern "c" fn EndVrStereoMode() void;
pub extern "c" fn LoadVrStereoConfig(device: rl.VrDeviceInfo) rl.VrStereoConfig;
pub extern "c" fn UnloadVrStereoConfig(config: rl.VrStereoConfig) void;
pub extern "c" fn LoadShader(vsFileName: [*c]const u8, fsFileName: [*c]const u8) rl.Shader;
pub extern "c" fn LoadShaderFromMemory(vsCode: [*c]const u8, fsCode: [*c]const u8) rl.Shader;
pub extern "c" fn IsShaderValid(shader: rl.Shader) bool;
pub extern "c" fn GetShaderLocation(shader: rl.Shader, uniformName: [*c]const u8) c_int;
pub extern "c" fn GetShaderLocationAttrib(shader: rl.Shader, attribName: [*c]const u8) c_int;
pub extern "c" fn SetShaderValue(shader: rl.Shader, locIndex: c_int, value: *const anyopaque, uniformType: rl.ShaderUniformDataType) void;
pub extern "c" fn SetShaderValueV(shader: rl.Shader, locIndex: c_int, value: *const anyopaque, uniformType: rl.ShaderUniformDataType, count: c_int) void;
pub extern "c" fn SetShaderValueMatrix(shader: rl.Shader, locIndex: c_int, mat: rl.Matrix) void;
pub extern "c" fn SetShaderValueTexture(shader: rl.Shader, locIndex: c_int, texture: rl.Texture2D) void;
pub extern "c" fn UnloadShader(shader: rl.Shader) void;
pub extern "c" fn GetScreenToWorldRay(position: rl.Vector2, camera: rl.Camera) rl.Ray;
pub extern "c" fn GetScreenToWorldRayEx(position: rl.Vector2, camera: rl.Camera, width: c_int, height: c_int) rl.Ray;
pub extern "c" fn GetWorldToScreen(position: rl.Vector3, camera: rl.Camera) rl.Vector2;
pub extern "c" fn GetWorldToScreenEx(position: rl.Vector3, camera: rl.Camera, width: c_int, height: c_int) rl.Vector2;
pub extern "c" fn GetWorldToScreen2D(position: rl.Vector2, camera: rl.Camera2D) rl.Vector2;
pub extern "c" fn GetScreenToWorld2D(position: rl.Vector2, camera: rl.Camera2D) rl.Vector2;
pub extern "c" fn GetCameraMatrix(camera: rl.Camera) rl.Matrix;
pub extern "c" fn GetCameraMatrix2D(camera: rl.Camera2D) rl.Matrix;
pub extern "c" fn SetTargetFPS(fps: c_int) void;
pub extern "c" fn GetFrameTime() f32;
pub extern "c" fn GetTime() f64;
pub extern "c" fn GetFPS() c_int;
pub extern "c" fn SwapScreenBuffer() void;
pub extern "c" fn PollInputEvents() void;
pub extern "c" fn WaitTime(seconds: f64) void;
pub extern "c" fn SetRandomSeed(seed: c_uint) void;
pub extern "c" fn GetRandomValue(min: c_int, max: c_int) c_int;
pub extern "c" fn LoadRandomSequence(count: c_uint, min: c_int, max: c_int) [*c]c_int;
pub extern "c" fn UnloadRandomSequence(sequence: [*c]c_int) void;
pub extern "c" fn TakeScreenshot(fileName: [*c]const u8) void;
pub extern "c" fn SetConfigFlags(flags: rl.ConfigFlags) void;
pub extern "c" fn OpenURL(url: [*c]const u8) void;
pub extern "c" fn SetTraceLogLevel(logLevel: rl.TraceLogLevel) void;
pub extern "c" fn TraceLog(logLevel: rl.TraceLogLevel, text: [*c]const u8, ...) void;
pub extern "c" fn MemAlloc(size: c_uint) *anyopaque;
pub extern "c" fn MemRealloc(ptr: *anyopaque, size: c_uint) *anyopaque;
pub extern "c" fn MemFree(ptr: *anyopaque) void;
pub extern "c" fn LoadFileData(fileName: [*c]const u8, dataSize: [*c]c_int) [*c]u8;
pub extern "c" fn UnloadFileData(data: [*c]u8) void;
pub extern "c" fn SaveFileData(fileName: [*c]const u8, data: *anyopaque, dataSize: c_int) bool;
pub extern "c" fn ExportDataAsCode(data: [*c]const u8, dataSize: c_int, fileName: [*c]const u8) bool;
pub extern "c" fn LoadFileText(fileName: [*c]const u8) [*c]u8;
pub extern "c" fn UnloadFileText(text: [*c]u8) void;
pub extern "c" fn SaveFileText(fileName: [*c]const u8, text: [*c]const u8) bool;
pub extern "c" fn SetLoadFileDataCallback(callback: rl.LoadFileDataCallback) void;
pub extern "c" fn SetSaveFileDataCallback(callback: rl.SaveFileDataCallback) void;
pub extern "c" fn SetLoadFileTextCallback(callback: rl.LoadFileTextCallback) void;
pub extern "c" fn SetSaveFileTextCallback(callback: rl.SaveFileTextCallback) void;
pub extern "c" fn FileRename(fileName: [*c]const u8, fileRename_: [*c]const u8) c_int;
pub extern "c" fn FileRemove(fileName: [*c]const u8) c_int;
pub extern "c" fn FileCopy(srcPath: [*c]const u8, dstPath: [*c]const u8) c_int;
pub extern "c" fn FileMove(srcPath: [*c]const u8, dstPath: [*c]const u8) c_int;
pub extern "c" fn FileTextReplace(fileName: [*c]const u8, search: [*c]const u8, replacement: [*c]const u8) c_int;
pub extern "c" fn FileTextFindIndex(fileName: [*c]const u8, search: [*c]const u8) c_int;
pub extern "c" fn FileExists(fileName: [*c]const u8) bool;
pub extern "c" fn DirectoryExists(dirPath: [*c]const u8) bool;
pub extern "c" fn IsFileExtension(fileName: [*c]const u8, ext: [*c]const u8) bool;
pub extern "c" fn GetFileLength(fileName: [*c]const u8) c_int;
pub extern "c" fn GetFileModTime(fileName: [*c]const u8) c_long;
pub extern "c" fn GetFileExtension(fileName: [*c]const u8) [*c]const u8;
pub extern "c" fn GetFileName(filePath: [*c]const u8) [*c]const u8;
pub extern "c" fn GetFileNameWithoutExt(filePath: [*c]const u8) [*c]const u8;
pub extern "c" fn GetDirectoryPath(filePath: [*c]const u8) [*c]const u8;
pub extern "c" fn GetPrevDirectoryPath(dirPath: [*c]const u8) [*c]const u8;
pub extern "c" fn GetWorkingDirectory() [*c]const u8;
pub extern "c" fn GetApplicationDirectory() [*c]const u8;
pub extern "c" fn MakeDirectory(dirPath: [*c]const u8) c_int;
pub extern "c" fn ChangeDirectory(dirPath: [*c]const u8) bool;
pub extern "c" fn IsPathFile(path: [*c]const u8) bool;
pub extern "c" fn IsFileNameValid(fileName: [*c]const u8) bool;
pub extern "c" fn LoadDirectoryFiles(dirPath: [*c]const u8) rl.FilePathList;
pub extern "c" fn LoadDirectoryFilesEx(basePath: [*c]const u8, filter: [*c]const u8, scanSubdirs: bool) rl.FilePathList;
pub extern "c" fn UnloadDirectoryFiles(files: rl.FilePathList) void;
pub extern "c" fn IsFileDropped() bool;
pub extern "c" fn LoadDroppedFiles() rl.FilePathList;
pub extern "c" fn UnloadDroppedFiles(files: rl.FilePathList) void;
pub extern "c" fn GetDirectoryFileCount(dirPath: [*c]const u8) c_uint;
pub extern "c" fn GetDirectoryFileCountEx(basePath: [*c]const u8, filter: [*c]const u8, scanSubdirs: bool) c_uint;
pub extern "c" fn CompressData(data: [*c]const u8, dataSize: c_int, compDataSize: [*c]c_int) [*c]u8;
pub extern "c" fn DecompressData(compData: [*c]const u8, compDataSize: c_int, dataSize: [*c]c_int) [*c]u8;
pub extern "c" fn EncodeDataBase64(data: [*c]const u8, dataSize: c_int, outputSize: [*c]c_int) [*c]u8;
pub extern "c" fn DecodeDataBase64(text: [*c]const u8, outputSize: [*c]c_int) [*c]u8;
pub extern "c" fn ComputeCRC32(data: [*c]u8, dataSize: c_int) c_uint;
pub extern "c" fn ComputeMD5(data: [*c]u8, dataSize: c_int) [*c]c_uint;
pub extern "c" fn ComputeSHA1(data: [*c]u8, dataSize: c_int) [*c]c_uint;
pub extern "c" fn ComputeSHA256(data: [*c]u8, dataSize: c_int) [*c]c_uint;
pub extern "c" fn LoadAutomationEventList(fileName: [*c]const u8) rl.AutomationEventList;
pub extern "c" fn UnloadAutomationEventList(list: rl.AutomationEventList) void;
pub extern "c" fn ExportAutomationEventList(list: rl.AutomationEventList, fileName: [*c]const u8) bool;
pub extern "c" fn SetAutomationEventList(list: [*c]rl.AutomationEventList) void;
pub extern "c" fn SetAutomationEventBaseFrame(frame: c_int) void;
pub extern "c" fn StartAutomationEventRecording() void;
pub extern "c" fn StopAutomationEventRecording() void;
pub extern "c" fn PlayAutomationEvent(event: rl.AutomationEvent) void;
pub extern "c" fn IsKeyPressed(key: rl.KeyboardKey) bool;
pub extern "c" fn IsKeyPressedRepeat(key: rl.KeyboardKey) bool;
pub extern "c" fn IsKeyDown(key: rl.KeyboardKey) bool;
pub extern "c" fn IsKeyReleased(key: rl.KeyboardKey) bool;
pub extern "c" fn IsKeyUp(key: rl.KeyboardKey) bool;
pub extern "c" fn GetKeyPressed() rl.KeyboardKey;
pub extern "c" fn GetCharPressed() c_int;
pub extern "c" fn GetKeyName(key: rl.KeyboardKey) [*c]const u8;
pub extern "c" fn SetExitKey(key: rl.KeyboardKey) void;
pub extern "c" fn IsGamepadAvailable(gamepad: c_int) bool;
pub extern "c" fn GetGamepadName(gamepad: c_int) [*c]const u8;
pub extern "c" fn IsGamepadButtonPressed(gamepad: c_int, button: rl.GamepadButton) bool;
pub extern "c" fn IsGamepadButtonDown(gamepad: c_int, button: rl.GamepadButton) bool;
pub extern "c" fn IsGamepadButtonReleased(gamepad: c_int, button: rl.GamepadButton) bool;
pub extern "c" fn IsGamepadButtonUp(gamepad: c_int, button: rl.GamepadButton) bool;
pub extern "c" fn GetGamepadButtonPressed() rl.GamepadButton;
pub extern "c" fn GetGamepadAxisCount(gamepad: c_int) c_int;
pub extern "c" fn GetGamepadAxisMovement(gamepad: c_int, axis: rl.GamepadAxis) f32;
pub extern "c" fn SetGamepadMappings(mappings: [*c]const u8) c_int;
pub extern "c" fn SetGamepadVibration(gamepad: c_int, leftMotor: f32, rightMotor: f32, duration: f32) void;
pub extern "c" fn IsMouseButtonPressed(button: rl.MouseButton) bool;
pub extern "c" fn IsMouseButtonDown(button: rl.MouseButton) bool;
pub extern "c" fn IsMouseButtonReleased(button: rl.MouseButton) bool;
pub extern "c" fn IsMouseButtonUp(button: rl.MouseButton) bool;
pub extern "c" fn GetMouseX() c_int;
pub extern "c" fn GetMouseY() c_int;
pub extern "c" fn GetMousePosition() rl.Vector2;
pub extern "c" fn GetMouseDelta() rl.Vector2;
pub extern "c" fn SetMousePosition(x: c_int, y: c_int) void;
pub extern "c" fn SetMouseOffset(offsetX: c_int, offsetY: c_int) void;
pub extern "c" fn SetMouseScale(scaleX: f32, scaleY: f32) void;
pub extern "c" fn GetMouseWheelMove() f32;
pub extern "c" fn GetMouseWheelMoveV() rl.Vector2;
pub extern "c" fn SetMouseCursor(cursor: rl.MouseCursor) void;
pub extern "c" fn GetTouchX() c_int;
pub extern "c" fn GetTouchY() c_int;
pub extern "c" fn GetTouchPosition(index: c_int) rl.Vector2;
pub extern "c" fn GetTouchPointId(index: c_int) c_int;
pub extern "c" fn GetTouchPointCount() c_int;
pub extern "c" fn SetGesturesEnabled(flags: rl.Gesture) void;
pub extern "c" fn IsGestureDetected(gesture: rl.Gesture) bool;
pub extern "c" fn GetGestureDetected() rl.Gesture;
pub extern "c" fn GetGestureHoldDuration() f32;
pub extern "c" fn GetGestureDragVector() rl.Vector2;
pub extern "c" fn GetGestureDragAngle() f32;
pub extern "c" fn GetGesturePinchVector() rl.Vector2;
pub extern "c" fn GetGesturePinchAngle() f32;
pub extern "c" fn UpdateCamera(camera: [*c]rl.Camera, mode: rl.CameraMode) void;
pub extern "c" fn UpdateCameraPro(camera: [*c]rl.Camera, movement: rl.Vector3, rotation: rl.Vector3, zoom: f32) void;
pub extern "c" fn SetShapesTexture(texture: rl.Texture2D, source: rl.Rectangle) void;
pub extern "c" fn GetShapesTexture() rl.Texture2D;
pub extern "c" fn GetShapesTextureRectangle() rl.Rectangle;
pub extern "c" fn DrawPixel(posX: c_int, posY: c_int, color: rl.Color) void;
pub extern "c" fn DrawPixelV(position: rl.Vector2, color: rl.Color) void;
pub extern "c" fn DrawLine(startPosX: c_int, startPosY: c_int, endPosX: c_int, endPosY: c_int, color: rl.Color) void;
pub extern "c" fn DrawLineV(startPos: rl.Vector2, endPos: rl.Vector2, color: rl.Color) void;
pub extern "c" fn DrawLineEx(startPos: rl.Vector2, endPos: rl.Vector2, thick: f32, color: rl.Color) void;
pub extern "c" fn DrawLineStrip(points: [*c]const rl.Vector2, pointCount: c_int, color: rl.Color) void;
pub extern "c" fn DrawLineBezier(startPos: rl.Vector2, endPos: rl.Vector2, thick: f32, color: rl.Color) void;
pub extern "c" fn DrawLineDashed(startPos: rl.Vector2, endPos: rl.Vector2, dashSize: c_int, spaceSize: c_int, color: rl.Color) void;
pub extern "c" fn DrawCircle(centerX: c_int, centerY: c_int, radius: f32, color: rl.Color) void;
pub extern "c" fn DrawCircleV(center: rl.Vector2, radius: f32, color: rl.Color) void;
pub extern "c" fn DrawCircleGradient(center: rl.Vector2, radius: f32, inner: rl.Color, outer: rl.Color) void;
pub extern "c" fn DrawCircleSector(center: rl.Vector2, radius: f32, startAngle: f32, endAngle: f32, segments: c_int, color: rl.Color) void;
pub extern "c" fn DrawCircleSectorLines(center: rl.Vector2, radius: f32, startAngle: f32, endAngle: f32, segments: c_int, color: rl.Color) void;
pub extern "c" fn DrawCircleLines(centerX: c_int, centerY: c_int, radius: f32, color: rl.Color) void;
pub extern "c" fn DrawCircleLinesV(center: rl.Vector2, radius: f32, color: rl.Color) void;
pub extern "c" fn DrawEllipse(centerX: c_int, centerY: c_int, radiusH: f32, radiusV: f32, color: rl.Color) void;
pub extern "c" fn DrawEllipseV(center: rl.Vector2, radiusH: f32, radiusV: f32, color: rl.Color) void;
pub extern "c" fn DrawEllipseLines(centerX: c_int, centerY: c_int, radiusH: f32, radiusV: f32, color: rl.Color) void;
pub extern "c" fn DrawEllipseLinesV(center: rl.Vector2, radiusH: f32, radiusV: f32, color: rl.Color) void;
pub extern "c" fn DrawRing(center: rl.Vector2, innerRadius: f32, outerRadius: f32, startAngle: f32, endAngle: f32, segments: c_int, color: rl.Color) void;
pub extern "c" fn DrawRingLines(center: rl.Vector2, innerRadius: f32, outerRadius: f32, startAngle: f32, endAngle: f32, segments: c_int, color: rl.Color) void;
pub extern "c" fn DrawRectangle(posX: c_int, posY: c_int, width: c_int, height: c_int, color: rl.Color) void;
pub extern "c" fn DrawRectangleV(position: rl.Vector2, size: rl.Vector2, color: rl.Color) void;
pub extern "c" fn DrawRectangleRec(rec: rl.Rectangle, color: rl.Color) void;
pub extern "c" fn DrawRectanglePro(rec: rl.Rectangle, origin: rl.Vector2, rotation: f32, color: rl.Color) void;
pub extern "c" fn DrawRectangleGradientV(posX: c_int, posY: c_int, width: c_int, height: c_int, top: rl.Color, bottom: rl.Color) void;
pub extern "c" fn DrawRectangleGradientH(posX: c_int, posY: c_int, width: c_int, height: c_int, left: rl.Color, right: rl.Color) void;
pub extern "c" fn DrawRectangleGradientEx(rec: rl.Rectangle, topLeft: rl.Color, bottomLeft: rl.Color, bottomRight: rl.Color, topRight: rl.Color) void;
pub extern "c" fn DrawRectangleLines(posX: c_int, posY: c_int, width: c_int, height: c_int, color: rl.Color) void;
pub extern "c" fn DrawRectangleLinesEx(rec: rl.Rectangle, lineThick: f32, color: rl.Color) void;
pub extern "c" fn DrawRectangleRounded(rec: rl.Rectangle, roundness: f32, segments: c_int, color: rl.Color) void;
pub extern "c" fn DrawRectangleRoundedLines(rec: rl.Rectangle, roundness: f32, segments: c_int, color: rl.Color) void;
pub extern "c" fn DrawRectangleRoundedLinesEx(rec: rl.Rectangle, roundness: f32, segments: c_int, lineThick: f32, color: rl.Color) void;
pub extern "c" fn DrawTriangle(v1: rl.Vector2, v2: rl.Vector2, v3: rl.Vector2, color: rl.Color) void;
pub extern "c" fn DrawTriangleLines(v1: rl.Vector2, v2: rl.Vector2, v3: rl.Vector2, color: rl.Color) void;
pub extern "c" fn DrawTriangleFan(points: [*c]const rl.Vector2, pointCount: c_int, color: rl.Color) void;
pub extern "c" fn DrawTriangleStrip(points: [*c]const rl.Vector2, pointCount: c_int, color: rl.Color) void;
pub extern "c" fn DrawPoly(center: rl.Vector2, sides: c_int, radius: f32, rotation: f32, color: rl.Color) void;
pub extern "c" fn DrawPolyLines(center: rl.Vector2, sides: c_int, radius: f32, rotation: f32, color: rl.Color) void;
pub extern "c" fn DrawPolyLinesEx(center: rl.Vector2, sides: c_int, radius: f32, rotation: f32, lineThick: f32, color: rl.Color) void;
pub extern "c" fn DrawSplineLinear(points: [*c]const rl.Vector2, pointCount: c_int, thick: f32, color: rl.Color) void;
pub extern "c" fn DrawSplineBasis(points: [*c]const rl.Vector2, pointCount: c_int, thick: f32, color: rl.Color) void;
pub extern "c" fn DrawSplineCatmullRom(points: [*c]const rl.Vector2, pointCount: c_int, thick: f32, color: rl.Color) void;
pub extern "c" fn DrawSplineBezierQuadratic(points: [*c]const rl.Vector2, pointCount: c_int, thick: f32, color: rl.Color) void;
pub extern "c" fn DrawSplineBezierCubic(points: [*c]const rl.Vector2, pointCount: c_int, thick: f32, color: rl.Color) void;
pub extern "c" fn DrawSplineSegmentLinear(p1: rl.Vector2, p2: rl.Vector2, thick: f32, color: rl.Color) void;
pub extern "c" fn DrawSplineSegmentBasis(p1: rl.Vector2, p2: rl.Vector2, p3: rl.Vector2, p4: rl.Vector2, thick: f32, color: rl.Color) void;
pub extern "c" fn DrawSplineSegmentCatmullRom(p1: rl.Vector2, p2: rl.Vector2, p3: rl.Vector2, p4: rl.Vector2, thick: f32, color: rl.Color) void;
pub extern "c" fn DrawSplineSegmentBezierQuadratic(p1: rl.Vector2, c2: rl.Vector2, p3: rl.Vector2, thick: f32, color: rl.Color) void;
pub extern "c" fn DrawSplineSegmentBezierCubic(p1: rl.Vector2, c2: rl.Vector2, c3: rl.Vector2, p4: rl.Vector2, thick: f32, color: rl.Color) void;
pub extern "c" fn GetSplinePointLinear(startPos: rl.Vector2, endPos: rl.Vector2, t: f32) rl.Vector2;
pub extern "c" fn GetSplinePointBasis(p1: rl.Vector2, p2: rl.Vector2, p3: rl.Vector2, p4: rl.Vector2, t: f32) rl.Vector2;
pub extern "c" fn GetSplinePointCatmullRom(p1: rl.Vector2, p2: rl.Vector2, p3: rl.Vector2, p4: rl.Vector2, t: f32) rl.Vector2;
pub extern "c" fn GetSplinePointBezierQuad(p1: rl.Vector2, c2: rl.Vector2, p3: rl.Vector2, t: f32) rl.Vector2;
pub extern "c" fn GetSplinePointBezierCubic(p1: rl.Vector2, c2: rl.Vector2, c3: rl.Vector2, p4: rl.Vector2, t: f32) rl.Vector2;
pub extern "c" fn CheckCollisionRecs(rec1: rl.Rectangle, rec2: rl.Rectangle) bool;
pub extern "c" fn CheckCollisionCircles(center1: rl.Vector2, radius1: f32, center2: rl.Vector2, radius2: f32) bool;
pub extern "c" fn CheckCollisionCircleRec(center: rl.Vector2, radius: f32, rec: rl.Rectangle) bool;
pub extern "c" fn CheckCollisionCircleLine(center: rl.Vector2, radius: f32, p1: rl.Vector2, p2: rl.Vector2) bool;
pub extern "c" fn CheckCollisionPointRec(point: rl.Vector2, rec: rl.Rectangle) bool;
pub extern "c" fn CheckCollisionPointCircle(point: rl.Vector2, center: rl.Vector2, radius: f32) bool;
pub extern "c" fn CheckCollisionPointTriangle(point: rl.Vector2, p1: rl.Vector2, p2: rl.Vector2, p3: rl.Vector2) bool;
pub extern "c" fn CheckCollisionPointLine(point: rl.Vector2, p1: rl.Vector2, p2: rl.Vector2, threshold: c_int) bool;
pub extern "c" fn CheckCollisionPointPoly(point: rl.Vector2, points: [*c]const rl.Vector2, pointCount: c_int) bool;
pub extern "c" fn CheckCollisionLines(startPos1: rl.Vector2, endPos1: rl.Vector2, startPos2: rl.Vector2, endPos2: rl.Vector2, collisionPoint: [*c]rl.Vector2) bool;
pub extern "c" fn GetCollisionRec(rec1: rl.Rectangle, rec2: rl.Rectangle) rl.Rectangle;
pub extern "c" fn LoadImage(fileName: [*c]const u8) rl.Image;
pub extern "c" fn LoadImageRaw(fileName: [*c]const u8, width: c_int, height: c_int, format: rl.PixelFormat, headerSize: c_int) rl.Image;
pub extern "c" fn LoadImageAnim(fileName: [*c]const u8, frames: [*c]c_int) rl.Image;
pub extern "c" fn LoadImageAnimFromMemory(fileType: [*c]const u8, fileData: [*c]const u8, dataSize: c_int, frames: [*c]c_int) rl.Image;
pub extern "c" fn LoadImageFromMemory(fileType: [*c]const u8, fileData: [*c]const u8, dataSize: c_int) rl.Image;
pub extern "c" fn LoadImageFromTexture(texture: rl.Texture2D) rl.Image;
pub extern "c" fn LoadImageFromScreen() rl.Image;
pub extern "c" fn IsImageValid(image: rl.Image) bool;
pub extern "c" fn UnloadImage(image: rl.Image) void;
pub extern "c" fn ExportImage(image: rl.Image, fileName: [*c]const u8) bool;
pub extern "c" fn ExportImageToMemory(image: rl.Image, fileType: [*c]const u8, fileSize: [*c]c_int) [*c]u8;
pub extern "c" fn ExportImageAsCode(image: rl.Image, fileName: [*c]const u8) bool;
pub extern "c" fn GenImageColor(width: c_int, height: c_int, color: rl.Color) rl.Image;
pub extern "c" fn GenImageGradientLinear(width: c_int, height: c_int, direction: c_int, start: rl.Color, end: rl.Color) rl.Image;
pub extern "c" fn GenImageGradientRadial(width: c_int, height: c_int, density: f32, inner: rl.Color, outer: rl.Color) rl.Image;
pub extern "c" fn GenImageGradientSquare(width: c_int, height: c_int, density: f32, inner: rl.Color, outer: rl.Color) rl.Image;
pub extern "c" fn GenImageChecked(width: c_int, height: c_int, checksX: c_int, checksY: c_int, col1: rl.Color, col2: rl.Color) rl.Image;
pub extern "c" fn GenImageWhiteNoise(width: c_int, height: c_int, factor: f32) rl.Image;
pub extern "c" fn GenImagePerlinNoise(width: c_int, height: c_int, offsetX: c_int, offsetY: c_int, scale: f32) rl.Image;
pub extern "c" fn GenImageCellular(width: c_int, height: c_int, tileSize: c_int) rl.Image;
pub extern "c" fn GenImageText(width: c_int, height: c_int, text: [*c]const u8) rl.Image;
pub extern "c" fn ImageCopy(image: rl.Image) rl.Image;
pub extern "c" fn ImageFromImage(image: rl.Image, rec: rl.Rectangle) rl.Image;
pub extern "c" fn ImageFromChannel(image: rl.Image, selectedChannel: c_int) rl.Image;
pub extern "c" fn ImageText(text: [*c]const u8, fontSize: c_int, color: rl.Color) rl.Image;
pub extern "c" fn ImageTextEx(font: rl.Font, text: [*c]const u8, fontSize: f32, spacing: f32, tint: rl.Color) rl.Image;
pub extern "c" fn ImageFormat(image: [*c]rl.Image, newFormat: rl.PixelFormat) void;
pub extern "c" fn ImageToPOT(image: [*c]rl.Image, fill: rl.Color) void;
pub extern "c" fn ImageCrop(image: [*c]rl.Image, crop: rl.Rectangle) void;
pub extern "c" fn ImageAlphaCrop(image: [*c]rl.Image, threshold: f32) void;
pub extern "c" fn ImageAlphaClear(image: [*c]rl.Image, color: rl.Color, threshold: f32) void;
pub extern "c" fn ImageAlphaMask(image: [*c]rl.Image, alphaMask: rl.Image) void;
pub extern "c" fn ImageAlphaPremultiply(image: [*c]rl.Image) void;
pub extern "c" fn ImageBlurGaussian(image: [*c]rl.Image, blurSize: c_int) void;
pub extern "c" fn ImageKernelConvolution(image: [*c]rl.Image, kernel: [*c]const f32, kernelSize: c_int) void;
pub extern "c" fn ImageResize(image: [*c]rl.Image, newWidth: c_int, newHeight: c_int) void;
pub extern "c" fn ImageResizeNN(image: [*c]rl.Image, newWidth: c_int, newHeight: c_int) void;
pub extern "c" fn ImageResizeCanvas(image: [*c]rl.Image, newWidth: c_int, newHeight: c_int, offsetX: c_int, offsetY: c_int, fill: rl.Color) void;
pub extern "c" fn ImageMipmaps(image: [*c]rl.Image) void;
pub extern "c" fn ImageDither(image: [*c]rl.Image, rBpp: c_int, gBpp: c_int, bBpp: c_int, aBpp: c_int) void;
pub extern "c" fn ImageFlipVertical(image: [*c]rl.Image) void;
pub extern "c" fn ImageFlipHorizontal(image: [*c]rl.Image) void;
pub extern "c" fn ImageRotate(image: [*c]rl.Image, degrees: c_int) void;
pub extern "c" fn ImageRotateCW(image: [*c]rl.Image) void;
pub extern "c" fn ImageRotateCCW(image: [*c]rl.Image) void;
pub extern "c" fn ImageColorTint(image: [*c]rl.Image, color: rl.Color) void;
pub extern "c" fn ImageColorInvert(image: [*c]rl.Image) void;
pub extern "c" fn ImageColorGrayscale(image: [*c]rl.Image) void;
pub extern "c" fn ImageColorContrast(image: [*c]rl.Image, contrast: f32) void;
pub extern "c" fn ImageColorBrightness(image: [*c]rl.Image, brightness: c_int) void;
pub extern "c" fn ImageColorReplace(image: [*c]rl.Image, color: rl.Color, replace: rl.Color) void;
pub extern "c" fn LoadImageColors(image: rl.Image) [*c]rl.Color;
pub extern "c" fn LoadImagePalette(image: rl.Image, maxPaletteSize: c_int, colorCount: [*c]c_int) [*c]rl.Color;
pub extern "c" fn UnloadImageColors(colors: [*c]rl.Color) void;
pub extern "c" fn UnloadImagePalette(colors: [*c]rl.Color) void;
pub extern "c" fn GetImageAlphaBorder(image: rl.Image, threshold: f32) rl.Rectangle;
pub extern "c" fn GetImageColor(image: rl.Image, x: c_int, y: c_int) rl.Color;
pub extern "c" fn ImageClearBackground(dst: [*c]rl.Image, color: rl.Color) void;
pub extern "c" fn ImageDrawPixel(dst: [*c]rl.Image, posX: c_int, posY: c_int, color: rl.Color) void;
pub extern "c" fn ImageDrawPixelV(dst: [*c]rl.Image, position: rl.Vector2, color: rl.Color) void;
pub extern "c" fn ImageDrawLine(dst: [*c]rl.Image, startPosX: c_int, startPosY: c_int, endPosX: c_int, endPosY: c_int, color: rl.Color) void;
pub extern "c" fn ImageDrawLineV(dst: [*c]rl.Image, start: rl.Vector2, end: rl.Vector2, color: rl.Color) void;
pub extern "c" fn ImageDrawLineEx(dst: [*c]rl.Image, start: rl.Vector2, end: rl.Vector2, thick: c_int, color: rl.Color) void;
pub extern "c" fn ImageDrawCircle(dst: [*c]rl.Image, centerX: c_int, centerY: c_int, radius: c_int, color: rl.Color) void;
pub extern "c" fn ImageDrawCircleV(dst: [*c]rl.Image, center: rl.Vector2, radius: c_int, color: rl.Color) void;
pub extern "c" fn ImageDrawCircleLines(dst: [*c]rl.Image, centerX: c_int, centerY: c_int, radius: c_int, color: rl.Color) void;
pub extern "c" fn ImageDrawCircleLinesV(dst: [*c]rl.Image, center: rl.Vector2, radius: c_int, color: rl.Color) void;
pub extern "c" fn ImageDrawRectangle(dst: [*c]rl.Image, posX: c_int, posY: c_int, width: c_int, height: c_int, color: rl.Color) void;
pub extern "c" fn ImageDrawRectangleV(dst: [*c]rl.Image, position: rl.Vector2, size: rl.Vector2, color: rl.Color) void;
pub extern "c" fn ImageDrawRectangleRec(dst: [*c]rl.Image, rec: rl.Rectangle, color: rl.Color) void;
pub extern "c" fn ImageDrawRectangleLines(dst: [*c]rl.Image, rec: rl.Rectangle, thick: c_int, color: rl.Color) void;
pub extern "c" fn ImageDrawTriangle(dst: [*c]rl.Image, v1: rl.Vector2, v2: rl.Vector2, v3: rl.Vector2, color: rl.Color) void;
pub extern "c" fn ImageDrawTriangleEx(dst: [*c]rl.Image, v1: rl.Vector2, v2: rl.Vector2, v3: rl.Vector2, c1: rl.Color, c2: rl.Color, c3: rl.Color) void;
pub extern "c" fn ImageDrawTriangleLines(dst: [*c]rl.Image, v1: rl.Vector2, v2: rl.Vector2, v3: rl.Vector2, color: rl.Color) void;
pub extern "c" fn ImageDrawTriangleFan(dst: [*c]rl.Image, points: [*c]const rl.Vector2, pointCount: c_int, color: rl.Color) void;
pub extern "c" fn ImageDrawTriangleStrip(dst: [*c]rl.Image, points: [*c]const rl.Vector2, pointCount: c_int, color: rl.Color) void;
pub extern "c" fn ImageDraw(dst: [*c]rl.Image, src: rl.Image, srcRec: rl.Rectangle, dstRec: rl.Rectangle, tint: rl.Color) void;
pub extern "c" fn ImageDrawText(dst: [*c]rl.Image, text: [*c]const u8, posX: c_int, posY: c_int, fontSize: c_int, color: rl.Color) void;
pub extern "c" fn ImageDrawTextEx(dst: [*c]rl.Image, font: rl.Font, text: [*c]const u8, position: rl.Vector2, fontSize: f32, spacing: f32, tint: rl.Color) void;
pub extern "c" fn LoadTexture(fileName: [*c]const u8) rl.Texture2D;
pub extern "c" fn LoadTextureFromImage(image: rl.Image) rl.Texture2D;
pub extern "c" fn LoadTextureCubemap(image: rl.Image, layout: rl.CubemapLayout) rl.TextureCubemap;
pub extern "c" fn LoadRenderTexture(width: c_int, height: c_int) rl.RenderTexture2D;
pub extern "c" fn IsTextureValid(texture: rl.Texture2D) bool;
pub extern "c" fn UnloadTexture(texture: rl.Texture2D) void;
pub extern "c" fn IsRenderTextureValid(target: rl.RenderTexture2D) bool;
pub extern "c" fn UnloadRenderTexture(target: rl.RenderTexture2D) void;
pub extern "c" fn UpdateTexture(texture: rl.Texture2D, pixels: *const anyopaque) void;
pub extern "c" fn UpdateTextureRec(texture: rl.Texture2D, rec: rl.Rectangle, pixels: *const anyopaque) void;
pub extern "c" fn GenTextureMipmaps(texture: [*c]rl.Texture2D) void;
pub extern "c" fn SetTextureFilter(texture: rl.Texture2D, filter: rl.TextureFilter) void;
pub extern "c" fn SetTextureWrap(texture: rl.Texture2D, wrap: rl.TextureWrap) void;
pub extern "c" fn DrawTexture(texture: rl.Texture2D, posX: c_int, posY: c_int, tint: rl.Color) void;
pub extern "c" fn DrawTextureV(texture: rl.Texture2D, position: rl.Vector2, tint: rl.Color) void;
pub extern "c" fn DrawTextureEx(texture: rl.Texture2D, position: rl.Vector2, rotation: f32, scale: f32, tint: rl.Color) void;
pub extern "c" fn DrawTextureRec(texture: rl.Texture2D, source: rl.Rectangle, position: rl.Vector2, tint: rl.Color) void;
pub extern "c" fn DrawTexturePro(texture: rl.Texture2D, source: rl.Rectangle, dest: rl.Rectangle, origin: rl.Vector2, rotation: f32, tint: rl.Color) void;
pub extern "c" fn DrawTextureNPatch(texture: rl.Texture2D, nPatchInfo: rl.NPatchInfo, dest: rl.Rectangle, origin: rl.Vector2, rotation: f32, tint: rl.Color) void;
pub extern "c" fn ColorIsEqual(col1: rl.Color, col2: rl.Color) bool;
pub extern "c" fn Fade(color: rl.Color, alpha: f32) rl.Color;
pub extern "c" fn ColorToInt(color: rl.Color) c_int;
pub extern "c" fn ColorNormalize(color: rl.Color) rl.Vector4;
pub extern "c" fn ColorFromNormalized(normalized: rl.Vector4) rl.Color;
pub extern "c" fn ColorToHSV(color: rl.Color) rl.Vector3;
pub extern "c" fn ColorFromHSV(hue: f32, saturation: f32, value: f32) rl.Color;
pub extern "c" fn ColorTint(color: rl.Color, tint: rl.Color) rl.Color;
pub extern "c" fn ColorBrightness(color: rl.Color, factor: f32) rl.Color;
pub extern "c" fn ColorContrast(color: rl.Color, contrast: f32) rl.Color;
pub extern "c" fn ColorAlpha(color: rl.Color, alpha: f32) rl.Color;
pub extern "c" fn ColorAlphaBlend(dst: rl.Color, src: rl.Color, tint: rl.Color) rl.Color;
pub extern "c" fn ColorLerp(color1: rl.Color, color2: rl.Color, factor: f32) rl.Color;
pub extern "c" fn GetColor(hexValue: c_uint) rl.Color;
pub extern "c" fn GetPixelColor(srcPtr: *anyopaque, format: rl.PixelFormat) rl.Color;
pub extern "c" fn SetPixelColor(dstPtr: *anyopaque, color: rl.Color, format: rl.PixelFormat) void;
pub extern "c" fn GetPixelDataSize(width: c_int, height: c_int, format: rl.PixelFormat) c_int;
pub extern "c" fn GetFontDefault() rl.Font;
pub extern "c" fn LoadFont(fileName: [*c]const u8) rl.Font;
pub extern "c" fn LoadFontEx(fileName: [*c]const u8, fontSize: c_int, codepoints: [*c]const c_int, codepointCount: c_int) rl.Font;
pub extern "c" fn LoadFontFromImage(image: rl.Image, key: rl.Color, firstChar: c_int) rl.Font;
pub extern "c" fn LoadFontFromMemory(fileType: [*c]const u8, fileData: [*c]const u8, dataSize: c_int, fontSize: c_int, codepoints: [*c]const c_int, codepointCount: c_int) rl.Font;
pub extern "c" fn IsFontValid(font: rl.Font) bool;
pub extern "c" fn LoadFontData(fileData: [*c]const u8, dataSize: c_int, fontSize: c_int, codepoints: [*c]const c_int, codepointCount: c_int, ty: rl.FontType, glyphCount: [*c]c_int) [*c]rl.GlyphInfo;
pub extern "c" fn GenImageFontAtlas(glyphs: [*c]const rl.GlyphInfo, glyphRecs: [*c][*c]rl.Rectangle, glyphCount: c_int, fontSize: c_int, padding: c_int, packMethod: c_int) rl.Image;
pub extern "c" fn UnloadFontData(glyphs: [*c]rl.GlyphInfo, glyphCount: c_int) void;
pub extern "c" fn UnloadFont(font: rl.Font) void;
pub extern "c" fn ExportFontAsCode(font: rl.Font, fileName: [*c]const u8) bool;
pub extern "c" fn DrawFPS(posX: c_int, posY: c_int) void;
pub extern "c" fn DrawText(text: [*c]const u8, posX: c_int, posY: c_int, fontSize: c_int, color: rl.Color) void;
pub extern "c" fn DrawTextEx(font: rl.Font, text: [*c]const u8, position: rl.Vector2, fontSize: f32, spacing: f32, tint: rl.Color) void;
pub extern "c" fn DrawTextPro(font: rl.Font, text: [*c]const u8, position: rl.Vector2, origin: rl.Vector2, rotation: f32, fontSize: f32, spacing: f32, tint: rl.Color) void;
pub extern "c" fn DrawTextCodepoint(font: rl.Font, codepoint: c_int, position: rl.Vector2, fontSize: f32, tint: rl.Color) void;
pub extern "c" fn DrawTextCodepoints(font: rl.Font, codepoints: [*c]const c_int, codepointCount: c_int, position: rl.Vector2, fontSize: f32, spacing: f32, tint: rl.Color) void;
pub extern "c" fn SetTextLineSpacing(spacing: c_int) void;
pub extern "c" fn MeasureText(text: [*c]const u8, fontSize: c_int) c_int;
pub extern "c" fn MeasureTextEx(font: rl.Font, text: [*c]const u8, fontSize: f32, spacing: f32) rl.Vector2;
pub extern "c" fn MeasureTextCodepoints(font: rl.Font, codepoints: [*c]const c_int, length: c_int, fontSize: f32, spacing: f32) rl.Vector2;
pub extern "c" fn GetGlyphIndex(font: rl.Font, codepoint: c_int) c_int;
pub extern "c" fn GetGlyphInfo(font: rl.Font, codepoint: c_int) rl.GlyphInfo;
pub extern "c" fn GetGlyphAtlasRec(font: rl.Font, codepoint: c_int) rl.Rectangle;
pub extern "c" fn LoadUTF8(codepoints: [*c]const c_int, length: c_int) [*c]u8;
pub extern "c" fn UnloadUTF8(text: [*c]u8) void;
pub extern "c" fn LoadCodepoints(text: [*c]const u8, count: [*c]c_int) [*c]c_int;
pub extern "c" fn UnloadCodepoints(codepoints: [*c]c_int) void;
pub extern "c" fn GetCodepointCount(text: [*c]const u8) c_int;
pub extern "c" fn GetCodepoint(text: [*c]const u8, codepointSize: [*c]c_int) c_int;
pub extern "c" fn GetCodepointNext(text: [*c]const u8, codepointSize: [*c]c_int) c_int;
pub extern "c" fn GetCodepointPrevious(text: [*c]const u8, codepointSize: [*c]c_int) c_int;
pub extern "c" fn CodepointToUTF8(codepoint: c_int, utf8Size: [*c]c_int) [*c]const u8;
pub extern "c" fn LoadTextLines(text: [*c]const u8, count: [*c]c_int) [*c][*c]u8;
pub extern "c" fn UnloadTextLines(text: [*c][*c]u8, lineCount: c_int) void;
pub extern "c" fn TextCopy(dst: [*c]u8, src: [*c]const u8) c_int;
pub extern "c" fn TextIsEqual(text1: [*c]const u8, text2: [*c]const u8) bool;
pub extern "c" fn TextLength(text: [*c]const u8) c_uint;
pub extern "c" fn TextFormat(text: [*c]const u8, ...) [*c]const u8;
pub extern "c" fn TextSubtext(text: [*c]const u8, position: c_int, length: c_int) [*c]const u8;
pub extern "c" fn TextRemoveSpaces(text: [*c]const u8) [*c]const u8;
pub extern "c" fn GetTextBetween(text: [*c]const u8, begin: [*c]const u8, end: [*c]const u8) [*c]u8;
pub extern "c" fn TextReplace(text: [*c]const u8, search: [*c]const u8, replacement: [*c]const u8) [*c]u8;
pub extern "c" fn TextReplaceAlloc(text: [*c]const u8, search: [*c]const u8, replacement: [*c]const u8) [*c]u8;
pub extern "c" fn TextReplaceBetween(text: [*c]const u8, begin: [*c]const u8, end: [*c]const u8, replacement: [*c]const u8) [*c]u8;
pub extern "c" fn TextReplaceBetweenAlloc(text: [*c]const u8, begin: [*c]const u8, end: [*c]const u8, replacement: [*c]const u8) [*c]u8;
pub extern "c" fn TextInsert(text: [*c]const u8, insert: [*c]const u8, position: c_int) [*c]u8;
pub extern "c" fn TextInsertAlloc(text: [*c]const u8, insert: [*c]const u8, position: c_int) [*c]u8;
pub extern "c" fn TextJoin(textList: [*c][*c]u8, count: c_int, delimiter: [*c]const u8) [*c]u8;
pub extern "c" fn TextSplit(text: [*c]const u8, delimiter: u8, count: [*c]c_int) [*c][*c]u8;
pub extern "c" fn TextAppend(text: [*c]u8, append: [*c]const u8, position: [*c]c_int) void;
pub extern "c" fn TextFindIndex(text: [*c]const u8, search: [*c]const u8) c_int;
pub extern "c" fn TextToUpper(text: [*c]const u8) [*c]u8;
pub extern "c" fn TextToLower(text: [*c]const u8) [*c]u8;
pub extern "c" fn TextToPascal(text: [*c]const u8) [*c]u8;
pub extern "c" fn TextToSnake(text: [*c]const u8) [*c]u8;
pub extern "c" fn TextToCamel(text: [*c]const u8) [*c]u8;
pub extern "c" fn TextToInteger(text: [*c]const u8) c_int;
pub extern "c" fn TextToFloat(text: [*c]const u8) f32;
pub extern "c" fn DrawLine3D(startPos: rl.Vector3, endPos: rl.Vector3, color: rl.Color) void;
pub extern "c" fn DrawPoint3D(position: rl.Vector3, color: rl.Color) void;
pub extern "c" fn DrawCircle3D(center: rl.Vector3, radius: f32, rotationAxis: rl.Vector3, rotationAngle: f32, color: rl.Color) void;
pub extern "c" fn DrawTriangle3D(v1: rl.Vector3, v2: rl.Vector3, v3: rl.Vector3, color: rl.Color) void;
pub extern "c" fn DrawTriangleStrip3D(points: [*c]const rl.Vector3, pointCount: c_int, color: rl.Color) void;
pub extern "c" fn DrawCube(position: rl.Vector3, width: f32, height: f32, length: f32, color: rl.Color) void;
pub extern "c" fn DrawCubeV(position: rl.Vector3, size: rl.Vector3, color: rl.Color) void;
pub extern "c" fn DrawCubeWires(position: rl.Vector3, width: f32, height: f32, length: f32, color: rl.Color) void;
pub extern "c" fn DrawCubeWiresV(position: rl.Vector3, size: rl.Vector3, color: rl.Color) void;
pub extern "c" fn DrawSphere(centerPos: rl.Vector3, radius: f32, color: rl.Color) void;
pub extern "c" fn DrawSphereEx(centerPos: rl.Vector3, radius: f32, rings: c_int, slices: c_int, color: rl.Color) void;
pub extern "c" fn DrawSphereWires(centerPos: rl.Vector3, radius: f32, rings: c_int, slices: c_int, color: rl.Color) void;
pub extern "c" fn DrawCylinder(position: rl.Vector3, radiusTop: f32, radiusBottom: f32, height: f32, slices: c_int, color: rl.Color) void;
pub extern "c" fn DrawCylinderEx(startPos: rl.Vector3, endPos: rl.Vector3, startRadius: f32, endRadius: f32, sides: c_int, color: rl.Color) void;
pub extern "c" fn DrawCylinderWires(position: rl.Vector3, radiusTop: f32, radiusBottom: f32, height: f32, slices: c_int, color: rl.Color) void;
pub extern "c" fn DrawCylinderWiresEx(startPos: rl.Vector3, endPos: rl.Vector3, startRadius: f32, endRadius: f32, sides: c_int, color: rl.Color) void;
pub extern "c" fn DrawCapsule(startPos: rl.Vector3, endPos: rl.Vector3, radius: f32, slices: c_int, rings: c_int, color: rl.Color) void;
pub extern "c" fn DrawCapsuleWires(startPos: rl.Vector3, endPos: rl.Vector3, radius: f32, slices: c_int, rings: c_int, color: rl.Color) void;
pub extern "c" fn DrawPlane(centerPos: rl.Vector3, size: rl.Vector2, color: rl.Color) void;
pub extern "c" fn DrawRay(ray: rl.Ray, color: rl.Color) void;
pub extern "c" fn DrawGrid(slices: c_int, spacing: f32) void;
pub extern "c" fn LoadModel(fileName: [*c]const u8) rl.Model;
pub extern "c" fn LoadModelFromMesh(mesh: rl.Mesh) rl.Model;
pub extern "c" fn IsModelValid(model: rl.Model) bool;
pub extern "c" fn UnloadModel(model: rl.Model) void;
pub extern "c" fn GetModelBoundingBox(model: rl.Model) rl.BoundingBox;
pub extern "c" fn DrawModel(model: rl.Model, position: rl.Vector3, scale: f32, tint: rl.Color) void;
pub extern "c" fn DrawModelEx(model: rl.Model, position: rl.Vector3, rotationAxis: rl.Vector3, rotationAngle: f32, scale: rl.Vector3, tint: rl.Color) void;
pub extern "c" fn DrawModelWires(model: rl.Model, position: rl.Vector3, scale: f32, tint: rl.Color) void;
pub extern "c" fn DrawModelWiresEx(model: rl.Model, position: rl.Vector3, rotationAxis: rl.Vector3, rotationAngle: f32, scale: rl.Vector3, tint: rl.Color) void;
pub extern "c" fn DrawBoundingBox(box: rl.BoundingBox, color: rl.Color) void;
pub extern "c" fn DrawBillboard(camera: rl.Camera, texture: rl.Texture2D, position: rl.Vector3, scale: f32, tint: rl.Color) void;
pub extern "c" fn DrawBillboardRec(camera: rl.Camera, texture: rl.Texture2D, source: rl.Rectangle, position: rl.Vector3, size: rl.Vector2, tint: rl.Color) void;
pub extern "c" fn DrawBillboardPro(camera: rl.Camera, texture: rl.Texture2D, source: rl.Rectangle, position: rl.Vector3, up: rl.Vector3, size: rl.Vector2, origin: rl.Vector2, rotation: f32, tint: rl.Color) void;
pub extern "c" fn UploadMesh(mesh: [*c]rl.Mesh, dynamic: bool) void;
pub extern "c" fn UpdateMeshBuffer(mesh: rl.Mesh, index: c_int, data: *const anyopaque, dataSize: c_int, offset: c_int) void;
pub extern "c" fn UnloadMesh(mesh: rl.Mesh) void;
pub extern "c" fn DrawMesh(mesh: rl.Mesh, material: rl.Material, transform: rl.Matrix) void;
pub extern "c" fn DrawMeshInstanced(mesh: rl.Mesh, material: rl.Material, transforms: [*c]const rl.Matrix, instances: c_int) void;
pub extern "c" fn GetMeshBoundingBox(mesh: rl.Mesh) rl.BoundingBox;
pub extern "c" fn GenMeshTangents(mesh: [*c]rl.Mesh) void;
pub extern "c" fn ExportMesh(mesh: rl.Mesh, fileName: [*c]const u8) bool;
pub extern "c" fn ExportMeshAsCode(mesh: rl.Mesh, fileName: [*c]const u8) bool;
pub extern "c" fn GenMeshPoly(sides: c_int, radius: f32) rl.Mesh;
pub extern "c" fn GenMeshPlane(width: f32, length: f32, resX: c_int, resZ: c_int) rl.Mesh;
pub extern "c" fn GenMeshCube(width: f32, height: f32, length: f32) rl.Mesh;
pub extern "c" fn GenMeshSphere(radius: f32, rings: c_int, slices: c_int) rl.Mesh;
pub extern "c" fn GenMeshHemiSphere(radius: f32, rings: c_int, slices: c_int) rl.Mesh;
pub extern "c" fn GenMeshCylinder(radius: f32, height: f32, slices: c_int) rl.Mesh;
pub extern "c" fn GenMeshCone(radius: f32, height: f32, slices: c_int) rl.Mesh;
pub extern "c" fn GenMeshTorus(radius: f32, size: f32, radSeg: c_int, sides: c_int) rl.Mesh;
pub extern "c" fn GenMeshKnot(radius: f32, size: f32, radSeg: c_int, sides: c_int) rl.Mesh;
pub extern "c" fn GenMeshHeightmap(heightmap: rl.Image, size: rl.Vector3) rl.Mesh;
pub extern "c" fn GenMeshCubicmap(cubicmap: rl.Image, cubeSize: rl.Vector3) rl.Mesh;
pub extern "c" fn LoadMaterials(fileName: [*c]const u8, materialCount: [*c]c_int) [*c]rl.Material;
pub extern "c" fn LoadMaterialDefault() rl.Material;
pub extern "c" fn IsMaterialValid(material: rl.Material) bool;
pub extern "c" fn UnloadMaterial(material: rl.Material) void;
pub extern "c" fn SetMaterialTexture(material: [*c]rl.Material, mapType: rl.MaterialMapIndex, texture: rl.Texture2D) void;
pub extern "c" fn SetModelMeshMaterial(model: [*c]rl.Model, meshId: c_int, materialId: c_int) void;
pub extern "c" fn LoadModelAnimations(fileName: [*c]const u8, animCount: [*c]c_int) [*c]rl.ModelAnimation;
pub extern "c" fn UpdateModelAnimation(model: rl.Model, anim: rl.ModelAnimation, frame: f32) void;
pub extern "c" fn UpdateModelAnimationEx(model: rl.Model, animA: rl.ModelAnimation, frameA: f32, animB: rl.ModelAnimation, frameB: f32, blend: f32) void;
pub extern "c" fn UnloadModelAnimations(animations: [*c]rl.ModelAnimation, animCount: c_int) void;
pub extern "c" fn IsModelAnimationValid(model: rl.Model, anim: rl.ModelAnimation) bool;
pub extern "c" fn CheckCollisionSpheres(center1: rl.Vector3, radius1: f32, center2: rl.Vector3, radius2: f32) bool;
pub extern "c" fn CheckCollisionBoxes(box1: rl.BoundingBox, box2: rl.BoundingBox) bool;
pub extern "c" fn CheckCollisionBoxSphere(box: rl.BoundingBox, center: rl.Vector3, radius: f32) bool;
pub extern "c" fn GetRayCollisionSphere(ray: rl.Ray, center: rl.Vector3, radius: f32) rl.RayCollision;
pub extern "c" fn GetRayCollisionBox(ray: rl.Ray, box: rl.BoundingBox) rl.RayCollision;
pub extern "c" fn GetRayCollisionMesh(ray: rl.Ray, mesh: rl.Mesh, transform: rl.Matrix) rl.RayCollision;
pub extern "c" fn GetRayCollisionTriangle(ray: rl.Ray, p1: rl.Vector3, p2: rl.Vector3, p3: rl.Vector3) rl.RayCollision;
pub extern "c" fn GetRayCollisionQuad(ray: rl.Ray, p1: rl.Vector3, p2: rl.Vector3, p3: rl.Vector3, p4: rl.Vector3) rl.RayCollision;
pub extern "c" fn InitAudioDevice() void;
pub extern "c" fn CloseAudioDevice() void;
pub extern "c" fn IsAudioDeviceReady() bool;
pub extern "c" fn SetMasterVolume(volume: f32) void;
pub extern "c" fn GetMasterVolume() f32;
pub extern "c" fn LoadWave(fileName: [*c]const u8) rl.Wave;
pub extern "c" fn LoadWaveFromMemory(fileType: [*c]const u8, fileData: [*c]const u8, dataSize: c_int) rl.Wave;
pub extern "c" fn IsWaveValid(wave: rl.Wave) bool;
pub extern "c" fn LoadSound(fileName: [*c]const u8) rl.Sound;
pub extern "c" fn LoadSoundFromWave(wave: rl.Wave) rl.Sound;
pub extern "c" fn LoadSoundAlias(source: rl.Sound) rl.Sound;
pub extern "c" fn IsSoundValid(sound: rl.Sound) bool;
pub extern "c" fn UpdateSound(sound: rl.Sound, data: *const anyopaque, sampleCount: c_int) void;
pub extern "c" fn UnloadWave(wave: rl.Wave) void;
pub extern "c" fn UnloadSound(sound: rl.Sound) void;
pub extern "c" fn UnloadSoundAlias(alias: rl.Sound) void;
pub extern "c" fn ExportWave(wave: rl.Wave, fileName: [*c]const u8) bool;
pub extern "c" fn ExportWaveAsCode(wave: rl.Wave, fileName: [*c]const u8) bool;
pub extern "c" fn PlaySound(sound: rl.Sound) void;
pub extern "c" fn StopSound(sound: rl.Sound) void;
pub extern "c" fn PauseSound(sound: rl.Sound) void;
pub extern "c" fn ResumeSound(sound: rl.Sound) void;
pub extern "c" fn IsSoundPlaying(sound: rl.Sound) bool;
pub extern "c" fn SetSoundVolume(sound: rl.Sound, volume: f32) void;
pub extern "c" fn SetSoundPitch(sound: rl.Sound, pitch: f32) void;
pub extern "c" fn SetSoundPan(sound: rl.Sound, pan: f32) void;
pub extern "c" fn WaveCopy(wave: rl.Wave) rl.Wave;
pub extern "c" fn WaveCrop(wave: [*c]rl.Wave, initFrame: c_int, finalFrame: c_int) void;
pub extern "c" fn WaveFormat(wave: [*c]rl.Wave, sampleRate: c_int, sampleSize: c_int, channels: c_int) void;
pub extern "c" fn LoadWaveSamples(wave: rl.Wave) [*c]f32;
pub extern "c" fn UnloadWaveSamples(samples: [*c]f32) void;
pub extern "c" fn LoadMusicStream(fileName: [*c]const u8) rl.Music;
pub extern "c" fn LoadMusicStreamFromMemory(fileType: [*c]const u8, data: [*c]const u8, dataSize: c_int) rl.Music;
pub extern "c" fn IsMusicValid(music: rl.Music) bool;
pub extern "c" fn UnloadMusicStream(music: rl.Music) void;
pub extern "c" fn PlayMusicStream(music: rl.Music) void;
pub extern "c" fn IsMusicStreamPlaying(music: rl.Music) bool;
pub extern "c" fn UpdateMusicStream(music: rl.Music) void;
pub extern "c" fn StopMusicStream(music: rl.Music) void;
pub extern "c" fn PauseMusicStream(music: rl.Music) void;
pub extern "c" fn ResumeMusicStream(music: rl.Music) void;
pub extern "c" fn SeekMusicStream(music: rl.Music, position: f32) void;
pub extern "c" fn SetMusicVolume(music: rl.Music, volume: f32) void;
pub extern "c" fn SetMusicPitch(music: rl.Music, pitch: f32) void;
pub extern "c" fn SetMusicPan(music: rl.Music, pan: f32) void;
pub extern "c" fn GetMusicTimeLength(music: rl.Music) f32;
pub extern "c" fn GetMusicTimePlayed(music: rl.Music) f32;
pub extern "c" fn LoadAudioStream(sampleRate: c_uint, sampleSize: c_uint, channels: c_uint) rl.AudioStream;
pub extern "c" fn IsAudioStreamValid(stream: rl.AudioStream) bool;
pub extern "c" fn UnloadAudioStream(stream: rl.AudioStream) void;
pub extern "c" fn UpdateAudioStream(stream: rl.AudioStream, data: *const anyopaque, frameCount: c_int) void;
pub extern "c" fn IsAudioStreamProcessed(stream: rl.AudioStream) bool;
pub extern "c" fn PlayAudioStream(stream: rl.AudioStream) void;
pub extern "c" fn PauseAudioStream(stream: rl.AudioStream) void;
pub extern "c" fn ResumeAudioStream(stream: rl.AudioStream) void;
pub extern "c" fn IsAudioStreamPlaying(stream: rl.AudioStream) bool;
pub extern "c" fn StopAudioStream(stream: rl.AudioStream) void;
pub extern "c" fn SetAudioStreamVolume(stream: rl.AudioStream, volume: f32) void;
pub extern "c" fn SetAudioStreamPitch(stream: rl.AudioStream, pitch: f32) void;
pub extern "c" fn SetAudioStreamPan(stream: rl.AudioStream, pan: f32) void;
pub extern "c" fn SetAudioStreamBufferSizeDefault(size: c_int) void;
pub extern "c" fn SetAudioStreamCallback(stream: rl.AudioStream, callback: rl.AudioCallback) void;
pub extern "c" fn AttachAudioStreamProcessor(stream: rl.AudioStream, processor: rl.AudioCallback) void;
pub extern "c" fn DetachAudioStreamProcessor(stream: rl.AudioStream, processor: rl.AudioCallback) void;
pub extern "c" fn AttachAudioMixedProcessor(processor: rl.AudioCallback) void;
pub extern "c" fn DetachAudioMixedProcessor(processor: rl.AudioCallback) void;
