From 1a731bf32802fb7fe772e171a60ccfd65f798de7 Mon Sep 17 00:00:00 2001 From: Jae B Date: Thu, 23 Apr 2026 18:20:18 +1000 Subject: [PATCH] raylib example: add asset loading to example and fix asset loading --- examples/raylib/build.zig | 4 ++ examples/raylib/src/main.zig | 77 ++++++++++++++++++++++++++++------- examples/raylib/src/zig.bmp | Bin 0 -> 168138 bytes examples/sdl2/build.zig | 11 +---- 4 files changed, 68 insertions(+), 24 deletions(-) create mode 100644 examples/raylib/src/zig.bmp diff --git a/examples/raylib/build.zig b/examples/raylib/build.zig index c45b6de..81d06ba 100644 --- a/examples/raylib/build.zig +++ b/examples/raylib/build.zig @@ -32,6 +32,10 @@ pub fn build(b: *std.Build) void { apk.setAndroidManifest(b.path("android/AndroidManifest.xml")); apk.addResourceDirectory(b.path("android/res")); + const generated_asset_dir = b.addNamedWriteFiles("android_asset_directory"); + _ = generated_asset_dir.addCopyFile(b.path("src/zig.bmp"), "zig.bmp"); + apk.addAssetDirectory(generated_asset_dir.getDirectory()); + break :blk apk; }; diff --git a/examples/raylib/src/main.zig b/examples/raylib/src/main.zig index ca3557d..2767dd7 100644 --- a/examples/raylib/src/main.zig +++ b/examples/raylib/src/main.zig @@ -7,8 +7,13 @@ const rl = @import("raylib"); pub fn main() !void { const screenWidth = 800; const screenHeight = 450; + rl.initWindow(screenWidth, screenHeight, "raylib-zig [core] example - basic window"); defer rl.closeWindow(); + + const zig_tex = try rl.loadTexture("zig.bmp"); + defer rl.unloadTexture(zig_tex); + rl.setTargetFPS(60); while (!rl.windowShouldClose()) { rl.beginDrawing(); @@ -16,6 +21,8 @@ pub fn main() !void { rl.clearBackground(.white); + rl.drawTexture(zig_tex, screenWidth / 2 - @divTrunc(zig_tex.width, 2), screenHeight / 2, .white); + rl.drawText("Congrats! You created your first window!", 190, 200, 20, .light_gray); } } @@ -43,28 +50,70 @@ comptime { // // Then Raylib makes the "android_main" entrypoint call the exported "main" C-function // https://github.com/raysan5/raylib/blob/f89d38b086c1d0a0c7e38c9c648aa91c05646300/src/platforms/rcore_android.c#L322 - @export(&androidMain, .{ .name = "main" }); + @export(&RaylibAndroidGlue.androidMain, .{ .name = "main" }); // NOTE(jae): 2026-04-12 - // As of March 2026, Raylib requires a linker flag to make __real_fopen exist + // As of March 2026, Raylib requires a linker flag to make __real_fopen and needs to override "fopen" to call "__wrap_fopen" (provided by Raylib) // https://github.com/raysan5/raylib/pull/5624 // // Because Zig doesn't give access to linker flags to add (-Wl,--wrap=fopen), we just export __real_fopen ourselves and call it here: // -Wl,--wrap=fopen // Related comment: https://github.com/raysan5/raylib/blob/f89d38b086c1d0a0c7e38c9c648aa91c05646300/src/platforms/rcore_android.c#L299-L300 - @export(&raylibFileOpen, .{ .name = "__real_fopen" }); + // + // Borrowed fix from @maiconpintoabreu: + // https://gist.github.com/maiconpintoabreu/f5eb68d467ba6105256daf03e3ede51c + @export(&RaylibAndroidGlue.fopen, .{ .name = "fopen" }); + @export(&RaylibAndroidGlue.__real_fopen, .{ .name = "__real_fopen" }); } } -fn raylibFileOpen(filename: [*c]const u8, modes: [*c]const u8) callconv(.c) ?*anyopaque { - return @import("std").c.fopen(filename, modes); -} +const RaylibAndroidGlue = struct { + /// General error message for a malformed return type + const bad_main_ret = "expected return type of main to be 'void', '!void', 'noreturn', 'u8', or '!u8'"; -fn androidMain() callconv(.c) c_int { - main() catch |err| { - std.log.err("{t}", .{err}); - if (@errorReturnTrace()) |trace| std.debug.dumpErrorReturnTrace(trace); - return 1; - }; - return 0; -} + fn androidMain() callconv(.c) c_int { + const result = main(); + const ReturnType = @TypeOf(result); + switch (ReturnType) { + void => return 0, + noreturn => unreachable, + u8 => return result, + else => {}, + } + if (@typeInfo(ReturnType) != .error_union) @compileError(bad_main_ret); + + const unwrapped_result = result catch |err| { + std.log.err("{t}", .{err}); + if (@errorReturnTrace()) |trace| std.debug.dumpErrorReturnTrace(trace); + return 1; + }; + + return switch (@TypeOf(unwrapped_result)) { + noreturn => unreachable, + void => 0, + u8 => unwrapped_result, + else => @compileError(bad_main_ret), + }; + } + + /// Override fopen to call __wrap_fopen (provided by Raylib to load asset files) + fn fopen(filename: [*c]const u8, modes: [*c]const u8) callconv(.c) ?*anyopaque { + return __wrap_fopen(filename, modes); + } + + /// Must implement __real_fopen as Raylib needs it to open files that are not inside assets folder + fn __real_fopen(filename: [*c]const u8, modes: [*c]const u8) callconv(.c) ?*anyopaque { + const RTLD_NEXT = @as(?*anyopaque, @ptrFromInt(@as(usize, @bitCast(@as(isize, -1))))); + const c_fopen_ptr = RaylibAndroidGlue.dlsym(RTLD_NEXT, "fopen") orelse return null; + const c_fopen: *const fn ([*c]const u8, [*c]const u8) callconv(.c) ?*anyopaque = @ptrCast(@alignCast(c_fopen_ptr)); + + return c_fopen(filename, modes); + } + + extern "c" fn __wrap_fopen(filename: [*c]const u8, modes: [*c]const u8) callconv(.c) ?*anyopaque; + + // Zig version used to write was 0.16.0 + // Define dlsym and RTLD_NEXT to be able to call system fopen as I am overriding it bellow + // https://pubs.opengroup.org/onlinepubs/009604299/functions/dlsym.html + extern "c" fn dlsym(handle: ?*anyopaque, symbol: [*c]const u8) callconv(.c) ?*anyopaque; +}; diff --git a/examples/raylib/src/zig.bmp b/examples/raylib/src/zig.bmp new file mode 100644 index 0000000000000000000000000000000000000000..bfe71082824ed2ca016fb5822cabcc8443683120 GIT binary patch literal 168138 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 Y1O&WCppa|2=|EU}_x@1@1MMO3e{(I7Y5)KL literal 0 HcmV?d00001 diff --git a/examples/sdl2/build.zig b/examples/sdl2/build.zig index dad4475..cce4f66 100644 --- a/examples/sdl2/build.zig +++ b/examples/sdl2/build.zig @@ -25,25 +25,16 @@ pub fn build(b: *std.Build) void { .api_level = .android15, .build_tools_version = "36.1.0", .ndk_version = "29.0.14206865", - // NOTE(jae): 2025-03-09 - // Previously this example used 'ndk' "27.0.12077973". - // - // However that has issues with the latest SDL2 version when including 'hardware_buffer.h' - // for 32-bit builds. - // - // - AHARDWAREBUFFER_USAGE_FRONT_BUFFER = 1UL << 32 - // - ndk/27.0.12077973/toolchains/llvm/prebuilt/{OS}-x86_64/sysroot/usr/include/android/hardware_buffer.h:322:42: - // - error: expression is not an integral constant expression }); const key_store_file = android_sdk.createKeyStore(.example); apk.setKeyStore(key_store_file); apk.setAndroidManifest(b.path("android/AndroidManifest.xml")); + apk.addResourceDirectory(b.path("android/res")); const generated_asset_dir = b.addNamedWriteFiles("android_asset_directory"); _ = generated_asset_dir.addCopyFile(b.path("src/zig.bmp"), "zig.bmp"); apk.addAssetDirectory(generated_asset_dir.getDirectory()); - apk.addResourceDirectory(b.path("android/res")); // Add Java files if (!crash_on_exception) {