diff --git a/engine/ui/src/sgpu/papyrusSgpu.zig b/engine/ui/src/sgpu/papyrusSgpu.zig index 164838e..a5708eb 100644 --- a/engine/ui/src/sgpu/papyrusSgpu.zig +++ b/engine/ui/src/sgpu/papyrusSgpu.zig @@ -182,35 +182,19 @@ pub fn postRender(p: *anyopaque, cmd: *gpu.GPUCommandBuffer) void { self.quadMesh = rend.getMeshByName(&self.quadMeshName); } - self.drawToTarget(self.screenContext, rend.context().state.swapchainTargetTexture.?); - - _ = cmd; + self.drawToTarget(cmd, self.screenContext, rend.context().state.swapchainTargetTexture.?); } -pub fn drawToTarget(self: *@This(), ctx: *papyrus.Context, targetTexture: *gpu.GPUTexture) void { +pub fn drawToTarget(self: *@This(), cmd: *gpu.GPUCommandBuffer, ctx: *papyrus.Context, targetTexture: *gpu.GPUTexture) void { ctx.makeDrawList(&self.drawList, &self.stringArena) catch return; var rectIndex: u32 = 0; - // var rectIndex: u32 = 0; - // - // imagePosition: vec2, - // imageSize: vec2, - // anchorPoint: vec2, - // scale: vec2, - // alpha: float, - // borderWidth: float, - // flags: uint, - // baseColor: vec4, - // rounding: vec4, - // edgeColor: vec4, - // map ssbos - const cmd = rend.context().state.cmd.?; - const renderer = rend.context(); const copyPass = cmd.beginGPUCopyPass(); + // upload rectangle ssbos { const rectBuffer = self.screenBuffers.rect.mapSlice(rect_frag.Scene, renderer.device); @@ -274,7 +258,24 @@ pub fn drawToTarget(self: *@This(), ctx: *papyrus.Context, targetTexture: *gpu.G const pass = cmd.beginGPURenderPass(&targetInfo, 1, null); pass.bindGPUVertexBuffers(1, &.{ .buffer = rend.context().meshPool.vertexBuffer, .offset = 0 }, 1); pass.bindGPUIndexBuffer(&.{ .buffer = rend.context().meshPool.indexBuffer, .offset = 0 }, .indexelementsize32bit); - // upload the ssbo + + if (self.quadMesh) |quadMesh| { + for (self.tempDrawCommand.items) |item| { + switch (item) { + .rect => |rect| { + pass.bindGPUGraphicsPipeline(self.rectPipeline); + pass.bindGPUVertexStorageBuffers(0, &self.screenBuffers.rect.buffer, 1); + pass.bindGPUFragmentStorageBuffers(0, &self.screenBuffers.rect.buffer, 1); + + // bind samplers if needed + pass.drawGPUIndexedPrimitives(quadMesh.index.size, 1, quadMesh.index.start, @intCast(quadMesh.vertex.start), rect.ssboIndex); + }, + .text => |text| { + _ = text; + }, + } + } + } pass.endGPURenderPass(); }