From e29e0129816bc6c9ab45b83eb036bb02f1a27bdd Mon Sep 17 00:00:00 2001 From: Not-Nik Date: Mon, 10 Jul 2023 22:22:37 +0200 Subject: [PATCH] Map C pointers to Zig and functions names use Zig naming conventions --- examples/core/2d_camera.zig | 70 +- examples/core/3d_camera_first_person.zig | 43 +- examples/core/basic_window.zig | 16 +- examples/core/input_keys.zig | 26 +- examples/core/input_mouse.zig | 30 +- examples/core/input_mouse_wheel.zig | 22 +- examples/core/input_multitouch.zig | 40 +- examples/shaders/texture_outline.zig | 50 +- examples/textures/sprite_anim.zig | 44 +- lib/generate_functions.py | 110 +- lib/preludes/raylib-zig-ext-prelude.zig | 3 + lib/preludes/raylib-zig-math-ext-prelude.zig | 4 + .../raylib-zig-math-prelude.zig | 1 + .../raylib-zig-prelude.zig} | 104 +- lib/raylib-zig-ext.zig | 514 ++++ lib/raylib-zig-math-ext.zig | 116 + lib/raylib-zig-math.zig | 555 +++- lib/raylib-zig.zig | 2641 +++++++++++++---- 18 files changed, 3510 insertions(+), 879 deletions(-) create mode 100644 lib/preludes/raylib-zig-ext-prelude.zig create mode 100644 lib/preludes/raylib-zig-math-ext-prelude.zig rename lib/{ => preludes}/raylib-zig-math-prelude.zig (87%) rename lib/{raylib-zig-types.zig => preludes/raylib-zig-prelude.zig} (87%) create mode 100644 lib/raylib-zig-ext.zig create mode 100644 lib/raylib-zig-math-ext.zig diff --git a/examples/core/2d_camera.zig b/examples/core/2d_camera.zig index 87e4881..4edf47b 100755 --- a/examples/core/2d_camera.zig +++ b/examples/core/2d_camera.zig @@ -11,7 +11,7 @@ pub fn main() anyerror!void { const screenWidth = 800; const screenHeight = 450; - rl.InitWindow(screenWidth, screenHeight, "raylib-zig [core] example - 2d camera"); + rl.initWindow(screenWidth, screenHeight, "raylib-zig [core] example - 2d camera"); var player = rl.Rectangle{ .x = 400, .y = 280, .width = 40, .height = 40 }; var buildings: [MAX_BUILDINGS]rl.Rectangle = undefined; @@ -20,14 +20,14 @@ pub fn main() anyerror!void { var spacing: i32 = 0; for (buildings) |_, i| { - buildings[i].width = @intToFloat(f32, rl.GetRandomValue(50, 200)); - buildings[i].height = @intToFloat(f32, rl.GetRandomValue(100, 800)); + buildings[i].width = @intToFloat(f32, rl.getRandomValue(50, 200)); + buildings[i].height = @intToFloat(f32, rl.getRandomValue(100, 800)); buildings[i].y = screenHeight - 130 - buildings[i].height; buildings[i].x = @intToFloat(f32, -6000 + spacing); spacing += @floatToInt(i32, buildings[i].width); - buildColors[i] = rl.Color.init(@intCast(u8, rl.GetRandomValue(200, 240)), @intCast(u8, rl.GetRandomValue(200, 240)), @intCast(u8, rl.GetRandomValue(200, 250)), 255); + buildColors[i] = rl.Color.init(@intCast(u8, rl.getRandomValue(200, 240)), @intCast(u8, rl.getRandomValue(200, 240)), @intCast(u8, rl.getRandomValue(200, 250)), 255); } var camera = rl.Camera2D{ @@ -37,18 +37,18 @@ pub fn main() anyerror!void { .zoom = 1, }; - rl.SetTargetFPS(60); // Set our game to run at 60 frames-per-second + rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!rl.WindowShouldClose()) { // Detect window close button or ESC key + while (!rl.windowShouldClose()) { // Detect window close button or ESC key // Update //---------------------------------------------------------------------------------- // Player movement - if (rl.IsKeyDown(rl.KeyboardKey.KEY_RIGHT)) { + if (rl.isKeyDown(rl.KeyboardKey.KEY_RIGHT)) { player.x += 2; - } else if (rl.IsKeyDown(rl.KeyboardKey.KEY_LEFT)) { + } else if (rl.isKeyDown(rl.KeyboardKey.KEY_LEFT)) { player.x -= 2; } @@ -56,22 +56,22 @@ pub fn main() anyerror!void { camera.target = rl.Vector2.init(player.x + 20, player.y + 20); // Camera rotation controls - if (rl.IsKeyDown(rl.KeyboardKey.KEY_A)) { + if (rl.isKeyDown(rl.KeyboardKey.KEY_A)) { camera.rotation -= 1; - } else if (rl.IsKeyDown(rl.KeyboardKey.KEY_S)) { + } else if (rl.isKeyDown(rl.KeyboardKey.KEY_S)) { camera.rotation += 1; } // Limit camera rotation to 80 degrees (-40 to 40) - camera.rotation = rlm.Clamp(camera.rotation, -40, 40); + camera.rotation = rlm.clamp(camera.rotation, -40, 40); // Camera zoom controls - camera.zoom += rl.GetMouseWheelMove() * 0.05; + camera.zoom += rl.getMouseWheelMove() * 0.05; - camera.zoom = rlm.Clamp(camera.zoom, 0.1, 3.0); + camera.zoom = rlm.clamp(camera.zoom, 0.1, 3.0); // Camera reset (zoom and rotation) - if (rl.IsKeyPressed(rl.KeyboardKey.KEY_R)) { + if (rl.isKeyPressed(rl.KeyboardKey.KEY_R)) { camera.zoom = 1.0; camera.rotation = 0.0; } @@ -79,47 +79,47 @@ pub fn main() anyerror!void { // Draw //---------------------------------------------------------------------------------- - rl.BeginDrawing(); + rl.beginDrawing(); - rl.ClearBackground(rl.Color.RAYWHITE); + rl.clearBackground(rl.Color.RAYWHITE); camera.begin(); - rl.DrawRectangle(-6000, 320, 13000, 8000, rl.Color.DARKGRAY); + rl.drawRectangle(-6000, 320, 13000, 8000, rl.Color.DARKGRAY); for (buildings) |building, i| { - rl.DrawRectangleRec(building, buildColors[i]); + rl.drawRectangleRec(building, buildColors[i]); } - rl.DrawRectangleRec(player, rl.Color.RED); + rl.drawRectangleRec(player, rl.Color.RED); - rl.DrawLine(@floatToInt(c_int, camera.target.x), -screenHeight * 10, @floatToInt(c_int, camera.target.x), screenHeight * 10, rl.Color.GREEN); - rl.DrawLine(-screenWidth * 10, @floatToInt(c_int, camera.target.y), screenWidth * 10, @floatToInt(c_int, camera.target.y), rl.Color.GREEN); + rl.drawLine(@floatToInt(c_int, camera.target.x), -screenHeight * 10, @floatToInt(c_int, camera.target.x), screenHeight * 10, rl.Color.GREEN); + rl.drawLine(-screenWidth * 10, @floatToInt(c_int, camera.target.y), screenWidth * 10, @floatToInt(c_int, camera.target.y), rl.Color.GREEN); camera.end(); - rl.DrawText("SCREEN AREA", 640, 10, 20, rl.Color.RED); + rl.drawText("SCREEN AREA", 640, 10, 20, rl.Color.RED); - rl.DrawRectangle(0, 0, screenWidth, 5, rl.Color.RED); - rl.DrawRectangle(0, 5, 5, screenHeight - 10, rl.Color.RED); - rl.DrawRectangle(screenWidth - 5, 5, 5, screenHeight - 10, rl.Color.RED); - rl.DrawRectangle(0, screenHeight - 5, screenWidth, 5, rl.Color.RED); + rl.drawRectangle(0, 0, screenWidth, 5, rl.Color.RED); + rl.drawRectangle(0, 5, 5, screenHeight - 10, rl.Color.RED); + rl.drawRectangle(screenWidth - 5, 5, 5, screenHeight - 10, rl.Color.RED); + rl.drawRectangle(0, screenHeight - 5, screenWidth, 5, rl.Color.RED); - rl.DrawRectangle(10, 10, 250, 113, rl.Fade(rl.Color.SKYBLUE, 0.5)); - rl.DrawRectangleLines(10, 10, 250, 113, rl.Color.BLUE); + rl.drawRectangle(10, 10, 250, 113, rl.fade(rl.Color.SKYBLUE, 0.5)); + rl.drawRectangleLines(10, 10, 250, 113, rl.Color.BLUE); - rl.DrawText("Free 2d camera controls:", 20, 20, 10, rl.Color.BLACK); - rl.DrawText("- Right/Left to move Offset", 40, 40, 10, rl.Color.DARKGRAY); - rl.DrawText("- Mouse Wheel to Zoom in-out", 40, 60, 10, rl.Color.DARKGRAY); - rl.DrawText("- A / S to Rotate", 40, 80, 10, rl.Color.DARKGRAY); - rl.DrawText("- R to reset Zoom and Rotation", 40, 100, 10, rl.Color.DARKGRAY); + rl.drawText("Free 2d camera controls:", 20, 20, 10, rl.Color.BLACK); + rl.drawText("- Right/Left to move Offset", 40, 40, 10, rl.Color.DARKGRAY); + rl.drawText("- Mouse Wheel to Zoom in-out", 40, 60, 10, rl.Color.DARKGRAY); + rl.drawText("- A / S to Rotate", 40, 80, 10, rl.Color.DARKGRAY); + rl.drawText("- R to reset Zoom and Rotation", 40, 100, 10, rl.Color.DARKGRAY); - rl.EndDrawing(); + rl.endDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - rl.CloseWindow(); // Close window and OpenGL context + rl.closeWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- } diff --git a/examples/core/3d_camera_first_person.zig b/examples/core/3d_camera_first_person.zig index 815d519..4fdc091 100644 --- a/examples/core/3d_camera_first_person.zig +++ b/examples/core/3d_camera_first_person.zig @@ -1,7 +1,6 @@ // raylib-zig (c) Nikolas Wipper 2023 const rl = @import("raylib"); -const rlm = @import("raylib-math"); const MAX_COLUMNS = 20; @@ -11,7 +10,7 @@ pub fn main() anyerror!void { const screenWidth = 800; const screenHeight = 450; - rl.InitWindow(screenWidth, screenHeight, "raylib-zig [core] example - 3d camera first person"); + rl.initWindow(screenWidth, screenHeight, "raylib-zig [core] example - 3d camera first person"); var camera = rl.Camera3D{ .position = rl.Vector3.init(4, 2, 4), @@ -26,18 +25,18 @@ pub fn main() anyerror!void { var colors: [MAX_COLUMNS]rl.Color = undefined; for (heights) |_, i| { - heights[i] = @intToFloat(f32, rl.GetRandomValue(1, 12)); - positions[i] = rl.Vector3.init(@intToFloat(f32, rl.GetRandomValue(-15, 15)), heights[i] / 2.0, @intToFloat(f32, rl.GetRandomValue(-15, 15))); - colors[i] = rl.Color.init(@intCast(u8, rl.GetRandomValue(20, 255)), @intCast(u8, rl.GetRandomValue(10, 55)), 30, 255); + heights[i] = @intToFloat(f32, rl.getRandomValue(1, 12)); + positions[i] = rl.Vector3.init(@intToFloat(f32, rl.getRandomValue(-15, 15)), heights[i] / 2.0, @intToFloat(f32, rl.getRandomValue(-15, 15))); + colors[i] = rl.Color.init(@intCast(u8, rl.getRandomValue(20, 255)), @intCast(u8, rl.getRandomValue(10, 55)), 30, 255); } camera.setMode(rl.CameraMode.CAMERA_FIRST_PERSON); - rl.SetTargetFPS(60); // Set our game to run at 60 frames-per-second + rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!rl.WindowShouldClose()) { // Detect window close button or ESC key + while (!rl.windowShouldClose()) { // Detect window close button or ESC key // Update //---------------------------------------------------------------------------------- camera.update(); @@ -45,39 +44,39 @@ pub fn main() anyerror!void { // Draw //---------------------------------------------------------------------------------- - rl.BeginDrawing(); + rl.beginDrawing(); - rl.ClearBackground(rl.Color.RAYWHITE); + rl.clearBackground(rl.Color.RAYWHITE); camera.begin(); // Draw ground - rl.DrawPlane(rl.Vector3.init(0, 0, 0), rl.Vector2.init(32, 32), rl.Color.LIGHTGRAY); - rl.DrawCube(rl.Vector3.init(-16.0, 2.5, 0.0), 1.0, 5.0, 32.0, rl.Color.BLUE); // Draw a blue wall - rl.DrawCube(rl.Vector3.init(16.0, 2.5, 0.0), 1.0, 5.0, 32.0, rl.Color.LIME); // Draw a green wall - rl.DrawCube(rl.Vector3.init(0.0, 2.5, 16.0), 32.0, 5.0, 1.0, rl.Color.GOLD); // Draw a yellow wall + rl.drawPlane(rl.Vector3.init(0, 0, 0), rl.Vector2.init(32, 32), rl.Color.LIGHTGRAY); + rl.drawCube(rl.Vector3.init(-16.0, 2.5, 0.0), 1.0, 5.0, 32.0, rl.Color.BLUE); // Draw a blue wall + rl.drawCube(rl.Vector3.init(16.0, 2.5, 0.0), 1.0, 5.0, 32.0, rl.Color.LIME); // Draw a green wall + rl.drawCube(rl.Vector3.init(0.0, 2.5, 16.0), 32.0, 5.0, 1.0, rl.Color.GOLD); // Draw a yellow wall // Draw some cubes around for (heights) |height, i| { - rl.DrawCube(positions[i], 2.0, height, 2.0, colors[i]); - rl.DrawCubeWires(positions[i], 2.0, height, 2.0, rl.Color.MAROON); + rl.drawCube(positions[i], 2.0, height, 2.0, colors[i]); + rl.drawCubeWires(positions[i], 2.0, height, 2.0, rl.Color.MAROON); } camera.end(); - rl.DrawRectangle(10, 10, 220, 70, rl.Fade(rl.Color.SKYBLUE, 0.5)); - rl.DrawRectangleLines(10, 10, 220, 70, rl.Color.BLUE); + rl.drawRectangle(10, 10, 220, 70, rl.fade(rl.Color.SKYBLUE, 0.5)); + rl.drawRectangleLines(10, 10, 220, 70, rl.Color.BLUE); - rl.DrawText("First person camera default controls:", 20, 20, 10, rl.Color.BLACK); - rl.DrawText("- Move with keys: W, A, S, D", 40, 40, 10, rl.Color.DARKGRAY); - rl.DrawText("- Mouse move to look around", 40, 60, 10, rl.Color.DARKGRAY); + rl.drawText("First person camera default controls:", 20, 20, 10, rl.Color.BLACK); + rl.drawText("- Move with keys: W, A, S, D", 40, 40, 10, rl.Color.DARKGRAY); + rl.drawText("- Mouse move to look around", 40, 60, 10, rl.Color.DARKGRAY); - rl.EndDrawing(); + rl.endDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - rl.CloseWindow(); // Close window and OpenGL context + rl.closeWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- } diff --git a/examples/core/basic_window.zig b/examples/core/basic_window.zig index 821d44a..b562aff 100755 --- a/examples/core/basic_window.zig +++ b/examples/core/basic_window.zig @@ -8,13 +8,13 @@ pub fn main() anyerror!void { const screenWidth = 800; const screenHeight = 450; - rl.InitWindow(screenWidth, screenHeight, "raylib-zig [core] example - basic window"); + rl.initWindow(screenWidth, screenHeight, "raylib-zig [core] example - basic window"); - rl.SetTargetFPS(60); // Set our game to run at 60 frames-per-second + rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!rl.WindowShouldClose()) { // Detect window close button or ESC key + while (!rl.windowShouldClose()) { // Detect window close button or ESC key // Update //---------------------------------------------------------------------------------- // TODO: Update your variables here @@ -22,18 +22,18 @@ pub fn main() anyerror!void { // Draw //---------------------------------------------------------------------------------- - rl.BeginDrawing(); + rl.beginDrawing(); - rl.ClearBackground(rl.Color.WHITE); + rl.clearBackground(rl.Color.WHITE); - rl.DrawText("Congrats! You created your first window!", 190, 200, 20, rl.Color.LIGHTGRAY); + rl.drawText("Congrats! You created your first window!", 190, 200, 20, rl.Color.LIGHTGRAY); - rl.EndDrawing(); + rl.endDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - rl.CloseWindow(); // Close window and OpenGL context + rl.closeWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- } diff --git a/examples/core/input_keys.zig b/examples/core/input_keys.zig index 0fad8d5..89ec0ca 100755 --- a/examples/core/input_keys.zig +++ b/examples/core/input_keys.zig @@ -8,48 +8,48 @@ pub fn main() anyerror!void { const screenWidth = 800; const screenHeight = 450; - rl.InitWindow(screenWidth, screenHeight, "raylib-zig [core] example - keyboard input"); + rl.initWindow(screenWidth, screenHeight, "raylib-zig [core] example - keyboard input"); var ballPosition = rl.Vector2.init(screenWidth / 2, screenHeight / 2); - rl.SetTargetFPS(60); // Set our game to run at 60 frames-per-second + rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!rl.WindowShouldClose()) { // Detect window close button or ESC key + while (!rl.windowShouldClose()) { // Detect window close button or ESC key // Update //---------------------------------------------------------------------------------- - if (rl.IsKeyDown(rl.KeyboardKey.KEY_RIGHT)) { + if (rl.isKeyDown(rl.KeyboardKey.KEY_RIGHT)) { ballPosition.x += 2.0; } - if (rl.IsKeyDown(rl.KeyboardKey.KEY_LEFT)) { + if (rl.isKeyDown(rl.KeyboardKey.KEY_LEFT)) { ballPosition.x -= 2.0; } - if (rl.IsKeyDown(rl.KeyboardKey.KEY_UP)) { + if (rl.isKeyDown(rl.KeyboardKey.KEY_UP)) { ballPosition.y -= 2.0; } - if (rl.IsKeyDown(rl.KeyboardKey.KEY_DOWN)) { + if (rl.isKeyDown(rl.KeyboardKey.KEY_DOWN)) { ballPosition.y += 2.0; } //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- - rl.BeginDrawing(); + rl.beginDrawing(); - rl.ClearBackground(rl.Color.RAYWHITE); + rl.clearBackground(rl.Color.RAYWHITE); - rl.DrawText("move the ball with arrow keys", 10, 10, 20, rl.Color.DARKGRAY); + rl.drawText("move the ball with arrow keys", 10, 10, 20, rl.Color.DARKGRAY); - rl.DrawCircleV(ballPosition, 50, rl.Color.MAROON); + rl.drawCircleV(ballPosition, 50, rl.Color.MAROON); - rl.EndDrawing(); + rl.endDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - rl.CloseWindow(); // Close window and OpenGL context + rl.closeWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- } diff --git a/examples/core/input_mouse.zig b/examples/core/input_mouse.zig index fca980c..eb6a0e0 100755 --- a/examples/core/input_mouse.zig +++ b/examples/core/input_mouse.zig @@ -8,48 +8,48 @@ pub fn main() anyerror!void { const screenWidth = 800; const screenHeight = 450; - rl.InitWindow(screenWidth, screenHeight, "raylib-zig [core] example - mouse input"); + rl.initWindow(screenWidth, screenHeight, "raylib-zig [core] example - mouse input"); var ballPosition = rl.Vector2.init(-100, -100); var ballColor = rl.Color.DARKBLUE; - rl.SetTargetFPS(60); // Set our game to run at 60 frames-per-second + rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!rl.WindowShouldClose()) { // Detect window close button or ESC key + while (!rl.windowShouldClose()) { // Detect window close button or ESC key // Update //---------------------------------------------------------------------------------- - ballPosition = rl.GetMousePosition(); - ballPosition.x = @intToFloat(f32, rl.GetMouseX()); - ballPosition.y = @intToFloat(f32, rl.GetMouseY()); + ballPosition = rl.getMousePosition(); + ballPosition.x = @intToFloat(f32, rl.getMouseX()); + ballPosition.y = @intToFloat(f32, rl.getMouseY()); - if (rl.IsMouseButtonPressed(rl.MouseButton.MOUSE_BUTTON_LEFT)) { + if (rl.isMouseButtonPressed(rl.MouseButton.MOUSE_BUTTON_LEFT)) { ballColor = rl.Color.MAROON; - } else if (rl.IsMouseButtonPressed(rl.MouseButton.MOUSE_BUTTON_MIDDLE)) { + } else if (rl.isMouseButtonPressed(rl.MouseButton.MOUSE_BUTTON_MIDDLE)) { ballColor = rl.Color.LIME; - } else if (rl.IsMouseButtonPressed(rl.MouseButton.MOUSE_BUTTON_RIGHT)) { + } else if (rl.isMouseButtonPressed(rl.MouseButton.MOUSE_BUTTON_RIGHT)) { ballColor = rl.Color.DARKBLUE; } //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- - rl.BeginDrawing(); + rl.beginDrawing(); - rl.ClearBackground(rl.Color.RAYWHITE); + rl.clearBackground(rl.Color.RAYWHITE); - rl.DrawCircle(@floatToInt(c_int, ballPosition.x), @floatToInt(c_int, ballPosition.y), 50, ballColor); + rl.drawCircle(@floatToInt(c_int, ballPosition.x), @floatToInt(c_int, ballPosition.y), 50, ballColor); //DrawCircleV(ballPosition, 40, ballColor); - rl.DrawText("move ball with mouse and click mouse button to change color", 10, 10, 20, rl.Color.DARKGRAY); + rl.drawText("move ball with mouse and click mouse button to change color", 10, 10, 20, rl.Color.DARKGRAY); - rl.EndDrawing(); + rl.endDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - rl.CloseWindow(); // Close window and OpenGL context + rl.closeWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- } diff --git a/examples/core/input_mouse_wheel.zig b/examples/core/input_mouse_wheel.zig index a7b9580..9ca5777 100755 --- a/examples/core/input_mouse_wheel.zig +++ b/examples/core/input_mouse_wheel.zig @@ -8,38 +8,38 @@ pub fn main() anyerror!void { const screenWidth = 800; const screenHeight = 450; - rl.InitWindow(screenWidth, screenHeight, "raylib-zig [core] example - basic window"); + rl.initWindow(screenWidth, screenHeight, "raylib-zig [core] example - basic window"); var boxPositionY: f32 = screenHeight / 2 - 40; var scrollSpeed: f32 = 4; // Scrolling speed in pixels - rl.SetTargetFPS(60); // Set our game to run at 60 frames-per-second + rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!rl.WindowShouldClose()) { // Detect window close button or ESC key + while (!rl.windowShouldClose()) { // Detect window close button or ESC key // Update //---------------------------------------------------------------------------------- - boxPositionY -= (rl.GetMouseWheelMove() * scrollSpeed); + boxPositionY -= (rl.getMouseWheelMove() * scrollSpeed); //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- - rl.BeginDrawing(); + rl.beginDrawing(); - rl.ClearBackground(rl.Color.WHITE); + rl.clearBackground(rl.Color.WHITE); - rl.DrawRectangle(screenWidth / 2 - 40, @floatToInt(c_int, boxPositionY), 80, 80, rl.Color.MAROON); + rl.drawRectangle(screenWidth / 2 - 40, @floatToInt(c_int, boxPositionY), 80, 80, rl.Color.MAROON); - rl.DrawText("Use mouse wheel to move the cube up and down!", 10, 10, 20, rl.Color.GRAY); - rl.DrawText(rl.TextFormat("Box position Y: %03i", @floatToInt(c_int, boxPositionY)), 10, 40, 20, rl.Color.LIGHTGRAY); + rl.drawText("Use mouse wheel to move the cube up and down!", 10, 10, 20, rl.Color.GRAY); + //rl.drawText(rl.textFormat("Box position Y: %03i", .{@floatToInt(c_int, boxPositionY)}), 10, 40, 20, rl.Color.LIGHTGRAY); - rl.EndDrawing(); + rl.endDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - rl.CloseWindow(); // Close window and OpenGL context + rl.closeWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- } diff --git a/examples/core/input_multitouch.zig b/examples/core/input_multitouch.zig index 2b86b85..4549ece 100755 --- a/examples/core/input_multitouch.zig +++ b/examples/core/input_multitouch.zig @@ -8,7 +8,7 @@ pub fn main() anyerror!void { const screenWidth = 800; const screenHeight = 450; - rl.InitWindow(screenWidth, screenHeight, "raylib-zig [core] example - basic window"); + rl.initWindow(screenWidth, screenHeight, "raylib-zig [core] example - basic window"); var ballPosition = rl.Vector2.init(-100, -100); var ballColor = rl.Color.BEIGE; @@ -16,34 +16,34 @@ pub fn main() anyerror!void { var touchCounter: f32 = 0; var touchPosition = rl.Vector2.init(0, 0); - rl.SetTargetFPS(60); // Set our game to run at 60 frames-per-second + rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!rl.WindowShouldClose()) { // Detect window close button or ESC key + while (!rl.windowShouldClose()) { // Detect window close button or ESC key // Update //---------------------------------------------------------------------------------- - ballPosition = rl.GetMousePosition(); + ballPosition = rl.getMousePosition(); ballColor = rl.Color.BEIGE; - if (rl.IsMouseButtonDown(rl.MouseButton.MOUSE_BUTTON_LEFT)) { + if (rl.isMouseButtonDown(rl.MouseButton.MOUSE_BUTTON_LEFT)) { ballColor = rl.Color.MAROON; } - if (rl.IsMouseButtonDown(rl.MouseButton.MOUSE_BUTTON_MIDDLE)) { + if (rl.isMouseButtonDown(rl.MouseButton.MOUSE_BUTTON_MIDDLE)) { ballColor = rl.Color.LIME; } - if (rl.IsMouseButtonDown(rl.MouseButton.MOUSE_BUTTON_RIGHT)) { + if (rl.isMouseButtonDown(rl.MouseButton.MOUSE_BUTTON_RIGHT)) { ballColor = rl.Color.DARKBLUE; } - if (rl.IsMouseButtonPressed(rl.MouseButton.MOUSE_BUTTON_LEFT)) { + if (rl.isMouseButtonPressed(rl.MouseButton.MOUSE_BUTTON_LEFT)) { touchCounter = 10; } - if (rl.IsMouseButtonPressed(rl.MouseButton.MOUSE_BUTTON_MIDDLE)) { + if (rl.isMouseButtonPressed(rl.MouseButton.MOUSE_BUTTON_MIDDLE)) { touchCounter = 10; } - if (rl.IsMouseButtonPressed(rl.MouseButton.MOUSE_BUTTON_RIGHT)) { + if (rl.isMouseButtonPressed(rl.MouseButton.MOUSE_BUTTON_RIGHT)) { touchCounter = 10; } @@ -54,35 +54,35 @@ pub fn main() anyerror!void { // Draw //---------------------------------------------------------------------------------- - rl.BeginDrawing(); + rl.beginDrawing(); - rl.ClearBackground(rl.Color.RAYWHITE); + rl.clearBackground(rl.Color.RAYWHITE); const nums = [_]i32{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for (nums) |i| { - touchPosition = rl.GetTouchPosition(i); // Get the touch point + touchPosition = rl.getTouchPosition(i); // Get the touch point // Make sure point is not (-1,-1) as this means there is no touch for it if ((touchPosition.x >= 0) and (touchPosition.y >= 0)) { // Draw circle and touch index number - rl.DrawCircleV(touchPosition, 34, rl.Color.ORANGE); - rl.DrawText(rl.TextFormat("%d", i), @floatToInt(c_int, touchPosition.x) - 10, @floatToInt(c_int, touchPosition.y) - 70, 40, rl.Color.BLACK); + rl.drawCircleV(touchPosition, 34, rl.Color.ORANGE); + //rl.drawText(rl.textFormat("%d", .{i}), @floatToInt(c_int, touchPosition.x) - 10, @floatToInt(c_int, touchPosition.y) - 70, 40, rl.Color.BLACK); } } // Draw the normal mouse location - rl.DrawCircleV(ballPosition, 30 + (touchCounter * 3), ballColor); + rl.drawCircleV(ballPosition, 30 + (touchCounter * 3), ballColor); - rl.DrawText("move ball with mouse and click mouse button to change color", 10, 10, 20, rl.Color.DARKGRAY); - rl.DrawText("touch the screen at multiple locations to get multiple balls", 10, 30, 20, rl.Color.DARKGRAY); + rl.drawText("move ball with mouse and click mouse button to change color", 10, 10, 20, rl.Color.DARKGRAY); + rl.drawText("touch the screen at multiple locations to get multiple balls", 10, 30, 20, rl.Color.DARKGRAY); - rl.EndDrawing(); + rl.endDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - rl.CloseWindow(); // Close window and OpenGL context + rl.closeWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- } diff --git a/examples/shaders/texture_outline.zig b/examples/shaders/texture_outline.zig index cfea2be..84652db 100644 --- a/examples/shaders/texture_outline.zig +++ b/examples/shaders/texture_outline.zig @@ -12,67 +12,67 @@ pub fn main() anyerror!void { const screenWidth = 800; const screenHeight = 450; - rl.InitWindow(screenWidth, screenHeight, "raylib [shaders] example - Apply an outline to a texture"); + rl.initWindow(screenWidth, screenHeight, "raylib [shaders] example - Apply an outline to a texture"); - const texture: rl.Texture2D = rl.LoadTexture("resources/textures/fudesumi.png"); + const texture: rl.Texture2D = rl.loadTexture("resources/textures/fudesumi.png"); - const shdrOutline: rl.Shader = rl.LoadShader(0, rl.TextFormat("resources/shaders/glsl330/outline.fs", @intCast(c_int, 330))); + const shdrOutline: rl.Shader = rl.loadShader(null, "resources/shaders/glsl330/outline.fs"); var outlineSize: f32 = 2.0; const outlineColor = [4]f32{ 1.0, 0.0, 0.0, 1.0 }; // Normalized RED color const textureSize = rl.Vector2.init(@intToFloat(f32, texture.width), @intToFloat(f32, texture.height)); // Get shader locations - const outlineSizeLoc = rl.GetShaderLocation(shdrOutline, "outlineSize"); - const outlineColorLoc = rl.GetShaderLocation(shdrOutline, "outlineColor"); - const textureSizeLoc = rl.GetShaderLocation(shdrOutline, "textureSize"); + const outlineSizeLoc = rl.getShaderLocation(shdrOutline, "outlineSize"); + const outlineColorLoc = rl.getShaderLocation(shdrOutline, "outlineColor"); + const textureSizeLoc = rl.getShaderLocation(shdrOutline, "textureSize"); // Set shader values (they can be changed later) - rl.SetShaderValue(shdrOutline, outlineSizeLoc, &outlineSize, @enumToInt(rl.ShaderUniformDataType.SHADER_UNIFORM_FLOAT)); - rl.SetShaderValue(shdrOutline, outlineColorLoc, &outlineColor, @enumToInt(rl.ShaderUniformDataType.SHADER_UNIFORM_VEC4)); - rl.SetShaderValue(shdrOutline, textureSizeLoc, &textureSize, @enumToInt(rl.ShaderUniformDataType.SHADER_UNIFORM_VEC2)); + rl.setShaderValue(shdrOutline, outlineSizeLoc, &outlineSize, @enumToInt(rl.ShaderUniformDataType.SHADER_UNIFORM_FLOAT)); + rl.setShaderValue(shdrOutline, outlineColorLoc, &outlineColor, @enumToInt(rl.ShaderUniformDataType.SHADER_UNIFORM_VEC4)); + rl.setShaderValue(shdrOutline, textureSizeLoc, &textureSize, @enumToInt(rl.ShaderUniformDataType.SHADER_UNIFORM_VEC2)); - rl.SetTargetFPS(60); // Set our game to run at 60 frames-per-second + rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!rl.WindowShouldClose()) { // Detect window close button or ESC key + while (!rl.windowShouldClose()) { // Detect window close button or ESC key // Update //---------------------------------------------------------------------------------- - outlineSize += rl.GetMouseWheelMove(); + outlineSize += rl.getMouseWheelMove(); if (outlineSize < 1.0) outlineSize = 1.0; - rl.SetShaderValue(shdrOutline, outlineSizeLoc, &outlineSize, @enumToInt(rl.ShaderUniformDataType.SHADER_UNIFORM_FLOAT)); + rl.setShaderValue(shdrOutline, outlineSizeLoc, &outlineSize, @enumToInt(rl.ShaderUniformDataType.SHADER_UNIFORM_FLOAT)); //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- - rl.BeginDrawing(); + rl.beginDrawing(); - rl.ClearBackground(rl.Color.RAYWHITE); + rl.clearBackground(rl.Color.RAYWHITE); - rl.BeginShaderMode(shdrOutline); + rl.beginShaderMode(shdrOutline); - rl.DrawTexture(texture, @divFloor(rl.GetScreenWidth(), 2) - @divFloor(texture.width, 2), -30, rl.Color.WHITE); + rl.drawTexture(texture, @divFloor(rl.getScreenWidth(), 2) - @divFloor(texture.width, 2), -30, rl.Color.WHITE); - rl.EndShaderMode(); + rl.endShaderMode(); - rl.DrawText("Shader-based\ntexture\noutline", 10, 10, 20, rl.Color.GRAY); + rl.drawText("Shader-based\ntexture\noutline", 10, 10, 20, rl.Color.GRAY); - rl.DrawText(rl.TextFormat("Outline size: %i px", @floatToInt(i32, outlineSize)), 10, 120, 20, rl.Color.MAROON); + //rl.drawText(rl.textFormat("Outline size: %i px", @floatToInt(i32, outlineSize)), 10, 120, 20, rl.Color.MAROON); - rl.DrawFPS(710, 10); + rl.drawFPS(710, 10); - rl.EndDrawing(); + rl.endDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - rl.UnloadTexture(texture); - rl.UnloadShader(shdrOutline); + rl.unloadTexture(texture); + rl.unloadShader(shdrOutline); - rl.CloseWindow(); // Close window and OpenGL context + rl.closeWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- } diff --git a/examples/textures/sprite_anim.zig b/examples/textures/sprite_anim.zig index 137ce93..5e07893 100644 --- a/examples/textures/sprite_anim.zig +++ b/examples/textures/sprite_anim.zig @@ -12,11 +12,11 @@ pub fn main() anyerror!void { const screenWidth = 800; const screenHeight = 450; - rl.InitAudioDevice(); // Initialize audio device - rl.InitWindow(screenWidth, screenHeight, "raylib [texture] example - sprite anim"); + rl.initAudioDevice(); // Initialize audio device + rl.initWindow(screenWidth, screenHeight, "raylib [texture] example - sprite anim"); // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - const scarfy: rl.Texture2D = rl.LoadTexture("resources/textures/scarfy.png"); // Texture loading + const scarfy: rl.Texture2D = rl.loadTexture("resources/textures/scarfy.png"); // Texture loading const position = rl.Vector2.init(350.0, 280.0); var frameRec = rl.Rectangle{ .x = 0.0, .y = 0.0, .width = @intToFloat(f32, @divFloor(scarfy.width, 6)), .height = @intToFloat(f32, scarfy.height) }; @@ -25,11 +25,11 @@ pub fn main() anyerror!void { var framesCounter: u8 = 0; var framesSpeed: u8 = 8; // Number of spritesheet frames shown by second - rl.SetTargetFPS(60); // Set our game to run at 60 frames-per-second + rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!rl.WindowShouldClose()) { // Detect window close button or ESC key + while (!rl.windowShouldClose()) { // Detect window close button or ESC key // Update //---------------------------------------------------------------------------------- framesCounter += 1; @@ -44,9 +44,9 @@ pub fn main() anyerror!void { } // Control frames speed - if (rl.IsKeyPressed(rl.KeyboardKey.KEY_RIGHT)) { + if (rl.isKeyPressed(rl.KeyboardKey.KEY_RIGHT)) { framesSpeed += 1; - } else if (rl.IsKeyPressed(rl.KeyboardKey.KEY_LEFT)) { + } else if (rl.isKeyPressed(rl.KeyboardKey.KEY_LEFT)) { framesSpeed -= 1; } @@ -60,37 +60,37 @@ pub fn main() anyerror!void { // Draw //---------------------------------------------------------------------------------- - rl.BeginDrawing(); + rl.beginDrawing(); - rl.ClearBackground(rl.Color.RAYWHITE); + rl.clearBackground(rl.Color.RAYWHITE); - rl.DrawTexture(scarfy, 15, 40, rl.Color.WHITE); - rl.DrawRectangleLines(15, 40, scarfy.width, scarfy.height, rl.Color.LIME); - rl.DrawRectangleLines(15 + @floatToInt(i32, frameRec.x), 40 + @floatToInt(i32, frameRec.y), @floatToInt(i32, frameRec.width), @floatToInt(i32, frameRec.height), rl.Color.RED); + rl.drawTexture(scarfy, 15, 40, rl.Color.WHITE); + rl.drawRectangleLines(15, 40, scarfy.width, scarfy.height, rl.Color.LIME); + rl.drawRectangleLines(15 + @floatToInt(i32, frameRec.x), 40 + @floatToInt(i32, frameRec.y), @floatToInt(i32, frameRec.width), @floatToInt(i32, frameRec.height), rl.Color.RED); - rl.DrawText("FRAME SPEED: ", 165, 210, 10, rl.Color.DARKGRAY); - rl.DrawText(rl.TextFormat("%02i FPS", framesSpeed), 575, 210, 10, rl.Color.DARKGRAY); - rl.DrawText("PRESS RIGHT/LEFT KEYS to CHANGE SPEED!", 290, 240, 10, rl.Color.DARKGRAY); + rl.drawText("FRAME SPEED: ", 165, 210, 10, rl.Color.DARKGRAY); + //rl.drawText(rl.textFormat("%02i FPS", .{framesSpeed}), 575, 210, 10, rl.Color.DARKGRAY); + rl.drawText("PRESS RIGHT/LEFT KEYS to CHANGE SPEED!", 290, 240, 10, rl.Color.DARKGRAY); for ([_]u32{0} ** MAX_FRAME_SPEED) |_, i| { if (i < framesSpeed) { - rl.DrawRectangle(250 + 21 * @intCast(c_int, i), 205, 20, 20, rl.Color.RED); + rl.drawRectangle(250 + 21 * @intCast(c_int, i), 205, 20, 20, rl.Color.RED); } - rl.DrawRectangleLines(250 + 21 * @intCast(c_int, i), 205, 20, 20, rl.Color.MAROON); + rl.drawRectangleLines(250 + 21 * @intCast(c_int, i), 205, 20, 20, rl.Color.MAROON); } - rl.DrawTextureRec(scarfy, frameRec, position, rl.Color.WHITE); // Draw part of the texture + rl.drawTextureRec(scarfy, frameRec, position, rl.Color.WHITE); // Draw part of the texture - rl.DrawText("(c) Scarfy sprite by Eiden Marsal", screenWidth - 200, screenHeight - 20, 10, rl.Color.GRAY); + rl.drawText("(c) Scarfy sprite by Eiden Marsal", screenWidth - 200, screenHeight - 20, 10, rl.Color.GRAY); - rl.EndDrawing(); + rl.endDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - rl.UnloadTexture(scarfy); // Texture unloading + rl.unloadTexture(scarfy); // Texture unloading - rl.CloseWindow(); // Close window and OpenGL context + rl.closeWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- } diff --git a/lib/generate_functions.py b/lib/generate_functions.py index 39f866b..0b979cf 100644 --- a/lib/generate_functions.py +++ b/lib/generate_functions.py @@ -15,6 +15,12 @@ C_TO_ZIG = { "unsigned int": "c_uint", } +ZIGGIFY = { + "c_int": "i32", + "c_long": "i64", + "c_uint": "u32" +} + # Some c types have a different sizes on different systems # and zig knows that so we tell it to get the system specific size for us @@ -29,6 +35,51 @@ def c_to_zig_type(c: str) -> str: return const + c +def ziggify_type(name: str, t: str) -> str: + NO_STRINGS = ["data", "fileData", "compData"] + + single = ["value", "ptr", "bytesRead", "compDataSize", "dataSize", "outputSize", "camera", "collisionPoint", "image", "colorCount", "dst", "texture", "srcPtr", "dstPtr", "count", "codepointSize", "utf8Size", "position", "mesh", "materialCount", "material", "model", "animCount", "wave", "v1", "v2", "outAxis", "outAngle"] + multi = ["data", "compData", "points", "frames", "fileData", "colors", "pixels", "fontChars", "chars", "recs", "codepoints", "textList", "transforms", "animations", "samples"] + + if t.startswith("[*c]") and name not in single and name not in multi: + if (t == "[*c]const u8" or t == "[*c]u8") and name not in NO_STRINGS: # strings are multis + pass + else: + raise ValueError(f"{t} {name} not classified") + + pre = "" + while t.startswith("[*c]"): + t = t[4:] + if name in single: + pre += "*" + else: + pre += "[]" + + if t in ZIGGIFY: + t = ZIGGIFY[t] + + return pre + t + + +def add_namespace_to_type(t: str) -> str: + pre = "" + while t.startswith("[*c]"): + t = t[4:] + pre += "[*c]" + + if t.startswith("const "): + t = t[6:] + pre += "const " + + if t[0].isupper(): + t = "rl." + t + + if t in ["float3", "float16"]: + t = "rlm." + t + + return pre + t + + def fix_pointer(name: str, t: str): pre = "" while name.startswith("*"): @@ -63,9 +114,14 @@ def fix_enums(arg_name, arg_type, func_name): return arg_type -def parse_header(header_name: str, output_file: str, prefix: str, *args: str): +def convert_name_case(name): + return name[:1].lower() + name[1:] if name else '' + + +def parse_header(header_name: str, output_file: str, ext_file: str, prefix: str, *args: str): header = open(header_name, mode="r") - zig_heads = [] + ext_heads = [] + zig_funcs = [] zig_types = set() leftover = "" @@ -112,37 +168,65 @@ def parse_header(header_name: str, output_file: str, prefix: str, *args: str): return_type = c_to_zig_type(return_type) func_name, return_type = fix_pointer(func_name, return_type) + zig_c_arguments = [] zig_arguments = [] + zig_call_args = [] for arg in arguments.split(", "): if arg == "void": break if arg == "...": - zig_arguments.append("...") + zig_c_arguments.append("...") continue # everything but the last element (for stuff like "const Vector3") arg_type = " ".join(arg.split(" ")[0:-1]) arg_name = arg.split(" ")[-1] # last element should be the name arg_type = fix_enums(arg_name, arg_type, func_name) + if arg_name == "type": arg_name = "ty" + arg_type = c_to_zig_type(arg_type) arg_name, arg_type = fix_pointer(arg_name, arg_type) + zig_type = ziggify_type(arg_name, arg_type) - zig_types.add(arg_type.replace("const ", "")) - zig_arguments.append(arg_name + ": " + arg_type) # put everything together + is_rl_type = arg_type[0].isupper() + + zig_types.add(arg_type) + zig_c_arguments.append(arg_name + ": " + add_namespace_to_type(arg_type)) # put everything together + zig_arguments.append(arg_name + ": " + zig_type) + if arg_type == zig_type: + zig_call_args.append(arg_name) + else: + if arg_type.startswith("[*c]"): + zig_call_args.append(f"@ptrCast({arg_type}, {arg_name})") + else: + zig_call_args.append(f"@as({arg_type}, {arg_name})") + zig_c_arguments = ", ".join(zig_c_arguments) + + ext_ret = add_namespace_to_type(return_type) + ext_heads.append(f"pub extern \"c\" fn {func_name}({zig_c_arguments}) {ext_ret};") + + zig_name = convert_name_case(func_name) + + # Todo: ziggify return type zig_arguments = ", ".join(zig_arguments) - zig_heads.append("pub extern fn " + func_name + "(" + zig_arguments + ") " + return_type + ";") + zig_call_args = ", ".join(zig_call_args) - prelude = str() + if func_name in ["TextFormat", "LoadShader", "LoadShaderFromMemory"]: + continue + zig_funcs.append(f"pub fn {zig_name}({zig_arguments}) {return_type}" + " {\n " + ("return " if return_type != "void" else "") + f"cdef.{func_name}({zig_call_args});" + "\n}") - for imp in args: - prelude += open(imp, mode="r").read() + prelude = open(args[0], mode="r").read() + ext_prelude = open(args[1], mode="r").read() + + ext_header = open(ext_file, mode="w") + print(ext_prelude, file=ext_header) + print("\n".join(ext_heads), file=ext_header) zig_header = open(output_file, mode="w") print(prelude, file=zig_header) - - print("\n".join(zig_heads), file=zig_header) + print("\n\n".join(zig_funcs), file=zig_header) if __name__ == "__main__": - parse_header("../raylib/src/raylib.h", "raylib-zig.zig", "RLAPI ", "raylib-zig-types.zig") - parse_header("../raylib/src/raymath.h", "raylib-zig-math.zig", "RMAPI ", "raylib-zig-math-prelude.zig") + parse_header("../raylib/src/raylib.h", "raylib-zig.zig", "raylib-zig-ext.zig", "RLAPI ", "preludes/raylib-zig-prelude.zig", "preludes/raylib-zig-ext-prelude.zig") + parse_header("../raylib/src/raymath.h", "raylib-zig-math.zig", "raylib-zig-math-ext.zig", "RMAPI ", "preludes/raylib-zig-math-prelude.zig", "preludes/raylib-zig-math-ext-prelude.zig") diff --git a/lib/preludes/raylib-zig-ext-prelude.zig b/lib/preludes/raylib-zig-ext-prelude.zig new file mode 100644 index 0000000..333df26 --- /dev/null +++ b/lib/preludes/raylib-zig-ext-prelude.zig @@ -0,0 +1,3 @@ +// raylib-zig (c) Nikolas Wipper 2023 + +const rl = @import("raylib-zig.zig"); diff --git a/lib/preludes/raylib-zig-math-ext-prelude.zig b/lib/preludes/raylib-zig-math-ext-prelude.zig new file mode 100644 index 0000000..2f06d97 --- /dev/null +++ b/lib/preludes/raylib-zig-math-ext-prelude.zig @@ -0,0 +1,4 @@ +// raylib-zig (c) Nikolas Wipper 2023 + +const rl = @import("raylib-zig.zig"); +const rlm = @import("raylib-zig-math.zig"); diff --git a/lib/raylib-zig-math-prelude.zig b/lib/preludes/raylib-zig-math-prelude.zig similarity index 87% rename from lib/raylib-zig-math-prelude.zig rename to lib/preludes/raylib-zig-math-prelude.zig index d382a48..a8b7098 100644 --- a/lib/raylib-zig-math-prelude.zig +++ b/lib/preludes/raylib-zig-math-prelude.zig @@ -1,6 +1,7 @@ // raylib-zig (c) Nikolas Wipper 2023 const rl = @import("raylib-zig.zig"); +const cdef = @import("raylib-zig-math-ext.zig"); const Matrix = rl.Matrix; const Quaternion = rl.Quaternion; diff --git a/lib/raylib-zig-types.zig b/lib/preludes/raylib-zig-prelude.zig similarity index 87% rename from lib/raylib-zig-types.zig rename to lib/preludes/raylib-zig-prelude.zig index d5be90d..36f1c30 100755 --- a/lib/raylib-zig-types.zig +++ b/lib/preludes/raylib-zig-prelude.zig @@ -106,59 +106,59 @@ pub const Image = extern struct { format: PixelFormat, pub fn init(fileName: [*c]const u8) Image { - return rl.LoadImage(fileName); + return rl.loadImage(fileName); } pub fn initRaw(fileName: *const []u8, width: c_int, height: c_int, format: PixelFormat, headerSize: c_int) Image { - return rl.LoadImageRaw(@as([*c]const u8, fileName), width, height, format, headerSize); + return rl.loadImageRaw(fileName, width, height, format, headerSize); } pub fn initText(text: *const []u8, fontSize: c_int, color: Color) Image { - return rl.ImageText(@as([*c]const u8, text), fontSize, color); + return rl.imageText(text, fontSize, color); } pub fn initTextEx(font: Font, text: *const []u8, fontSize: f32, spacing: f32, tint: Color) Image { - return rl.ImageTextEx(font, @as([*c]const u8, text), fontSize, spacing, tint); + return rl.imageTextEx(font, text, fontSize, spacing, tint); } pub fn copy(image: Image) Image { - return rl.ImageCopy(image); + return rl.imageCopy(image); } pub fn copyRec(image: Image, rec: Rectangle) Image { - return rl.ImageFromImage(image, rec); + return rl.imageFromImage(image, rec); } pub fn genColor(width: c_int, height: c_int, color: Color) Image { - return rl.GenImageColor(width, height, color); + return rl.genImageColor(width, height, color); } pub fn genGradientV(width: c_int, height: c_int, top: Color, bottom: Color) Image { - return rl.GenImageGradientV(width, height, top, bottom); + return rl.genImageGradientV(width, height, top, bottom); } pub fn genGradientH(width: c_int, height: c_int, left: Color, right: Color) Image { - return rl.GenImageGradientH(width, height, left, right); + return rl.genImageGradientH(width, height, left, right); } pub fn genGradientRadial(width: c_int, height: c_int, density: f32, inner: Color, outer: Color) Image { - return rl.GenImageGradientRadial(width, height, density, inner, outer); + return rl.genImageGradientRadial(width, height, density, inner, outer); } pub fn genChecked(width: c_int, height: c_int, checksX: c_int, checksY: c_int, col1: Color, col2: Color) Image { - return rl.GenImageChecked(width, height, checksX, checksY, col1, col2); + return rl.genImageChecked(width, height, checksX, checksY, col1, col2); } pub fn genWhiteNoise(width: c_int, height: c_int, factor: f32) Image { - return rl.GenImageWhiteNoise(width, height, factor); + return rl.genImageWhiteNoise(width, height, factor); } pub fn genCellular(width: c_int, height: c_int, tileSize: c_int) Image { - return rl.GenImageCellular(width, height, tileSize); + return rl.genImageCellular(width, height, tileSize); } pub fn useAsWindowIcon(self: Image) void { - rl.SetWindowIcon(self); + rl.setWindowIcon(self); } }; @@ -178,11 +178,11 @@ pub const RenderTexture = extern struct { depth: Texture, pub fn begin(self: RenderTexture2D) void { - rl.BeginTextureMode(self); + rl.beginTextureMode(self); } pub fn end(_: RenderTexture2D) void { - rl.EndTextureMode(); + rl.endTextureMode(); } }; pub const RenderTexture2D = RenderTexture; @@ -221,23 +221,23 @@ pub const Camera3D = extern struct { projection: CameraProjection, pub fn begin(self: Camera3D) void { - rl.BeginMode3D(self); + rl.beginMode3D(self); } pub fn update(self: *Camera3D) void { - rl.UpdateCamera(@as([*c]Camera3D, self)); + rl.updateCamera(self); } pub fn getMatrix(self: Camera3D) Matrix { - return rl.GetCameraMatrix(self); + return rl.getCameraMatrix(self); } pub fn setMode(self: Camera3D, mode: CameraMode) void { - rl.SetCameraMode(self, mode); + rl.setCameraMode(self, mode); } pub fn end(_: Camera3D) void { - rl.EndMode3D(); + rl.endMode3D(); } }; pub const Camera = Camera3D; @@ -249,15 +249,15 @@ pub const Camera2D = extern struct { zoom: f32, pub fn begin(self: Camera2D) void { - rl.BeginMode2D(self); + rl.beginMode2D(self); } pub fn getMatrix(self: Camera2D) Matrix { - return rl.GetCameraMatrix2D(self); + return rl.getCameraMatrix2D(self); } pub fn end(_: Camera2D) void { - rl.EndMode2D(); + rl.endMode2D(); } }; @@ -279,11 +279,11 @@ pub const Mesh = extern struct { vboId: [*c]c_uint, pub fn draw(self: Mesh, material: Material, transform: Matrix) void { - rl.DrawMesh(self, material, transform); + rl.drawMesh(self, material, transform); } pub fn drawInstanced(self: Mesh, material: Material, transforms: []const Matrix) void { - rl.DrawMeshInstanced(self, material, @as([*c]const Matrix, transforms), transforms.len); + rl.drawMeshInstanced(self, material, transforms, transforms.len); } }; @@ -292,11 +292,11 @@ pub const Shader = extern struct { locs: [*c]c_int, pub fn activate(self: Shader) void { - rl.BeginShaderMode(self); + rl.beginShaderMode(self); } pub fn deactivate(_: Shader) void { - rl.EndShaderMode(); + rl.endShaderMode(); } }; @@ -335,27 +335,27 @@ pub const Model = extern struct { bindPose: [*c]Transform, pub fn init(fileName: [*c]const u8) Model { - return rl.LoadModel(fileName); + return rl.loadModel(fileName); } pub fn initFromMesh(mesh: Mesh) Model { - return rl.LoadModelFromMesh(mesh); + return rl.loadModelFromMesh(mesh); } pub fn draw(self: Mesh, position: Vector3, scale: f32, tint: Color) void { - return rl.DrawMesh(self, position, scale, tint); + return rl.drawMesh(self, position, scale, tint); } pub fn drawEx(self: Mesh, position: Vector3, rotationAxis: Vector3, rotationAngle: f32, scale: Vector3, tint: Color) void { - return rl.DrawMeshEx(self, position, rotationAxis, rotationAngle, scale, tint); + return rl.drawMeshEx(self, position, rotationAxis, rotationAngle, scale, tint); } pub fn drawWires(self: Mesh, position: Vector3, scale: f32, tint: Color) void { - return rl.DrawMeshWires(self, position, scale, tint); + return rl.drawMeshWires(self, position, scale, tint); } pub fn drawWiresEx(self: Mesh, position: Vector3, rotationAxis: Vector3, rotationAngle: f32, scale: Vector3, tint: Color) void { - return rl.DrawMeshWiresEx(self, position, rotationAxis, rotationAngle, scale, tint); + return rl.drawMeshWiresEx(self, position, rotationAxis, rotationAngle, scale, tint); } }; @@ -809,9 +809,9 @@ pub const LoadFileTextCallback = ?fn ([*c]const u8) callconv(.C) [*c]u8; pub const SaveFileTextCallback = ?fn ([*c]const u8, [*c]u8) callconv(.C) bool; pub const AudioCallback = ?*const fn (?*anyopaque, c_uint) callconv(.C) void; -pub const RAYLIB_VERSION_MAJOR = @as(c_int, 4); -pub const RAYLIB_VERSION_MINOR = @as(c_int, 5); -pub const RAYLIB_VERSION_PATCH = @as(c_int, 0); +pub const RAYLIB_VERSION_MAJOR = @as(i32, 4); +pub const RAYLIB_VERSION_MINOR = @as(i32, 5); +pub const RAYLIB_VERSION_PATCH = @as(i32, 0); pub const RAYLIB_VERSION = "4.5-dev"; pub const MAX_TOUCH_POINTS = 10; @@ -822,3 +822,33 @@ pub const MATERIAL_MAP_DIFFUSE = MaterialMapIndex.MATERIAL_MAP_ALBEDO; pub const MATERIAL_MAP_SPECULAR = MaterialMapIndex.MATERIAL_MAP_METALNESS; pub const SHADER_LOC_MAP_DIFFUSE = ShaderLocationIndex.SHADER_LOC_MAP_ALBEDO; pub const SHADER_LOC_MAP_SPECULAR = ShaderLocationIndex.SHADER_LOC_MAP_METALNESS; + +const cdef = @import("raylib-zig-ext.zig"); + +pub fn textFormat(text: []const u8, args: anytype) [*c]const u8 { + return @call(.{}, cdef.TextFormat, .{@ptrCast([*c]const u8, text)} ++ args); +} + +pub fn loadShader(vsFileName: ?[]const u8, fsFileName: ?[]const u8) Shader { + var vsFileNameFinal = @as([*c]const u8, 0); + var fsFileNameFinal = @as([*c]const u8, 0); + if (vsFileName) |vsFileNameSure| { + vsFileNameFinal = @ptrCast([*c]const u8, vsFileNameSure); + } + if (fsFileName) |fsFileNameSure| { + fsFileNameFinal = @ptrCast([*c]const u8, fsFileNameSure); + } + return cdef.LoadShader(vsFileNameFinal, fsFileNameFinal); +} + +pub fn loadShaderFromMemory(vsCode: ?[]const u8, fsCode: ?[]const u8) Shader { + var vsCodeFinal = @as([*c]const u8, 0); + var fsCodeFinal = @as([*c]const u8, 0); + if (vsCode) |vsCodeSure| { + vsCodeFinal = @ptrCast([*c]const u8, vsCodeSure); + } + if (fsCode) |fsCodeSure| { + fsCodeFinal = @ptrCast([*c]const u8, fsCodeSure); + } + return cdef.LoadShaderFromMemory(vsCodeFinal, fsCodeFinal); +} diff --git a/lib/raylib-zig-ext.zig b/lib/raylib-zig-ext.zig new file mode 100644 index 0000000..f4b047b --- /dev/null +++ b/lib/raylib-zig-ext.zig @@ -0,0 +1,514 @@ +// raylib-zig (c) Nikolas Wipper 2023 + +const rl = @import("raylib-zig.zig"); + +pub extern "c" fn InitWindow(width: c_int, height: c_int, title: [*c]const u8) void; +pub extern "c" fn WindowShouldClose() bool; +pub extern "c" fn CloseWindow() void; +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: c_uint) bool; +pub extern "c" fn SetWindowState(flags: c_uint) void; +pub extern "c" fn ClearWindowState(flags: c_uint) void; +pub extern "c" fn ToggleFullscreen() 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 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 SetWindowSize(width: c_int, height: c_int) void; +pub extern "c" fn SetWindowOpacity(opacity: f32) 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 EnableEventWaiting() void; +pub extern "c" fn DisableEventWaiting() void; +pub extern "c" fn SwapScreenBuffer() void; +pub extern "c" fn PollInputEvents() void; +pub extern "c" fn WaitTime(seconds: f64) 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: c_int) 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 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: c_int) void; +pub extern "c" fn SetShaderValueV(shader: rl.Shader, locIndex: c_int, value: *const anyopaque, uniformType: c_int, 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 GetMouseRay(mousePosition: rl.Vector2, camera: rl.Camera) rl.Ray; +pub extern "c" fn GetCameraMatrix(camera: rl.Camera) rl.Matrix; +pub extern "c" fn GetCameraMatrix2D(camera: rl.Camera2D) rl.Matrix; +pub extern "c" fn GetWorldToScreen(position: rl.Vector3, camera: rl.Camera) rl.Vector2; +pub extern "c" fn GetScreenToWorld2D(position: rl.Vector2, camera: rl.Camera2D) 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 SetTargetFPS(fps: c_int) void; +pub extern "c" fn GetFPS() c_int; +pub extern "c" fn GetFrameTime() f32; +pub extern "c" fn GetTime() f64; +pub extern "c" fn GetRandomValue(min: c_int, max: c_int) c_int; +pub extern "c" fn SetRandomSeed(seed: c_uint) void; +pub extern "c" fn TakeScreenshot(fileName: [*c]const u8) void; +pub extern "c" fn SetConfigFlags(flags: c_uint) void; +pub extern "c" fn TraceLog(logLevel: c_int, text: [*c]const u8, ...) void; +pub extern "c" fn SetTraceLogLevel(logLevel: c_int) 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 OpenURL(url: [*c]const u8) void; +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 LoadFileData(fileName: [*c]const u8, bytesRead: [*c]c_uint) [*c]u8; +pub extern "c" fn UnloadFileData(data: [*c]u8) void; +pub extern "c" fn SaveFileData(fileName: [*c]const u8, data: *anyopaque, bytesToWrite: c_uint) bool; +pub extern "c" fn ExportDataAsCode(data: [*c]const u8, size: c_uint, 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]u8) bool; +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 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 ChangeDirectory(dir: [*c]const u8) bool; +pub extern "c" fn IsPathFile(path: [*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 GetFileModTime(fileName: [*c]const u8) c_long; +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(data: [*c]const u8, outputSize: [*c]c_int) [*c]u8; +pub extern "c" fn IsKeyPressed(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 SetExitKey(key: rl.KeyboardKey) void; +pub extern "c" fn GetKeyPressed() c_int; +pub extern "c" fn GetCharPressed() c_int; +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() c_int; +pub extern "c" fn GetGamepadAxisCount(gamepad: c_int) c_int; +pub extern "c" fn GetGamepadAxisMovement(gamepad: c_int, axis: c_int) f32; +pub extern "c" fn SetGamepadMappings(mappings: [*c]const u8) c_int; +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: c_int) 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: c_uint) void; +pub extern "c" fn IsGestureDetected(gesture: rl.Gestures) bool; +pub extern "c" fn GetGestureDetected() c_int; +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 SetCameraMode(camera: rl.Camera, mode: rl.CameraMode) void; +pub extern "c" fn UpdateCamera(camera: [*c]rl.Camera) void; +pub extern "c" fn SetCameraPanControl(keyPan: c_int) void; +pub extern "c" fn SetCameraAltControl(keyAlt: c_int) void; +pub extern "c" fn SetCameraSmoothZoomControl(keySmoothZoom: c_int) void; +pub extern "c" fn SetCameraMoveControls(keyFront: c_int, keyBack: c_int, keyRight: c_int, keyLeft: c_int, keyUp: c_int, keyDown: c_int) void; +pub extern "c" fn SetShapesTexture(texture: rl.Texture2D, source: rl.Rectangle) void; +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 DrawLineBezier(startPos: rl.Vector2, endPos: rl.Vector2, thick: f32, color: rl.Color) void; +pub extern "c" fn DrawLineBezierQuad(startPos: rl.Vector2, endPos: rl.Vector2, controlPos: rl.Vector2, thick: f32, color: rl.Color) void; +pub extern "c" fn DrawLineBezierCubic(startPos: rl.Vector2, endPos: rl.Vector2, startControlPos: rl.Vector2, endControlPos: rl.Vector2, thick: f32, color: rl.Color) void; +pub extern "c" fn DrawLineStrip(points: [*c]rl.Vector2, pointCount: 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 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 DrawCircleGradient(centerX: c_int, centerY: c_int, radius: f32, color1: rl.Color, color2: rl.Color) void; +pub extern "c" fn DrawCircleV(center: rl.Vector2, radius: f32, 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 DrawEllipse(centerX: c_int, centerY: c_int, 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 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, color1: rl.Color, color2: rl.Color) void; +pub extern "c" fn DrawRectangleGradientH(posX: c_int, posY: c_int, width: c_int, height: c_int, color1: rl.Color, color2: rl.Color) void; +pub extern "c" fn DrawRectangleGradientEx(rec: rl.Rectangle, col1: rl.Color, col2: rl.Color, col3: rl.Color, col4: 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, 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]rl.Vector2, pointCount: c_int, color: rl.Color) void; +pub extern "c" fn DrawTriangleStrip(points: [*c]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 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 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 CheckCollisionPointPoly(point: rl.Vector2, points: [*c]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 CheckCollisionPointLine(point: rl.Vector2, p1: rl.Vector2, p2: rl.Vector2, threshold: c_int) 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: c_int, headerSize: c_int) rl.Image; +pub extern "c" fn LoadImageAnim(fileName: [*c]const u8, 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 UnloadImage(image: rl.Image) void; +pub extern "c" fn ExportImage(image: rl.Image, fileName: [*c]const u8) bool; +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 GenImageGradientV(width: c_int, height: c_int, top: rl.Color, bottom: rl.Color) rl.Image; +pub extern "c" fn GenImageGradientH(width: c_int, height: c_int, left: rl.Color, right: 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 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 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: c_int) 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 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 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 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 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: c_int) rl.TextureCubemap; +pub extern "c" fn LoadRenderTexture(width: c_int, height: c_int) rl.RenderTexture2D; +pub extern "c" fn UnloadTexture(texture: rl.Texture2D) void; +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: c_int) void; +pub extern "c" fn SetTextureWrap(texture: rl.Texture2D, wrap: c_int) 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 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 GetColor(hexValue: c_uint) rl.Color; +pub extern "c" fn GetPixelColor(srcPtr: *anyopaque, format: c_int) rl.Color; +pub extern "c" fn SetPixelColor(dstPtr: *anyopaque, color: rl.Color, format: c_int) void; +pub extern "c" fn GetPixelDataSize(width: c_int, height: c_int, format: c_int) 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, fontChars: [*c]c_int, glyphCount: 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, fontChars: [*c]c_int, glyphCount: c_int) rl.Font; +pub extern "c" fn LoadFontData(fileData: [*c]const u8, dataSize: c_int, fontSize: c_int, fontChars: [*c]c_int, glyphCount: c_int, ty: c_int) [*c]rl.GlyphInfo; +pub extern "c" fn GenImageFontAtlas(chars: [*c]const rl.GlyphInfo, recs: [*c][*c]rl.Rectangle, glyphCount: c_int, fontSize: c_int, padding: c_int, packMethod: c_int) rl.Image; +pub extern "c" fn UnloadFontData(chars: [*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, count: c_int, position: rl.Vector2, fontSize: f32, spacing: f32, tint: rl.Color) 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 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 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 TextReplace(text: [*c]u8, replace: [*c]const u8, by: [*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 TextJoin(textList: [*c][*c]const u8, count: c_int, delimiter: [*c]const u8) [*c]const u8; +pub extern "c" fn TextSplit(text: [*c]const u8, delimiter: u8, count: [*c]c_int) [*c][*c]const 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, find: [*c]const u8) c_int; +pub extern "c" fn TextToUpper(text: [*c]const u8) [*c]const u8; +pub extern "c" fn TextToLower(text: [*c]const u8) [*c]const u8; +pub extern "c" fn TextToPascal(text: [*c]const u8) [*c]const u8; +pub extern "c" fn TextToInteger(text: [*c]const u8) c_int; +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]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 UnloadModel(model: rl.Model) void; +pub extern "c" fn UnloadModelKeepMeshes(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, size: 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 ExportMesh(mesh: rl.Mesh, fileName: [*c]const u8) bool; +pub extern "c" fn GetMeshBoundingBox(mesh: rl.Mesh) rl.BoundingBox; +pub extern "c" fn GenMeshTangents(mesh: [*c]rl.Mesh) void; +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 UnloadMaterial(material: rl.Material) void; +pub extern "c" fn SetMaterialTexture(material: [*c]rl.Material, mapType: c_int, 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_uint) [*c]rl.ModelAnimation; +pub extern "c" fn UpdateModelAnimation(model: rl.Model, anim: rl.ModelAnimation, frame: c_int) void; +pub extern "c" fn UnloadModelAnimation(anim: rl.ModelAnimation) void; +pub extern "c" fn UnloadModelAnimations(animations: [*c]rl.ModelAnimation, count: c_uint) 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 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 LoadSound(fileName: [*c]const u8) rl.Sound; +pub extern "c" fn LoadSoundFromWave(wave: rl.Wave) rl.Sound; +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 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 PlaySoundMulti(sound: rl.Sound) void; +pub extern "c" fn StopSoundMulti() void; +pub extern "c" fn GetSoundsPlaying() c_int; +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, initSample: c_int, finalSample: 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 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 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; diff --git a/lib/raylib-zig-math-ext.zig b/lib/raylib-zig-math-ext.zig new file mode 100644 index 0000000..094de38 --- /dev/null +++ b/lib/raylib-zig-math-ext.zig @@ -0,0 +1,116 @@ +// raylib-zig (c) Nikolas Wipper 2023 + +const rl = @import("raylib-zig.zig"); +const rlm = @import("raylib-zig-math.zig"); + +pub extern "c" fn Clamp(value: f32, min: f32, max: f32) f32; +pub extern "c" fn Lerp(start: f32, end: f32, amount: f32) f32; +pub extern "c" fn Normalize(value: f32, start: f32, end: f32) f32; +pub extern "c" fn Remap(value: f32, inputStart: f32, inputEnd: f32, outputStart: f32, outputEnd: f32) f32; +pub extern "c" fn Wrap(value: f32, min: f32, max: f32) f32; +pub extern "c" fn FloatEquals(x: f32, y: f32) c_int; +pub extern "c" fn Vector2Zero() rl.Vector2; +pub extern "c" fn Vector2One() rl.Vector2; +pub extern "c" fn Vector2Add(v1: rl.Vector2, v2: rl.Vector2) rl.Vector2; +pub extern "c" fn Vector2AddValue(v: rl.Vector2, add: f32) rl.Vector2; +pub extern "c" fn Vector2Subtract(v1: rl.Vector2, v2: rl.Vector2) rl.Vector2; +pub extern "c" fn Vector2SubtractValue(v: rl.Vector2, sub: f32) rl.Vector2; +pub extern "c" fn Vector2Length(v: rl.Vector2) f32; +pub extern "c" fn Vector2LengthSqr(v: rl.Vector2) f32; +pub extern "c" fn Vector2DotProduct(v1: rl.Vector2, v2: rl.Vector2) f32; +pub extern "c" fn Vector2Distance(v1: rl.Vector2, v2: rl.Vector2) f32; +pub extern "c" fn Vector2DistanceSqr(v1: rl.Vector2, v2: rl.Vector2) f32; +pub extern "c" fn Vector2Angle(v1: rl.Vector2, v2: rl.Vector2) f32; +pub extern "c" fn Vector2Scale(v: rl.Vector2, scale: f32) rl.Vector2; +pub extern "c" fn Vector2Multiply(v1: rl.Vector2, v2: rl.Vector2) rl.Vector2; +pub extern "c" fn Vector2Negate(v: rl.Vector2) rl.Vector2; +pub extern "c" fn Vector2Divide(v1: rl.Vector2, v2: rl.Vector2) rl.Vector2; +pub extern "c" fn Vector2Normalize(v: rl.Vector2) rl.Vector2; +pub extern "c" fn Vector2Transform(v: rl.Vector2, mat: rl.Matrix) rl.Vector2; +pub extern "c" fn Vector2Lerp(v1: rl.Vector2, v2: rl.Vector2, amount: f32) rl.Vector2; +pub extern "c" fn Vector2Reflect(v: rl.Vector2, normal: rl.Vector2) rl.Vector2; +pub extern "c" fn Vector2Rotate(v: rl.Vector2, angle: f32) rl.Vector2; +pub extern "c" fn Vector2MoveTowards(v: rl.Vector2, target: rl.Vector2, maxDistance: f32) rl.Vector2; +pub extern "c" fn Vector2Invert(v: rl.Vector2) rl.Vector2; +pub extern "c" fn Vector2Clamp(v: rl.Vector2, min: rl.Vector2, max: rl.Vector2) rl.Vector2; +pub extern "c" fn Vector2ClampValue(v: rl.Vector2, min: f32, max: f32) rl.Vector2; +pub extern "c" fn Vector2Equals(p: rl.Vector2, q: rl.Vector2) c_int; +pub extern "c" fn Vector3Zero() rl.Vector3; +pub extern "c" fn Vector3One() rl.Vector3; +pub extern "c" fn Vector3Add(v1: rl.Vector3, v2: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3AddValue(v: rl.Vector3, add: f32) rl.Vector3; +pub extern "c" fn Vector3Subtract(v1: rl.Vector3, v2: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3SubtractValue(v: rl.Vector3, sub: f32) rl.Vector3; +pub extern "c" fn Vector3Scale(v: rl.Vector3, scalar: f32) rl.Vector3; +pub extern "c" fn Vector3Multiply(v1: rl.Vector3, v2: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3CrossProduct(v1: rl.Vector3, v2: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3Perpendicular(v: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3Length(v: rl.Vector3) f32; +pub extern "c" fn Vector3LengthSqr(v: rl.Vector3) f32; +pub extern "c" fn Vector3DotProduct(v1: rl.Vector3, v2: rl.Vector3) f32; +pub extern "c" fn Vector3Distance(v1: rl.Vector3, v2: rl.Vector3) f32; +pub extern "c" fn Vector3DistanceSqr(v1: rl.Vector3, v2: rl.Vector3) f32; +pub extern "c" fn Vector3Angle(v1: rl.Vector3, v2: rl.Vector3) f32; +pub extern "c" fn Vector3Negate(v: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3Divide(v1: rl.Vector3, v2: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3Normalize(v: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3OrthoNormalize(v1: [*c]rl.Vector3, v2: [*c]rl.Vector3) void; +pub extern "c" fn Vector3Transform(v: rl.Vector3, mat: rl.Matrix) rl.Vector3; +pub extern "c" fn Vector3RotateByQuaternion(v: rl.Vector3, q: rl.Quaternion) rl.Vector3; +pub extern "c" fn Vector3RotateByAxisAngle(v: rl.Vector3, axis: rl.Vector3, angle: f32) rl.Vector3; +pub extern "c" fn Vector3Lerp(v1: rl.Vector3, v2: rl.Vector3, amount: f32) rl.Vector3; +pub extern "c" fn Vector3Reflect(v: rl.Vector3, normal: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3Min(v1: rl.Vector3, v2: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3Max(v1: rl.Vector3, v2: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3Barycenter(p: rl.Vector3, a: rl.Vector3, b: rl.Vector3, c: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3Unproject(source: rl.Vector3, projection: rl.Matrix, view: rl.Matrix) rl.Vector3; +pub extern "c" fn Vector3ToFloatV(v: rl.Vector3) rlm.float3; +pub extern "c" fn Vector3Invert(v: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3Clamp(v: rl.Vector3, min: rl.Vector3, max: rl.Vector3) rl.Vector3; +pub extern "c" fn Vector3ClampValue(v: rl.Vector3, min: f32, max: f32) rl.Vector3; +pub extern "c" fn Vector3Equals(p: rl.Vector3, q: rl.Vector3) c_int; +pub extern "c" fn Vector3Refract(v: rl.Vector3, n: rl.Vector3, r: f32) rl.Vector3; +pub extern "c" fn MatrixDeterminant(mat: rl.Matrix) f32; +pub extern "c" fn MatrixTrace(mat: rl.Matrix) f32; +pub extern "c" fn MatrixTranspose(mat: rl.Matrix) rl.Matrix; +pub extern "c" fn MatrixInvert(mat: rl.Matrix) rl.Matrix; +pub extern "c" fn MatrixIdentity() rl.Matrix; +pub extern "c" fn MatrixAdd(left: rl.Matrix, right: rl.Matrix) rl.Matrix; +pub extern "c" fn MatrixSubtract(left: rl.Matrix, right: rl.Matrix) rl.Matrix; +pub extern "c" fn MatrixMultiply(left: rl.Matrix, right: rl.Matrix) rl.Matrix; +pub extern "c" fn MatrixTranslate(x: f32, y: f32, z: f32) rl.Matrix; +pub extern "c" fn MatrixRotate(axis: rl.Vector3, angle: f32) rl.Matrix; +pub extern "c" fn MatrixRotateX(angle: f32) rl.Matrix; +pub extern "c" fn MatrixRotateY(angle: f32) rl.Matrix; +pub extern "c" fn MatrixRotateZ(angle: f32) rl.Matrix; +pub extern "c" fn MatrixRotateXYZ(angle: rl.Vector3) rl.Matrix; +pub extern "c" fn MatrixRotateZYX(angle: rl.Vector3) rl.Matrix; +pub extern "c" fn MatrixScale(x: f32, y: f32, z: f32) rl.Matrix; +pub extern "c" fn MatrixFrustum(left: f64, right: f64, bottom: f64, top: f64, near: f64, far: f64) rl.Matrix; +pub extern "c" fn MatrixPerspective(fovy: f64, aspect: f64, near: f64, far: f64) rl.Matrix; +pub extern "c" fn MatrixOrtho(left: f64, right: f64, bottom: f64, top: f64, near: f64, far: f64) rl.Matrix; +pub extern "c" fn MatrixLookAt(eye: rl.Vector3, target: rl.Vector3, up: rl.Vector3) rl.Matrix; +pub extern "c" fn MatrixToFloatV(mat: rl.Matrix) rlm.float16; +pub extern "c" fn QuaternionAdd(q1: rl.Quaternion, q2: rl.Quaternion) rl.Quaternion; +pub extern "c" fn QuaternionAddValue(q: rl.Quaternion, add: f32) rl.Quaternion; +pub extern "c" fn QuaternionSubtract(q1: rl.Quaternion, q2: rl.Quaternion) rl.Quaternion; +pub extern "c" fn QuaternionSubtractValue(q: rl.Quaternion, sub: f32) rl.Quaternion; +pub extern "c" fn QuaternionIdentity() rl.Quaternion; +pub extern "c" fn QuaternionLength(q: rl.Quaternion) f32; +pub extern "c" fn QuaternionNormalize(q: rl.Quaternion) rl.Quaternion; +pub extern "c" fn QuaternionInvert(q: rl.Quaternion) rl.Quaternion; +pub extern "c" fn QuaternionMultiply(q1: rl.Quaternion, q2: rl.Quaternion) rl.Quaternion; +pub extern "c" fn QuaternionScale(q: rl.Quaternion, mul: f32) rl.Quaternion; +pub extern "c" fn QuaternionDivide(q1: rl.Quaternion, q2: rl.Quaternion) rl.Quaternion; +pub extern "c" fn QuaternionLerp(q1: rl.Quaternion, q2: rl.Quaternion, amount: f32) rl.Quaternion; +pub extern "c" fn QuaternionNlerp(q1: rl.Quaternion, q2: rl.Quaternion, amount: f32) rl.Quaternion; +pub extern "c" fn QuaternionSlerp(q1: rl.Quaternion, q2: rl.Quaternion, amount: f32) rl.Quaternion; +pub extern "c" fn QuaternionFromVector3ToVector3(from: rl.Vector3, to: rl.Vector3) rl.Quaternion; +pub extern "c" fn QuaternionFromMatrix(mat: rl.Matrix) rl.Quaternion; +pub extern "c" fn QuaternionToMatrix(q: rl.Quaternion) rl.Matrix; +pub extern "c" fn QuaternionFromAxisAngle(axis: rl.Vector3, angle: f32) rl.Quaternion; +pub extern "c" fn QuaternionToAxisAngle(q: rl.Quaternion, outAxis: [*c]rl.Vector3, outAngle: [*c]f32) void; +pub extern "c" fn QuaternionFromEuler(pitch: f32, yaw: f32, roll: f32) rl.Quaternion; +pub extern "c" fn QuaternionToEuler(q: rl.Quaternion) rl.Vector3; +pub extern "c" fn QuaternionTransform(q: rl.Quaternion, mat: rl.Matrix) rl.Quaternion; +pub extern "c" fn QuaternionEquals(p: rl.Quaternion, q: rl.Quaternion) c_int; diff --git a/lib/raylib-zig-math.zig b/lib/raylib-zig-math.zig index 9687035..6df67bd 100755 --- a/lib/raylib-zig-math.zig +++ b/lib/raylib-zig-math.zig @@ -1,6 +1,7 @@ // raylib-zig (c) Nikolas Wipper 2023 const rl = @import("raylib-zig.zig"); +const cdef = @import("raylib-zig-math-ext.zig"); const Matrix = rl.Matrix; const Quaternion = rl.Quaternion; @@ -16,114 +17,446 @@ pub const float16 = extern struct { v: [16]f32, }; -pub extern fn Clamp(value: f32, min: f32, max: f32) f32; -pub extern fn Lerp(start: f32, end: f32, amount: f32) f32; -pub extern fn Normalize(value: f32, start: f32, end: f32) f32; -pub extern fn Remap(value: f32, inputStart: f32, inputEnd: f32, outputStart: f32, outputEnd: f32) f32; -pub extern fn Wrap(value: f32, min: f32, max: f32) f32; -pub extern fn FloatEquals(x: f32, y: f32) c_int; -pub extern fn Vector2Zero() Vector2; -pub extern fn Vector2One() Vector2; -pub extern fn Vector2Add(v1: Vector2, v2: Vector2) Vector2; -pub extern fn Vector2AddValue(v: Vector2, add: f32) Vector2; -pub extern fn Vector2Subtract(v1: Vector2, v2: Vector2) Vector2; -pub extern fn Vector2SubtractValue(v: Vector2, sub: f32) Vector2; -pub extern fn Vector2Length(v: Vector2) f32; -pub extern fn Vector2LengthSqr(v: Vector2) f32; -pub extern fn Vector2DotProduct(v1: Vector2, v2: Vector2) f32; -pub extern fn Vector2Distance(v1: Vector2, v2: Vector2) f32; -pub extern fn Vector2DistanceSqr(v1: Vector2, v2: Vector2) f32; -pub extern fn Vector2Angle(v1: Vector2, v2: Vector2) f32; -pub extern fn Vector2Scale(v: Vector2, scale: f32) Vector2; -pub extern fn Vector2Multiply(v1: Vector2, v2: Vector2) Vector2; -pub extern fn Vector2Negate(v: Vector2) Vector2; -pub extern fn Vector2Divide(v1: Vector2, v2: Vector2) Vector2; -pub extern fn Vector2Normalize(v: Vector2) Vector2; -pub extern fn Vector2Transform(v: Vector2, mat: Matrix) Vector2; -pub extern fn Vector2Lerp(v1: Vector2, v2: Vector2, amount: f32) Vector2; -pub extern fn Vector2Reflect(v: Vector2, normal: Vector2) Vector2; -pub extern fn Vector2Rotate(v: Vector2, angle: f32) Vector2; -pub extern fn Vector2MoveTowards(v: Vector2, target: Vector2, maxDistance: f32) Vector2; -pub extern fn Vector2Invert(v: Vector2) Vector2; -pub extern fn Vector2Clamp(v: Vector2, min: Vector2, max: Vector2) Vector2; -pub extern fn Vector2ClampValue(v: Vector2, min: f32, max: f32) Vector2; -pub extern fn Vector2Equals(p: Vector2, q: Vector2) c_int; -pub extern fn Vector3Zero() Vector3; -pub extern fn Vector3One() Vector3; -pub extern fn Vector3Add(v1: Vector3, v2: Vector3) Vector3; -pub extern fn Vector3AddValue(v: Vector3, add: f32) Vector3; -pub extern fn Vector3Subtract(v1: Vector3, v2: Vector3) Vector3; -pub extern fn Vector3SubtractValue(v: Vector3, sub: f32) Vector3; -pub extern fn Vector3Scale(v: Vector3, scalar: f32) Vector3; -pub extern fn Vector3Multiply(v1: Vector3, v2: Vector3) Vector3; -pub extern fn Vector3CrossProduct(v1: Vector3, v2: Vector3) Vector3; -pub extern fn Vector3Perpendicular(v: Vector3) Vector3; -pub extern fn Vector3Length(v: Vector3) f32; -pub extern fn Vector3LengthSqr(v: Vector3) f32; -pub extern fn Vector3DotProduct(v1: Vector3, v2: Vector3) f32; -pub extern fn Vector3Distance(v1: Vector3, v2: Vector3) f32; -pub extern fn Vector3DistanceSqr(v1: Vector3, v2: Vector3) f32; -pub extern fn Vector3Angle(v1: Vector3, v2: Vector3) f32; -pub extern fn Vector3Negate(v: Vector3) Vector3; -pub extern fn Vector3Divide(v1: Vector3, v2: Vector3) Vector3; -pub extern fn Vector3Normalize(v: Vector3) Vector3; -pub extern fn Vector3OrthoNormalize(v1: [*c]Vector3, v2: [*c]Vector3) void; -pub extern fn Vector3Transform(v: Vector3, mat: Matrix) Vector3; -pub extern fn Vector3RotateByQuaternion(v: Vector3, q: Quaternion) Vector3; -pub extern fn Vector3RotateByAxisAngle(v: Vector3, axis: Vector3, angle: f32) Vector3; -pub extern fn Vector3Lerp(v1: Vector3, v2: Vector3, amount: f32) Vector3; -pub extern fn Vector3Reflect(v: Vector3, normal: Vector3) Vector3; -pub extern fn Vector3Min(v1: Vector3, v2: Vector3) Vector3; -pub extern fn Vector3Max(v1: Vector3, v2: Vector3) Vector3; -pub extern fn Vector3Barycenter(p: Vector3, a: Vector3, b: Vector3, c: Vector3) Vector3; -pub extern fn Vector3Unproject(source: Vector3, projection: Matrix, view: Matrix) Vector3; -pub extern fn Vector3ToFloatV(v: Vector3) float3; -pub extern fn Vector3Invert(v: Vector3) Vector3; -pub extern fn Vector3Clamp(v: Vector3, min: Vector3, max: Vector3) Vector3; -pub extern fn Vector3ClampValue(v: Vector3, min: f32, max: f32) Vector3; -pub extern fn Vector3Equals(p: Vector3, q: Vector3) c_int; -pub extern fn Vector3Refract(v: Vector3, n: Vector3, r: f32) Vector3; -pub extern fn MatrixDeterminant(mat: Matrix) f32; -pub extern fn MatrixTrace(mat: Matrix) f32; -pub extern fn MatrixTranspose(mat: Matrix) Matrix; -pub extern fn MatrixInvert(mat: Matrix) Matrix; -pub extern fn MatrixIdentity() Matrix; -pub extern fn MatrixAdd(left: Matrix, right: Matrix) Matrix; -pub extern fn MatrixSubtract(left: Matrix, right: Matrix) Matrix; -pub extern fn MatrixMultiply(left: Matrix, right: Matrix) Matrix; -pub extern fn MatrixTranslate(x: f32, y: f32, z: f32) Matrix; -pub extern fn MatrixRotate(axis: Vector3, angle: f32) Matrix; -pub extern fn MatrixRotateX(angle: f32) Matrix; -pub extern fn MatrixRotateY(angle: f32) Matrix; -pub extern fn MatrixRotateZ(angle: f32) Matrix; -pub extern fn MatrixRotateXYZ(angle: Vector3) Matrix; -pub extern fn MatrixRotateZYX(angle: Vector3) Matrix; -pub extern fn MatrixScale(x: f32, y: f32, z: f32) Matrix; -pub extern fn MatrixFrustum(left: f64, right: f64, bottom: f64, top: f64, near: f64, far: f64) Matrix; -pub extern fn MatrixPerspective(fovy: f64, aspect: f64, near: f64, far: f64) Matrix; -pub extern fn MatrixOrtho(left: f64, right: f64, bottom: f64, top: f64, near: f64, far: f64) Matrix; -pub extern fn MatrixLookAt(eye: Vector3, target: Vector3, up: Vector3) Matrix; -pub extern fn MatrixToFloatV(mat: Matrix) float16; -pub extern fn QuaternionAdd(q1: Quaternion, q2: Quaternion) Quaternion; -pub extern fn QuaternionAddValue(q: Quaternion, add: f32) Quaternion; -pub extern fn QuaternionSubtract(q1: Quaternion, q2: Quaternion) Quaternion; -pub extern fn QuaternionSubtractValue(q: Quaternion, sub: f32) Quaternion; -pub extern fn QuaternionIdentity() Quaternion; -pub extern fn QuaternionLength(q: Quaternion) f32; -pub extern fn QuaternionNormalize(q: Quaternion) Quaternion; -pub extern fn QuaternionInvert(q: Quaternion) Quaternion; -pub extern fn QuaternionMultiply(q1: Quaternion, q2: Quaternion) Quaternion; -pub extern fn QuaternionScale(q: Quaternion, mul: f32) Quaternion; -pub extern fn QuaternionDivide(q1: Quaternion, q2: Quaternion) Quaternion; -pub extern fn QuaternionLerp(q1: Quaternion, q2: Quaternion, amount: f32) Quaternion; -pub extern fn QuaternionNlerp(q1: Quaternion, q2: Quaternion, amount: f32) Quaternion; -pub extern fn QuaternionSlerp(q1: Quaternion, q2: Quaternion, amount: f32) Quaternion; -pub extern fn QuaternionFromVector3ToVector3(from: Vector3, to: Vector3) Quaternion; -pub extern fn QuaternionFromMatrix(mat: Matrix) Quaternion; -pub extern fn QuaternionToMatrix(q: Quaternion) Matrix; -pub extern fn QuaternionFromAxisAngle(axis: Vector3, angle: f32) Quaternion; -pub extern fn QuaternionToAxisAngle(q: Quaternion, outAxis: [*c]Vector3, outAngle: [*c]f32) void; -pub extern fn QuaternionFromEuler(pitch: f32, yaw: f32, roll: f32) Quaternion; -pub extern fn QuaternionToEuler(q: Quaternion) Vector3; -pub extern fn QuaternionTransform(q: Quaternion, mat: Matrix) Quaternion; -pub extern fn QuaternionEquals(p: Quaternion, q: Quaternion) c_int; +pub fn clamp(value: f32, min: f32, max: f32) f32 { + return cdef.Clamp(value, min, max); +} + +pub fn lerp(start: f32, end: f32, amount: f32) f32 { + return cdef.Lerp(start, end, amount); +} + +pub fn normalize(value: f32, start: f32, end: f32) f32 { + return cdef.Normalize(value, start, end); +} + +pub fn remap(value: f32, inputStart: f32, inputEnd: f32, outputStart: f32, outputEnd: f32) f32 { + return cdef.Remap(value, inputStart, inputEnd, outputStart, outputEnd); +} + +pub fn wrap(value: f32, min: f32, max: f32) f32 { + return cdef.Wrap(value, min, max); +} + +pub fn floatEquals(x: f32, y: f32) c_int { + return cdef.FloatEquals(x, y); +} + +pub fn vector2Zero() Vector2 { + return cdef.Vector2Zero(); +} + +pub fn vector2One() Vector2 { + return cdef.Vector2One(); +} + +pub fn vector2Add(v1: Vector2, v2: Vector2) Vector2 { + return cdef.Vector2Add(v1, v2); +} + +pub fn vector2AddValue(v: Vector2, add: f32) Vector2 { + return cdef.Vector2AddValue(v, add); +} + +pub fn vector2Subtract(v1: Vector2, v2: Vector2) Vector2 { + return cdef.Vector2Subtract(v1, v2); +} + +pub fn vector2SubtractValue(v: Vector2, sub: f32) Vector2 { + return cdef.Vector2SubtractValue(v, sub); +} + +pub fn vector2Length(v: Vector2) f32 { + return cdef.Vector2Length(v); +} + +pub fn vector2LengthSqr(v: Vector2) f32 { + return cdef.Vector2LengthSqr(v); +} + +pub fn vector2DotProduct(v1: Vector2, v2: Vector2) f32 { + return cdef.Vector2DotProduct(v1, v2); +} + +pub fn vector2Distance(v1: Vector2, v2: Vector2) f32 { + return cdef.Vector2Distance(v1, v2); +} + +pub fn vector2DistanceSqr(v1: Vector2, v2: Vector2) f32 { + return cdef.Vector2DistanceSqr(v1, v2); +} + +pub fn vector2Angle(v1: Vector2, v2: Vector2) f32 { + return cdef.Vector2Angle(v1, v2); +} + +pub fn vector2Scale(v: Vector2, scale: f32) Vector2 { + return cdef.Vector2Scale(v, scale); +} + +pub fn vector2Multiply(v1: Vector2, v2: Vector2) Vector2 { + return cdef.Vector2Multiply(v1, v2); +} + +pub fn vector2Negate(v: Vector2) Vector2 { + return cdef.Vector2Negate(v); +} + +pub fn vector2Divide(v1: Vector2, v2: Vector2) Vector2 { + return cdef.Vector2Divide(v1, v2); +} + +pub fn vector2Normalize(v: Vector2) Vector2 { + return cdef.Vector2Normalize(v); +} + +pub fn vector2Transform(v: Vector2, mat: Matrix) Vector2 { + return cdef.Vector2Transform(v, mat); +} + +pub fn vector2Lerp(v1: Vector2, v2: Vector2, amount: f32) Vector2 { + return cdef.Vector2Lerp(v1, v2, amount); +} + +pub fn vector2Reflect(v: Vector2, normal: Vector2) Vector2 { + return cdef.Vector2Reflect(v, normal); +} + +pub fn vector2Rotate(v: Vector2, angle: f32) Vector2 { + return cdef.Vector2Rotate(v, angle); +} + +pub fn vector2MoveTowards(v: Vector2, target: Vector2, maxDistance: f32) Vector2 { + return cdef.Vector2MoveTowards(v, target, maxDistance); +} + +pub fn vector2Invert(v: Vector2) Vector2 { + return cdef.Vector2Invert(v); +} + +pub fn vector2Clamp(v: Vector2, min: Vector2, max: Vector2) Vector2 { + return cdef.Vector2Clamp(v, min, max); +} + +pub fn vector2ClampValue(v: Vector2, min: f32, max: f32) Vector2 { + return cdef.Vector2ClampValue(v, min, max); +} + +pub fn vector2Equals(p: Vector2, q: Vector2) c_int { + return cdef.Vector2Equals(p, q); +} + +pub fn vector3Zero() Vector3 { + return cdef.Vector3Zero(); +} + +pub fn vector3One() Vector3 { + return cdef.Vector3One(); +} + +pub fn vector3Add(v1: Vector3, v2: Vector3) Vector3 { + return cdef.Vector3Add(v1, v2); +} + +pub fn vector3AddValue(v: Vector3, add: f32) Vector3 { + return cdef.Vector3AddValue(v, add); +} + +pub fn vector3Subtract(v1: Vector3, v2: Vector3) Vector3 { + return cdef.Vector3Subtract(v1, v2); +} + +pub fn vector3SubtractValue(v: Vector3, sub: f32) Vector3 { + return cdef.Vector3SubtractValue(v, sub); +} + +pub fn vector3Scale(v: Vector3, scalar: f32) Vector3 { + return cdef.Vector3Scale(v, scalar); +} + +pub fn vector3Multiply(v1: Vector3, v2: Vector3) Vector3 { + return cdef.Vector3Multiply(v1, v2); +} + +pub fn vector3CrossProduct(v1: Vector3, v2: Vector3) Vector3 { + return cdef.Vector3CrossProduct(v1, v2); +} + +pub fn vector3Perpendicular(v: Vector3) Vector3 { + return cdef.Vector3Perpendicular(v); +} + +pub fn vector3Length(v: Vector3) f32 { + return cdef.Vector3Length(v); +} + +pub fn vector3LengthSqr(v: Vector3) f32 { + return cdef.Vector3LengthSqr(v); +} + +pub fn vector3DotProduct(v1: Vector3, v2: Vector3) f32 { + return cdef.Vector3DotProduct(v1, v2); +} + +pub fn vector3Distance(v1: Vector3, v2: Vector3) f32 { + return cdef.Vector3Distance(v1, v2); +} + +pub fn vector3DistanceSqr(v1: Vector3, v2: Vector3) f32 { + return cdef.Vector3DistanceSqr(v1, v2); +} + +pub fn vector3Angle(v1: Vector3, v2: Vector3) f32 { + return cdef.Vector3Angle(v1, v2); +} + +pub fn vector3Negate(v: Vector3) Vector3 { + return cdef.Vector3Negate(v); +} + +pub fn vector3Divide(v1: Vector3, v2: Vector3) Vector3 { + return cdef.Vector3Divide(v1, v2); +} + +pub fn vector3Normalize(v: Vector3) Vector3 { + return cdef.Vector3Normalize(v); +} + +pub fn vector3OrthoNormalize(v1: *Vector3, v2: *Vector3) void { + cdef.Vector3OrthoNormalize(@ptrCast([*c]Vector3, v1), @ptrCast([*c]Vector3, v2)); +} + +pub fn vector3Transform(v: Vector3, mat: Matrix) Vector3 { + return cdef.Vector3Transform(v, mat); +} + +pub fn vector3RotateByQuaternion(v: Vector3, q: Quaternion) Vector3 { + return cdef.Vector3RotateByQuaternion(v, q); +} + +pub fn vector3RotateByAxisAngle(v: Vector3, axis: Vector3, angle: f32) Vector3 { + return cdef.Vector3RotateByAxisAngle(v, axis, angle); +} + +pub fn vector3Lerp(v1: Vector3, v2: Vector3, amount: f32) Vector3 { + return cdef.Vector3Lerp(v1, v2, amount); +} + +pub fn vector3Reflect(v: Vector3, normal: Vector3) Vector3 { + return cdef.Vector3Reflect(v, normal); +} + +pub fn vector3Min(v1: Vector3, v2: Vector3) Vector3 { + return cdef.Vector3Min(v1, v2); +} + +pub fn vector3Max(v1: Vector3, v2: Vector3) Vector3 { + return cdef.Vector3Max(v1, v2); +} + +pub fn vector3Barycenter(p: Vector3, a: Vector3, b: Vector3, c: Vector3) Vector3 { + return cdef.Vector3Barycenter(p, a, b, c); +} + +pub fn vector3Unproject(source: Vector3, projection: Matrix, view: Matrix) Vector3 { + return cdef.Vector3Unproject(source, projection, view); +} + +pub fn vector3ToFloatV(v: Vector3) float3 { + return cdef.Vector3ToFloatV(v); +} + +pub fn vector3Invert(v: Vector3) Vector3 { + return cdef.Vector3Invert(v); +} + +pub fn vector3Clamp(v: Vector3, min: Vector3, max: Vector3) Vector3 { + return cdef.Vector3Clamp(v, min, max); +} + +pub fn vector3ClampValue(v: Vector3, min: f32, max: f32) Vector3 { + return cdef.Vector3ClampValue(v, min, max); +} + +pub fn vector3Equals(p: Vector3, q: Vector3) c_int { + return cdef.Vector3Equals(p, q); +} + +pub fn vector3Refract(v: Vector3, n: Vector3, r: f32) Vector3 { + return cdef.Vector3Refract(v, n, r); +} + +pub fn matrixDeterminant(mat: Matrix) f32 { + return cdef.MatrixDeterminant(mat); +} + +pub fn matrixTrace(mat: Matrix) f32 { + return cdef.MatrixTrace(mat); +} + +pub fn matrixTranspose(mat: Matrix) Matrix { + return cdef.MatrixTranspose(mat); +} + +pub fn matrixInvert(mat: Matrix) Matrix { + return cdef.MatrixInvert(mat); +} + +pub fn matrixIdentity() Matrix { + return cdef.MatrixIdentity(); +} + +pub fn matrixAdd(left: Matrix, right: Matrix) Matrix { + return cdef.MatrixAdd(left, right); +} + +pub fn matrixSubtract(left: Matrix, right: Matrix) Matrix { + return cdef.MatrixSubtract(left, right); +} + +pub fn matrixMultiply(left: Matrix, right: Matrix) Matrix { + return cdef.MatrixMultiply(left, right); +} + +pub fn matrixTranslate(x: f32, y: f32, z: f32) Matrix { + return cdef.MatrixTranslate(x, y, z); +} + +pub fn matrixRotate(axis: Vector3, angle: f32) Matrix { + return cdef.MatrixRotate(axis, angle); +} + +pub fn matrixRotateX(angle: f32) Matrix { + return cdef.MatrixRotateX(angle); +} + +pub fn matrixRotateY(angle: f32) Matrix { + return cdef.MatrixRotateY(angle); +} + +pub fn matrixRotateZ(angle: f32) Matrix { + return cdef.MatrixRotateZ(angle); +} + +pub fn matrixRotateXYZ(angle: Vector3) Matrix { + return cdef.MatrixRotateXYZ(angle); +} + +pub fn matrixRotateZYX(angle: Vector3) Matrix { + return cdef.MatrixRotateZYX(angle); +} + +pub fn matrixScale(x: f32, y: f32, z: f32) Matrix { + return cdef.MatrixScale(x, y, z); +} + +pub fn matrixFrustum(left: f64, right: f64, bottom: f64, top: f64, near: f64, far: f64) Matrix { + return cdef.MatrixFrustum(left, right, bottom, top, near, far); +} + +pub fn matrixPerspective(fovy: f64, aspect: f64, near: f64, far: f64) Matrix { + return cdef.MatrixPerspective(fovy, aspect, near, far); +} + +pub fn matrixOrtho(left: f64, right: f64, bottom: f64, top: f64, near: f64, far: f64) Matrix { + return cdef.MatrixOrtho(left, right, bottom, top, near, far); +} + +pub fn matrixLookAt(eye: Vector3, target: Vector3, up: Vector3) Matrix { + return cdef.MatrixLookAt(eye, target, up); +} + +pub fn matrixToFloatV(mat: Matrix) float16 { + return cdef.MatrixToFloatV(mat); +} + +pub fn quaternionAdd(q1: Quaternion, q2: Quaternion) Quaternion { + return cdef.QuaternionAdd(q1, q2); +} + +pub fn quaternionAddValue(q: Quaternion, add: f32) Quaternion { + return cdef.QuaternionAddValue(q, add); +} + +pub fn quaternionSubtract(q1: Quaternion, q2: Quaternion) Quaternion { + return cdef.QuaternionSubtract(q1, q2); +} + +pub fn quaternionSubtractValue(q: Quaternion, sub: f32) Quaternion { + return cdef.QuaternionSubtractValue(q, sub); +} + +pub fn quaternionIdentity() Quaternion { + return cdef.QuaternionIdentity(); +} + +pub fn quaternionLength(q: Quaternion) f32 { + return cdef.QuaternionLength(q); +} + +pub fn quaternionNormalize(q: Quaternion) Quaternion { + return cdef.QuaternionNormalize(q); +} + +pub fn quaternionInvert(q: Quaternion) Quaternion { + return cdef.QuaternionInvert(q); +} + +pub fn quaternionMultiply(q1: Quaternion, q2: Quaternion) Quaternion { + return cdef.QuaternionMultiply(q1, q2); +} + +pub fn quaternionScale(q: Quaternion, mul: f32) Quaternion { + return cdef.QuaternionScale(q, mul); +} + +pub fn quaternionDivide(q1: Quaternion, q2: Quaternion) Quaternion { + return cdef.QuaternionDivide(q1, q2); +} + +pub fn quaternionLerp(q1: Quaternion, q2: Quaternion, amount: f32) Quaternion { + return cdef.QuaternionLerp(q1, q2, amount); +} + +pub fn quaternionNlerp(q1: Quaternion, q2: Quaternion, amount: f32) Quaternion { + return cdef.QuaternionNlerp(q1, q2, amount); +} + +pub fn quaternionSlerp(q1: Quaternion, q2: Quaternion, amount: f32) Quaternion { + return cdef.QuaternionSlerp(q1, q2, amount); +} + +pub fn quaternionFromVector3ToVector3(from: Vector3, to: Vector3) Quaternion { + return cdef.QuaternionFromVector3ToVector3(from, to); +} + +pub fn quaternionFromMatrix(mat: Matrix) Quaternion { + return cdef.QuaternionFromMatrix(mat); +} + +pub fn quaternionToMatrix(q: Quaternion) Matrix { + return cdef.QuaternionToMatrix(q); +} + +pub fn quaternionFromAxisAngle(axis: Vector3, angle: f32) Quaternion { + return cdef.QuaternionFromAxisAngle(axis, angle); +} + +pub fn quaternionToAxisAngle(q: Quaternion, outAxis: *Vector3, outAngle: *f32) void { + cdef.QuaternionToAxisAngle(q, @ptrCast([*c]Vector3, outAxis), @ptrCast([*c]f32, outAngle)); +} + +pub fn quaternionFromEuler(pitch: f32, yaw: f32, roll: f32) Quaternion { + return cdef.QuaternionFromEuler(pitch, yaw, roll); +} + +pub fn quaternionToEuler(q: Quaternion) Vector3 { + return cdef.QuaternionToEuler(q); +} + +pub fn quaternionTransform(q: Quaternion, mat: Matrix) Quaternion { + return cdef.QuaternionTransform(q, mat); +} + +pub fn quaternionEquals(p: Quaternion, q: Quaternion) c_int { + return cdef.QuaternionEquals(p, q); +} diff --git a/lib/raylib-zig.zig b/lib/raylib-zig.zig index 8137049..68b12e5 100644 --- a/lib/raylib-zig.zig +++ b/lib/raylib-zig.zig @@ -106,59 +106,59 @@ pub const Image = extern struct { format: PixelFormat, pub fn init(fileName: [*c]const u8) Image { - return rl.LoadImage(fileName); + return rl.loadImage(fileName); } pub fn initRaw(fileName: *const []u8, width: c_int, height: c_int, format: PixelFormat, headerSize: c_int) Image { - return rl.LoadImageRaw(@as([*c]const u8, fileName), width, height, format, headerSize); + return rl.loadImageRaw(fileName, width, height, format, headerSize); } pub fn initText(text: *const []u8, fontSize: c_int, color: Color) Image { - return rl.ImageText(@as([*c]const u8, text), fontSize, color); + return rl.imageText(text, fontSize, color); } pub fn initTextEx(font: Font, text: *const []u8, fontSize: f32, spacing: f32, tint: Color) Image { - return rl.ImageTextEx(font, @as([*c]const u8, text), fontSize, spacing, tint); + return rl.imageTextEx(font, text, fontSize, spacing, tint); } pub fn copy(image: Image) Image { - return rl.ImageCopy(image); + return rl.imageCopy(image); } pub fn copyRec(image: Image, rec: Rectangle) Image { - return rl.ImageFromImage(image, rec); + return rl.imageFromImage(image, rec); } pub fn genColor(width: c_int, height: c_int, color: Color) Image { - return rl.GenImageColor(width, height, color); + return rl.genImageColor(width, height, color); } pub fn genGradientV(width: c_int, height: c_int, top: Color, bottom: Color) Image { - return rl.GenImageGradientV(width, height, top, bottom); + return rl.genImageGradientV(width, height, top, bottom); } pub fn genGradientH(width: c_int, height: c_int, left: Color, right: Color) Image { - return rl.GenImageGradientH(width, height, left, right); + return rl.genImageGradientH(width, height, left, right); } pub fn genGradientRadial(width: c_int, height: c_int, density: f32, inner: Color, outer: Color) Image { - return rl.GenImageGradientRadial(width, height, density, inner, outer); + return rl.genImageGradientRadial(width, height, density, inner, outer); } pub fn genChecked(width: c_int, height: c_int, checksX: c_int, checksY: c_int, col1: Color, col2: Color) Image { - return rl.GenImageChecked(width, height, checksX, checksY, col1, col2); + return rl.genImageChecked(width, height, checksX, checksY, col1, col2); } pub fn genWhiteNoise(width: c_int, height: c_int, factor: f32) Image { - return rl.GenImageWhiteNoise(width, height, factor); + return rl.genImageWhiteNoise(width, height, factor); } pub fn genCellular(width: c_int, height: c_int, tileSize: c_int) Image { - return rl.GenImageCellular(width, height, tileSize); + return rl.genImageCellular(width, height, tileSize); } pub fn useAsWindowIcon(self: Image) void { - rl.SetWindowIcon(self); + rl.setWindowIcon(self); } }; @@ -178,11 +178,11 @@ pub const RenderTexture = extern struct { depth: Texture, pub fn begin(self: RenderTexture2D) void { - rl.BeginTextureMode(self); + rl.beginTextureMode(self); } pub fn end(_: RenderTexture2D) void { - rl.EndTextureMode(); + rl.endTextureMode(); } }; pub const RenderTexture2D = RenderTexture; @@ -221,23 +221,23 @@ pub const Camera3D = extern struct { projection: CameraProjection, pub fn begin(self: Camera3D) void { - rl.BeginMode3D(self); + rl.beginMode3D(self); } pub fn update(self: *Camera3D) void { - rl.UpdateCamera(@as([*c]Camera3D, self)); + rl.updateCamera(self); } pub fn getMatrix(self: Camera3D) Matrix { - return rl.GetCameraMatrix(self); + return rl.getCameraMatrix(self); } pub fn setMode(self: Camera3D, mode: CameraMode) void { - rl.SetCameraMode(self, mode); + rl.setCameraMode(self, mode); } pub fn end(_: Camera3D) void { - rl.EndMode3D(); + rl.endMode3D(); } }; pub const Camera = Camera3D; @@ -249,15 +249,15 @@ pub const Camera2D = extern struct { zoom: f32, pub fn begin(self: Camera2D) void { - rl.BeginMode2D(self); + rl.beginMode2D(self); } pub fn getMatrix(self: Camera2D) Matrix { - return rl.GetCameraMatrix2D(self); + return rl.getCameraMatrix2D(self); } pub fn end(_: Camera2D) void { - rl.EndMode2D(); + rl.endMode2D(); } }; @@ -279,11 +279,11 @@ pub const Mesh = extern struct { vboId: [*c]c_uint, pub fn draw(self: Mesh, material: Material, transform: Matrix) void { - rl.DrawMesh(self, material, transform); + rl.drawMesh(self, material, transform); } pub fn drawInstanced(self: Mesh, material: Material, transforms: []const Matrix) void { - rl.DrawMeshInstanced(self, material, @as([*c]const Matrix, transforms), transforms.len); + rl.drawMeshInstanced(self, material, transforms, transforms.len); } }; @@ -292,11 +292,11 @@ pub const Shader = extern struct { locs: [*c]c_int, pub fn activate(self: Shader) void { - rl.BeginShaderMode(self); + rl.beginShaderMode(self); } pub fn deactivate(_: Shader) void { - rl.EndShaderMode(); + rl.endShaderMode(); } }; @@ -335,27 +335,27 @@ pub const Model = extern struct { bindPose: [*c]Transform, pub fn init(fileName: [*c]const u8) Model { - return rl.LoadModel(fileName); + return rl.loadModel(fileName); } pub fn initFromMesh(mesh: Mesh) Model { - return rl.LoadModelFromMesh(mesh); + return rl.loadModelFromMesh(mesh); } pub fn draw(self: Mesh, position: Vector3, scale: f32, tint: Color) void { - return rl.DrawMesh(self, position, scale, tint); + return rl.drawMesh(self, position, scale, tint); } pub fn drawEx(self: Mesh, position: Vector3, rotationAxis: Vector3, rotationAngle: f32, scale: Vector3, tint: Color) void { - return rl.DrawMeshEx(self, position, rotationAxis, rotationAngle, scale, tint); + return rl.drawMeshEx(self, position, rotationAxis, rotationAngle, scale, tint); } pub fn drawWires(self: Mesh, position: Vector3, scale: f32, tint: Color) void { - return rl.DrawMeshWires(self, position, scale, tint); + return rl.drawMeshWires(self, position, scale, tint); } pub fn drawWiresEx(self: Mesh, position: Vector3, rotationAxis: Vector3, rotationAngle: f32, scale: Vector3, tint: Color) void { - return rl.DrawMeshWiresEx(self, position, rotationAxis, rotationAngle, scale, tint); + return rl.drawMeshWiresEx(self, position, rotationAxis, rotationAngle, scale, tint); } }; @@ -809,9 +809,9 @@ pub const LoadFileTextCallback = ?fn ([*c]const u8) callconv(.C) [*c]u8; pub const SaveFileTextCallback = ?fn ([*c]const u8, [*c]u8) callconv(.C) bool; pub const AudioCallback = ?*const fn (?*anyopaque, c_uint) callconv(.C) void; -pub const RAYLIB_VERSION_MAJOR = @as(c_int, 4); -pub const RAYLIB_VERSION_MINOR = @as(c_int, 5); -pub const RAYLIB_VERSION_PATCH = @as(c_int, 0); +pub const RAYLIB_VERSION_MAJOR = @as(i32, 4); +pub const RAYLIB_VERSION_MINOR = @as(i32, 5); +pub const RAYLIB_VERSION_PATCH = @as(i32, 0); pub const RAYLIB_VERSION = "4.5-dev"; pub const MAX_TOUCH_POINTS = 10; @@ -823,513 +823,2060 @@ pub const MATERIAL_MAP_SPECULAR = MaterialMapIndex.MATERIAL_MAP_METALNESS; pub const SHADER_LOC_MAP_DIFFUSE = ShaderLocationIndex.SHADER_LOC_MAP_ALBEDO; pub const SHADER_LOC_MAP_SPECULAR = ShaderLocationIndex.SHADER_LOC_MAP_METALNESS; -pub extern fn InitWindow(width: c_int, height: c_int, title: [*c]const u8) void; -pub extern fn WindowShouldClose() bool; -pub extern fn CloseWindow() void; -pub extern fn IsWindowReady() bool; -pub extern fn IsWindowFullscreen() bool; -pub extern fn IsWindowHidden() bool; -pub extern fn IsWindowMinimized() bool; -pub extern fn IsWindowMaximized() bool; -pub extern fn IsWindowFocused() bool; -pub extern fn IsWindowResized() bool; -pub extern fn IsWindowState(flag: c_uint) bool; -pub extern fn SetWindowState(flags: c_uint) void; -pub extern fn ClearWindowState(flags: c_uint) void; -pub extern fn ToggleFullscreen() void; -pub extern fn MaximizeWindow() void; -pub extern fn MinimizeWindow() void; -pub extern fn RestoreWindow() void; -pub extern fn SetWindowIcon(image: Image) void; -pub extern fn SetWindowTitle(title: [*c]const u8) void; -pub extern fn SetWindowPosition(x: c_int, y: c_int) void; -pub extern fn SetWindowMonitor(monitor: c_int) void; -pub extern fn SetWindowMinSize(width: c_int, height: c_int) void; -pub extern fn SetWindowSize(width: c_int, height: c_int) void; -pub extern fn SetWindowOpacity(opacity: f32) void; -pub extern fn GetWindowHandle() *anyopaque; -pub extern fn GetScreenWidth() c_int; -pub extern fn GetScreenHeight() c_int; -pub extern fn GetRenderWidth() c_int; -pub extern fn GetRenderHeight() c_int; -pub extern fn GetMonitorCount() c_int; -pub extern fn GetCurrentMonitor() c_int; -pub extern fn GetMonitorPosition(monitor: c_int) Vector2; -pub extern fn GetMonitorWidth(monitor: c_int) c_int; -pub extern fn GetMonitorHeight(monitor: c_int) c_int; -pub extern fn GetMonitorPhysicalWidth(monitor: c_int) c_int; -pub extern fn GetMonitorPhysicalHeight(monitor: c_int) c_int; -pub extern fn GetMonitorRefreshRate(monitor: c_int) c_int; -pub extern fn GetWindowPosition() Vector2; -pub extern fn GetWindowScaleDPI() Vector2; -pub extern fn GetMonitorName(monitor: c_int) [*c]const u8; -pub extern fn SetClipboardText(text: [*c]const u8) void; -pub extern fn GetClipboardText() [*c]const u8; -pub extern fn EnableEventWaiting() void; -pub extern fn DisableEventWaiting() void; -pub extern fn SwapScreenBuffer() void; -pub extern fn PollInputEvents() void; -pub extern fn WaitTime(seconds: f64) void; -pub extern fn ShowCursor() void; -pub extern fn HideCursor() void; -pub extern fn IsCursorHidden() bool; -pub extern fn EnableCursor() void; -pub extern fn DisableCursor() void; -pub extern fn IsCursorOnScreen() bool; -pub extern fn ClearBackground(color: Color) void; -pub extern fn BeginDrawing() void; -pub extern fn EndDrawing() void; -pub extern fn BeginMode2D(camera: Camera2D) void; -pub extern fn EndMode2D() void; -pub extern fn BeginMode3D(camera: Camera3D) void; -pub extern fn EndMode3D() void; -pub extern fn BeginTextureMode(target: RenderTexture2D) void; -pub extern fn EndTextureMode() void; -pub extern fn BeginShaderMode(shader: Shader) void; -pub extern fn EndShaderMode() void; -pub extern fn BeginBlendMode(mode: c_int) void; -pub extern fn EndBlendMode() void; -pub extern fn BeginScissorMode(x: c_int, y: c_int, width: c_int, height: c_int) void; -pub extern fn EndScissorMode() void; -pub extern fn BeginVrStereoMode(config: VrStereoConfig) void; -pub extern fn EndVrStereoMode() void; -pub extern fn LoadVrStereoConfig(device: VrDeviceInfo) VrStereoConfig; -pub extern fn UnloadVrStereoConfig(config: VrStereoConfig) void; -pub extern fn LoadShader(vsFileName: [*c]const u8, fsFileName: [*c]const u8) Shader; -pub extern fn LoadShaderFromMemory(vsCode: [*c]const u8, fsCode: [*c]const u8) Shader; -pub extern fn GetShaderLocation(shader: Shader, uniformName: [*c]const u8) c_int; -pub extern fn GetShaderLocationAttrib(shader: Shader, attribName: [*c]const u8) c_int; -pub extern fn SetShaderValue(shader: Shader, locIndex: c_int, value: *const anyopaque, uniformType: c_int) void; -pub extern fn SetShaderValueV(shader: Shader, locIndex: c_int, value: *const anyopaque, uniformType: c_int, count: c_int) void; -pub extern fn SetShaderValueMatrix(shader: Shader, locIndex: c_int, mat: Matrix) void; -pub extern fn SetShaderValueTexture(shader: Shader, locIndex: c_int, texture: Texture2D) void; -pub extern fn UnloadShader(shader: Shader) void; -pub extern fn GetMouseRay(mousePosition: Vector2, camera: Camera) Ray; -pub extern fn GetCameraMatrix(camera: Camera) Matrix; -pub extern fn GetCameraMatrix2D(camera: Camera2D) Matrix; -pub extern fn GetWorldToScreen(position: Vector3, camera: Camera) Vector2; -pub extern fn GetScreenToWorld2D(position: Vector2, camera: Camera2D) Vector2; -pub extern fn GetWorldToScreenEx(position: Vector3, camera: Camera, width: c_int, height: c_int) Vector2; -pub extern fn GetWorldToScreen2D(position: Vector2, camera: Camera2D) Vector2; -pub extern fn SetTargetFPS(fps: c_int) void; -pub extern fn GetFPS() c_int; -pub extern fn GetFrameTime() f32; -pub extern fn GetTime() f64; -pub extern fn GetRandomValue(min: c_int, max: c_int) c_int; -pub extern fn SetRandomSeed(seed: c_uint) void; -pub extern fn TakeScreenshot(fileName: [*c]const u8) void; -pub extern fn SetConfigFlags(flags: c_uint) void; -pub extern fn TraceLog(logLevel: c_int, text: [*c]const u8, ...) void; -pub extern fn SetTraceLogLevel(logLevel: c_int) void; -pub extern fn MemAlloc(size: c_uint) *anyopaque; -pub extern fn MemRealloc(ptr: *anyopaque, size: c_uint) *anyopaque; -pub extern fn MemFree(ptr: *anyopaque) void; -pub extern fn OpenURL(url: [*c]const u8) void; -pub extern fn SetLoadFileDataCallback(callback: LoadFileDataCallback) void; -pub extern fn SetSaveFileDataCallback(callback: SaveFileDataCallback) void; -pub extern fn SetLoadFileTextCallback(callback: LoadFileTextCallback) void; -pub extern fn SetSaveFileTextCallback(callback: SaveFileTextCallback) void; -pub extern fn LoadFileData(fileName: [*c]const u8, bytesRead: [*c]c_uint) [*c]u8; -pub extern fn UnloadFileData(data: [*c]u8) void; -pub extern fn SaveFileData(fileName: [*c]const u8, data: *anyopaque, bytesToWrite: c_uint) bool; -pub extern fn ExportDataAsCode(data: [*c]const u8, size: c_uint, fileName: [*c]const u8) bool; -pub extern fn LoadFileText(fileName: [*c]const u8) [*c]u8; -pub extern fn UnloadFileText(text: [*c]u8) void; -pub extern fn SaveFileText(fileName: [*c]const u8, text: [*c]u8) bool; -pub extern fn FileExists(fileName: [*c]const u8) bool; -pub extern fn DirectoryExists(dirPath: [*c]const u8) bool; -pub extern fn IsFileExtension(fileName: [*c]const u8, ext: [*c]const u8) bool; -pub extern fn GetFileLength(fileName: [*c]const u8) c_int; -pub extern fn GetFileExtension(fileName: [*c]const u8) [*c]const u8; -pub extern fn GetFileName(filePath: [*c]const u8) [*c]const u8; -pub extern fn GetFileNameWithoutExt(filePath: [*c]const u8) [*c]const u8; -pub extern fn GetDirectoryPath(filePath: [*c]const u8) [*c]const u8; -pub extern fn GetPrevDirectoryPath(dirPath: [*c]const u8) [*c]const u8; -pub extern fn GetWorkingDirectory() [*c]const u8; -pub extern fn GetApplicationDirectory() [*c]const u8; -pub extern fn ChangeDirectory(dir: [*c]const u8) bool; -pub extern fn IsPathFile(path: [*c]const u8) bool; -pub extern fn LoadDirectoryFiles(dirPath: [*c]const u8) FilePathList; -pub extern fn LoadDirectoryFilesEx(basePath: [*c]const u8, filter: [*c]const u8, scanSubdirs: bool) FilePathList; -pub extern fn UnloadDirectoryFiles(files: FilePathList) void; -pub extern fn IsFileDropped() bool; -pub extern fn LoadDroppedFiles() FilePathList; -pub extern fn UnloadDroppedFiles(files: FilePathList) void; -pub extern fn GetFileModTime(fileName: [*c]const u8) c_long; -pub extern fn CompressData(data: [*c]const u8, dataSize: c_int, compDataSize: [*c]c_int) [*c]u8; -pub extern fn DecompressData(compData: [*c]const u8, compDataSize: c_int, dataSize: [*c]c_int) [*c]u8; -pub extern fn EncodeDataBase64(data: [*c]const u8, dataSize: c_int, outputSize: [*c]c_int) [*c]u8; -pub extern fn DecodeDataBase64(data: [*c]const u8, outputSize: [*c]c_int) [*c]u8; -pub extern fn IsKeyPressed(key: KeyboardKey) bool; -pub extern fn IsKeyDown(key: KeyboardKey) bool; -pub extern fn IsKeyReleased(key: KeyboardKey) bool; -pub extern fn IsKeyUp(key: KeyboardKey) bool; -pub extern fn SetExitKey(key: KeyboardKey) void; -pub extern fn GetKeyPressed() c_int; -pub extern fn GetCharPressed() c_int; -pub extern fn IsGamepadAvailable(gamepad: c_int) bool; -pub extern fn GetGamepadName(gamepad: c_int) [*c]const u8; -pub extern fn IsGamepadButtonPressed(gamepad: c_int, button: GamepadButton) bool; -pub extern fn IsGamepadButtonDown(gamepad: c_int, button: GamepadButton) bool; -pub extern fn IsGamepadButtonReleased(gamepad: c_int, button: GamepadButton) bool; -pub extern fn IsGamepadButtonUp(gamepad: c_int, button: GamepadButton) bool; -pub extern fn GetGamepadButtonPressed() c_int; -pub extern fn GetGamepadAxisCount(gamepad: c_int) c_int; -pub extern fn GetGamepadAxisMovement(gamepad: c_int, axis: c_int) f32; -pub extern fn SetGamepadMappings(mappings: [*c]const u8) c_int; -pub extern fn IsMouseButtonPressed(button: MouseButton) bool; -pub extern fn IsMouseButtonDown(button: MouseButton) bool; -pub extern fn IsMouseButtonReleased(button: MouseButton) bool; -pub extern fn IsMouseButtonUp(button: MouseButton) bool; -pub extern fn GetMouseX() c_int; -pub extern fn GetMouseY() c_int; -pub extern fn GetMousePosition() Vector2; -pub extern fn GetMouseDelta() Vector2; -pub extern fn SetMousePosition(x: c_int, y: c_int) void; -pub extern fn SetMouseOffset(offsetX: c_int, offsetY: c_int) void; -pub extern fn SetMouseScale(scaleX: f32, scaleY: f32) void; -pub extern fn GetMouseWheelMove() f32; -pub extern fn GetMouseWheelMoveV() Vector2; -pub extern fn SetMouseCursor(cursor: c_int) void; -pub extern fn GetTouchX() c_int; -pub extern fn GetTouchY() c_int; -pub extern fn GetTouchPosition(index: c_int) Vector2; -pub extern fn GetTouchPointId(index: c_int) c_int; -pub extern fn GetTouchPointCount() c_int; -pub extern fn SetGesturesEnabled(flags: c_uint) void; -pub extern fn IsGestureDetected(gesture: Gestures) bool; -pub extern fn GetGestureDetected() c_int; -pub extern fn GetGestureHoldDuration() f32; -pub extern fn GetGestureDragVector() Vector2; -pub extern fn GetGestureDragAngle() f32; -pub extern fn GetGesturePinchVector() Vector2; -pub extern fn GetGesturePinchAngle() f32; -pub extern fn SetCameraMode(camera: Camera, mode: CameraMode) void; -pub extern fn UpdateCamera(camera: [*c]Camera) void; -pub extern fn SetCameraPanControl(keyPan: c_int) void; -pub extern fn SetCameraAltControl(keyAlt: c_int) void; -pub extern fn SetCameraSmoothZoomControl(keySmoothZoom: c_int) void; -pub extern fn SetCameraMoveControls(keyFront: c_int, keyBack: c_int, keyRight: c_int, keyLeft: c_int, keyUp: c_int, keyDown: c_int) void; -pub extern fn SetShapesTexture(texture: Texture2D, source: Rectangle) void; -pub extern fn DrawPixel(posX: c_int, posY: c_int, color: Color) void; -pub extern fn DrawPixelV(position: Vector2, color: Color) void; -pub extern fn DrawLine(startPosX: c_int, startPosY: c_int, endPosX: c_int, endPosY: c_int, color: Color) void; -pub extern fn DrawLineV(startPos: Vector2, endPos: Vector2, color: Color) void; -pub extern fn DrawLineEx(startPos: Vector2, endPos: Vector2, thick: f32, color: Color) void; -pub extern fn DrawLineBezier(startPos: Vector2, endPos: Vector2, thick: f32, color: Color) void; -pub extern fn DrawLineBezierQuad(startPos: Vector2, endPos: Vector2, controlPos: Vector2, thick: f32, color: Color) void; -pub extern fn DrawLineBezierCubic(startPos: Vector2, endPos: Vector2, startControlPos: Vector2, endControlPos: Vector2, thick: f32, color: Color) void; -pub extern fn DrawLineStrip(points: [*c]Vector2, pointCount: c_int, color: Color) void; -pub extern fn DrawCircle(centerX: c_int, centerY: c_int, radius: f32, color: Color) void; -pub extern fn DrawCircleSector(center: Vector2, radius: f32, startAngle: f32, endAngle: f32, segments: c_int, color: Color) void; -pub extern fn DrawCircleSectorLines(center: Vector2, radius: f32, startAngle: f32, endAngle: f32, segments: c_int, color: Color) void; -pub extern fn DrawCircleGradient(centerX: c_int, centerY: c_int, radius: f32, color1: Color, color2: Color) void; -pub extern fn DrawCircleV(center: Vector2, radius: f32, color: Color) void; -pub extern fn DrawCircleLines(centerX: c_int, centerY: c_int, radius: f32, color: Color) void; -pub extern fn DrawEllipse(centerX: c_int, centerY: c_int, radiusH: f32, radiusV: f32, color: Color) void; -pub extern fn DrawEllipseLines(centerX: c_int, centerY: c_int, radiusH: f32, radiusV: f32, color: Color) void; -pub extern fn DrawRing(center: Vector2, innerRadius: f32, outerRadius: f32, startAngle: f32, endAngle: f32, segments: c_int, color: Color) void; -pub extern fn DrawRingLines(center: Vector2, innerRadius: f32, outerRadius: f32, startAngle: f32, endAngle: f32, segments: c_int, color: Color) void; -pub extern fn DrawRectangle(posX: c_int, posY: c_int, width: c_int, height: c_int, color: Color) void; -pub extern fn DrawRectangleV(position: Vector2, size: Vector2, color: Color) void; -pub extern fn DrawRectangleRec(rec: Rectangle, color: Color) void; -pub extern fn DrawRectanglePro(rec: Rectangle, origin: Vector2, rotation: f32, color: Color) void; -pub extern fn DrawRectangleGradientV(posX: c_int, posY: c_int, width: c_int, height: c_int, color1: Color, color2: Color) void; -pub extern fn DrawRectangleGradientH(posX: c_int, posY: c_int, width: c_int, height: c_int, color1: Color, color2: Color) void; -pub extern fn DrawRectangleGradientEx(rec: Rectangle, col1: Color, col2: Color, col3: Color, col4: Color) void; -pub extern fn DrawRectangleLines(posX: c_int, posY: c_int, width: c_int, height: c_int, color: Color) void; -pub extern fn DrawRectangleLinesEx(rec: Rectangle, lineThick: f32, color: Color) void; -pub extern fn DrawRectangleRounded(rec: Rectangle, roundness: f32, segments: c_int, color: Color) void; -pub extern fn DrawRectangleRoundedLines(rec: Rectangle, roundness: f32, segments: c_int, lineThick: f32, color: Color) void; -pub extern fn DrawTriangle(v1: Vector2, v2: Vector2, v3: Vector2, color: Color) void; -pub extern fn DrawTriangleLines(v1: Vector2, v2: Vector2, v3: Vector2, color: Color) void; -pub extern fn DrawTriangleFan(points: [*c]Vector2, pointCount: c_int, color: Color) void; -pub extern fn DrawTriangleStrip(points: [*c]Vector2, pointCount: c_int, color: Color) void; -pub extern fn DrawPoly(center: Vector2, sides: c_int, radius: f32, rotation: f32, color: Color) void; -pub extern fn DrawPolyLines(center: Vector2, sides: c_int, radius: f32, rotation: f32, color: Color) void; -pub extern fn DrawPolyLinesEx(center: Vector2, sides: c_int, radius: f32, rotation: f32, lineThick: f32, color: Color) void; -pub extern fn CheckCollisionRecs(rec1: Rectangle, rec2: Rectangle) bool; -pub extern fn CheckCollisionCircles(center1: Vector2, radius1: f32, center2: Vector2, radius2: f32) bool; -pub extern fn CheckCollisionCircleRec(center: Vector2, radius: f32, rec: Rectangle) bool; -pub extern fn CheckCollisionPointRec(point: Vector2, rec: Rectangle) bool; -pub extern fn CheckCollisionPointCircle(point: Vector2, center: Vector2, radius: f32) bool; -pub extern fn CheckCollisionPointTriangle(point: Vector2, p1: Vector2, p2: Vector2, p3: Vector2) bool; -pub extern fn CheckCollisionPointPoly(point: Vector2, points: [*c]Vector2, pointCount: c_int) bool; -pub extern fn CheckCollisionLines(startPos1: Vector2, endPos1: Vector2, startPos2: Vector2, endPos2: Vector2, collisionPoint: [*c]Vector2) bool; -pub extern fn CheckCollisionPointLine(point: Vector2, p1: Vector2, p2: Vector2, threshold: c_int) bool; -pub extern fn GetCollisionRec(rec1: Rectangle, rec2: Rectangle) Rectangle; -pub extern fn LoadImage(fileName: [*c]const u8) Image; -pub extern fn LoadImageRaw(fileName: [*c]const u8, width: c_int, height: c_int, format: c_int, headerSize: c_int) Image; -pub extern fn LoadImageAnim(fileName: [*c]const u8, frames: [*c]c_int) Image; -pub extern fn LoadImageFromMemory(fileType: [*c]const u8, fileData: [*c]const u8, dataSize: c_int) Image; -pub extern fn LoadImageFromTexture(texture: Texture2D) Image; -pub extern fn LoadImageFromScreen() Image; -pub extern fn UnloadImage(image: Image) void; -pub extern fn ExportImage(image: Image, fileName: [*c]const u8) bool; -pub extern fn ExportImageAsCode(image: Image, fileName: [*c]const u8) bool; -pub extern fn GenImageColor(width: c_int, height: c_int, color: Color) Image; -pub extern fn GenImageGradientV(width: c_int, height: c_int, top: Color, bottom: Color) Image; -pub extern fn GenImageGradientH(width: c_int, height: c_int, left: Color, right: Color) Image; -pub extern fn GenImageGradientRadial(width: c_int, height: c_int, density: f32, inner: Color, outer: Color) Image; -pub extern fn GenImageChecked(width: c_int, height: c_int, checksX: c_int, checksY: c_int, col1: Color, col2: Color) Image; -pub extern fn GenImageWhiteNoise(width: c_int, height: c_int, factor: f32) Image; -pub extern fn GenImagePerlinNoise(width: c_int, height: c_int, offsetX: c_int, offsetY: c_int, scale: f32) Image; -pub extern fn GenImageCellular(width: c_int, height: c_int, tileSize: c_int) Image; -pub extern fn GenImageText(width: c_int, height: c_int, text: [*c]const u8) Image; -pub extern fn ImageCopy(image: Image) Image; -pub extern fn ImageFromImage(image: Image, rec: Rectangle) Image; -pub extern fn ImageText(text: [*c]const u8, fontSize: c_int, color: Color) Image; -pub extern fn ImageTextEx(font: Font, text: [*c]const u8, fontSize: f32, spacing: f32, tint: Color) Image; -pub extern fn ImageFormat(image: [*c]Image, newFormat: c_int) void; -pub extern fn ImageToPOT(image: [*c]Image, fill: Color) void; -pub extern fn ImageCrop(image: [*c]Image, crop: Rectangle) void; -pub extern fn ImageAlphaCrop(image: [*c]Image, threshold: f32) void; -pub extern fn ImageAlphaClear(image: [*c]Image, color: Color, threshold: f32) void; -pub extern fn ImageAlphaMask(image: [*c]Image, alphaMask: Image) void; -pub extern fn ImageAlphaPremultiply(image: [*c]Image) void; -pub extern fn ImageBlurGaussian(image: [*c]Image, blurSize: c_int) void; -pub extern fn ImageResize(image: [*c]Image, newWidth: c_int, newHeight: c_int) void; -pub extern fn ImageResizeNN(image: [*c]Image, newWidth: c_int, newHeight: c_int) void; -pub extern fn ImageResizeCanvas(image: [*c]Image, newWidth: c_int, newHeight: c_int, offsetX: c_int, offsetY: c_int, fill: Color) void; -pub extern fn ImageMipmaps(image: [*c]Image) void; -pub extern fn ImageDither(image: [*c]Image, rBpp: c_int, gBpp: c_int, bBpp: c_int, aBpp: c_int) void; -pub extern fn ImageFlipVertical(image: [*c]Image) void; -pub extern fn ImageFlipHorizontal(image: [*c]Image) void; -pub extern fn ImageRotateCW(image: [*c]Image) void; -pub extern fn ImageRotateCCW(image: [*c]Image) void; -pub extern fn ImageColorTint(image: [*c]Image, color: Color) void; -pub extern fn ImageColorInvert(image: [*c]Image) void; -pub extern fn ImageColorGrayscale(image: [*c]Image) void; -pub extern fn ImageColorContrast(image: [*c]Image, contrast: f32) void; -pub extern fn ImageColorBrightness(image: [*c]Image, brightness: c_int) void; -pub extern fn ImageColorReplace(image: [*c]Image, color: Color, replace: Color) void; -pub extern fn LoadImageColors(image: Image) [*c]Color; -pub extern fn LoadImagePalette(image: Image, maxPaletteSize: c_int, colorCount: [*c]c_int) [*c]Color; -pub extern fn UnloadImageColors(colors: [*c]Color) void; -pub extern fn UnloadImagePalette(colors: [*c]Color) void; -pub extern fn GetImageAlphaBorder(image: Image, threshold: f32) Rectangle; -pub extern fn GetImageColor(image: Image, x: c_int, y: c_int) Color; -pub extern fn ImageClearBackground(dst: [*c]Image, color: Color) void; -pub extern fn ImageDrawPixel(dst: [*c]Image, posX: c_int, posY: c_int, color: Color) void; -pub extern fn ImageDrawPixelV(dst: [*c]Image, position: Vector2, color: Color) void; -pub extern fn ImageDrawLine(dst: [*c]Image, startPosX: c_int, startPosY: c_int, endPosX: c_int, endPosY: c_int, color: Color) void; -pub extern fn ImageDrawLineV(dst: [*c]Image, start: Vector2, end: Vector2, color: Color) void; -pub extern fn ImageDrawCircle(dst: [*c]Image, centerX: c_int, centerY: c_int, radius: c_int, color: Color) void; -pub extern fn ImageDrawCircleV(dst: [*c]Image, center: Vector2, radius: c_int, color: Color) void; -pub extern fn ImageDrawCircleLines(dst: [*c]Image, centerX: c_int, centerY: c_int, radius: c_int, color: Color) void; -pub extern fn ImageDrawCircleLinesV(dst: [*c]Image, center: Vector2, radius: c_int, color: Color) void; -pub extern fn ImageDrawRectangle(dst: [*c]Image, posX: c_int, posY: c_int, width: c_int, height: c_int, color: Color) void; -pub extern fn ImageDrawRectangleV(dst: [*c]Image, position: Vector2, size: Vector2, color: Color) void; -pub extern fn ImageDrawRectangleRec(dst: [*c]Image, rec: Rectangle, color: Color) void; -pub extern fn ImageDrawRectangleLines(dst: [*c]Image, rec: Rectangle, thick: c_int, color: Color) void; -pub extern fn ImageDraw(dst: [*c]Image, src: Image, srcRec: Rectangle, dstRec: Rectangle, tint: Color) void; -pub extern fn ImageDrawText(dst: [*c]Image, text: [*c]const u8, posX: c_int, posY: c_int, fontSize: c_int, color: Color) void; -pub extern fn ImageDrawTextEx(dst: [*c]Image, font: Font, text: [*c]const u8, position: Vector2, fontSize: f32, spacing: f32, tint: Color) void; -pub extern fn LoadTexture(fileName: [*c]const u8) Texture2D; -pub extern fn LoadTextureFromImage(image: Image) Texture2D; -pub extern fn LoadTextureCubemap(image: Image, layout: c_int) TextureCubemap; -pub extern fn LoadRenderTexture(width: c_int, height: c_int) RenderTexture2D; -pub extern fn UnloadTexture(texture: Texture2D) void; -pub extern fn UnloadRenderTexture(target: RenderTexture2D) void; -pub extern fn UpdateTexture(texture: Texture2D, pixels: *const anyopaque) void; -pub extern fn UpdateTextureRec(texture: Texture2D, rec: Rectangle, pixels: *const anyopaque) void; -pub extern fn GenTextureMipmaps(texture: [*c]Texture2D) void; -pub extern fn SetTextureFilter(texture: Texture2D, filter: c_int) void; -pub extern fn SetTextureWrap(texture: Texture2D, wrap: c_int) void; -pub extern fn DrawTexture(texture: Texture2D, posX: c_int, posY: c_int, tint: Color) void; -pub extern fn DrawTextureV(texture: Texture2D, position: Vector2, tint: Color) void; -pub extern fn DrawTextureEx(texture: Texture2D, position: Vector2, rotation: f32, scale: f32, tint: Color) void; -pub extern fn DrawTextureRec(texture: Texture2D, source: Rectangle, position: Vector2, tint: Color) void; -pub extern fn DrawTexturePro(texture: Texture2D, source: Rectangle, dest: Rectangle, origin: Vector2, rotation: f32, tint: Color) void; -pub extern fn DrawTextureNPatch(texture: Texture2D, nPatchInfo: NPatchInfo, dest: Rectangle, origin: Vector2, rotation: f32, tint: Color) void; -pub extern fn Fade(color: Color, alpha: f32) Color; -pub extern fn ColorToInt(color: Color) c_int; -pub extern fn ColorNormalize(color: Color) Vector4; -pub extern fn ColorFromNormalized(normalized: Vector4) Color; -pub extern fn ColorToHSV(color: Color) Vector3; -pub extern fn ColorFromHSV(hue: f32, saturation: f32, value: f32) Color; -pub extern fn ColorTint(color: Color, tint: Color) Color; -pub extern fn ColorBrightness(color: Color, factor: f32) Color; -pub extern fn ColorContrast(color: Color, contrast: f32) Color; -pub extern fn ColorAlpha(color: Color, alpha: f32) Color; -pub extern fn ColorAlphaBlend(dst: Color, src: Color, tint: Color) Color; -pub extern fn GetColor(hexValue: c_uint) Color; -pub extern fn GetPixelColor(srcPtr: *anyopaque, format: c_int) Color; -pub extern fn SetPixelColor(dstPtr: *anyopaque, color: Color, format: c_int) void; -pub extern fn GetPixelDataSize(width: c_int, height: c_int, format: c_int) c_int; -pub extern fn GetFontDefault() Font; -pub extern fn LoadFont(fileName: [*c]const u8) Font; -pub extern fn LoadFontEx(fileName: [*c]const u8, fontSize: c_int, fontChars: [*c]c_int, glyphCount: c_int) Font; -pub extern fn LoadFontFromImage(image: Image, key: Color, firstChar: c_int) Font; -pub extern fn LoadFontFromMemory(fileType: [*c]const u8, fileData: [*c]const u8, dataSize: c_int, fontSize: c_int, fontChars: [*c]c_int, glyphCount: c_int) Font; -pub extern fn LoadFontData(fileData: [*c]const u8, dataSize: c_int, fontSize: c_int, fontChars: [*c]c_int, glyphCount: c_int, type: c_int) [*c]GlyphInfo; -pub extern fn GenImageFontAtlas(chars: [*c]const GlyphInfo, recs: [*c][*c]Rectangle, glyphCount: c_int, fontSize: c_int, padding: c_int, packMethod: c_int) Image; -pub extern fn UnloadFontData(chars: [*c]GlyphInfo, glyphCount: c_int) void; -pub extern fn UnloadFont(font: Font) void; -pub extern fn ExportFontAsCode(font: Font, fileName: [*c]const u8) bool; -pub extern fn DrawFPS(posX: c_int, posY: c_int) void; -pub extern fn DrawText(text: [*c]const u8, posX: c_int, posY: c_int, fontSize: c_int, color: Color) void; -pub extern fn DrawTextEx(font: Font, text: [*c]const u8, position: Vector2, fontSize: f32, spacing: f32, tint: Color) void; -pub extern fn DrawTextPro(font: Font, text: [*c]const u8, position: Vector2, origin: Vector2, rotation: f32, fontSize: f32, spacing: f32, tint: Color) void; -pub extern fn DrawTextCodepoint(font: Font, codepoint: c_int, position: Vector2, fontSize: f32, tint: Color) void; -pub extern fn DrawTextCodepoints(font: Font, codepoints: [*c]const c_int, count: c_int, position: Vector2, fontSize: f32, spacing: f32, tint: Color) void; -pub extern fn MeasureText(text: [*c]const u8, fontSize: c_int) c_int; -pub extern fn MeasureTextEx(font: Font, text: [*c]const u8, fontSize: f32, spacing: f32) Vector2; -pub extern fn GetGlyphIndex(font: Font, codepoint: c_int) c_int; -pub extern fn GetGlyphInfo(font: Font, codepoint: c_int) GlyphInfo; -pub extern fn GetGlyphAtlasRec(font: Font, codepoint: c_int) Rectangle; -pub extern fn LoadUTF8(codepoints: [*c]const c_int, length: c_int) [*c]u8; -pub extern fn UnloadUTF8(text: [*c]u8) void; -pub extern fn LoadCodepoints(text: [*c]const u8, count: [*c]c_int) [*c]c_int; -pub extern fn UnloadCodepoints(codepoints: [*c]c_int) void; -pub extern fn GetCodepointCount(text: [*c]const u8) c_int; -pub extern fn GetCodepoint(text: [*c]const u8, codepointSize: [*c]c_int) c_int; -pub extern fn GetCodepointNext(text: [*c]const u8, codepointSize: [*c]c_int) c_int; -pub extern fn GetCodepointPrevious(text: [*c]const u8, codepointSize: [*c]c_int) c_int; -pub extern fn CodepointToUTF8(codepoint: c_int, utf8Size: [*c]c_int) [*c]const u8; -pub extern fn TextCopy(dst: [*c]u8, src: [*c]const u8) c_int; -pub extern fn TextIsEqual(text1: [*c]const u8, text2: [*c]const u8) bool; -pub extern fn TextLength(text: [*c]const u8) c_uint; -pub extern fn TextFormat(text: [*c]const u8, ...) [*c]const u8; -pub extern fn TextSubtext(text: [*c]const u8, position: c_int, length: c_int) [*c]const u8; -pub extern fn TextReplace(text: [*c]u8, replace: [*c]const u8, by: [*c]const u8) [*c]u8; -pub extern fn TextInsert(text: [*c]const u8, insert: [*c]const u8, position: c_int) [*c]u8; -pub extern fn TextJoin(textList: [*c][*c]const u8, count: c_int, delimiter: [*c]const u8) [*c]const u8; -pub extern fn TextSplit(text: [*c]const u8, delimiter: u8, count: [*c]c_int) [*c][*c]const u8; -pub extern fn TextAppend(text: [*c]u8, append: [*c]const u8, position: [*c]c_int) void; -pub extern fn TextFindIndex(text: [*c]const u8, find: [*c]const u8) c_int; -pub extern fn TextToUpper(text: [*c]const u8) [*c]const u8; -pub extern fn TextToLower(text: [*c]const u8) [*c]const u8; -pub extern fn TextToPascal(text: [*c]const u8) [*c]const u8; -pub extern fn TextToInteger(text: [*c]const u8) c_int; -pub extern fn DrawLine3D(startPos: Vector3, endPos: Vector3, color: Color) void; -pub extern fn DrawPoint3D(position: Vector3, color: Color) void; -pub extern fn DrawCircle3D(center: Vector3, radius: f32, rotationAxis: Vector3, rotationAngle: f32, color: Color) void; -pub extern fn DrawTriangle3D(v1: Vector3, v2: Vector3, v3: Vector3, color: Color) void; -pub extern fn DrawTriangleStrip3D(points: [*c]Vector3, pointCount: c_int, color: Color) void; -pub extern fn DrawCube(position: Vector3, width: f32, height: f32, length: f32, color: Color) void; -pub extern fn DrawCubeV(position: Vector3, size: Vector3, color: Color) void; -pub extern fn DrawCubeWires(position: Vector3, width: f32, height: f32, length: f32, color: Color) void; -pub extern fn DrawCubeWiresV(position: Vector3, size: Vector3, color: Color) void; -pub extern fn DrawSphere(centerPos: Vector3, radius: f32, color: Color) void; -pub extern fn DrawSphereEx(centerPos: Vector3, radius: f32, rings: c_int, slices: c_int, color: Color) void; -pub extern fn DrawSphereWires(centerPos: Vector3, radius: f32, rings: c_int, slices: c_int, color: Color) void; -pub extern fn DrawCylinder(position: Vector3, radiusTop: f32, radiusBottom: f32, height: f32, slices: c_int, color: Color) void; -pub extern fn DrawCylinderEx(startPos: Vector3, endPos: Vector3, startRadius: f32, endRadius: f32, sides: c_int, color: Color) void; -pub extern fn DrawCylinderWires(position: Vector3, radiusTop: f32, radiusBottom: f32, height: f32, slices: c_int, color: Color) void; -pub extern fn DrawCylinderWiresEx(startPos: Vector3, endPos: Vector3, startRadius: f32, endRadius: f32, sides: c_int, color: Color) void; -pub extern fn DrawCapsule(startPos: Vector3, endPos: Vector3, radius: f32, slices: c_int, rings: c_int, color: Color) void; -pub extern fn DrawCapsuleWires(startPos: Vector3, endPos: Vector3, radius: f32, slices: c_int, rings: c_int, color: Color) void; -pub extern fn DrawPlane(centerPos: Vector3, size: Vector2, color: Color) void; -pub extern fn DrawRay(ray: Ray, color: Color) void; -pub extern fn DrawGrid(slices: c_int, spacing: f32) void; -pub extern fn LoadModel(fileName: [*c]const u8) Model; -pub extern fn LoadModelFromMesh(mesh: Mesh) Model; -pub extern fn UnloadModel(model: Model) void; -pub extern fn UnloadModelKeepMeshes(model: Model) void; -pub extern fn GetModelBoundingBox(model: Model) BoundingBox; -pub extern fn DrawModel(model: Model, position: Vector3, scale: f32, tint: Color) void; -pub extern fn DrawModelEx(model: Model, position: Vector3, rotationAxis: Vector3, rotationAngle: f32, scale: Vector3, tint: Color) void; -pub extern fn DrawModelWires(model: Model, position: Vector3, scale: f32, tint: Color) void; -pub extern fn DrawModelWiresEx(model: Model, position: Vector3, rotationAxis: Vector3, rotationAngle: f32, scale: Vector3, tint: Color) void; -pub extern fn DrawBoundingBox(box: BoundingBox, color: Color) void; -pub extern fn DrawBillboard(camera: Camera, texture: Texture2D, position: Vector3, size: f32, tint: Color) void; -pub extern fn DrawBillboardRec(camera: Camera, texture: Texture2D, source: Rectangle, position: Vector3, size: Vector2, tint: Color) void; -pub extern fn DrawBillboardPro(camera: Camera, texture: Texture2D, source: Rectangle, position: Vector3, up: Vector3, size: Vector2, origin: Vector2, rotation: f32, tint: Color) void; -pub extern fn UploadMesh(mesh: [*c]Mesh, dynamic: bool) void; -pub extern fn UpdateMeshBuffer(mesh: Mesh, index: c_int, data: *const anyopaque, dataSize: c_int, offset: c_int) void; -pub extern fn UnloadMesh(mesh: Mesh) void; -pub extern fn DrawMesh(mesh: Mesh, material: Material, transform: Matrix) void; -pub extern fn DrawMeshInstanced(mesh: Mesh, material: Material, transforms: [*c]const Matrix, instances: c_int) void; -pub extern fn ExportMesh(mesh: Mesh, fileName: [*c]const u8) bool; -pub extern fn GetMeshBoundingBox(mesh: Mesh) BoundingBox; -pub extern fn GenMeshTangents(mesh: [*c]Mesh) void; -pub extern fn GenMeshPoly(sides: c_int, radius: f32) Mesh; -pub extern fn GenMeshPlane(width: f32, length: f32, resX: c_int, resZ: c_int) Mesh; -pub extern fn GenMeshCube(width: f32, height: f32, length: f32) Mesh; -pub extern fn GenMeshSphere(radius: f32, rings: c_int, slices: c_int) Mesh; -pub extern fn GenMeshHemiSphere(radius: f32, rings: c_int, slices: c_int) Mesh; -pub extern fn GenMeshCylinder(radius: f32, height: f32, slices: c_int) Mesh; -pub extern fn GenMeshCone(radius: f32, height: f32, slices: c_int) Mesh; -pub extern fn GenMeshTorus(radius: f32, size: f32, radSeg: c_int, sides: c_int) Mesh; -pub extern fn GenMeshKnot(radius: f32, size: f32, radSeg: c_int, sides: c_int) Mesh; -pub extern fn GenMeshHeightmap(heightmap: Image, size: Vector3) Mesh; -pub extern fn GenMeshCubicmap(cubicmap: Image, cubeSize: Vector3) Mesh; -pub extern fn LoadMaterials(fileName: [*c]const u8, materialCount: [*c]c_int) [*c]Material; -pub extern fn LoadMaterialDefault() Material; -pub extern fn UnloadMaterial(material: Material) void; -pub extern fn SetMaterialTexture(material: [*c]Material, mapType: c_int, texture: Texture2D) void; -pub extern fn SetModelMeshMaterial(model: [*c]Model, meshId: c_int, materialId: c_int) void; -pub extern fn LoadModelAnimations(fileName: [*c]const u8, animCount: [*c]c_uint) [*c]ModelAnimation; -pub extern fn UpdateModelAnimation(model: Model, anim: ModelAnimation, frame: c_int) void; -pub extern fn UnloadModelAnimation(anim: ModelAnimation) void; -pub extern fn UnloadModelAnimations(animations: [*c]ModelAnimation, count: c_uint) void; -pub extern fn IsModelAnimationValid(model: Model, anim: ModelAnimation) bool; -pub extern fn CheckCollisionSpheres(center1: Vector3, radius1: f32, center2: Vector3, radius2: f32) bool; -pub extern fn CheckCollisionBoxes(box1: BoundingBox, box2: BoundingBox) bool; -pub extern fn CheckCollisionBoxSphere(box: BoundingBox, center: Vector3, radius: f32) bool; -pub extern fn GetRayCollisionSphere(ray: Ray, center: Vector3, radius: f32) RayCollision; -pub extern fn GetRayCollisionBox(ray: Ray, box: BoundingBox) RayCollision; -pub extern fn GetRayCollisionMesh(ray: Ray, mesh: Mesh, transform: Matrix) RayCollision; -pub extern fn GetRayCollisionTriangle(ray: Ray, p1: Vector3, p2: Vector3, p3: Vector3) RayCollision; -pub extern fn GetRayCollisionQuad(ray: Ray, p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3) RayCollision; -pub extern fn InitAudioDevice() void; -pub extern fn CloseAudioDevice() void; -pub extern fn IsAudioDeviceReady() bool; -pub extern fn SetMasterVolume(volume: f32) void; -pub extern fn LoadWave(fileName: [*c]const u8) Wave; -pub extern fn LoadWaveFromMemory(fileType: [*c]const u8, fileData: [*c]const u8, dataSize: c_int) Wave; -pub extern fn LoadSound(fileName: [*c]const u8) Sound; -pub extern fn LoadSoundFromWave(wave: Wave) Sound; -pub extern fn UpdateSound(sound: Sound, data: *const anyopaque, sampleCount: c_int) void; -pub extern fn UnloadWave(wave: Wave) void; -pub extern fn UnloadSound(sound: Sound) void; -pub extern fn ExportWave(wave: Wave, fileName: [*c]const u8) bool; -pub extern fn ExportWaveAsCode(wave: Wave, fileName: [*c]const u8) bool; -pub extern fn PlaySound(sound: Sound) void; -pub extern fn StopSound(sound: Sound) void; -pub extern fn PauseSound(sound: Sound) void; -pub extern fn ResumeSound(sound: Sound) void; -pub extern fn PlaySoundMulti(sound: Sound) void; -pub extern fn StopSoundMulti() void; -pub extern fn GetSoundsPlaying() c_int; -pub extern fn IsSoundPlaying(sound: Sound) bool; -pub extern fn SetSoundVolume(sound: Sound, volume: f32) void; -pub extern fn SetSoundPitch(sound: Sound, pitch: f32) void; -pub extern fn SetSoundPan(sound: Sound, pan: f32) void; -pub extern fn WaveCopy(wave: Wave) Wave; -pub extern fn WaveCrop(wave: [*c]Wave, initSample: c_int, finalSample: c_int) void; -pub extern fn WaveFormat(wave: [*c]Wave, sampleRate: c_int, sampleSize: c_int, channels: c_int) void; -pub extern fn LoadWaveSamples(wave: Wave) [*c]f32; -pub extern fn UnloadWaveSamples(samples: [*c]f32) void; -pub extern fn LoadMusicStream(fileName: [*c]const u8) Music; -pub extern fn LoadMusicStreamFromMemory(fileType: [*c]const u8, data: [*c]const u8, dataSize: c_int) Music; -pub extern fn UnloadMusicStream(music: Music) void; -pub extern fn PlayMusicStream(music: Music) void; -pub extern fn IsMusicStreamPlaying(music: Music) bool; -pub extern fn UpdateMusicStream(music: Music) void; -pub extern fn StopMusicStream(music: Music) void; -pub extern fn PauseMusicStream(music: Music) void; -pub extern fn ResumeMusicStream(music: Music) void; -pub extern fn SeekMusicStream(music: Music, position: f32) void; -pub extern fn SetMusicVolume(music: Music, volume: f32) void; -pub extern fn SetMusicPitch(music: Music, pitch: f32) void; -pub extern fn SetMusicPan(music: Music, pan: f32) void; -pub extern fn GetMusicTimeLength(music: Music) f32; -pub extern fn GetMusicTimePlayed(music: Music) f32; -pub extern fn LoadAudioStream(sampleRate: c_uint, sampleSize: c_uint, channels: c_uint) AudioStream; -pub extern fn UnloadAudioStream(stream: AudioStream) void; -pub extern fn UpdateAudioStream(stream: AudioStream, data: *const anyopaque, frameCount: c_int) void; -pub extern fn IsAudioStreamProcessed(stream: AudioStream) bool; -pub extern fn PlayAudioStream(stream: AudioStream) void; -pub extern fn PauseAudioStream(stream: AudioStream) void; -pub extern fn ResumeAudioStream(stream: AudioStream) void; -pub extern fn IsAudioStreamPlaying(stream: AudioStream) bool; -pub extern fn StopAudioStream(stream: AudioStream) void; -pub extern fn SetAudioStreamVolume(stream: AudioStream, volume: f32) void; -pub extern fn SetAudioStreamPitch(stream: AudioStream, pitch: f32) void; -pub extern fn SetAudioStreamPan(stream: AudioStream, pan: f32) void; -pub extern fn SetAudioStreamBufferSizeDefault(size: c_int) void; -pub extern fn SetAudioStreamCallback(stream: AudioStream, callback: AudioCallback) void; -pub extern fn AttachAudioStreamProcessor(stream: AudioStream, processor: AudioCallback) void; -pub extern fn DetachAudioStreamProcessor(stream: AudioStream, processor: AudioCallback) void; +const cdef = @import("raylib-zig-ext.zig"); + +pub fn textFormat(text: []const u8, args: anytype) [*c]const u8 { + return @call(.{}, cdef.TextFormat, .{@ptrCast([*c]const u8, text)} ++ args); +} + +pub fn loadShader(vsFileName: ?[]const u8, fsFileName: ?[]const u8) Shader { + var vsFileNameFinal = @as([*c]const u8, 0); + var fsFileNameFinal = @as([*c]const u8, 0); + if (vsFileName) |vsFileNameSure| { + vsFileNameFinal = @ptrCast([*c]const u8, vsFileNameSure); + } + if (fsFileName) |fsFileNameSure| { + fsFileNameFinal = @ptrCast([*c]const u8, fsFileNameSure); + } + return cdef.LoadShader(vsFileNameFinal, fsFileNameFinal); +} + +pub fn loadShaderFromMemory(vsCode: ?[]const u8, fsCode: ?[]const u8) Shader { + var vsCodeFinal = @as([*c]const u8, 0); + var fsCodeFinal = @as([*c]const u8, 0); + if (vsCode) |vsCodeSure| { + vsCodeFinal = @ptrCast([*c]const u8, vsCodeSure); + } + if (fsCode) |fsCodeSure| { + fsCodeFinal = @ptrCast([*c]const u8, fsCodeSure); + } + return cdef.LoadShaderFromMemory(vsCodeFinal, fsCodeFinal); +} + +pub fn initWindow(width: i32, height: i32, title: []const u8) void { + cdef.InitWindow(@as(c_int, width), @as(c_int, height), @ptrCast([*c]const u8, title)); +} + +pub fn windowShouldClose() bool { + return cdef.WindowShouldClose(); +} + +pub fn closeWindow() void { + cdef.CloseWindow(); +} + +pub fn isWindowReady() bool { + return cdef.IsWindowReady(); +} + +pub fn isWindowFullscreen() bool { + return cdef.IsWindowFullscreen(); +} + +pub fn isWindowHidden() bool { + return cdef.IsWindowHidden(); +} + +pub fn isWindowMinimized() bool { + return cdef.IsWindowMinimized(); +} + +pub fn isWindowMaximized() bool { + return cdef.IsWindowMaximized(); +} + +pub fn isWindowFocused() bool { + return cdef.IsWindowFocused(); +} + +pub fn isWindowResized() bool { + return cdef.IsWindowResized(); +} + +pub fn isWindowState(flag: u32) bool { + return cdef.IsWindowState(@as(c_uint, flag)); +} + +pub fn setWindowState(flags: u32) void { + cdef.SetWindowState(@as(c_uint, flags)); +} + +pub fn clearWindowState(flags: u32) void { + cdef.ClearWindowState(@as(c_uint, flags)); +} + +pub fn toggleFullscreen() void { + cdef.ToggleFullscreen(); +} + +pub fn maximizeWindow() void { + cdef.MaximizeWindow(); +} + +pub fn minimizeWindow() void { + cdef.MinimizeWindow(); +} + +pub fn restoreWindow() void { + cdef.RestoreWindow(); +} + +pub fn setWindowIcon(image: Image) void { + cdef.SetWindowIcon(image); +} + +pub fn setWindowTitle(title: []const u8) void { + cdef.SetWindowTitle(@ptrCast([*c]const u8, title)); +} + +pub fn setWindowPosition(x: i32, y: i32) void { + cdef.SetWindowPosition(@as(c_int, x), @as(c_int, y)); +} + +pub fn setWindowMonitor(monitor: i32) void { + cdef.SetWindowMonitor(@as(c_int, monitor)); +} + +pub fn setWindowMinSize(width: i32, height: i32) void { + cdef.SetWindowMinSize(@as(c_int, width), @as(c_int, height)); +} + +pub fn setWindowSize(width: i32, height: i32) void { + cdef.SetWindowSize(@as(c_int, width), @as(c_int, height)); +} + +pub fn setWindowOpacity(opacity: f32) void { + cdef.SetWindowOpacity(opacity); +} + +pub fn getWindowHandle() *anyopaque { + return cdef.GetWindowHandle(); +} + +pub fn getScreenWidth() c_int { + return cdef.GetScreenWidth(); +} + +pub fn getScreenHeight() c_int { + return cdef.GetScreenHeight(); +} + +pub fn getRenderWidth() c_int { + return cdef.GetRenderWidth(); +} + +pub fn getRenderHeight() c_int { + return cdef.GetRenderHeight(); +} + +pub fn getMonitorCount() c_int { + return cdef.GetMonitorCount(); +} + +pub fn getCurrentMonitor() c_int { + return cdef.GetCurrentMonitor(); +} + +pub fn getMonitorPosition(monitor: i32) Vector2 { + return cdef.GetMonitorPosition(@as(c_int, monitor)); +} + +pub fn getMonitorWidth(monitor: i32) c_int { + return cdef.GetMonitorWidth(@as(c_int, monitor)); +} + +pub fn getMonitorHeight(monitor: i32) c_int { + return cdef.GetMonitorHeight(@as(c_int, monitor)); +} + +pub fn getMonitorPhysicalWidth(monitor: i32) c_int { + return cdef.GetMonitorPhysicalWidth(@as(c_int, monitor)); +} + +pub fn getMonitorPhysicalHeight(monitor: i32) c_int { + return cdef.GetMonitorPhysicalHeight(@as(c_int, monitor)); +} + +pub fn getMonitorRefreshRate(monitor: i32) c_int { + return cdef.GetMonitorRefreshRate(@as(c_int, monitor)); +} + +pub fn getWindowPosition() Vector2 { + return cdef.GetWindowPosition(); +} + +pub fn getWindowScaleDPI() Vector2 { + return cdef.GetWindowScaleDPI(); +} + +pub fn getMonitorName(monitor: i32) [*c]const u8 { + return cdef.GetMonitorName(@as(c_int, monitor)); +} + +pub fn setClipboardText(text: []const u8) void { + cdef.SetClipboardText(@ptrCast([*c]const u8, text)); +} + +pub fn getClipboardText() [*c]const u8 { + return cdef.GetClipboardText(); +} + +pub fn enableEventWaiting() void { + cdef.EnableEventWaiting(); +} + +pub fn disableEventWaiting() void { + cdef.DisableEventWaiting(); +} + +pub fn swapScreenBuffer() void { + cdef.SwapScreenBuffer(); +} + +pub fn pollInputEvents() void { + cdef.PollInputEvents(); +} + +pub fn waitTime(seconds: f64) void { + cdef.WaitTime(seconds); +} + +pub fn showCursor() void { + cdef.ShowCursor(); +} + +pub fn hideCursor() void { + cdef.HideCursor(); +} + +pub fn isCursorHidden() bool { + return cdef.IsCursorHidden(); +} + +pub fn enableCursor() void { + cdef.EnableCursor(); +} + +pub fn disableCursor() void { + cdef.DisableCursor(); +} + +pub fn isCursorOnScreen() bool { + return cdef.IsCursorOnScreen(); +} + +pub fn clearBackground(color: Color) void { + cdef.ClearBackground(color); +} + +pub fn beginDrawing() void { + cdef.BeginDrawing(); +} + +pub fn endDrawing() void { + cdef.EndDrawing(); +} + +pub fn beginMode2D(camera: Camera2D) void { + cdef.BeginMode2D(camera); +} + +pub fn endMode2D() void { + cdef.EndMode2D(); +} + +pub fn beginMode3D(camera: Camera3D) void { + cdef.BeginMode3D(camera); +} + +pub fn endMode3D() void { + cdef.EndMode3D(); +} + +pub fn beginTextureMode(target: RenderTexture2D) void { + cdef.BeginTextureMode(target); +} + +pub fn endTextureMode() void { + cdef.EndTextureMode(); +} + +pub fn beginShaderMode(shader: Shader) void { + cdef.BeginShaderMode(shader); +} + +pub fn endShaderMode() void { + cdef.EndShaderMode(); +} + +pub fn beginBlendMode(mode: i32) void { + cdef.BeginBlendMode(@as(c_int, mode)); +} + +pub fn endBlendMode() void { + cdef.EndBlendMode(); +} + +pub fn beginScissorMode(x: i32, y: i32, width: i32, height: i32) void { + cdef.BeginScissorMode(@as(c_int, x), @as(c_int, y), @as(c_int, width), @as(c_int, height)); +} + +pub fn endScissorMode() void { + cdef.EndScissorMode(); +} + +pub fn beginVrStereoMode(config: VrStereoConfig) void { + cdef.BeginVrStereoMode(config); +} + +pub fn endVrStereoMode() void { + cdef.EndVrStereoMode(); +} + +pub fn loadVrStereoConfig(device: VrDeviceInfo) VrStereoConfig { + return cdef.LoadVrStereoConfig(device); +} + +pub fn unloadVrStereoConfig(config: VrStereoConfig) void { + cdef.UnloadVrStereoConfig(config); +} + +pub fn getShaderLocation(shader: Shader, uniformName: []const u8) c_int { + return cdef.GetShaderLocation(shader, @ptrCast([*c]const u8, uniformName)); +} + +pub fn getShaderLocationAttrib(shader: Shader, attribName: []const u8) c_int { + return cdef.GetShaderLocationAttrib(shader, @ptrCast([*c]const u8, attribName)); +} + +pub fn setShaderValue(shader: Shader, locIndex: i32, value: *const anyopaque, uniformType: i32) void { + cdef.SetShaderValue(shader, @as(c_int, locIndex), value, @as(c_int, uniformType)); +} + +pub fn setShaderValueV(shader: Shader, locIndex: i32, value: *const anyopaque, uniformType: i32, count: i32) void { + cdef.SetShaderValueV(shader, @as(c_int, locIndex), value, @as(c_int, uniformType), @as(c_int, count)); +} + +pub fn setShaderValueMatrix(shader: Shader, locIndex: i32, mat: Matrix) void { + cdef.SetShaderValueMatrix(shader, @as(c_int, locIndex), mat); +} + +pub fn setShaderValueTexture(shader: Shader, locIndex: i32, texture: Texture2D) void { + cdef.SetShaderValueTexture(shader, @as(c_int, locIndex), texture); +} + +pub fn unloadShader(shader: Shader) void { + cdef.UnloadShader(shader); +} + +pub fn getMouseRay(mousePosition: Vector2, camera: Camera) Ray { + return cdef.GetMouseRay(mousePosition, camera); +} + +pub fn getCameraMatrix(camera: Camera) Matrix { + return cdef.GetCameraMatrix(camera); +} + +pub fn getCameraMatrix2D(camera: Camera2D) Matrix { + return cdef.GetCameraMatrix2D(camera); +} + +pub fn getWorldToScreen(position: Vector3, camera: Camera) Vector2 { + return cdef.GetWorldToScreen(position, camera); +} + +pub fn getScreenToWorld2D(position: Vector2, camera: Camera2D) Vector2 { + return cdef.GetScreenToWorld2D(position, camera); +} + +pub fn getWorldToScreenEx(position: Vector3, camera: Camera, width: i32, height: i32) Vector2 { + return cdef.GetWorldToScreenEx(position, camera, @as(c_int, width), @as(c_int, height)); +} + +pub fn getWorldToScreen2D(position: Vector2, camera: Camera2D) Vector2 { + return cdef.GetWorldToScreen2D(position, camera); +} + +pub fn setTargetFPS(fps: i32) void { + cdef.SetTargetFPS(@as(c_int, fps)); +} + +pub fn getFPS() c_int { + return cdef.GetFPS(); +} + +pub fn getFrameTime() f32 { + return cdef.GetFrameTime(); +} + +pub fn getTime() f64 { + return cdef.GetTime(); +} + +pub fn getRandomValue(min: i32, max: i32) c_int { + return cdef.GetRandomValue(@as(c_int, min), @as(c_int, max)); +} + +pub fn setRandomSeed(seed: u32) void { + cdef.SetRandomSeed(@as(c_uint, seed)); +} + +pub fn takeScreenshot(fileName: []const u8) void { + cdef.TakeScreenshot(@ptrCast([*c]const u8, fileName)); +} + +pub fn setConfigFlags(flags: u32) void { + cdef.SetConfigFlags(@as(c_uint, flags)); +} + +pub fn traceLog(logLevel: i32, text: []const u8) void { + cdef.TraceLog(@as(c_int, logLevel), @ptrCast([*c]const u8, text)); +} + +pub fn setTraceLogLevel(logLevel: i32) void { + cdef.SetTraceLogLevel(@as(c_int, logLevel)); +} + +pub fn memAlloc(size: u32) *anyopaque { + return cdef.MemAlloc(@as(c_uint, size)); +} + +pub fn memRealloc(ptr: *anyopaque, size: u32) *anyopaque { + return cdef.MemRealloc(ptr, @as(c_uint, size)); +} + +pub fn memFree(ptr: *anyopaque) void { + cdef.MemFree(ptr); +} + +pub fn openURL(url: []const u8) void { + cdef.OpenURL(@ptrCast([*c]const u8, url)); +} + +pub fn setLoadFileDataCallback(callback: LoadFileDataCallback) void { + cdef.SetLoadFileDataCallback(callback); +} + +pub fn setSaveFileDataCallback(callback: SaveFileDataCallback) void { + cdef.SetSaveFileDataCallback(callback); +} + +pub fn setLoadFileTextCallback(callback: LoadFileTextCallback) void { + cdef.SetLoadFileTextCallback(callback); +} + +pub fn setSaveFileTextCallback(callback: SaveFileTextCallback) void { + cdef.SetSaveFileTextCallback(callback); +} + +pub fn loadFileData(fileName: []const u8, bytesRead: *u32) [*c]u8 { + return cdef.LoadFileData(@ptrCast([*c]const u8, fileName), @ptrCast([*c]c_uint, bytesRead)); +} + +pub fn unloadFileData(data: []u8) void { + cdef.UnloadFileData(@ptrCast([*c]u8, data)); +} + +pub fn saveFileData(fileName: []const u8, data: *anyopaque, bytesToWrite: u32) bool { + return cdef.SaveFileData(@ptrCast([*c]const u8, fileName), data, @as(c_uint, bytesToWrite)); +} + +pub fn exportDataAsCode(data: []const u8, size: u32, fileName: []const u8) bool { + return cdef.ExportDataAsCode(@ptrCast([*c]const u8, data), @as(c_uint, size), @ptrCast([*c]const u8, fileName)); +} + +pub fn loadFileText(fileName: []const u8) [*c]u8 { + return cdef.LoadFileText(@ptrCast([*c]const u8, fileName)); +} + +pub fn unloadFileText(text: []u8) void { + cdef.UnloadFileText(@ptrCast([*c]u8, text)); +} + +pub fn saveFileText(fileName: []const u8, text: []u8) bool { + return cdef.SaveFileText(@ptrCast([*c]const u8, fileName), @ptrCast([*c]u8, text)); +} + +pub fn fileExists(fileName: []const u8) bool { + return cdef.FileExists(@ptrCast([*c]const u8, fileName)); +} + +pub fn directoryExists(dirPath: []const u8) bool { + return cdef.DirectoryExists(@ptrCast([*c]const u8, dirPath)); +} + +pub fn isFileExtension(fileName: []const u8, ext: []const u8) bool { + return cdef.IsFileExtension(@ptrCast([*c]const u8, fileName), @ptrCast([*c]const u8, ext)); +} + +pub fn getFileLength(fileName: []const u8) c_int { + return cdef.GetFileLength(@ptrCast([*c]const u8, fileName)); +} + +pub fn getFileExtension(fileName: []const u8) [*c]const u8 { + return cdef.GetFileExtension(@ptrCast([*c]const u8, fileName)); +} + +pub fn getFileName(filePath: []const u8) [*c]const u8 { + return cdef.GetFileName(@ptrCast([*c]const u8, filePath)); +} + +pub fn getFileNameWithoutExt(filePath: []const u8) [*c]const u8 { + return cdef.GetFileNameWithoutExt(@ptrCast([*c]const u8, filePath)); +} + +pub fn getDirectoryPath(filePath: []const u8) [*c]const u8 { + return cdef.GetDirectoryPath(@ptrCast([*c]const u8, filePath)); +} + +pub fn getPrevDirectoryPath(dirPath: []const u8) [*c]const u8 { + return cdef.GetPrevDirectoryPath(@ptrCast([*c]const u8, dirPath)); +} + +pub fn getWorkingDirectory() [*c]const u8 { + return cdef.GetWorkingDirectory(); +} + +pub fn getApplicationDirectory() [*c]const u8 { + return cdef.GetApplicationDirectory(); +} + +pub fn changeDirectory(dir: []const u8) bool { + return cdef.ChangeDirectory(@ptrCast([*c]const u8, dir)); +} + +pub fn isPathFile(path: []const u8) bool { + return cdef.IsPathFile(@ptrCast([*c]const u8, path)); +} + +pub fn loadDirectoryFiles(dirPath: []const u8) FilePathList { + return cdef.LoadDirectoryFiles(@ptrCast([*c]const u8, dirPath)); +} + +pub fn loadDirectoryFilesEx(basePath: []const u8, filter: []const u8, scanSubdirs: bool) FilePathList { + return cdef.LoadDirectoryFilesEx(@ptrCast([*c]const u8, basePath), @ptrCast([*c]const u8, filter), scanSubdirs); +} + +pub fn unloadDirectoryFiles(files: FilePathList) void { + cdef.UnloadDirectoryFiles(files); +} + +pub fn isFileDropped() bool { + return cdef.IsFileDropped(); +} + +pub fn loadDroppedFiles() FilePathList { + return cdef.LoadDroppedFiles(); +} + +pub fn unloadDroppedFiles(files: FilePathList) void { + cdef.UnloadDroppedFiles(files); +} + +pub fn getFileModTime(fileName: []const u8) c_long { + return cdef.GetFileModTime(@ptrCast([*c]const u8, fileName)); +} + +pub fn compressData(data: []const u8, dataSize: i32, compDataSize: *i32) [*c]u8 { + return cdef.CompressData(@ptrCast([*c]const u8, data), @as(c_int, dataSize), @ptrCast([*c]c_int, compDataSize)); +} + +pub fn decompressData(compData: []const u8, compDataSize: i32, dataSize: *i32) [*c]u8 { + return cdef.DecompressData(@ptrCast([*c]const u8, compData), @as(c_int, compDataSize), @ptrCast([*c]c_int, dataSize)); +} + +pub fn encodeDataBase64(data: []const u8, dataSize: i32, outputSize: *i32) [*c]u8 { + return cdef.EncodeDataBase64(@ptrCast([*c]const u8, data), @as(c_int, dataSize), @ptrCast([*c]c_int, outputSize)); +} + +pub fn decodeDataBase64(data: []const u8, outputSize: *i32) [*c]u8 { + return cdef.DecodeDataBase64(@ptrCast([*c]const u8, data), @ptrCast([*c]c_int, outputSize)); +} + +pub fn isKeyPressed(key: KeyboardKey) bool { + return cdef.IsKeyPressed(key); +} + +pub fn isKeyDown(key: KeyboardKey) bool { + return cdef.IsKeyDown(key); +} + +pub fn isKeyReleased(key: KeyboardKey) bool { + return cdef.IsKeyReleased(key); +} + +pub fn isKeyUp(key: KeyboardKey) bool { + return cdef.IsKeyUp(key); +} + +pub fn setExitKey(key: KeyboardKey) void { + cdef.SetExitKey(key); +} + +pub fn getKeyPressed() c_int { + return cdef.GetKeyPressed(); +} + +pub fn getCharPressed() c_int { + return cdef.GetCharPressed(); +} + +pub fn isGamepadAvailable(gamepad: i32) bool { + return cdef.IsGamepadAvailable(@as(c_int, gamepad)); +} + +pub fn getGamepadName(gamepad: i32) [*c]const u8 { + return cdef.GetGamepadName(@as(c_int, gamepad)); +} + +pub fn isGamepadButtonPressed(gamepad: i32, button: GamepadButton) bool { + return cdef.IsGamepadButtonPressed(@as(c_int, gamepad), button); +} + +pub fn isGamepadButtonDown(gamepad: i32, button: GamepadButton) bool { + return cdef.IsGamepadButtonDown(@as(c_int, gamepad), button); +} + +pub fn isGamepadButtonReleased(gamepad: i32, button: GamepadButton) bool { + return cdef.IsGamepadButtonReleased(@as(c_int, gamepad), button); +} + +pub fn isGamepadButtonUp(gamepad: i32, button: GamepadButton) bool { + return cdef.IsGamepadButtonUp(@as(c_int, gamepad), button); +} + +pub fn getGamepadButtonPressed() c_int { + return cdef.GetGamepadButtonPressed(); +} + +pub fn getGamepadAxisCount(gamepad: i32) c_int { + return cdef.GetGamepadAxisCount(@as(c_int, gamepad)); +} + +pub fn getGamepadAxisMovement(gamepad: i32, axis: i32) f32 { + return cdef.GetGamepadAxisMovement(@as(c_int, gamepad), @as(c_int, axis)); +} + +pub fn setGamepadMappings(mappings: []const u8) c_int { + return cdef.SetGamepadMappings(@ptrCast([*c]const u8, mappings)); +} + +pub fn isMouseButtonPressed(button: MouseButton) bool { + return cdef.IsMouseButtonPressed(button); +} + +pub fn isMouseButtonDown(button: MouseButton) bool { + return cdef.IsMouseButtonDown(button); +} + +pub fn isMouseButtonReleased(button: MouseButton) bool { + return cdef.IsMouseButtonReleased(button); +} + +pub fn isMouseButtonUp(button: MouseButton) bool { + return cdef.IsMouseButtonUp(button); +} + +pub fn getMouseX() c_int { + return cdef.GetMouseX(); +} + +pub fn getMouseY() c_int { + return cdef.GetMouseY(); +} + +pub fn getMousePosition() Vector2 { + return cdef.GetMousePosition(); +} + +pub fn getMouseDelta() Vector2 { + return cdef.GetMouseDelta(); +} + +pub fn setMousePosition(x: i32, y: i32) void { + cdef.SetMousePosition(@as(c_int, x), @as(c_int, y)); +} + +pub fn setMouseOffset(offsetX: i32, offsetY: i32) void { + cdef.SetMouseOffset(@as(c_int, offsetX), @as(c_int, offsetY)); +} + +pub fn setMouseScale(scaleX: f32, scaleY: f32) void { + cdef.SetMouseScale(scaleX, scaleY); +} + +pub fn getMouseWheelMove() f32 { + return cdef.GetMouseWheelMove(); +} + +pub fn getMouseWheelMoveV() Vector2 { + return cdef.GetMouseWheelMoveV(); +} + +pub fn setMouseCursor(cursor: i32) void { + cdef.SetMouseCursor(@as(c_int, cursor)); +} + +pub fn getTouchX() c_int { + return cdef.GetTouchX(); +} + +pub fn getTouchY() c_int { + return cdef.GetTouchY(); +} + +pub fn getTouchPosition(index: i32) Vector2 { + return cdef.GetTouchPosition(@as(c_int, index)); +} + +pub fn getTouchPointId(index: i32) c_int { + return cdef.GetTouchPointId(@as(c_int, index)); +} + +pub fn getTouchPointCount() c_int { + return cdef.GetTouchPointCount(); +} + +pub fn setGesturesEnabled(flags: u32) void { + cdef.SetGesturesEnabled(@as(c_uint, flags)); +} + +pub fn isGestureDetected(gesture: Gestures) bool { + return cdef.IsGestureDetected(gesture); +} + +pub fn getGestureDetected() c_int { + return cdef.GetGestureDetected(); +} + +pub fn getGestureHoldDuration() f32 { + return cdef.GetGestureHoldDuration(); +} + +pub fn getGestureDragVector() Vector2 { + return cdef.GetGestureDragVector(); +} + +pub fn getGestureDragAngle() f32 { + return cdef.GetGestureDragAngle(); +} + +pub fn getGesturePinchVector() Vector2 { + return cdef.GetGesturePinchVector(); +} + +pub fn getGesturePinchAngle() f32 { + return cdef.GetGesturePinchAngle(); +} + +pub fn setCameraMode(camera: Camera, mode: CameraMode) void { + cdef.SetCameraMode(camera, mode); +} + +pub fn updateCamera(camera: *Camera) void { + cdef.UpdateCamera(@ptrCast([*c]Camera, camera)); +} + +pub fn setCameraPanControl(keyPan: i32) void { + cdef.SetCameraPanControl(@as(c_int, keyPan)); +} + +pub fn setCameraAltControl(keyAlt: i32) void { + cdef.SetCameraAltControl(@as(c_int, keyAlt)); +} + +pub fn setCameraSmoothZoomControl(keySmoothZoom: i32) void { + cdef.SetCameraSmoothZoomControl(@as(c_int, keySmoothZoom)); +} + +pub fn setCameraMoveControls(keyFront: i32, keyBack: i32, keyRight: i32, keyLeft: i32, keyUp: i32, keyDown: i32) void { + cdef.SetCameraMoveControls(@as(c_int, keyFront), @as(c_int, keyBack), @as(c_int, keyRight), @as(c_int, keyLeft), @as(c_int, keyUp), @as(c_int, keyDown)); +} + +pub fn setShapesTexture(texture: Texture2D, source: Rectangle) void { + cdef.SetShapesTexture(texture, source); +} + +pub fn drawPixel(posX: i32, posY: i32, color: Color) void { + cdef.DrawPixel(@as(c_int, posX), @as(c_int, posY), color); +} + +pub fn drawPixelV(position: Vector2, color: Color) void { + cdef.DrawPixelV(position, color); +} + +pub fn drawLine(startPosX: i32, startPosY: i32, endPosX: i32, endPosY: i32, color: Color) void { + cdef.DrawLine(@as(c_int, startPosX), @as(c_int, startPosY), @as(c_int, endPosX), @as(c_int, endPosY), color); +} + +pub fn drawLineV(startPos: Vector2, endPos: Vector2, color: Color) void { + cdef.DrawLineV(startPos, endPos, color); +} + +pub fn drawLineEx(startPos: Vector2, endPos: Vector2, thick: f32, color: Color) void { + cdef.DrawLineEx(startPos, endPos, thick, color); +} + +pub fn drawLineBezier(startPos: Vector2, endPos: Vector2, thick: f32, color: Color) void { + cdef.DrawLineBezier(startPos, endPos, thick, color); +} + +pub fn drawLineBezierQuad(startPos: Vector2, endPos: Vector2, controlPos: Vector2, thick: f32, color: Color) void { + cdef.DrawLineBezierQuad(startPos, endPos, controlPos, thick, color); +} + +pub fn drawLineBezierCubic(startPos: Vector2, endPos: Vector2, startControlPos: Vector2, endControlPos: Vector2, thick: f32, color: Color) void { + cdef.DrawLineBezierCubic(startPos, endPos, startControlPos, endControlPos, thick, color); +} + +pub fn drawLineStrip(points: []Vector2, pointCount: i32, color: Color) void { + cdef.DrawLineStrip(@ptrCast([*c]Vector2, points), @as(c_int, pointCount), color); +} + +pub fn drawCircle(centerX: i32, centerY: i32, radius: f32, color: Color) void { + cdef.DrawCircle(@as(c_int, centerX), @as(c_int, centerY), radius, color); +} + +pub fn drawCircleSector(center: Vector2, radius: f32, startAngle: f32, endAngle: f32, segments: i32, color: Color) void { + cdef.DrawCircleSector(center, radius, startAngle, endAngle, @as(c_int, segments), color); +} + +pub fn drawCircleSectorLines(center: Vector2, radius: f32, startAngle: f32, endAngle: f32, segments: i32, color: Color) void { + cdef.DrawCircleSectorLines(center, radius, startAngle, endAngle, @as(c_int, segments), color); +} + +pub fn drawCircleGradient(centerX: i32, centerY: i32, radius: f32, color1: Color, color2: Color) void { + cdef.DrawCircleGradient(@as(c_int, centerX), @as(c_int, centerY), radius, color1, color2); +} + +pub fn drawCircleV(center: Vector2, radius: f32, color: Color) void { + cdef.DrawCircleV(center, radius, color); +} + +pub fn drawCircleLines(centerX: i32, centerY: i32, radius: f32, color: Color) void { + cdef.DrawCircleLines(@as(c_int, centerX), @as(c_int, centerY), radius, color); +} + +pub fn drawEllipse(centerX: i32, centerY: i32, radiusH: f32, radiusV: f32, color: Color) void { + cdef.DrawEllipse(@as(c_int, centerX), @as(c_int, centerY), radiusH, radiusV, color); +} + +pub fn drawEllipseLines(centerX: i32, centerY: i32, radiusH: f32, radiusV: f32, color: Color) void { + cdef.DrawEllipseLines(@as(c_int, centerX), @as(c_int, centerY), radiusH, radiusV, color); +} + +pub fn drawRing(center: Vector2, innerRadius: f32, outerRadius: f32, startAngle: f32, endAngle: f32, segments: i32, color: Color) void { + cdef.DrawRing(center, innerRadius, outerRadius, startAngle, endAngle, @as(c_int, segments), color); +} + +pub fn drawRingLines(center: Vector2, innerRadius: f32, outerRadius: f32, startAngle: f32, endAngle: f32, segments: i32, color: Color) void { + cdef.DrawRingLines(center, innerRadius, outerRadius, startAngle, endAngle, @as(c_int, segments), color); +} + +pub fn drawRectangle(posX: i32, posY: i32, width: i32, height: i32, color: Color) void { + cdef.DrawRectangle(@as(c_int, posX), @as(c_int, posY), @as(c_int, width), @as(c_int, height), color); +} + +pub fn drawRectangleV(position: Vector2, size: Vector2, color: Color) void { + cdef.DrawRectangleV(position, size, color); +} + +pub fn drawRectangleRec(rec: Rectangle, color: Color) void { + cdef.DrawRectangleRec(rec, color); +} + +pub fn drawRectanglePro(rec: Rectangle, origin: Vector2, rotation: f32, color: Color) void { + cdef.DrawRectanglePro(rec, origin, rotation, color); +} + +pub fn drawRectangleGradientV(posX: i32, posY: i32, width: i32, height: i32, color1: Color, color2: Color) void { + cdef.DrawRectangleGradientV(@as(c_int, posX), @as(c_int, posY), @as(c_int, width), @as(c_int, height), color1, color2); +} + +pub fn drawRectangleGradientH(posX: i32, posY: i32, width: i32, height: i32, color1: Color, color2: Color) void { + cdef.DrawRectangleGradientH(@as(c_int, posX), @as(c_int, posY), @as(c_int, width), @as(c_int, height), color1, color2); +} + +pub fn drawRectangleGradientEx(rec: Rectangle, col1: Color, col2: Color, col3: Color, col4: Color) void { + cdef.DrawRectangleGradientEx(rec, col1, col2, col3, col4); +} + +pub fn drawRectangleLines(posX: i32, posY: i32, width: i32, height: i32, color: Color) void { + cdef.DrawRectangleLines(@as(c_int, posX), @as(c_int, posY), @as(c_int, width), @as(c_int, height), color); +} + +pub fn drawRectangleLinesEx(rec: Rectangle, lineThick: f32, color: Color) void { + cdef.DrawRectangleLinesEx(rec, lineThick, color); +} + +pub fn drawRectangleRounded(rec: Rectangle, roundness: f32, segments: i32, color: Color) void { + cdef.DrawRectangleRounded(rec, roundness, @as(c_int, segments), color); +} + +pub fn drawRectangleRoundedLines(rec: Rectangle, roundness: f32, segments: i32, lineThick: f32, color: Color) void { + cdef.DrawRectangleRoundedLines(rec, roundness, @as(c_int, segments), lineThick, color); +} + +pub fn drawTriangle(v1: Vector2, v2: Vector2, v3: Vector2, color: Color) void { + cdef.DrawTriangle(v1, v2, v3, color); +} + +pub fn drawTriangleLines(v1: Vector2, v2: Vector2, v3: Vector2, color: Color) void { + cdef.DrawTriangleLines(v1, v2, v3, color); +} + +pub fn drawTriangleFan(points: []Vector2, pointCount: i32, color: Color) void { + cdef.DrawTriangleFan(@ptrCast([*c]Vector2, points), @as(c_int, pointCount), color); +} + +pub fn drawTriangleStrip(points: []Vector2, pointCount: i32, color: Color) void { + cdef.DrawTriangleStrip(@ptrCast([*c]Vector2, points), @as(c_int, pointCount), color); +} + +pub fn drawPoly(center: Vector2, sides: i32, radius: f32, rotation: f32, color: Color) void { + cdef.DrawPoly(center, @as(c_int, sides), radius, rotation, color); +} + +pub fn drawPolyLines(center: Vector2, sides: i32, radius: f32, rotation: f32, color: Color) void { + cdef.DrawPolyLines(center, @as(c_int, sides), radius, rotation, color); +} + +pub fn drawPolyLinesEx(center: Vector2, sides: i32, radius: f32, rotation: f32, lineThick: f32, color: Color) void { + cdef.DrawPolyLinesEx(center, @as(c_int, sides), radius, rotation, lineThick, color); +} + +pub fn checkCollisionRecs(rec1: Rectangle, rec2: Rectangle) bool { + return cdef.CheckCollisionRecs(rec1, rec2); +} + +pub fn checkCollisionCircles(center1: Vector2, radius1: f32, center2: Vector2, radius2: f32) bool { + return cdef.CheckCollisionCircles(center1, radius1, center2, radius2); +} + +pub fn checkCollisionCircleRec(center: Vector2, radius: f32, rec: Rectangle) bool { + return cdef.CheckCollisionCircleRec(center, radius, rec); +} + +pub fn checkCollisionPointRec(point: Vector2, rec: Rectangle) bool { + return cdef.CheckCollisionPointRec(point, rec); +} + +pub fn checkCollisionPointCircle(point: Vector2, center: Vector2, radius: f32) bool { + return cdef.CheckCollisionPointCircle(point, center, radius); +} + +pub fn checkCollisionPointTriangle(point: Vector2, p1: Vector2, p2: Vector2, p3: Vector2) bool { + return cdef.CheckCollisionPointTriangle(point, p1, p2, p3); +} + +pub fn checkCollisionPointPoly(point: Vector2, points: []Vector2, pointCount: i32) bool { + return cdef.CheckCollisionPointPoly(point, @ptrCast([*c]Vector2, points), @as(c_int, pointCount)); +} + +pub fn checkCollisionLines(startPos1: Vector2, endPos1: Vector2, startPos2: Vector2, endPos2: Vector2, collisionPoint: *Vector2) bool { + return cdef.CheckCollisionLines(startPos1, endPos1, startPos2, endPos2, @ptrCast([*c]Vector2, collisionPoint)); +} + +pub fn checkCollisionPointLine(point: Vector2, p1: Vector2, p2: Vector2, threshold: i32) bool { + return cdef.CheckCollisionPointLine(point, p1, p2, @as(c_int, threshold)); +} + +pub fn getCollisionRec(rec1: Rectangle, rec2: Rectangle) Rectangle { + return cdef.GetCollisionRec(rec1, rec2); +} + +pub fn loadImage(fileName: []const u8) Image { + return cdef.LoadImage(@ptrCast([*c]const u8, fileName)); +} + +pub fn loadImageRaw(fileName: []const u8, width: i32, height: i32, format: i32, headerSize: i32) Image { + return cdef.LoadImageRaw(@ptrCast([*c]const u8, fileName), @as(c_int, width), @as(c_int, height), @as(c_int, format), @as(c_int, headerSize)); +} + +pub fn loadImageAnim(fileName: []const u8, frames: []i32) Image { + return cdef.LoadImageAnim(@ptrCast([*c]const u8, fileName), @ptrCast([*c]c_int, frames)); +} + +pub fn loadImageFromMemory(fileType: []const u8, fileData: []const u8, dataSize: i32) Image { + return cdef.LoadImageFromMemory(@ptrCast([*c]const u8, fileType), @ptrCast([*c]const u8, fileData), @as(c_int, dataSize)); +} + +pub fn loadImageFromTexture(texture: Texture2D) Image { + return cdef.LoadImageFromTexture(texture); +} + +pub fn loadImageFromScreen() Image { + return cdef.LoadImageFromScreen(); +} + +pub fn unloadImage(image: Image) void { + cdef.UnloadImage(image); +} + +pub fn exportImage(image: Image, fileName: []const u8) bool { + return cdef.ExportImage(image, @ptrCast([*c]const u8, fileName)); +} + +pub fn exportImageAsCode(image: Image, fileName: []const u8) bool { + return cdef.ExportImageAsCode(image, @ptrCast([*c]const u8, fileName)); +} + +pub fn genImageColor(width: i32, height: i32, color: Color) Image { + return cdef.GenImageColor(@as(c_int, width), @as(c_int, height), color); +} + +pub fn genImageGradientV(width: i32, height: i32, top: Color, bottom: Color) Image { + return cdef.GenImageGradientV(@as(c_int, width), @as(c_int, height), top, bottom); +} + +pub fn genImageGradientH(width: i32, height: i32, left: Color, right: Color) Image { + return cdef.GenImageGradientH(@as(c_int, width), @as(c_int, height), left, right); +} + +pub fn genImageGradientRadial(width: i32, height: i32, density: f32, inner: Color, outer: Color) Image { + return cdef.GenImageGradientRadial(@as(c_int, width), @as(c_int, height), density, inner, outer); +} + +pub fn genImageChecked(width: i32, height: i32, checksX: i32, checksY: i32, col1: Color, col2: Color) Image { + return cdef.GenImageChecked(@as(c_int, width), @as(c_int, height), @as(c_int, checksX), @as(c_int, checksY), col1, col2); +} + +pub fn genImageWhiteNoise(width: i32, height: i32, factor: f32) Image { + return cdef.GenImageWhiteNoise(@as(c_int, width), @as(c_int, height), factor); +} + +pub fn genImagePerlinNoise(width: i32, height: i32, offsetX: i32, offsetY: i32, scale: f32) Image { + return cdef.GenImagePerlinNoise(@as(c_int, width), @as(c_int, height), @as(c_int, offsetX), @as(c_int, offsetY), scale); +} + +pub fn genImageCellular(width: i32, height: i32, tileSize: i32) Image { + return cdef.GenImageCellular(@as(c_int, width), @as(c_int, height), @as(c_int, tileSize)); +} + +pub fn genImageText(width: i32, height: i32, text: []const u8) Image { + return cdef.GenImageText(@as(c_int, width), @as(c_int, height), @ptrCast([*c]const u8, text)); +} + +pub fn imageCopy(image: Image) Image { + return cdef.ImageCopy(image); +} + +pub fn imageFromImage(image: Image, rec: Rectangle) Image { + return cdef.ImageFromImage(image, rec); +} + +pub fn imageText(text: []const u8, fontSize: i32, color: Color) Image { + return cdef.ImageText(@ptrCast([*c]const u8, text), @as(c_int, fontSize), color); +} + +pub fn imageTextEx(font: Font, text: []const u8, fontSize: f32, spacing: f32, tint: Color) Image { + return cdef.ImageTextEx(font, @ptrCast([*c]const u8, text), fontSize, spacing, tint); +} + +pub fn imageFormat(image: *Image, newFormat: i32) void { + cdef.ImageFormat(@ptrCast([*c]Image, image), @as(c_int, newFormat)); +} + +pub fn imageToPOT(image: *Image, fill: Color) void { + cdef.ImageToPOT(@ptrCast([*c]Image, image), fill); +} + +pub fn imageCrop(image: *Image, crop: Rectangle) void { + cdef.ImageCrop(@ptrCast([*c]Image, image), crop); +} + +pub fn imageAlphaCrop(image: *Image, threshold: f32) void { + cdef.ImageAlphaCrop(@ptrCast([*c]Image, image), threshold); +} + +pub fn imageAlphaClear(image: *Image, color: Color, threshold: f32) void { + cdef.ImageAlphaClear(@ptrCast([*c]Image, image), color, threshold); +} + +pub fn imageAlphaMask(image: *Image, alphaMask: Image) void { + cdef.ImageAlphaMask(@ptrCast([*c]Image, image), alphaMask); +} + +pub fn imageAlphaPremultiply(image: *Image) void { + cdef.ImageAlphaPremultiply(@ptrCast([*c]Image, image)); +} + +pub fn imageBlurGaussian(image: *Image, blurSize: i32) void { + cdef.ImageBlurGaussian(@ptrCast([*c]Image, image), @as(c_int, blurSize)); +} + +pub fn imageResize(image: *Image, newWidth: i32, newHeight: i32) void { + cdef.ImageResize(@ptrCast([*c]Image, image), @as(c_int, newWidth), @as(c_int, newHeight)); +} + +pub fn imageResizeNN(image: *Image, newWidth: i32, newHeight: i32) void { + cdef.ImageResizeNN(@ptrCast([*c]Image, image), @as(c_int, newWidth), @as(c_int, newHeight)); +} + +pub fn imageResizeCanvas(image: *Image, newWidth: i32, newHeight: i32, offsetX: i32, offsetY: i32, fill: Color) void { + cdef.ImageResizeCanvas(@ptrCast([*c]Image, image), @as(c_int, newWidth), @as(c_int, newHeight), @as(c_int, offsetX), @as(c_int, offsetY), fill); +} + +pub fn imageMipmaps(image: *Image) void { + cdef.ImageMipmaps(@ptrCast([*c]Image, image)); +} + +pub fn imageDither(image: *Image, rBpp: i32, gBpp: i32, bBpp: i32, aBpp: i32) void { + cdef.ImageDither(@ptrCast([*c]Image, image), @as(c_int, rBpp), @as(c_int, gBpp), @as(c_int, bBpp), @as(c_int, aBpp)); +} + +pub fn imageFlipVertical(image: *Image) void { + cdef.ImageFlipVertical(@ptrCast([*c]Image, image)); +} + +pub fn imageFlipHorizontal(image: *Image) void { + cdef.ImageFlipHorizontal(@ptrCast([*c]Image, image)); +} + +pub fn imageRotateCW(image: *Image) void { + cdef.ImageRotateCW(@ptrCast([*c]Image, image)); +} + +pub fn imageRotateCCW(image: *Image) void { + cdef.ImageRotateCCW(@ptrCast([*c]Image, image)); +} + +pub fn imageColorTint(image: *Image, color: Color) void { + cdef.ImageColorTint(@ptrCast([*c]Image, image), color); +} + +pub fn imageColorInvert(image: *Image) void { + cdef.ImageColorInvert(@ptrCast([*c]Image, image)); +} + +pub fn imageColorGrayscale(image: *Image) void { + cdef.ImageColorGrayscale(@ptrCast([*c]Image, image)); +} + +pub fn imageColorContrast(image: *Image, contrast: f32) void { + cdef.ImageColorContrast(@ptrCast([*c]Image, image), contrast); +} + +pub fn imageColorBrightness(image: *Image, brightness: i32) void { + cdef.ImageColorBrightness(@ptrCast([*c]Image, image), @as(c_int, brightness)); +} + +pub fn imageColorReplace(image: *Image, color: Color, replace: Color) void { + cdef.ImageColorReplace(@ptrCast([*c]Image, image), color, replace); +} + +pub fn loadImageColors(image: Image) [*c]Color { + return cdef.LoadImageColors(image); +} + +pub fn loadImagePalette(image: Image, maxPaletteSize: i32, colorCount: *i32) [*c]Color { + return cdef.LoadImagePalette(image, @as(c_int, maxPaletteSize), @ptrCast([*c]c_int, colorCount)); +} + +pub fn unloadImageColors(colors: []Color) void { + cdef.UnloadImageColors(@ptrCast([*c]Color, colors)); +} + +pub fn unloadImagePalette(colors: []Color) void { + cdef.UnloadImagePalette(@ptrCast([*c]Color, colors)); +} + +pub fn getImageAlphaBorder(image: Image, threshold: f32) Rectangle { + return cdef.GetImageAlphaBorder(image, threshold); +} + +pub fn getImageColor(image: Image, x: i32, y: i32) Color { + return cdef.GetImageColor(image, @as(c_int, x), @as(c_int, y)); +} + +pub fn imageClearBackground(dst: *Image, color: Color) void { + cdef.ImageClearBackground(@ptrCast([*c]Image, dst), color); +} + +pub fn imageDrawPixel(dst: *Image, posX: i32, posY: i32, color: Color) void { + cdef.ImageDrawPixel(@ptrCast([*c]Image, dst), @as(c_int, posX), @as(c_int, posY), color); +} + +pub fn imageDrawPixelV(dst: *Image, position: Vector2, color: Color) void { + cdef.ImageDrawPixelV(@ptrCast([*c]Image, dst), position, color); +} + +pub fn imageDrawLine(dst: *Image, startPosX: i32, startPosY: i32, endPosX: i32, endPosY: i32, color: Color) void { + cdef.ImageDrawLine(@ptrCast([*c]Image, dst), @as(c_int, startPosX), @as(c_int, startPosY), @as(c_int, endPosX), @as(c_int, endPosY), color); +} + +pub fn imageDrawLineV(dst: *Image, start: Vector2, end: Vector2, color: Color) void { + cdef.ImageDrawLineV(@ptrCast([*c]Image, dst), start, end, color); +} + +pub fn imageDrawCircle(dst: *Image, centerX: i32, centerY: i32, radius: i32, color: Color) void { + cdef.ImageDrawCircle(@ptrCast([*c]Image, dst), @as(c_int, centerX), @as(c_int, centerY), @as(c_int, radius), color); +} + +pub fn imageDrawCircleV(dst: *Image, center: Vector2, radius: i32, color: Color) void { + cdef.ImageDrawCircleV(@ptrCast([*c]Image, dst), center, @as(c_int, radius), color); +} + +pub fn imageDrawCircleLines(dst: *Image, centerX: i32, centerY: i32, radius: i32, color: Color) void { + cdef.ImageDrawCircleLines(@ptrCast([*c]Image, dst), @as(c_int, centerX), @as(c_int, centerY), @as(c_int, radius), color); +} + +pub fn imageDrawCircleLinesV(dst: *Image, center: Vector2, radius: i32, color: Color) void { + cdef.ImageDrawCircleLinesV(@ptrCast([*c]Image, dst), center, @as(c_int, radius), color); +} + +pub fn imageDrawRectangle(dst: *Image, posX: i32, posY: i32, width: i32, height: i32, color: Color) void { + cdef.ImageDrawRectangle(@ptrCast([*c]Image, dst), @as(c_int, posX), @as(c_int, posY), @as(c_int, width), @as(c_int, height), color); +} + +pub fn imageDrawRectangleV(dst: *Image, position: Vector2, size: Vector2, color: Color) void { + cdef.ImageDrawRectangleV(@ptrCast([*c]Image, dst), position, size, color); +} + +pub fn imageDrawRectangleRec(dst: *Image, rec: Rectangle, color: Color) void { + cdef.ImageDrawRectangleRec(@ptrCast([*c]Image, dst), rec, color); +} + +pub fn imageDrawRectangleLines(dst: *Image, rec: Rectangle, thick: i32, color: Color) void { + cdef.ImageDrawRectangleLines(@ptrCast([*c]Image, dst), rec, @as(c_int, thick), color); +} + +pub fn imageDraw(dst: *Image, src: Image, srcRec: Rectangle, dstRec: Rectangle, tint: Color) void { + cdef.ImageDraw(@ptrCast([*c]Image, dst), src, srcRec, dstRec, tint); +} + +pub fn imageDrawText(dst: *Image, text: []const u8, posX: i32, posY: i32, fontSize: i32, color: Color) void { + cdef.ImageDrawText(@ptrCast([*c]Image, dst), @ptrCast([*c]const u8, text), @as(c_int, posX), @as(c_int, posY), @as(c_int, fontSize), color); +} + +pub fn imageDrawTextEx(dst: *Image, font: Font, text: []const u8, position: Vector2, fontSize: f32, spacing: f32, tint: Color) void { + cdef.ImageDrawTextEx(@ptrCast([*c]Image, dst), font, @ptrCast([*c]const u8, text), position, fontSize, spacing, tint); +} + +pub fn loadTexture(fileName: []const u8) Texture2D { + return cdef.LoadTexture(@ptrCast([*c]const u8, fileName)); +} + +pub fn loadTextureFromImage(image: Image) Texture2D { + return cdef.LoadTextureFromImage(image); +} + +pub fn loadTextureCubemap(image: Image, layout: i32) TextureCubemap { + return cdef.LoadTextureCubemap(image, @as(c_int, layout)); +} + +pub fn loadRenderTexture(width: i32, height: i32) RenderTexture2D { + return cdef.LoadRenderTexture(@as(c_int, width), @as(c_int, height)); +} + +pub fn unloadTexture(texture: Texture2D) void { + cdef.UnloadTexture(texture); +} + +pub fn unloadRenderTexture(target: RenderTexture2D) void { + cdef.UnloadRenderTexture(target); +} + +pub fn updateTexture(texture: Texture2D, pixels: *const anyopaque) void { + cdef.UpdateTexture(texture, pixels); +} + +pub fn updateTextureRec(texture: Texture2D, rec: Rectangle, pixels: *const anyopaque) void { + cdef.UpdateTextureRec(texture, rec, pixels); +} + +pub fn genTextureMipmaps(texture: *Texture2D) void { + cdef.GenTextureMipmaps(@ptrCast([*c]Texture2D, texture)); +} + +pub fn setTextureFilter(texture: Texture2D, filter: i32) void { + cdef.SetTextureFilter(texture, @as(c_int, filter)); +} + +pub fn setTextureWrap(texture: Texture2D, wrap: i32) void { + cdef.SetTextureWrap(texture, @as(c_int, wrap)); +} + +pub fn drawTexture(texture: Texture2D, posX: i32, posY: i32, tint: Color) void { + cdef.DrawTexture(texture, @as(c_int, posX), @as(c_int, posY), tint); +} + +pub fn drawTextureV(texture: Texture2D, position: Vector2, tint: Color) void { + cdef.DrawTextureV(texture, position, tint); +} + +pub fn drawTextureEx(texture: Texture2D, position: Vector2, rotation: f32, scale: f32, tint: Color) void { + cdef.DrawTextureEx(texture, position, rotation, scale, tint); +} + +pub fn drawTextureRec(texture: Texture2D, source: Rectangle, position: Vector2, tint: Color) void { + cdef.DrawTextureRec(texture, source, position, tint); +} + +pub fn drawTexturePro(texture: Texture2D, source: Rectangle, dest: Rectangle, origin: Vector2, rotation: f32, tint: Color) void { + cdef.DrawTexturePro(texture, source, dest, origin, rotation, tint); +} + +pub fn drawTextureNPatch(texture: Texture2D, nPatchInfo: NPatchInfo, dest: Rectangle, origin: Vector2, rotation: f32, tint: Color) void { + cdef.DrawTextureNPatch(texture, nPatchInfo, dest, origin, rotation, tint); +} + +pub fn fade(color: Color, alpha: f32) Color { + return cdef.Fade(color, alpha); +} + +pub fn colorToInt(color: Color) c_int { + return cdef.ColorToInt(color); +} + +pub fn colorNormalize(color: Color) Vector4 { + return cdef.ColorNormalize(color); +} + +pub fn colorFromNormalized(normalized: Vector4) Color { + return cdef.ColorFromNormalized(normalized); +} + +pub fn colorToHSV(color: Color) Vector3 { + return cdef.ColorToHSV(color); +} + +pub fn colorFromHSV(hue: f32, saturation: f32, value: f32) Color { + return cdef.ColorFromHSV(hue, saturation, value); +} + +pub fn colorTint(color: Color, tint: Color) Color { + return cdef.ColorTint(color, tint); +} + +pub fn colorBrightness(color: Color, factor: f32) Color { + return cdef.ColorBrightness(color, factor); +} + +pub fn colorContrast(color: Color, contrast: f32) Color { + return cdef.ColorContrast(color, contrast); +} + +pub fn colorAlpha(color: Color, alpha: f32) Color { + return cdef.ColorAlpha(color, alpha); +} + +pub fn colorAlphaBlend(dst: Color, src: Color, tint: Color) Color { + return cdef.ColorAlphaBlend(dst, src, tint); +} + +pub fn getColor(hexValue: u32) Color { + return cdef.GetColor(@as(c_uint, hexValue)); +} + +pub fn getPixelColor(srcPtr: *anyopaque, format: i32) Color { + return cdef.GetPixelColor(srcPtr, @as(c_int, format)); +} + +pub fn setPixelColor(dstPtr: *anyopaque, color: Color, format: i32) void { + cdef.SetPixelColor(dstPtr, color, @as(c_int, format)); +} + +pub fn getPixelDataSize(width: i32, height: i32, format: i32) c_int { + return cdef.GetPixelDataSize(@as(c_int, width), @as(c_int, height), @as(c_int, format)); +} + +pub fn getFontDefault() Font { + return cdef.GetFontDefault(); +} + +pub fn loadFont(fileName: []const u8) Font { + return cdef.LoadFont(@ptrCast([*c]const u8, fileName)); +} + +pub fn loadFontEx(fileName: []const u8, fontSize: i32, fontChars: []i32, glyphCount: i32) Font { + return cdef.LoadFontEx(@ptrCast([*c]const u8, fileName), @as(c_int, fontSize), @ptrCast([*c]c_int, fontChars), @as(c_int, glyphCount)); +} + +pub fn loadFontFromImage(image: Image, key: Color, firstChar: i32) Font { + return cdef.LoadFontFromImage(image, key, @as(c_int, firstChar)); +} + +pub fn loadFontFromMemory(fileType: []const u8, fileData: []const u8, dataSize: i32, fontSize: i32, fontChars: []i32, glyphCount: i32) Font { + return cdef.LoadFontFromMemory(@ptrCast([*c]const u8, fileType), @ptrCast([*c]const u8, fileData), @as(c_int, dataSize), @as(c_int, fontSize), @ptrCast([*c]c_int, fontChars), @as(c_int, glyphCount)); +} + +pub fn loadFontData(fileData: []const u8, dataSize: i32, fontSize: i32, fontChars: []i32, glyphCount: i32, ty: i32) [*c]GlyphInfo { + return cdef.LoadFontData(@ptrCast([*c]const u8, fileData), @as(c_int, dataSize), @as(c_int, fontSize), @ptrCast([*c]c_int, fontChars), @as(c_int, glyphCount), @as(c_int, ty)); +} + +pub fn genImageFontAtlas(chars: []const GlyphInfo, recs: [][]Rectangle, glyphCount: i32, fontSize: i32, padding: i32, packMethod: i32) Image { + return cdef.GenImageFontAtlas(@ptrCast([*c]const GlyphInfo, chars), @ptrCast([*c][*c]Rectangle, recs), @as(c_int, glyphCount), @as(c_int, fontSize), @as(c_int, padding), @as(c_int, packMethod)); +} + +pub fn unloadFontData(chars: []GlyphInfo, glyphCount: i32) void { + cdef.UnloadFontData(@ptrCast([*c]GlyphInfo, chars), @as(c_int, glyphCount)); +} + +pub fn unloadFont(font: Font) void { + cdef.UnloadFont(font); +} + +pub fn exportFontAsCode(font: Font, fileName: []const u8) bool { + return cdef.ExportFontAsCode(font, @ptrCast([*c]const u8, fileName)); +} + +pub fn drawFPS(posX: i32, posY: i32) void { + cdef.DrawFPS(@as(c_int, posX), @as(c_int, posY)); +} + +pub fn drawText(text: []const u8, posX: i32, posY: i32, fontSize: i32, color: Color) void { + cdef.DrawText(@ptrCast([*c]const u8, text), @as(c_int, posX), @as(c_int, posY), @as(c_int, fontSize), color); +} + +pub fn drawTextEx(font: Font, text: []const u8, position: Vector2, fontSize: f32, spacing: f32, tint: Color) void { + cdef.DrawTextEx(font, @ptrCast([*c]const u8, text), position, fontSize, spacing, tint); +} + +pub fn drawTextPro(font: Font, text: []const u8, position: Vector2, origin: Vector2, rotation: f32, fontSize: f32, spacing: f32, tint: Color) void { + cdef.DrawTextPro(font, @ptrCast([*c]const u8, text), position, origin, rotation, fontSize, spacing, tint); +} + +pub fn drawTextCodepoint(font: Font, codepoint: i32, position: Vector2, fontSize: f32, tint: Color) void { + cdef.DrawTextCodepoint(font, @as(c_int, codepoint), position, fontSize, tint); +} + +pub fn drawTextCodepoints(font: Font, codepoints: []const c_int, count: i32, position: Vector2, fontSize: f32, spacing: f32, tint: Color) void { + cdef.DrawTextCodepoints(font, @ptrCast([*c]const c_int, codepoints), @as(c_int, count), position, fontSize, spacing, tint); +} + +pub fn measureText(text: []const u8, fontSize: i32) c_int { + return cdef.MeasureText(@ptrCast([*c]const u8, text), @as(c_int, fontSize)); +} + +pub fn measureTextEx(font: Font, text: []const u8, fontSize: f32, spacing: f32) Vector2 { + return cdef.MeasureTextEx(font, @ptrCast([*c]const u8, text), fontSize, spacing); +} + +pub fn getGlyphIndex(font: Font, codepoint: i32) c_int { + return cdef.GetGlyphIndex(font, @as(c_int, codepoint)); +} + +pub fn getGlyphInfo(font: Font, codepoint: i32) GlyphInfo { + return cdef.GetGlyphInfo(font, @as(c_int, codepoint)); +} + +pub fn getGlyphAtlasRec(font: Font, codepoint: i32) Rectangle { + return cdef.GetGlyphAtlasRec(font, @as(c_int, codepoint)); +} + +pub fn loadUTF8(codepoints: []const c_int, length: i32) [*c]u8 { + return cdef.LoadUTF8(@ptrCast([*c]const c_int, codepoints), @as(c_int, length)); +} + +pub fn unloadUTF8(text: []u8) void { + cdef.UnloadUTF8(@ptrCast([*c]u8, text)); +} + +pub fn loadCodepoints(text: []const u8, count: *i32) [*c]c_int { + return cdef.LoadCodepoints(@ptrCast([*c]const u8, text), @ptrCast([*c]c_int, count)); +} + +pub fn unloadCodepoints(codepoints: []i32) void { + cdef.UnloadCodepoints(@ptrCast([*c]c_int, codepoints)); +} + +pub fn getCodepointCount(text: []const u8) c_int { + return cdef.GetCodepointCount(@ptrCast([*c]const u8, text)); +} + +pub fn getCodepoint(text: []const u8, codepointSize: *i32) c_int { + return cdef.GetCodepoint(@ptrCast([*c]const u8, text), @ptrCast([*c]c_int, codepointSize)); +} + +pub fn getCodepointNext(text: []const u8, codepointSize: *i32) c_int { + return cdef.GetCodepointNext(@ptrCast([*c]const u8, text), @ptrCast([*c]c_int, codepointSize)); +} + +pub fn getCodepointPrevious(text: []const u8, codepointSize: *i32) c_int { + return cdef.GetCodepointPrevious(@ptrCast([*c]const u8, text), @ptrCast([*c]c_int, codepointSize)); +} + +pub fn codepointToUTF8(codepoint: i32, utf8Size: *i32) [*c]const u8 { + return cdef.CodepointToUTF8(@as(c_int, codepoint), @ptrCast([*c]c_int, utf8Size)); +} + +pub fn textCopy(dst: *u8, src: []const u8) c_int { + return cdef.TextCopy(@ptrCast([*c]u8, dst), @ptrCast([*c]const u8, src)); +} + +pub fn textIsEqual(text1: []const u8, text2: []const u8) bool { + return cdef.TextIsEqual(@ptrCast([*c]const u8, text1), @ptrCast([*c]const u8, text2)); +} + +pub fn textLength(text: []const u8) c_uint { + return cdef.TextLength(@ptrCast([*c]const u8, text)); +} + +pub fn textSubtext(text: []const u8, position: i32, length: i32) [*c]const u8 { + return cdef.TextSubtext(@ptrCast([*c]const u8, text), @as(c_int, position), @as(c_int, length)); +} + +pub fn textReplace(text: []u8, replace: []const u8, by: []const u8) [*c]u8 { + return cdef.TextReplace(@ptrCast([*c]u8, text), @ptrCast([*c]const u8, replace), @ptrCast([*c]const u8, by)); +} + +pub fn textInsert(text: []const u8, insert: []const u8, position: i32) [*c]u8 { + return cdef.TextInsert(@ptrCast([*c]const u8, text), @ptrCast([*c]const u8, insert), @as(c_int, position)); +} + +pub fn textJoin(textList: [][]const u8, count: i32, delimiter: []const u8) [*c]const u8 { + return cdef.TextJoin(@ptrCast([*c][*c]const u8, textList), @as(c_int, count), @ptrCast([*c]const u8, delimiter)); +} + +pub fn textSplit(text: []const u8, delimiter: u8, count: *i32) [*c][*c]const u8 { + return cdef.TextSplit(@ptrCast([*c]const u8, text), delimiter, @ptrCast([*c]c_int, count)); +} + +pub fn textAppend(text: []u8, append: []const u8, position: *i32) void { + cdef.TextAppend(@ptrCast([*c]u8, text), @ptrCast([*c]const u8, append), @ptrCast([*c]c_int, position)); +} + +pub fn textFindIndex(text: []const u8, find: []const u8) c_int { + return cdef.TextFindIndex(@ptrCast([*c]const u8, text), @ptrCast([*c]const u8, find)); +} + +pub fn textToUpper(text: []const u8) [*c]const u8 { + return cdef.TextToUpper(@ptrCast([*c]const u8, text)); +} + +pub fn textToLower(text: []const u8) [*c]const u8 { + return cdef.TextToLower(@ptrCast([*c]const u8, text)); +} + +pub fn textToPascal(text: []const u8) [*c]const u8 { + return cdef.TextToPascal(@ptrCast([*c]const u8, text)); +} + +pub fn textToInteger(text: []const u8) c_int { + return cdef.TextToInteger(@ptrCast([*c]const u8, text)); +} + +pub fn drawLine3D(startPos: Vector3, endPos: Vector3, color: Color) void { + cdef.DrawLine3D(startPos, endPos, color); +} + +pub fn drawPoint3D(position: Vector3, color: Color) void { + cdef.DrawPoint3D(position, color); +} + +pub fn drawCircle3D(center: Vector3, radius: f32, rotationAxis: Vector3, rotationAngle: f32, color: Color) void { + cdef.DrawCircle3D(center, radius, rotationAxis, rotationAngle, color); +} + +pub fn drawTriangle3D(v1: Vector3, v2: Vector3, v3: Vector3, color: Color) void { + cdef.DrawTriangle3D(v1, v2, v3, color); +} + +pub fn drawTriangleStrip3D(points: []Vector3, pointCount: i32, color: Color) void { + cdef.DrawTriangleStrip3D(@ptrCast([*c]Vector3, points), @as(c_int, pointCount), color); +} + +pub fn drawCube(position: Vector3, width: f32, height: f32, length: f32, color: Color) void { + cdef.DrawCube(position, width, height, length, color); +} + +pub fn drawCubeV(position: Vector3, size: Vector3, color: Color) void { + cdef.DrawCubeV(position, size, color); +} + +pub fn drawCubeWires(position: Vector3, width: f32, height: f32, length: f32, color: Color) void { + cdef.DrawCubeWires(position, width, height, length, color); +} + +pub fn drawCubeWiresV(position: Vector3, size: Vector3, color: Color) void { + cdef.DrawCubeWiresV(position, size, color); +} + +pub fn drawSphere(centerPos: Vector3, radius: f32, color: Color) void { + cdef.DrawSphere(centerPos, radius, color); +} + +pub fn drawSphereEx(centerPos: Vector3, radius: f32, rings: i32, slices: i32, color: Color) void { + cdef.DrawSphereEx(centerPos, radius, @as(c_int, rings), @as(c_int, slices), color); +} + +pub fn drawSphereWires(centerPos: Vector3, radius: f32, rings: i32, slices: i32, color: Color) void { + cdef.DrawSphereWires(centerPos, radius, @as(c_int, rings), @as(c_int, slices), color); +} + +pub fn drawCylinder(position: Vector3, radiusTop: f32, radiusBottom: f32, height: f32, slices: i32, color: Color) void { + cdef.DrawCylinder(position, radiusTop, radiusBottom, height, @as(c_int, slices), color); +} + +pub fn drawCylinderEx(startPos: Vector3, endPos: Vector3, startRadius: f32, endRadius: f32, sides: i32, color: Color) void { + cdef.DrawCylinderEx(startPos, endPos, startRadius, endRadius, @as(c_int, sides), color); +} + +pub fn drawCylinderWires(position: Vector3, radiusTop: f32, radiusBottom: f32, height: f32, slices: i32, color: Color) void { + cdef.DrawCylinderWires(position, radiusTop, radiusBottom, height, @as(c_int, slices), color); +} + +pub fn drawCylinderWiresEx(startPos: Vector3, endPos: Vector3, startRadius: f32, endRadius: f32, sides: i32, color: Color) void { + cdef.DrawCylinderWiresEx(startPos, endPos, startRadius, endRadius, @as(c_int, sides), color); +} + +pub fn drawCapsule(startPos: Vector3, endPos: Vector3, radius: f32, slices: i32, rings: i32, color: Color) void { + cdef.DrawCapsule(startPos, endPos, radius, @as(c_int, slices), @as(c_int, rings), color); +} + +pub fn drawCapsuleWires(startPos: Vector3, endPos: Vector3, radius: f32, slices: i32, rings: i32, color: Color) void { + cdef.DrawCapsuleWires(startPos, endPos, radius, @as(c_int, slices), @as(c_int, rings), color); +} + +pub fn drawPlane(centerPos: Vector3, size: Vector2, color: Color) void { + cdef.DrawPlane(centerPos, size, color); +} + +pub fn drawRay(ray: Ray, color: Color) void { + cdef.DrawRay(ray, color); +} + +pub fn drawGrid(slices: i32, spacing: f32) void { + cdef.DrawGrid(@as(c_int, slices), spacing); +} + +pub fn loadModel(fileName: []const u8) Model { + return cdef.LoadModel(@ptrCast([*c]const u8, fileName)); +} + +pub fn loadModelFromMesh(mesh: Mesh) Model { + return cdef.LoadModelFromMesh(mesh); +} + +pub fn unloadModel(model: Model) void { + cdef.UnloadModel(model); +} + +pub fn unloadModelKeepMeshes(model: Model) void { + cdef.UnloadModelKeepMeshes(model); +} + +pub fn getModelBoundingBox(model: Model) BoundingBox { + return cdef.GetModelBoundingBox(model); +} + +pub fn drawModel(model: Model, position: Vector3, scale: f32, tint: Color) void { + cdef.DrawModel(model, position, scale, tint); +} + +pub fn drawModelEx(model: Model, position: Vector3, rotationAxis: Vector3, rotationAngle: f32, scale: Vector3, tint: Color) void { + cdef.DrawModelEx(model, position, rotationAxis, rotationAngle, scale, tint); +} + +pub fn drawModelWires(model: Model, position: Vector3, scale: f32, tint: Color) void { + cdef.DrawModelWires(model, position, scale, tint); +} + +pub fn drawModelWiresEx(model: Model, position: Vector3, rotationAxis: Vector3, rotationAngle: f32, scale: Vector3, tint: Color) void { + cdef.DrawModelWiresEx(model, position, rotationAxis, rotationAngle, scale, tint); +} + +pub fn drawBoundingBox(box: BoundingBox, color: Color) void { + cdef.DrawBoundingBox(box, color); +} + +pub fn drawBillboard(camera: Camera, texture: Texture2D, position: Vector3, size: f32, tint: Color) void { + cdef.DrawBillboard(camera, texture, position, size, tint); +} + +pub fn drawBillboardRec(camera: Camera, texture: Texture2D, source: Rectangle, position: Vector3, size: Vector2, tint: Color) void { + cdef.DrawBillboardRec(camera, texture, source, position, size, tint); +} + +pub fn drawBillboardPro(camera: Camera, texture: Texture2D, source: Rectangle, position: Vector3, up: Vector3, size: Vector2, origin: Vector2, rotation: f32, tint: Color) void { + cdef.DrawBillboardPro(camera, texture, source, position, up, size, origin, rotation, tint); +} + +pub fn uploadMesh(mesh: *Mesh, dynamic: bool) void { + cdef.UploadMesh(@ptrCast([*c]Mesh, mesh), dynamic); +} + +pub fn updateMeshBuffer(mesh: Mesh, index: i32, data: *const anyopaque, dataSize: i32, offset: i32) void { + cdef.UpdateMeshBuffer(mesh, @as(c_int, index), data, @as(c_int, dataSize), @as(c_int, offset)); +} + +pub fn unloadMesh(mesh: Mesh) void { + cdef.UnloadMesh(mesh); +} + +pub fn drawMesh(mesh: Mesh, material: Material, transform: Matrix) void { + cdef.DrawMesh(mesh, material, transform); +} + +pub fn drawMeshInstanced(mesh: Mesh, material: Material, transforms: []const Matrix, instances: i32) void { + cdef.DrawMeshInstanced(mesh, material, @ptrCast([*c]const Matrix, transforms), @as(c_int, instances)); +} + +pub fn exportMesh(mesh: Mesh, fileName: []const u8) bool { + return cdef.ExportMesh(mesh, @ptrCast([*c]const u8, fileName)); +} + +pub fn getMeshBoundingBox(mesh: Mesh) BoundingBox { + return cdef.GetMeshBoundingBox(mesh); +} + +pub fn genMeshTangents(mesh: *Mesh) void { + cdef.GenMeshTangents(@ptrCast([*c]Mesh, mesh)); +} + +pub fn genMeshPoly(sides: i32, radius: f32) Mesh { + return cdef.GenMeshPoly(@as(c_int, sides), radius); +} + +pub fn genMeshPlane(width: f32, length: f32, resX: i32, resZ: i32) Mesh { + return cdef.GenMeshPlane(width, length, @as(c_int, resX), @as(c_int, resZ)); +} + +pub fn genMeshCube(width: f32, height: f32, length: f32) Mesh { + return cdef.GenMeshCube(width, height, length); +} + +pub fn genMeshSphere(radius: f32, rings: i32, slices: i32) Mesh { + return cdef.GenMeshSphere(radius, @as(c_int, rings), @as(c_int, slices)); +} + +pub fn genMeshHemiSphere(radius: f32, rings: i32, slices: i32) Mesh { + return cdef.GenMeshHemiSphere(radius, @as(c_int, rings), @as(c_int, slices)); +} + +pub fn genMeshCylinder(radius: f32, height: f32, slices: i32) Mesh { + return cdef.GenMeshCylinder(radius, height, @as(c_int, slices)); +} + +pub fn genMeshCone(radius: f32, height: f32, slices: i32) Mesh { + return cdef.GenMeshCone(radius, height, @as(c_int, slices)); +} + +pub fn genMeshTorus(radius: f32, size: f32, radSeg: i32, sides: i32) Mesh { + return cdef.GenMeshTorus(radius, size, @as(c_int, radSeg), @as(c_int, sides)); +} + +pub fn genMeshKnot(radius: f32, size: f32, radSeg: i32, sides: i32) Mesh { + return cdef.GenMeshKnot(radius, size, @as(c_int, radSeg), @as(c_int, sides)); +} + +pub fn genMeshHeightmap(heightmap: Image, size: Vector3) Mesh { + return cdef.GenMeshHeightmap(heightmap, size); +} + +pub fn genMeshCubicmap(cubicmap: Image, cubeSize: Vector3) Mesh { + return cdef.GenMeshCubicmap(cubicmap, cubeSize); +} + +pub fn loadMaterials(fileName: []const u8, materialCount: *i32) [*c]Material { + return cdef.LoadMaterials(@ptrCast([*c]const u8, fileName), @ptrCast([*c]c_int, materialCount)); +} + +pub fn loadMaterialDefault() Material { + return cdef.LoadMaterialDefault(); +} + +pub fn unloadMaterial(material: Material) void { + cdef.UnloadMaterial(material); +} + +pub fn setMaterialTexture(material: *Material, mapType: i32, texture: Texture2D) void { + cdef.SetMaterialTexture(@ptrCast([*c]Material, material), @as(c_int, mapType), texture); +} + +pub fn setModelMeshMaterial(model: *Model, meshId: i32, materialId: i32) void { + cdef.SetModelMeshMaterial(@ptrCast([*c]Model, model), @as(c_int, meshId), @as(c_int, materialId)); +} + +pub fn loadModelAnimations(fileName: []const u8, animCount: *u32) [*c]ModelAnimation { + return cdef.LoadModelAnimations(@ptrCast([*c]const u8, fileName), @ptrCast([*c]c_uint, animCount)); +} + +pub fn updateModelAnimation(model: Model, anim: ModelAnimation, frame: i32) void { + cdef.UpdateModelAnimation(model, anim, @as(c_int, frame)); +} + +pub fn unloadModelAnimation(anim: ModelAnimation) void { + cdef.UnloadModelAnimation(anim); +} + +pub fn unloadModelAnimations(animations: []ModelAnimation, count: u32) void { + cdef.UnloadModelAnimations(@ptrCast([*c]ModelAnimation, animations), @as(c_uint, count)); +} + +pub fn isModelAnimationValid(model: Model, anim: ModelAnimation) bool { + return cdef.IsModelAnimationValid(model, anim); +} + +pub fn checkCollisionSpheres(center1: Vector3, radius1: f32, center2: Vector3, radius2: f32) bool { + return cdef.CheckCollisionSpheres(center1, radius1, center2, radius2); +} + +pub fn checkCollisionBoxes(box1: BoundingBox, box2: BoundingBox) bool { + return cdef.CheckCollisionBoxes(box1, box2); +} + +pub fn checkCollisionBoxSphere(box: BoundingBox, center: Vector3, radius: f32) bool { + return cdef.CheckCollisionBoxSphere(box, center, radius); +} + +pub fn getRayCollisionSphere(ray: Ray, center: Vector3, radius: f32) RayCollision { + return cdef.GetRayCollisionSphere(ray, center, radius); +} + +pub fn getRayCollisionBox(ray: Ray, box: BoundingBox) RayCollision { + return cdef.GetRayCollisionBox(ray, box); +} + +pub fn getRayCollisionMesh(ray: Ray, mesh: Mesh, transform: Matrix) RayCollision { + return cdef.GetRayCollisionMesh(ray, mesh, transform); +} + +pub fn getRayCollisionTriangle(ray: Ray, p1: Vector3, p2: Vector3, p3: Vector3) RayCollision { + return cdef.GetRayCollisionTriangle(ray, p1, p2, p3); +} + +pub fn getRayCollisionQuad(ray: Ray, p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3) RayCollision { + return cdef.GetRayCollisionQuad(ray, p1, p2, p3, p4); +} + +pub fn initAudioDevice() void { + cdef.InitAudioDevice(); +} + +pub fn closeAudioDevice() void { + cdef.CloseAudioDevice(); +} + +pub fn isAudioDeviceReady() bool { + return cdef.IsAudioDeviceReady(); +} + +pub fn setMasterVolume(volume: f32) void { + cdef.SetMasterVolume(volume); +} + +pub fn loadWave(fileName: []const u8) Wave { + return cdef.LoadWave(@ptrCast([*c]const u8, fileName)); +} + +pub fn loadWaveFromMemory(fileType: []const u8, fileData: []const u8, dataSize: i32) Wave { + return cdef.LoadWaveFromMemory(@ptrCast([*c]const u8, fileType), @ptrCast([*c]const u8, fileData), @as(c_int, dataSize)); +} + +pub fn loadSound(fileName: []const u8) Sound { + return cdef.LoadSound(@ptrCast([*c]const u8, fileName)); +} + +pub fn loadSoundFromWave(wave: Wave) Sound { + return cdef.LoadSoundFromWave(wave); +} + +pub fn updateSound(sound: Sound, data: *const anyopaque, sampleCount: i32) void { + cdef.UpdateSound(sound, data, @as(c_int, sampleCount)); +} + +pub fn unloadWave(wave: Wave) void { + cdef.UnloadWave(wave); +} + +pub fn unloadSound(sound: Sound) void { + cdef.UnloadSound(sound); +} + +pub fn exportWave(wave: Wave, fileName: []const u8) bool { + return cdef.ExportWave(wave, @ptrCast([*c]const u8, fileName)); +} + +pub fn exportWaveAsCode(wave: Wave, fileName: []const u8) bool { + return cdef.ExportWaveAsCode(wave, @ptrCast([*c]const u8, fileName)); +} + +pub fn playSound(sound: Sound) void { + cdef.PlaySound(sound); +} + +pub fn stopSound(sound: Sound) void { + cdef.StopSound(sound); +} + +pub fn pauseSound(sound: Sound) void { + cdef.PauseSound(sound); +} + +pub fn resumeSound(sound: Sound) void { + cdef.ResumeSound(sound); +} + +pub fn playSoundMulti(sound: Sound) void { + cdef.PlaySoundMulti(sound); +} + +pub fn stopSoundMulti() void { + cdef.StopSoundMulti(); +} + +pub fn getSoundsPlaying() c_int { + return cdef.GetSoundsPlaying(); +} + +pub fn isSoundPlaying(sound: Sound) bool { + return cdef.IsSoundPlaying(sound); +} + +pub fn setSoundVolume(sound: Sound, volume: f32) void { + cdef.SetSoundVolume(sound, volume); +} + +pub fn setSoundPitch(sound: Sound, pitch: f32) void { + cdef.SetSoundPitch(sound, pitch); +} + +pub fn setSoundPan(sound: Sound, pan: f32) void { + cdef.SetSoundPan(sound, pan); +} + +pub fn waveCopy(wave: Wave) Wave { + return cdef.WaveCopy(wave); +} + +pub fn waveCrop(wave: *Wave, initSample: i32, finalSample: i32) void { + cdef.WaveCrop(@ptrCast([*c]Wave, wave), @as(c_int, initSample), @as(c_int, finalSample)); +} + +pub fn waveFormat(wave: *Wave, sampleRate: i32, sampleSize: i32, channels: i32) void { + cdef.WaveFormat(@ptrCast([*c]Wave, wave), @as(c_int, sampleRate), @as(c_int, sampleSize), @as(c_int, channels)); +} + +pub fn loadWaveSamples(wave: Wave) [*c]f32 { + return cdef.LoadWaveSamples(wave); +} + +pub fn unloadWaveSamples(samples: []f32) void { + cdef.UnloadWaveSamples(@ptrCast([*c]f32, samples)); +} + +pub fn loadMusicStream(fileName: []const u8) Music { + return cdef.LoadMusicStream(@ptrCast([*c]const u8, fileName)); +} + +pub fn loadMusicStreamFromMemory(fileType: []const u8, data: []const u8, dataSize: i32) Music { + return cdef.LoadMusicStreamFromMemory(@ptrCast([*c]const u8, fileType), @ptrCast([*c]const u8, data), @as(c_int, dataSize)); +} + +pub fn unloadMusicStream(music: Music) void { + cdef.UnloadMusicStream(music); +} + +pub fn playMusicStream(music: Music) void { + cdef.PlayMusicStream(music); +} + +pub fn isMusicStreamPlaying(music: Music) bool { + return cdef.IsMusicStreamPlaying(music); +} + +pub fn updateMusicStream(music: Music) void { + cdef.UpdateMusicStream(music); +} + +pub fn stopMusicStream(music: Music) void { + cdef.StopMusicStream(music); +} + +pub fn pauseMusicStream(music: Music) void { + cdef.PauseMusicStream(music); +} + +pub fn resumeMusicStream(music: Music) void { + cdef.ResumeMusicStream(music); +} + +pub fn seekMusicStream(music: Music, position: f32) void { + cdef.SeekMusicStream(music, position); +} + +pub fn setMusicVolume(music: Music, volume: f32) void { + cdef.SetMusicVolume(music, volume); +} + +pub fn setMusicPitch(music: Music, pitch: f32) void { + cdef.SetMusicPitch(music, pitch); +} + +pub fn setMusicPan(music: Music, pan: f32) void { + cdef.SetMusicPan(music, pan); +} + +pub fn getMusicTimeLength(music: Music) f32 { + return cdef.GetMusicTimeLength(music); +} + +pub fn getMusicTimePlayed(music: Music) f32 { + return cdef.GetMusicTimePlayed(music); +} + +pub fn loadAudioStream(sampleRate: u32, sampleSize: u32, channels: u32) AudioStream { + return cdef.LoadAudioStream(@as(c_uint, sampleRate), @as(c_uint, sampleSize), @as(c_uint, channels)); +} + +pub fn unloadAudioStream(stream: AudioStream) void { + cdef.UnloadAudioStream(stream); +} + +pub fn updateAudioStream(stream: AudioStream, data: *const anyopaque, frameCount: i32) void { + cdef.UpdateAudioStream(stream, data, @as(c_int, frameCount)); +} + +pub fn isAudioStreamProcessed(stream: AudioStream) bool { + return cdef.IsAudioStreamProcessed(stream); +} + +pub fn playAudioStream(stream: AudioStream) void { + cdef.PlayAudioStream(stream); +} + +pub fn pauseAudioStream(stream: AudioStream) void { + cdef.PauseAudioStream(stream); +} + +pub fn resumeAudioStream(stream: AudioStream) void { + cdef.ResumeAudioStream(stream); +} + +pub fn isAudioStreamPlaying(stream: AudioStream) bool { + return cdef.IsAudioStreamPlaying(stream); +} + +pub fn stopAudioStream(stream: AudioStream) void { + cdef.StopAudioStream(stream); +} + +pub fn setAudioStreamVolume(stream: AudioStream, volume: f32) void { + cdef.SetAudioStreamVolume(stream, volume); +} + +pub fn setAudioStreamPitch(stream: AudioStream, pitch: f32) void { + cdef.SetAudioStreamPitch(stream, pitch); +} + +pub fn setAudioStreamPan(stream: AudioStream, pan: f32) void { + cdef.SetAudioStreamPan(stream, pan); +} + +pub fn setAudioStreamBufferSizeDefault(size: i32) void { + cdef.SetAudioStreamBufferSizeDefault(@as(c_int, size)); +} + +pub fn setAudioStreamCallback(stream: AudioStream, callback: AudioCallback) void { + cdef.SetAudioStreamCallback(stream, callback); +} + +pub fn attachAudioStreamProcessor(stream: AudioStream, processor: AudioCallback) void { + cdef.AttachAudioStreamProcessor(stream, processor); +} + +pub fn detachAudioStreamProcessor(stream: AudioStream, processor: AudioCallback) void { + cdef.DetachAudioStreamProcessor(stream, processor); +}