//! ---------------------------------------------------- //! ---------------------------------------------------- const std = @import("std"); const gtl = @import("gtl"); const App = @import("app"); const WGPUDevice = @import("../../device/resource/wgpu_device.zig"); const ShaderCache = @import("../resource/shader_cache.zig"); const PipelineCache = @import("../resource/pipeline_cache.zig"); const MeshCache = @import("../resource/mesh_cache.zig"); /// ---------------------------------------------------- /// ---------------------------------------------------- pub fn init(app: *App) !void { // --- # --- const res = try app.resources.getMany(struct { device: *const WGPUDevice, }); // --- SHADER CACHE --- const shaders = try app.resources.getOrSet(ShaderCache.init( res.device.raw, app.alloc, )); // --- PIPELINE CACHE --- const pipelines = try app.resources.getOrSet(PipelineCache.init( shaders, res.device.queue, res.device.raw, app.alloc, )); // --- MESH CACHE --- const meshes = try app.resources.getOrSet(MeshCache.init( res.device.raw, res.device.queue, app.alloc, )); // _ = meshes; _ = try meshes.getOrCreate(.cube); // TODO: Remove or place it somewhere else, idk // --- TEST --- _ = try pipelines.getOrCreate(.{}); _ = try pipelines.getOrCreate(.{}); _ = try pipelines.getOrCreate(.{ .shader = .unlit }); _ = try pipelines.getOrCreate(.{ .shader = .unlit }); { // DEBUG std.debug.print("{s}┏━{s} PIPELINES\n", .{ gtl.ansi.blue, gtl.ansi.reset }); for (pipelines.pipelines.items(), 0..) |entry, i| { // std.debug.print("\x1b[33m\x1b[0m {s:<12} {s}\n", .{ plugin.name, plugin.description }); std.debug.print( \\{s}┃ ┏━{s} {} \\{s}┃ ┃ {s}Shader: {s} \\{s}┃ ┃ {s}Cull Mode: {s} \\{s}┃ ┃ {s}Blend Mode: {s} \\{s}┃ ┃ {s}Front Face: {s} \\{s}┃ ┃ {s}Topology: {s} \\ , .{ gtl.ansi.blue, gtl.ansi.reset, i, gtl.ansi.blue, gtl.ansi.reset, @tagName(entry.key.shader), gtl.ansi.blue, gtl.ansi.reset, @tagName(entry.key.cull_mode), gtl.ansi.blue, gtl.ansi.reset, @tagName(entry.key.blend_mode), gtl.ansi.blue, gtl.ansi.reset, @tagName(entry.key.front_face), gtl.ansi.blue, gtl.ansi.reset, @tagName(entry.key.topology), }); std.debug.print("{s}┃ ┗━{s}\n", .{ gtl.ansi.blue, gtl.ansi.reset }); } std.debug.print("{s}┗━{s}\n", .{ gtl.ansi.blue, gtl.ansi.reset }); } } /// ---------------------------------------------------- /// ---------------------------------------------------- pub fn deinit(app: *App) !void { // --- # --- const res = try app.resources.getMany(struct { shaders: *ShaderCache, pipelines: *PipelineCache, meshes: *MeshCache, }); // --- # --- res.shaders.deinit(); res.pipelines.deinit(); res.meshes.deinit(); }