Update to zig 0.16.0, update deps, Vulkan validation fixes

This commit is contained in:
2026-05-13 00:43:49 +02:00
parent 39712e359d
commit 79c62141df
16 changed files with 204 additions and 137 deletions

View File

@@ -138,11 +138,12 @@ pub fn getOrLoad(
stbi: *media.stbi,
filename: []const u8,
temp_allocator: std.mem.Allocator,
io: std.Io,
) !Id {
const key: Key = .{
// If the material already exists, then the atom must exist and the
// following line will not return any error.
.filename = try .fromString(filename),
.filename = try .fromString(filename, io),
};
// We don't use `getOrPutAssumeCapacity` method, because we might already be
@@ -154,7 +155,7 @@ pub fn getOrLoad(
const id = Id.fromIndexSafe(self.array.items.len) catch |err| switch (err) {
error.Overflow => return error.OutOfBlocks,
};
const def = try loadBlock(engine, materials, textures, stbi, filename, temp_allocator);
const def = try loadBlock(engine, materials, textures, stbi, filename, temp_allocator, io);
self.map.putAssumeCapacityNoClobber(key, id);
self.array.appendAssumeCapacity(def);
@@ -171,6 +172,7 @@ pub fn getOrLoadAtom(
stbi: *media.stbi,
filename: Atom,
temp_allocator: std.mem.Allocator,
io: std.Io,
) !Id {
const key: Key = .{
.filename = filename,
@@ -185,7 +187,7 @@ pub fn getOrLoadAtom(
const id = Id.fromIndexSafe(self.array.items.len) catch |err| switch (err) {
error.Overflow => return error.OutOfBlocks,
};
const def = try loadBlock(engine, materials, textures, stbi, filename.toString(), temp_allocator);
const def = try loadBlock(engine, materials, textures, stbi, filename.toString(), temp_allocator, io);
self.map.putAssumeCapacityNoClobber(key, id);
self.array.appendAssumeCapacity(def);
@@ -201,17 +203,18 @@ pub fn loadAll(
textures: *Textures,
stbi: *media.stbi,
temp_allocator: std.mem.Allocator,
io: std.Io,
) void {
const cwd = std.fs.cwd();
const cwd = std.Io.Dir.cwd();
var dir = cwd.openDir("assets/blocks", .{ .iterate = true }) catch |err| {
var dir = cwd.openDir(io, "assets/blocks", .{ .iterate = true }) catch |err| {
std.log.err("Error while opening block definitions directory: {s}", .{@errorName(err)});
return;
};
defer dir.close();
defer dir.close(io);
var it = dir.iterate();
while (it.next() catch |err| {
while (it.next(io) catch |err| {
std.log.err("Error while iterating over block definitions directory: {s}", .{@errorName(err)});
return;
}) |entry| {
@@ -220,7 +223,7 @@ pub fn loadAll(
continue;
}
_ = self.getOrLoad(engine, materials, textures, stbi, entry.name, temp_allocator) catch |err| {
_ = self.getOrLoad(engine, materials, textures, stbi, entry.name, temp_allocator, io) catch |err| {
std.log.err("Error while loading block definition entry {s}: {s}", .{ entry.name, @errorName(err) });
};
}
@@ -233,6 +236,7 @@ fn loadBlock(
stbi: *media.stbi,
filename: []const u8,
temp_allocator: std.mem.Allocator,
io: std.Io,
) !Definition {
const DefinitionJson = struct {
pub const Wall = struct {
@@ -248,18 +252,18 @@ fn loadBlock(
std.log.debug("Loading block \"{s}\"...", .{filename});
const cwd = std.fs.cwd();
const cwd = std.Io.Dir.cwd();
var dir = try cwd.openDir("assets/blocks", .{});
defer dir.close();
var dir = try cwd.openDir(io, "assets/blocks", .{});
defer dir.close(io);
// NOTE Buffer size approximated based on expected JSON structure.
var buffer: [1024]u8 = undefined;
const file = try dir.openFile(filename, .{});
defer file.close();
const file = try dir.openFile(io, filename, .{});
defer file.close(io);
var file_reader = file.reader(&buffer);
var file_reader = file.reader(io, &buffer);
var json_reader = std.json.Reader.init(temp_allocator, &file_reader.interface);
defer json_reader.deinit();
@@ -279,7 +283,7 @@ fn loadBlock(
return error.ParseError;
}
const material = try materials.getOrLoad(engine, textures, stbi, name, temp_allocator);
const material = try materials.getOrLoad(engine, textures, stbi, name, temp_allocator, io);
break :blk .initUniform(material);
}
@@ -289,7 +293,7 @@ fn loadBlock(
var ret: Definition.Walls = undefined;
inline for (@typeInfo(voxels.Orientation).@"enum".fields) |field| {
@field(ret, field.name) = .{
.material = try materials.getOrLoad(engine, textures, stbi, @field(walls, field.name).material, temp_allocator),
.material = try materials.getOrLoad(engine, textures, stbi, @field(walls, field.name).material, temp_allocator, io),
.transform = @field(walls, field.name).transform,
};
}