gfx2d: even larger sprite buffer; fix reference counting

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2023-09-13 17:59:47 -07:00 committed by Stephen Gutekanst
parent 45cbfcf7b6
commit b7ad36078f

View file

@ -65,6 +65,20 @@ const Pipeline = struct {
uv_transforms: *gpu.Buffer, uv_transforms: *gpu.Buffer,
sizes: *gpu.Buffer, sizes: *gpu.Buffer,
pub fn reference(p: *Pipeline) void {
p.render.reference();
p.texture_sampler.reference();
p.texture.reference();
if (p.texture2) |tex| tex.reference();
if (p.texture3) |tex| tex.reference();
if (p.texture4) |tex| tex.reference();
p.bind_group.reference();
p.uniforms.reference();
p.transforms.reference();
p.uv_transforms.reference();
p.sizes.reference();
}
pub fn deinit(p: *Pipeline) void { pub fn deinit(p: *Pipeline) void {
p.render.release(); p.render.release();
p.texture_sampler.release(); p.texture_sampler.release();
@ -128,7 +142,7 @@ pub fn engineSprite2dInitPipeline(
} }
// Storage buffers // Storage buffers
const sprite_buffer_cap = 1024 * 256; // TODO: allow user to specify preallocation const sprite_buffer_cap = 1024 * 512; // TODO: allow user to specify preallocation
const transforms = device.createBuffer(&.{ const transforms = device.createBuffer(&.{
.usage = .{ .storage = true, .copy_dst = true }, .usage = .{ .storage = true, .copy_dst = true },
.size = @sizeOf(Mat4x4) * sprite_buffer_cap, .size = @sizeOf(Mat4x4) * sprite_buffer_cap,
@ -252,6 +266,7 @@ pub fn engineSprite2dInitPipeline(
.uv_transforms = uv_transforms, .uv_transforms = uv_transforms,
.sizes = sizes, .sizes = sizes,
}; };
pipeline.value_ptr.reference();
} }
pub fn deinit(sprite2d: *mach.Mod(.engine_sprite2d)) !void { pub fn deinit(sprite2d: *mach.Mod(.engine_sprite2d)) !void {