Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/l-briand/raylib-zig-bindings
One to one translation of raylib.h, rlgl.h, rcamera.h and raygui.h files in zig. Build tools to compile raylib from source with simple zon dependency.
https://github.com/l-briand/raylib-zig-bindings
raygui raylib raylib-binding zig
Last synced: 3 months ago
JSON representation
One to one translation of raylib.h, rlgl.h, rcamera.h and raygui.h files in zig. Build tools to compile raylib from source with simple zon dependency.
- Host: GitHub
- URL: https://github.com/l-briand/raylib-zig-bindings
- Owner: L-Briand
- License: zlib
- Created: 2024-05-24T11:09:22.000Z (9 months ago)
- Default Branch: master
- Last Pushed: 2024-07-27T09:16:17.000Z (7 months ago)
- Last Synced: 2024-07-27T10:26:19.506Z (7 months ago)
- Topics: raygui, raylib, raylib-binding, zig
- Language: Zig
- Homepage:
- Size: 93.8 KB
- Stars: 9
- Watchers: 3
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.MD
- License: LICENSE
Awesome Lists containing this project
README
# Raylib Zig Bindings
1. One to one translation of
[raylib.h](https://github.com/raysan5/raylib/blob/master/src/raylib.h),
[rlgl.h](https://github.com/raysan5/raylib/blob/master/src/rlgl.h),
[rcamera.h](https://github.com/raysan5/raylib/blob/master/src/rcamera.h) and
[raygui.h](https://github.com/raysan5/raygui/blob/master/src/raygui.h) files in zig
2. Build tools to compile raylib from source with simple zon dependency.- Raylib version `5.0`
- Raygui version `4.0`
- Zig version`0.13.0`# TLDR
[Sample project here](https://github.com/L-Briand/raylib-zig-bindings-sample) using what's described below
# Projects using this
- https://github.com/Srekel/tides-of-tabletop
# Setting up a project
You'll need raylib and raygui sources with the correct version:
```bash
git clone --depth 1 --branch 5.0 https://github.com/raysan5/raylib.git
git clone --depth 1 --branch 4.0 https://github.com/raysan5/raygui.git
```Create a `build.zig.zon` file and use this project as dependency.
```zon
.{
.name = "game",
.version = "0.0.0",.dependencies = .{
.@"raylib-zig-bindings" = .{
.url = "https://github.com/L-Briand/raylib-zig-bindings/releases/download/1.1.0/release.tar.gz",
.hash = "122096dfc8994542d786f21d12806a9bb9bb388d3f731aa03b0cacda0f5c48de2b5c",
}
},.paths = .{
"",
},
}
```Create a `build.zig` file looking like this:
```zig
const std = @import("std");
// Import the project from zon file.
const rlzb = @import("raylib-zig-bindings");pub fn build(b: *std.Build) !void {
// Default zig setup
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});const exe = b.addExecutable(.{
.name = "game",
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
});// Adding rlzb binding files for us to use in the main.zig file.
const bindings = b.dependency("raylib-zig-bindings", .{
.target = target,
.optimize = optimize,
});
exe.root_module.addImport("rlzb", bindings.module("raylib-zig-bindings"));// Compiling raylib with main.zig
// You can select which raylib C file to add in the third parameter
var setup = try rlzb.Setup.init(b, .{ .cwd_relative = "raylib/src" }, .{});
defer setup.deinit();// This line copy the raygui.h file into raylib/src to build with it.
try setup.addRayguiToRaylibSrc(b, .{ .cwd_relative = "raygui/src/raygui.h" });// If you have some raylib's C #define requirements that need to be at build time.
// You can set them here:
// setup.setRayguiOptions(b, exe, .{});
// setup.setRCameraOptions(b, exe, .{});
// setup.setRlglOptions(b, exe, .{});// Note:
// Some target needs specific opengl api version (RlglOption).
// For example linux .platform = DRM requires opengl_es2
// If you do not uncomment the setup.setRlglOptions above.
// It will add it automatically when linking.// Build specific for platform.
switch (target.result.os.tag) {
.windows => try setup.linkWindows(b, exe),
.macos => try setup.linkMacos(b, exe),
.linux => try setup.linkLinux(b, exe, .{ .platform = .DESKTOP, .backend = .X11 }),
else => @panic("Unsupported os"),
}// Add everything to the exe.
setup.finalize(b, exe);// Default zig build run command setup
b.installArtifact(exe);
const run_cmd = b.addRunArtifact(exe);
run_cmd.step.dependOn(b.getInstallStep());
if (b.args) |args| {
run_cmd.addArgs(args);
}
const run_step = b.step("run", "Run the app");
run_step.dependOn(&run_cmd.step);
}
```And create a `src/main.zig` file. This is the translation
of [raygui code sample](https://github.com/raysan5/raygui/tree/master?tab=readme-ov-file#code-sample).```zig
const std = @import("std");const rlzb = @import("rlzb");
const rl = rlzb.raylib;
const rg = rlzb.raygui;pub fn main() !void {
rl.InitWindow(400, 200, "raygui - controls test suite");
defer rl.CloseWindow();
rl.SetTargetFPS(60);var showMessageBox = false;
while (!rl.WindowShouldClose()) {
rl.BeginDrawing();
const style = rg.GuiGetStyle(
rg.GuiControl.DEFAULT.toCInt(),
rg.GuiDefaultProperty.BACKGROUND_COLOR.toCInt(),
);
rl.ClearBackground(rl.GetColor(@bitCast(style)));if (rg.GuiButton(rl.Rectangle.init(24, 24, 120, 30), "#191#Show Message") > 0)
showMessageBox = true;if (showMessageBox) {
const bounds = rl.Rectangle.init(85, 70, 250, 100);
const result = rg.GuiMessageBox(bounds, "#191#Message Box", "Hi! This is a message!", "Nice;Cool");
if (result >= 0) showMessageBox = false;
}rl.EndDrawing();
}return;
}
```Then run `zig build run`. You should see a window popping up.
![Raygui window](./raygui_screenshot.png)
If you don't want to switch between raylib and raygui. You can create a struct with wanted `usingnamespace` inside.
```zig
const rl = struct {
const rlzb = @import("rlzb");
usingnamespace rlzb.raylib;
usingnamespace rlzb.rlgl;
usingnamespace rlzb.rcamera;
usingnamespace rlzb.raygui;
};
```