diff --git a/engine/rend/src/sgpu/renderer.zig b/engine/rend/src/sgpu/renderer.zig index d130a83..c02237c 100644 --- a/engine/rend/src/sgpu/renderer.zig +++ b/engine/rend/src/sgpu/renderer.zig @@ -100,6 +100,14 @@ pub const Renderer = struct { return self; } + pub fn imageExtents(self: @This()) core.Vectorf { + _ = self; + return .{ + .x = @floatFromInt(platform.getInstance().windowExtent.x), + .y = @floatFromInt(platform.getInstance().windowExtent.y), + }; + } + pub fn createRenderTargets(self: *@This()) !void { var gci = std.mem.zeroes(gpu.GPUTextureCreateInfo); diff --git a/engine/ui/src/sgpu/papyrusSgpu.zig b/engine/ui/src/sgpu/papyrusSgpu.zig index a5708eb..a20f66f 100644 --- a/engine/ui/src/sgpu/papyrusSgpu.zig +++ b/engine/ui/src/sgpu/papyrusSgpu.zig @@ -255,9 +255,29 @@ pub fn drawToTarget(self: *@This(), cmd: *gpu.GPUCommandBuffer, ctx: *papyrus.Co .store_op = .storeopStore, }); + { + var data = std.mem.zeroes([@sizeOf(rect_vert.Uniforms) / 8 + 1]usize); + const ptr: *rect_vert.Uniforms = @ptrCast(@alignCast(&data)); + + ptr.Extents.x = rend.context().imageExtents().x; + ptr.Extents.y = rend.context().imageExtents().y; + + cmd.pushGPUVertexUniformData(0, &data, @sizeOf(rect_vert.Uniforms)); + } + + { + // var data = std.mem.zeroes([@sizeOf(rect_frag.Uniforms) / 8 + 1]usize); + // const ptr: *rect_frag.Uniforms = @ptrCast(@alignCast(&data)); + // ptr.Extents.x = rend.context().rendererExtent().x; + // ptr.Extents.y = rend.context().rendererExtent().y; + + // cmd.pushGPUFragmentUniformData(0, &data, @sizeOf(rect_frag.Uniforms)); + } + const pass = cmd.beginGPURenderPass(&targetInfo, 1, null); - pass.bindGPUVertexBuffers(1, &.{ .buffer = rend.context().meshPool.vertexBuffer, .offset = 0 }, 1); + pass.bindGPUVertexBuffers(0, &.{ .buffer = rend.context().meshPool.vertexBuffer, .offset = 0 }, 1); pass.bindGPUIndexBuffer(&.{ .buffer = rend.context().meshPool.indexBuffer, .offset = 0 }, .indexelementsize32bit); + pass.bindGPUFragmentSamplers(0, &.{ .sampler = rend.context().blockySampler, .texture = rend.context().defaultTexture.texture }, 1); if (self.quadMesh) |quadMesh| { for (self.tempDrawCommand.items) |item| { @@ -278,6 +298,8 @@ pub fn drawToTarget(self: *@This(), cmd: *gpu.GPUCommandBuffer, ctx: *papyrus.Co } pass.endGPURenderPass(); + + self.tempDrawCommand.clearRetainingCapacity(); } pub const rect_frag = @import("rect.frag"); diff --git a/projects/sampleGame/externGame/externGame.zig b/projects/sampleGame/externGame/externGame.zig index c117877..87af5bf 100644 --- a/projects/sampleGame/externGame/externGame.zig +++ b/projects/sampleGame/externGame/externGame.zig @@ -96,11 +96,12 @@ pub const ExternGameObject = struct { const ctx = ui.getScreen(); const panel2 = try ctx.addPanel(.{}); { - ctx.getPanel(panel2).hasTitle = false; - ctx.get(panel2).anchor = .TopRight; + ctx.getPanel(panel2).hasTitle = true; + //ctx.get(panel2).anchor = .TopRight; // ctx.get(panel2).fill = .FillY; todo, this is a bug. why. - ctx.get(panel2).pos = .{ .x = -105, .y = 1 }; - ctx.get(panel2).size = .{ .x = 100, .y = 1 }; + ctx.get(panel2).pos = .{ .x = 200, .y = 200 }; + ctx.get(panel2).size = .{ .x = 100, .y = 100 }; + ctx.get(panel2).style.backgroundColor = ui.ModernStyle.GreyDark; ctx.getPanel(panel2).titleColor = ui.ModernStyle.GreyDark; // add some text to this panel