gfx2d: update to latest mach-ecs API
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
parent
fd5d347f3e
commit
9b142c7621
1 changed files with 27 additions and 26 deletions
|
|
@ -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));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue