examples: fix/improve custom-renderer example

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2024-04-28 12:20:25 -07:00 committed by Stephen Gutekanst
parent 2c8ba82aa3
commit 136c86e929
2 changed files with 19 additions and 15 deletions

View file

@ -51,6 +51,8 @@ fn init(
renderer: *Renderer.Mod,
game: *Mod,
) !void {
renderer.send(.init, .{});
// Create our player entity.
const player = try core.newEntity();
@ -198,4 +200,6 @@ fn tick(
try renderer.set(id, .position, new_position);
}
}
renderer.send(.render_frame, .{});
}

View file

@ -30,7 +30,7 @@ pub const components = .{
pub const local_events = .{
.init = .{ .handler = init },
.deinit = .{ .handler = deinit },
.tick = .{ .handler = tick },
.render_frame = .{ .handler = renderFrame },
};
const UniformBufferObject = extern struct {
@ -118,7 +118,7 @@ fn deinit(
renderer.state().uniform_buffer.release();
}
fn tick(
fn renderFrame(
core: *mach.Core.Mod,
renderer: *Mod,
) !void {
@ -132,19 +132,6 @@ fn tick(
const encoder = core.state().device.createCommandEncoder(&.{ .label = label });
defer encoder.release();
// Begin render pass
const sky_blue_background = gpu.Color{ .r = 0.776, .g = 0.988, .b = 1, .a = 1 };
const color_attachments = [_]gpu.RenderPassColorAttachment{.{
.view = back_buffer_view,
.clear_value = sky_blue_background,
.load_op = .clear,
.store_op = .store,
}};
const render_pass = encoder.beginRenderPass(&gpu.RenderPassDescriptor.init(.{
.label = label,
.color_attachments = &color_attachments,
}));
// Update uniform buffer
var archetypes_iter = core.entities.query(.{ .all = &.{
.{ .renderer = &.{ .position, .scale } },
@ -166,6 +153,19 @@ fn tick(
}
}
// Begin render pass
const sky_blue_background = gpu.Color{ .r = 0.776, .g = 0.988, .b = 1, .a = 1 };
const color_attachments = [_]gpu.RenderPassColorAttachment{.{
.view = back_buffer_view,
.clear_value = sky_blue_background,
.load_op = .clear,
.store_op = .store,
}};
const render_pass = encoder.beginRenderPass(&gpu.RenderPassDescriptor.init(.{
.label = label,
.color_attachments = &color_attachments,
}));
// Draw
for (renderer.state().bind_groups[0..num_entities]) |bind_group| {
render_pass.setPipeline(renderer.state().pipeline);