{gfx,examples}: use core.state().device

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2024-04-21 21:19:33 -07:00 committed by Stephen Gutekanst
parent bffc668005
commit 79dccb4d73
6 changed files with 16 additions and 22 deletions

View file

@ -13,9 +13,9 @@ pub const global_events = .{
title_timer: mach.Timer,
pipeline: *gpu.RenderPipeline,
fn init(game: *Mod) !void {
fn init(game: *Mod, core: *mach.Core.Mod) !void {
// Create our shader module
const shader_module = mach.core.device.createShaderModuleWGSL("shader.wgsl", @embedFile("shader.wgsl"));
const shader_module = core.state().device.createShaderModuleWGSL("shader.wgsl", @embedFile("shader.wgsl"));
defer shader_module.release();
// Blend state describes how rendered colors get blended
@ -44,7 +44,7 @@ fn init(game: *Mod) !void {
.entry_point = "vertex_main",
},
};
const pipeline = mach.core.device.createRenderPipeline(&pipeline_descriptor);
const pipeline = core.state().device.createRenderPipeline(&pipeline_descriptor);
// Store our render pipeline in our module's state, so we can access it later on.
game.init(.{
@ -59,10 +59,7 @@ pub fn deinit(game: *Mod) void {
}
// TODO(important): remove need for returning an error here
fn tick(
core: *mach.Core.Mod,
game: *Mod,
) !void {
fn tick(core: *mach.Core.Mod, game: *Mod) !void {
// TODO(important): event polling should occur in mach.Core module and get fired as ECS event.
var iter = mach.core.pollEvents();
while (iter.next()) |event| {
@ -78,7 +75,7 @@ fn tick(
// Create a command encoder
const label = @tagName(name) ++ ".tick";
const encoder = mach.core.device.createCommandEncoder(&.{ .label = label });
const encoder = core.state().device.createCommandEncoder(&.{ .label = label });
defer encoder.release();
// Begin render pass

View file

@ -42,10 +42,7 @@ pub const local_events = .{
.end_frame = .{ .handler = endFrame },
};
fn init(
glyphs: *Glyphs.Mod,
game: *Mod,
) !void {
fn init(glyphs: *Glyphs.Mod, game: *Mod) !void {
// Prepare which glyphs we will render
glyphs.send(.init, .{});
glyphs.send(.prepare, .{&[_]u21{ '?', '!', 'a', 'b', '#', '@', '%', '$', '&', '^', '*', '+', '=', '<', '>', '/', ':', ';', 'Q', '~' }});
@ -203,7 +200,7 @@ fn tick(
// Create a command encoder for this frame
const label = @tagName(name) ++ ".tick";
game.state().frame_encoder = mach.core.device.createCommandEncoder(&.{ .label = label });
game.state().frame_encoder = core.state().device.createCommandEncoder(&.{ .label = label });
// Grab the back buffer of the swapchain
const back_buffer_view = mach.core.swap_chain.getCurrentTextureView().?;
@ -218,7 +215,7 @@ fn tick(
.store_op = .store,
}};
// TODO: can we eliminate this assignment
game.state().frame_encoder = mach.core.device.createCommandEncoder(&.{ .label = label });
game.state().frame_encoder = core.state().device.createCommandEncoder(&.{ .label = label });
game.state().frame_render_pass = game.state().frame_encoder.beginRenderPass(&gpu.RenderPassDescriptor.init(.{
.label = label,
.color_attachments = &color_attachments,

View file

@ -184,7 +184,7 @@ fn tick(
// Create a command encoder for this frame
const label = @tagName(name) ++ ".tick";
game.state().frame_encoder = mach.core.device.createCommandEncoder(&.{ .label = label });
game.state().frame_encoder = core.state().device.createCommandEncoder(&.{ .label = label });
// Grab the back buffer of the swapchain
const back_buffer_view = mach.core.swap_chain.getCurrentTextureView().?;
@ -199,7 +199,7 @@ fn tick(
.store_op = .store,
}};
// TODO: can we eliminate this assignment
game.state().frame_encoder = mach.core.device.createCommandEncoder(&.{ .label = label });
game.state().frame_encoder = core.state().device.createCommandEncoder(&.{ .label = label });
game.state().frame_render_pass = game.state().frame_encoder.beginRenderPass(&gpu.RenderPassDescriptor.init(.{
.label = label,
.color_attachments = &color_attachments,

View file

@ -228,7 +228,7 @@ fn tick(
// Create a command encoder for this frame
const label = @tagName(name) ++ ".tick";
game.state().frame_encoder = mach.core.device.createCommandEncoder(&.{ .label = label });
game.state().frame_encoder = core.state().device.createCommandEncoder(&.{ .label = label });
// Grab the back buffer of the swapchain
const back_buffer_view = mach.core.swap_chain.getCurrentTextureView().?;
@ -242,7 +242,7 @@ fn tick(
.load_op = .clear,
.store_op = .store,
}};
game.state().frame_encoder = mach.core.device.createCommandEncoder(&.{ .label = label });
game.state().frame_encoder = core.state().device.createCommandEncoder(&.{ .label = label });
game.state().frame_render_pass = game.state().frame_encoder.beginRenderPass(&gpu.RenderPassDescriptor.init(.{
.label = label,
.color_attachments = &color_attachments,

View file

@ -325,9 +325,9 @@ fn buildPipeline(
try sprite_pipeline.set(pipeline_id, .num_sprites, 0);
}
fn preRender(sprite_pipeline: *Mod) void {
fn preRender(sprite_pipeline: *Mod, core: *mach.Core.Mod) void {
const label = @tagName(name) ++ ".preRender";
const encoder = mach.core.device.createCommandEncoder(&.{ .label = label });
const encoder = core.state().device.createCommandEncoder(&.{ .label = label });
defer encoder.release();
var archetypes_iter = sprite_pipeline.entities.query(.{ .all = &.{

View file

@ -350,9 +350,9 @@ fn buildPipeline(
try text_pipeline.set(pipeline_id, .num_glyphs, 0);
}
fn preRender(text_pipeline: *Mod) void {
fn preRender(text_pipeline: *Mod, core: *mach.Core.Mod) void {
const label = @tagName(name) ++ ".preRender";
const encoder = mach.core.device.createCommandEncoder(&.{ .label = label });
const encoder = core.state().device.createCommandEncoder(&.{ .label = label });
defer encoder.release();
var archetypes_iter = text_pipeline.entities.query(.{ .all = &.{