fixed some validation issues

This commit is contained in:
Peter Li 2025-04-20 11:24:56 -07:00
parent 64c87ba3cc
commit 0ef96e65ac
2 changed files with 32 additions and 9 deletions

View File

@ -42,18 +42,36 @@ pub const Impl = struct {
c.Imgui_SDL3_PrepareRender(@ptrCast(self.drawData), @ptrCast(cmd));
}
pub fn postRender(p: *anyopaque, cmd: *gpu.GPUCommandBuffer, renderPass: *gpu.GPURenderPass) void {
pub fn postRender(p: *anyopaque, cmd: *gpu.GPUCommandBuffer) void {
const self: *@This() = @ptrCast(@alignCast(p));
//const renderpass = cmd.beginGPURenderPass(color_target_infos: [*c]const GPUColorTargetInfo, num_color_targets: u32, depth_stencil_target_info: [*c]const GPUDepthStencilTargetInfo);
var targetInfo: gpu.GPUColorTargetInfo = std.mem.zeroes(gpu.GPUColorTargetInfo);
targetInfo.texture = rend.context().swapchainTexture;
targetInfo.clear_color = .{ .r = 0.0, .g = 0.0, .b = 0.0, .a = 0.0 };
targetInfo.load_op = .loadopDontCare;
targetInfo.store_op = .storeopStore;
const renderpass = cmd.beginGPURenderPass(&targetInfo, 1, null);
// SDL_GPUColorTargetInfo target_info = {};
// target_info.texture = swapchain_texture;
// target_info.clear_color = SDL_FColor { clear_color.x, clear_color.y, clear_color.z, clear_color.w };
// target_info.load_op = SDL_GPU_LOADOP_CLEAR;
// target_info.store_op = SDL_GPU_STOREOP_STORE;
// target_info.mip_level = 0;
// target_info.layer_or_depth_plane = 0;
// target_info.cycle = false;
c.ImGui_SDLGPU3_RenderDrawData(
@ptrCast(self.drawData),
@ptrCast(cmd),
@ptrCast(renderPass),
@ptrCast(renderpass),
);
renderpass.endGPURenderPass();
}
pub fn preTick(_: *@This(), _: f64) core.EngineDataEventError!void {
core.engine_logs("imgui pretick");
c.Imgui_SDL3_NewFrame();
c.igNewFrame();
}

View File

@ -31,12 +31,15 @@ pub const Renderer = struct {
uploads: std.ArrayListUnmanaged(struct { ptr: *anyopaque, func: *const fn (*anyopaque, *gpu.GPUCopyPass) void }) = .{},
uploadCleanup: std.ArrayListUnmanaged(struct { ptr: *anyopaque, func: *const fn (*anyopaque) void }) = .{},
postRenders: std.ArrayListUnmanaged(struct { ptr: *anyopaque, func: *const fn (*anyopaque, *gpu.GPUCommandBuffer, *gpu.GPURenderPass) void }) = .{},
postRenders: std.ArrayListUnmanaged(struct { ptr: *anyopaque, func: *const fn (*anyopaque, *gpu.GPUCommandBuffer) void }) = .{},
destroys: std.ArrayListUnmanaged(struct { ptr: *anyopaque, func: *const fn (*anyopaque) void }) = .{},
preDraws: std.ArrayListUnmanaged(struct { ptr: *anyopaque, func: *const fn (*anyopaque, *gpu.GPUCommandBuffer) void }) = .{},
depthTexture: *gpu.GPUTexture = undefined,
// transients DO NOT TOUCH
swapchainTexture: *gpu.GPUTexture = undefined,
pub var NeonObjectTable: core.EngineObjectVTable = core.EngineObjectVTable.from(@This());
pub const MaxObjectCount = 50000;
@ -374,10 +377,9 @@ pub const Renderer = struct {
interface.func(interface.ptr, cmd);
}
var swapchainTexture: *gpu.GPUTexture = undefined;
if (cmd.waitAndAcquireGPUSwapchainTexture(self.window, &swapchainTexture, null, null)) {
if (cmd.waitAndAcquireGPUSwapchainTexture(self.window, &self.swapchainTexture, null, null)) {
var targetInfo: gpu.GPUColorTargetInfo = std.mem.zeroes(gpu.GPUColorTargetInfo);
targetInfo.texture = swapchainTexture;
targetInfo.texture = self.swapchainTexture;
targetInfo.clear_color = .{ .r = 0.1, .g = 0.1, .b = 0.1, .a = 1.0 };
targetInfo.load_op = .loadopClear;
targetInfo.store_op = .storeopStore;
@ -420,13 +422,14 @@ pub const Renderer = struct {
}
}
renderpass.endGPURenderPass();
for (self.postRenders.items) |interface| {
interface.func(interface.ptr, cmd, renderpass);
interface.func(interface.ptr, cmd);
}
// renderpass.drawGPUPrimitives(3, 1, 0, 0);
renderpass.endGPURenderPass();
}
_ = cmd.submitGPUCommandBuffer();
@ -439,6 +442,8 @@ pub const Renderer = struct {
d.func(d.ptr);
}
self.uploadCleanup.deinit(self.allocator);
self.preDraws.deinit(self.allocator);
self.postRenders.deinit(self.allocator);
self.uploads.deinit(self.allocator);
self.destroys.deinit(self.allocator);
self.allocator.destroy(self);