diff --git a/src/graphics.zig b/src/graphics.zig index c2b6d7c7..56260d81 100644 --- a/src/graphics.zig +++ b/src/graphics.zig @@ -1209,7 +1209,7 @@ pub fn LargeBuffer(comptime Entry: type) type { fencedFreeLists: [3]std.ArrayList(SubAllocation), activeFence: u8, capacity: u31, - used: u32, + used: u31, binding: c_uint, const Self = @This(); @@ -1283,11 +1283,12 @@ pub fn LargeBuffer(comptime Entry: type) type { self.used += size; return result; } else { - std.log.info("Resizing internal mesh buffer from {} MiB to {} MiB", .{self.capacity*@sizeOf(Entry) >> 20, (self.capacity*@sizeOf(Entry) >> 20)*2}); + std.log.info("Resizing internal mesh buffer from {} MiB to {} MiB", .{@as(usize, self.capacity)*@sizeOf(Entry) >> 20, (@as(usize, self.capacity)*@sizeOf(Entry) >> 20)*2}); const oldBuffer = self.ssbo; defer oldBuffer.deinit(); const oldCapacity = self.capacity; - self.createBuffer(self.capacity*2); // TODO: Is there a way to free the old buffer before creating the new one? + self.createBuffer(self.capacity*|2); // TODO: Is there a way to free the old buffer before creating the new one? + if(self.capacity == oldCapacity) return error.OutOfMemory; self.used += self.capacity - oldCapacity; try self.finalFree(.{.start = oldCapacity, .len = self.capacity - oldCapacity}); @@ -1333,7 +1334,7 @@ pub fn LargeBuffer(comptime Entry: type) type { allocation.* = try self.alloc(@intCast(len)); c.glBindBuffer(c.GL_SHADER_STORAGE_BUFFER, self.ssbo.bufferID); const ptr: [*]Entry = @ptrCast(@alignCast( - c.glMapBufferRange(c.GL_SHADER_STORAGE_BUFFER, allocation.start*@sizeOf(Entry), allocation.len*@sizeOf(Entry), c.GL_MAP_WRITE_BIT | c.GL_MAP_INVALIDATE_RANGE_BIT) + c.glMapBufferRange(c.GL_SHADER_STORAGE_BUFFER, @as(c_long, allocation.start)*@sizeOf(Entry), @as(c_long, allocation.len)*@sizeOf(Entry), c.GL_MAP_WRITE_BIT | c.GL_MAP_INVALIDATE_RANGE_BIT) )); return ptr[0..len]; } @@ -1353,7 +1354,7 @@ pub fn LargeBuffer(comptime Entry: type) type { allocation.* = try self.alloc(@intCast(data.len)); c.glBindBuffer(c.GL_SHADER_STORAGE_BUFFER, self.ssbo.bufferID); const ptr: [*]Entry = @ptrCast(@alignCast( - c.glMapBufferRange(c.GL_SHADER_STORAGE_BUFFER, allocation.start*@sizeOf(Entry), allocation.len*@sizeOf(Entry), c.GL_MAP_WRITE_BIT | c.GL_MAP_INVALIDATE_RANGE_BIT) + c.glMapBufferRange(c.GL_SHADER_STORAGE_BUFFER, @as(c_long, allocation.start)*@sizeOf(Entry), @as(c_long, allocation.len)*@sizeOf(Entry), c.GL_MAP_WRITE_BIT | c.GL_MAP_INVALIDATE_RANGE_BIT) )); @memcpy(ptr, data); std.debug.assert(c.glUnmapBuffer(c.GL_SHADER_STORAGE_BUFFER) == c.GL_TRUE); diff --git a/src/gui/windows/debug.zig b/src/gui/windows/debug.zig index 7d611992..7faa6cc9 100644 --- a/src/gui/windows/debug.zig +++ b/src/gui/windows/debug.zig @@ -43,9 +43,9 @@ fn flawedRender() !void { try draw.print("Mesh Queue size: {}", .{main.renderer.RenderStructure.updatableList.items.len}, 0, y, 8, .left); y += 8; { - const faceDataSize = @sizeOf(main.chunk.meshing.FaceData); - const size = main.chunk.meshing.faceBuffer.capacity*faceDataSize; - const used = main.chunk.meshing.faceBuffer.used*faceDataSize; + const faceDataSize: usize = @sizeOf(main.chunk.meshing.FaceData); + const size: usize = main.chunk.meshing.faceBuffer.capacity*faceDataSize; + const used: usize = main.chunk.meshing.faceBuffer.used*faceDataSize; var largestFreeBlock: usize = 0; for(main.chunk.meshing.faceBuffer.freeBlocks.items) |freeBlock| { largestFreeBlock = @max(largestFreeBlock, freeBlock.len);