From 7e3694f1c6a22c91a80d4da6967655d27d37272d Mon Sep 17 00:00:00 2001 From: IntegratedQuantum Date: Sat, 6 Jul 2024 15:01:36 +0200 Subject: [PATCH] Display light and texture buffer sizes. --- src/graphics.zig | 4 +++- src/gui/windows/debug.zig | 30 ++++++++++++++++++------------ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/graphics.zig b/src/graphics.zig index 389e44be..97eb8bc0 100644 --- a/src/graphics.zig +++ b/src/graphics.zig @@ -1298,7 +1298,7 @@ pub const SubAllocation = struct { }; /// A big SSBO that is able to allocate/free smaller regions. -pub fn LargeBuffer(comptime Entry: type) type { +pub fn LargeBuffer(comptime _Entry: type) type { return struct { ssbo: SSBO, freeBlocks: main.List(SubAllocation), @@ -1311,6 +1311,8 @@ pub fn LargeBuffer(comptime Entry: type) type { const Self = @This(); + pub const Entry = _Entry; + fn createBuffer(self: *Self, size: u31) void { self.ssbo = SSBO.init(); c.glBindBuffer(c.GL_SHADER_STORAGE_BUFFER, self.ssbo.bufferID); diff --git a/src/gui/windows/debug.zig b/src/gui/windows/debug.zig index dad26dab..54ac2200 100644 --- a/src/gui/windows/debug.zig +++ b/src/gui/windows/debug.zig @@ -22,6 +22,18 @@ pub var window = GuiWindow { .hideIfMouseIsGrabbed = false, }; +fn renderLargeBufferSize(buffer: anytype, comptime fmt: []const u8, y: f32) void { + const dataSize: usize = @sizeOf(@TypeOf(buffer).Entry); + const size: usize = buffer.capacity*dataSize; + const used: usize = buffer.used*dataSize; + var largestFreeBlock: usize = 0; + for(buffer.freeBlocks.items) |freeBlock| { + largestFreeBlock = @max(largestFreeBlock, freeBlock.len); + } + const fragmentation = size - used - largestFreeBlock*dataSize; + draw.print(fmt, .{used >> 20, size >> 20, fragmentation >> 20}, 0, y, 8, .left); +} + pub fn render() void { draw.setColor(0xffffffff); var y: f32 = 0; @@ -47,18 +59,12 @@ pub fn render() void { y += 8; draw.print("Mesh Queue size: {}", .{main.renderer.mesh_storage.updatableList.items.len}, 0, y, 8, .left); y += 8; - { - const faceDataSize: usize = @sizeOf(main.renderer.chunk_meshing.FaceData); - const size: usize = main.renderer.chunk_meshing.faceBuffer.capacity*faceDataSize; - const used: usize = main.renderer.chunk_meshing.faceBuffer.used*faceDataSize; - var largestFreeBlock: usize = 0; - for(main.renderer.chunk_meshing.faceBuffer.freeBlocks.items) |freeBlock| { - largestFreeBlock = @max(largestFreeBlock, freeBlock.len); - } - const fragmentation = size - used - largestFreeBlock*faceDataSize; - draw.print("ChunkMesh memory: {} MiB / {} MiB (fragmentation: {} MiB)", .{used >> 20, size >> 20, fragmentation >> 20}, 0, y, 8, .left); - y += 8; - } + renderLargeBufferSize(main.renderer.chunk_meshing.faceBuffer, "ChunkMesh memory: {} MiB / {} MiB (fragmentation: {} MiB)", y); + y += 8; + renderLargeBufferSize(main.renderer.chunk_meshing.lightBuffer, "ChunkMesh light memory: {} MiB / {} MiB (fragmentation: {} MiB)", y); + y += 8; + renderLargeBufferSize(main.renderer.chunk_meshing.textureBuffer, "ChunkMesh texture memory: {} MiB / {} MiB (fragmentation: {} MiB)", y); + y += 8; draw.print("Biome: {s}", .{main.game.world.?.playerBiome.load(.monotonic).id}, 0, y, 8, .left); y += 8; draw.print("Opaque faces: {}, Transparent faces: {}", .{main.renderer.chunk_meshing.quadsDrawn, main.renderer.chunk_meshing.transparentQuadsDrawn}, 0, y, 8, .left);