draw commands implemented for rects, time to debug

This commit is contained in:
Peter Li 2025-08-14 22:36:11 -07:00
parent a76cccc08a
commit 1f32af8307
1 changed files with 21 additions and 20 deletions

View File

@ -182,35 +182,19 @@ pub fn postRender(p: *anyopaque, cmd: *gpu.GPUCommandBuffer) void {
self.quadMesh = rend.getMeshByName(&self.quadMeshName); self.quadMesh = rend.getMeshByName(&self.quadMeshName);
} }
self.drawToTarget(self.screenContext, rend.context().state.swapchainTargetTexture.?); self.drawToTarget(cmd, self.screenContext, rend.context().state.swapchainTargetTexture.?);
_ = cmd;
} }
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; ctx.makeDrawList(&self.drawList, &self.stringArena) catch return;
var rectIndex: u32 = 0; 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 // map ssbos
const cmd = rend.context().state.cmd.?;
const renderer = rend.context(); const renderer = rend.context();
const copyPass = cmd.beginGPUCopyPass(); const copyPass = cmd.beginGPUCopyPass();
// upload rectangle ssbos
{ {
const rectBuffer = self.screenBuffers.rect.mapSlice(rect_frag.Scene, renderer.device); 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); const pass = cmd.beginGPURenderPass(&targetInfo, 1, null);
pass.bindGPUVertexBuffers(1, &.{ .buffer = rend.context().meshPool.vertexBuffer, .offset = 0 }, 1); pass.bindGPUVertexBuffers(1, &.{ .buffer = rend.context().meshPool.vertexBuffer, .offset = 0 }, 1);
pass.bindGPUIndexBuffer(&.{ .buffer = rend.context().meshPool.indexBuffer, .offset = 0 }, .indexelementsize32bit); 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(); pass.endGPURenderPass();
} }