const std = @import("std");
const fmt = std.fmt;
extern fn draw(ptr: [*]u8, sz: u32) void;
extern fn jslog(message: [*]const u8, length: u32) void;
extern fn getWidth() u32;
extern fn getHeight() u32;
var canvas: []u8 = undefined;
var height: u32 = 0;
var width: u32 = 0;
var sz: u32 = 0;
pub fn Log(s: []const u8) void {
jslog(s.ptr, s.len);
}
pub fn PrintLog(comptime s: []const u8, args: anytype) void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
var allocator = gpa.allocator();
const str = buildString(
allocator,
s,
args,
);
defer allocator.free(str);
Log(str);
}
pub fn main() !void {
Log("Init");
height = getHeight(); // 1280
width = getWidth(); // 720
sz = width * height * 4;
const webAllocator = std.heap.wasm_allocator;
canvas = try webAllocator.alloc(u8, sz);
}
export fn onAnimationFrame(timestep: i32) void {
PrintLog("timestep {}", .{timestep});
draw(@ptrCast(&canvas), sz);
}
pub fn buildString(allocator: std.mem.Allocator, comptime s: []const u8, args: anytype) []const u8 {
const str = if (fmt.allocPrint(allocator, s, args)) |str| {
return str;
} else |err| switch (err) {
error.OutOfMemory => {
return "Out Of Memory: " ++ s;
},
};
return str;
}
/snap/zig/8241/lib/std/os.zig:153:24: error: struct 'os.system__struct_2773' has no member named 'fd_t'
pub const fd_t = system.fd_t;
~~~~~~^~~~~
/snap/zig/8241/lib/std/os.zig:73:13: note: struct declared here
else => struct {},
^~~~~~~~~
referenced by:
Handle: /snap/zig/8241/lib/std/fs/file.zig:31:26
File: /snap/zig/8241/lib/std/fs/file.zig:15:13
remaining reference traces hidden; use '-freference-trace' to see all reference traces
canvas = try webAllocator.alloc(u8, sz * 4);
removing this line removes the compile error
zig build-exe -target wasm32-freestanding -OReleaseSmall -rdynamic --name test ./src/main.zig
zig version
0.11.0
uname -a
Linux Ubuntu-2204-jammy-amd64-base 6.2.0-37-generic #38~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Nov 2 18:01:13 UTC 2 x86_64 x86_64 x86_64 GNU/Linux