gfx2d: update to latest mach-ecs API

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2023-09-01 17:12:40 -05:00
parent fd5d347f3e
commit 9b142c7621

View file

@ -3,6 +3,7 @@ const core = @import("core");
const gpu = core.gpu; const gpu = core.gpu;
const ecs = @import("ecs"); const ecs = @import("ecs");
const Engine = @import("../engine.zig").Engine; const Engine = @import("../engine.zig").Engine;
const mach = @import("../main.zig");
const math = @import("../math.zig"); const math = @import("../math.zig");
const mat = math.mat; const mat = math.mat;
@ -24,7 +25,7 @@ sprite_uv_transforms: *gpu.Buffer,
sprite_sizes: *gpu.Buffer, sprite_sizes: *gpu.Buffer,
texture_size: Vec2, texture_size: Vec2,
pub const name = .mach_sprite2d; pub const name = .engine_sprite2d;
pub const components = struct { pub const components = struct {
/// The sprite model transformation matrix. A sprite is measured in pixel units, starting from /// The sprite model transformation matrix. A sprite is measured in pixel units, starting from
@ -53,10 +54,11 @@ const Uniforms = extern struct {
texture_size: Vec2 align(16), texture_size: Vec2 align(16),
}; };
pub fn machSprite2DInit(eng: *Engine) !void { pub fn engineSprite2dInit(
var mach = &eng.mod.mach; engine: *mach.Mod(.engine),
var sprite2d = &eng.mod.mach_sprite2d; sprite2d: *mach.Mod(.engine_sprite2d),
const device = mach.state.device; ) !void {
const device = engine.state.device;
const uniform_buffer = device.createBuffer(&.{ const uniform_buffer = device.createBuffer(&.{
.usage = .{ .copy_dst = true, .uniform = true }, .usage = .{ .copy_dst = true, .uniform = true },
@ -157,9 +159,7 @@ pub fn machSprite2DInit(eng: *Engine) !void {
shader_module.release(); shader_module.release();
} }
pub fn deinit(eng: *Engine) !void { pub fn deinit(sprite2d: *mach.Mod(.engine_sprite2d)) !void {
var sprite2d = &eng.mod.mach_sprite2d;
sprite2d.state.texture.release(); sprite2d.state.texture.release();
sprite2d.state.pipeline.release(); sprite2d.state.pipeline.release();
sprite2d.state.queue.release(); sprite2d.state.queue.release();
@ -170,10 +170,11 @@ pub fn deinit(eng: *Engine) !void {
sprite2d.state.sprite_sizes.release(); sprite2d.state.sprite_sizes.release();
} }
pub fn tick(eng: *Engine) !void { pub fn tick(
var mach = &eng.mod.mach; engine: *mach.Mod(.engine),
var sprite2d = &eng.mod.mach_sprite2d; sprite2d: *mach.Mod(.engine_sprite2d),
const device = mach.state.device; ) !void {
const device = engine.state.device;
// Begin our render pass // Begin our render pass
const back_buffer_view = core.swap_chain.getCurrentTextureView().?; const back_buffer_view = core.swap_chain.getCurrentTextureView().?;
@ -205,8 +206,8 @@ pub fn tick(eng: *Engine) !void {
encoder.writeBuffer(sprite2d.state.uniform_buffer, 0, &[_]Uniforms{uniforms}); encoder.writeBuffer(sprite2d.state.uniform_buffer, 0, &[_]Uniforms{uniforms});
// Synchronize entity data into our GPU sprite buffer // Synchronize entity data into our GPU sprite buffer
var archetypes_iter = eng.entities.query(.{ .all = &.{ var archetypes_iter = engine.entities.query(.{ .all = &.{
.{ .mach_sprite2d = &.{ .{ .engine_sprite2d = &.{
.uv_transform, .uv_transform,
.transform, .transform,
.size, .size,
@ -214,20 +215,20 @@ pub fn tick(eng: *Engine) !void {
} }); } });
// TODO: eliminate these // TODO: eliminate these
var sprite_transforms = try std.ArrayListUnmanaged(Mat4x4).initCapacity(eng.allocator, 1000); var sprite_transforms = try std.ArrayListUnmanaged(Mat4x4).initCapacity(engine.allocator, 1000);
defer sprite_transforms.deinit(eng.allocator); defer sprite_transforms.deinit(engine.allocator);
var sprite_uv_transforms = try std.ArrayListUnmanaged(Mat3x3).initCapacity(eng.allocator, 1000); var sprite_uv_transforms = try std.ArrayListUnmanaged(Mat3x3).initCapacity(engine.allocator, 1000);
defer sprite_uv_transforms.deinit(eng.allocator); defer sprite_uv_transforms.deinit(engine.allocator);
var sprite_sizes = try std.ArrayListUnmanaged(Vec2).initCapacity(eng.allocator, 1000); var sprite_sizes = try std.ArrayListUnmanaged(Vec2).initCapacity(engine.allocator, 1000);
defer sprite_sizes.deinit(eng.allocator); defer sprite_sizes.deinit(engine.allocator);
while (archetypes_iter.next()) |archetype| { while (archetypes_iter.next()) |archetype| {
var transforms = archetype.slice(.mach_sprite2d, .transform); var transforms = archetype.slice(.engine_sprite2d, .transform);
var uv_transforms = archetype.slice(.mach_sprite2d, .uv_transform); var uv_transforms = archetype.slice(.engine_sprite2d, .uv_transform);
var sizes = archetype.slice(.mach_sprite2d, .size); var sizes = archetype.slice(.engine_sprite2d, .size);
for (transforms, uv_transforms, sizes) |transform, uv_transform, size| { for (transforms, uv_transforms, sizes) |transform, uv_transform, size| {
try sprite_transforms.append(eng.allocator, transform); try sprite_transforms.append(engine.allocator, transform);
try sprite_uv_transforms.append(eng.allocator, uv_transform); try sprite_uv_transforms.append(engine.allocator, uv_transform);
try sprite_sizes.append(eng.allocator, size); try sprite_sizes.append(engine.allocator, size);
} }
} }
const total_vertices = @as(u32, @intCast(sprite_sizes.items.len * 6)); const total_vertices = @as(u32, @intCast(sprite_sizes.items.len * 6));