//! ---------------------------------------------------- //! ---------------------------------------------------- const std = @import("std"); const gtl = @import("gtl"); const Material = @import("../../common/component/material.zig"); const Mesh = @import("../../cache/resource/mesh_cache.zig").MeshID; const Handle = gtl.Handle; const Self = @This(); // TODO: const Camera = struct {}; /// ---------------------------------------------------- /// ---------------------------------------------------- pub const DrawCMD = union(enum) { draw: struct { mesh: Mesh, material: Material.Unique, }, draw_indexed: struct { mesh: Mesh, material: Material.Unique, }, begin_pass: struct { camera: Handle(Camera), color: [4]f32 = .{ 0, 0, 0, 255 }, }, end_pass, }; // // FIELDS // commands: std.ArrayList(DrawCMD), alloc: std.mem.Allocator, /// ---------------------------------------------------- /// ---------------------------------------------------- pub fn init(alloc: std.mem.Allocator) Self { return .{ .commands = .empty, .alloc = alloc, }; } /// ---------------------------------------------------- /// ---------------------------------------------------- pub fn deinit(self: *Self) void { self.commands.deinit(self.alloc); } /// ---------------------------------------------------- /// ---------------------------------------------------- pub fn clear(self: *Self) void { self.commands.clearRetainingCapacity(); } /// ---------------------------------------------------- /// ---------------------------------------------------- pub fn draw( self: *Self, cmd: DrawCMD, ) !void { try self.commands.append( self.alloc, cmd, ); }