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)); 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 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( c.ImGui_SDLGPU3_RenderDrawData(
@ptrCast(self.drawData), @ptrCast(self.drawData),
@ptrCast(cmd), @ptrCast(cmd),
@ptrCast(renderPass), @ptrCast(renderpass),
); );
renderpass.endGPURenderPass();
} }
pub fn preTick(_: *@This(), _: f64) core.EngineDataEventError!void { pub fn preTick(_: *@This(), _: f64) core.EngineDataEventError!void {
core.engine_logs("imgui pretick");
c.Imgui_SDL3_NewFrame(); c.Imgui_SDL3_NewFrame();
c.igNewFrame(); 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 }) = .{}, uploads: std.ArrayListUnmanaged(struct { ptr: *anyopaque, func: *const fn (*anyopaque, *gpu.GPUCopyPass) void }) = .{},
uploadCleanup: std.ArrayListUnmanaged(struct { ptr: *anyopaque, func: *const fn (*anyopaque) 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 }) = .{}, destroys: std.ArrayListUnmanaged(struct { ptr: *anyopaque, func: *const fn (*anyopaque) void }) = .{},
preDraws: std.ArrayListUnmanaged(struct { ptr: *anyopaque, func: *const fn (*anyopaque, *gpu.GPUCommandBuffer) void }) = .{}, preDraws: std.ArrayListUnmanaged(struct { ptr: *anyopaque, func: *const fn (*anyopaque, *gpu.GPUCommandBuffer) void }) = .{},
depthTexture: *gpu.GPUTexture = undefined, depthTexture: *gpu.GPUTexture = undefined,
// transients DO NOT TOUCH
swapchainTexture: *gpu.GPUTexture = undefined,
pub var NeonObjectTable: core.EngineObjectVTable = core.EngineObjectVTable.from(@This()); pub var NeonObjectTable: core.EngineObjectVTable = core.EngineObjectVTable.from(@This());
pub const MaxObjectCount = 50000; pub const MaxObjectCount = 50000;
@ -374,10 +377,9 @@ pub const Renderer = struct {
interface.func(interface.ptr, cmd); interface.func(interface.ptr, cmd);
} }
var swapchainTexture: *gpu.GPUTexture = undefined; if (cmd.waitAndAcquireGPUSwapchainTexture(self.window, &self.swapchainTexture, null, null)) {
if (cmd.waitAndAcquireGPUSwapchainTexture(self.window, &swapchainTexture, null, null)) {
var targetInfo: gpu.GPUColorTargetInfo = std.mem.zeroes(gpu.GPUColorTargetInfo); 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.clear_color = .{ .r = 0.1, .g = 0.1, .b = 0.1, .a = 1.0 };
targetInfo.load_op = .loadopClear; targetInfo.load_op = .loadopClear;
targetInfo.store_op = .storeopStore; targetInfo.store_op = .storeopStore;
@ -420,13 +422,14 @@ pub const Renderer = struct {
} }
} }
renderpass.endGPURenderPass();
for (self.postRenders.items) |interface| { for (self.postRenders.items) |interface| {
interface.func(interface.ptr, cmd, renderpass); interface.func(interface.ptr, cmd);
} }
// renderpass.drawGPUPrimitives(3, 1, 0, 0); // renderpass.drawGPUPrimitives(3, 1, 0, 0);
renderpass.endGPURenderPass();
} }
_ = cmd.submitGPUCommandBuffer(); _ = cmd.submitGPUCommandBuffer();
@ -439,6 +442,8 @@ pub const Renderer = struct {
d.func(d.ptr); d.func(d.ptr);
} }
self.uploadCleanup.deinit(self.allocator); self.uploadCleanup.deinit(self.allocator);
self.preDraws.deinit(self.allocator);
self.postRenders.deinit(self.allocator);
self.uploads.deinit(self.allocator); self.uploads.deinit(self.allocator);
self.destroys.deinit(self.allocator); self.destroys.deinit(self.allocator);
self.allocator.destroy(self); self.allocator.destroy(self);