From 7b8fc7c9f82d58e64c8a8ad37da6543b98f9f74b Mon Sep 17 00:00:00 2001 From: Matheus Catarino Date: Sun, 8 Dec 2024 15:59:26 -0300 Subject: [PATCH] user_data: use `writeln` and hashmap (associative arrays) on emscripten target --- build.zig | 2 +- src/examples/user_data.d | 40 +++++++++++++++++++++++----------------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/build.zig b/build.zig index 385a216..2ac9666 100644 --- a/build.zig +++ b/build.zig @@ -266,7 +266,7 @@ pub fn build(b: *Build) !void { .betterC = if (std.mem.eql(u8, example, "user-data")) false else enable_betterC, .dflags = &.{ "-w", - "-preview=all", + "-preview=rvaluerefparam", }, // fixme: https://github.com/kassane/sokol-d/issues/1 - betterC works on darwin .zig_cc = if (target.result.isDarwin() and !enable_betterC) false else enable_zigcc, diff --git a/src/examples/user_data.d b/src/examples/user_data.d index f5fcf9d..20b7433 100644 --- a/src/examples/user_data.d +++ b/src/examples/user_data.d @@ -7,52 +7,58 @@ import sglue = sokol.glue; extern (C): -struct ExampleUserData { +struct ExampleUserData +{ ubyte data; int[ubyte] map; // need druntime } -void init() @safe { +void init() @safe +{ sg.Desc gfx = { environment: sglue.environment, - logger: { func: &log.slog_func } + logger: {func: &log.slog_func} }; sg.setup(gfx); } -void frame_userdata(scope void* userdata) @trusted { +void frame_userdata(scope void* userdata) @trusted +{ auto state = cast(ExampleUserData*) userdata; state.data++; - version (WebAssembly) { - // TODO support + version (D_BetterC) + { + } - else { - if (state.data % 13 == 0) { + else + { + if (state.data % 13 == 0) + { state.map[state.data] = state.data * 13 / 3; } - if (state.data % 12 == 0 && state.data % 15 == 0) { + if (state.data % 12 == 0 && state.data % 15 == 0) + { state.map.clear(); } - } - debug { import std.stdio : writeln; - try { - writeln(*state); - } catch (Exception) { } + + writeln(*state); } - sg.Pass pass = { swapchain: sglue.swapchain }; + sg.Pass pass = {swapchain: sglue.swapchain}; sg.beginPass(pass); sg.endPass(); sg.commit(); } -void cleanup() @safe { +void cleanup() @safe +{ sg.shutdown(); } -void main() { +void main() +{ auto userData = ExampleUserData(0, null); sapp.Desc runner = { window_title: "user-data.d",