From bfa3b069f7d1e1e6b8cb5e0d9199e397931cec2e Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Fri, 23 Aug 2024 23:03:54 -0700 Subject: [PATCH] revert bad entrypoint API design changes Signed-off-by: Stephen Gutekanst --- examples/core/custom-entrypoint/main.zig | 10 ++-- examples/core/triangle/main.zig | 10 ++-- examples/custom-renderer/main.zig | 10 ++-- examples/glyphs/main.zig | 10 ++-- examples/hardware-check/main.zig | 10 ++-- examples/piano/main.zig | 10 ++-- examples/play-opus/main.zig | 10 ++-- examples/sprite/main.zig | 10 ++-- examples/text/main.zig | 10 ++-- src/main.zig | 62 +++++++++++------------- 10 files changed, 65 insertions(+), 87 deletions(-) diff --git a/examples/core/custom-entrypoint/main.zig b/examples/core/custom-entrypoint/main.zig index 8eec2a74fb..47bcd433f3 100644 --- a/examples/core/custom-entrypoint/main.zig +++ b/examples/core/custom-entrypoint/main.zig @@ -8,11 +8,9 @@ pub const modules = .{ }; pub fn main() !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); - const allocator = gpa.allocator(); + // Initialize mach.Core + try mach.core.initModule(); - var app = try mach.App.init(allocator, .app); - defer app.deinit(allocator); - try app.run(.{ .allocator = allocator }); + // Main loop + while (try mach.core.tick()) {} } diff --git a/examples/core/triangle/main.zig b/examples/core/triangle/main.zig index 8eec2a74fb..47bcd433f3 100644 --- a/examples/core/triangle/main.zig +++ b/examples/core/triangle/main.zig @@ -8,11 +8,9 @@ pub const modules = .{ }; pub fn main() !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); - const allocator = gpa.allocator(); + // Initialize mach.Core + try mach.core.initModule(); - var app = try mach.App.init(allocator, .app); - defer app.deinit(allocator); - try app.run(.{ .allocator = allocator }); + // Main loop + while (try mach.core.tick()) {} } diff --git a/examples/custom-renderer/main.zig b/examples/custom-renderer/main.zig index 5afaaf2d6b..6425f9803a 100644 --- a/examples/custom-renderer/main.zig +++ b/examples/custom-renderer/main.zig @@ -10,11 +10,9 @@ pub const modules = .{ }; pub fn main() !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); - const allocator = gpa.allocator(); + // Initialize mach.Core + try mach.core.initModule(); - var app = try mach.App.init(allocator, .app); - defer app.deinit(allocator); - try app.run(.{ .allocator = allocator }); + // Main loop + while (try mach.core.tick()) {} } diff --git a/examples/glyphs/main.zig b/examples/glyphs/main.zig index 051b3a6950..1caa73c4bb 100644 --- a/examples/glyphs/main.zig +++ b/examples/glyphs/main.zig @@ -11,11 +11,9 @@ pub const modules = .{ // TODO(important): use standard entrypoint instead pub fn main() !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); - const allocator = gpa.allocator(); + // Initialize mach.Core + try mach.core.initModule(); - var app = try mach.App.init(allocator, .app); - defer app.deinit(allocator); - try app.run(.{ .allocator = allocator }); + // Main loop + while (try mach.core.tick()) {} } diff --git a/examples/hardware-check/main.zig b/examples/hardware-check/main.zig index da3a93b7b1..48b09aa6d5 100644 --- a/examples/hardware-check/main.zig +++ b/examples/hardware-check/main.zig @@ -12,11 +12,9 @@ pub const modules = .{ // TODO(important): use standard entrypoint instead pub fn main() !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); - const allocator = gpa.allocator(); + // Initialize mach.Core + try mach.core.initModule(); - var app = try mach.App.init(allocator, .app); - defer app.deinit(allocator); - try app.run(.{ .allocator = allocator }); + // Main loop + while (try mach.core.tick()) {} } diff --git a/examples/piano/main.zig b/examples/piano/main.zig index e2014184b8..ee27f081c5 100644 --- a/examples/piano/main.zig +++ b/examples/piano/main.zig @@ -10,11 +10,9 @@ pub const modules = .{ // TODO(important): use standard entrypoint instead pub fn main() !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); - const allocator = gpa.allocator(); + // Initialize mach.Core + try mach.core.initModule(); - var app = try mach.App.init(allocator, .app); - defer app.deinit(allocator); - try app.run(.{ .allocator = allocator }); + // Main loop + while (try mach.core.tick()) {} } diff --git a/examples/play-opus/main.zig b/examples/play-opus/main.zig index e2014184b8..ee27f081c5 100644 --- a/examples/play-opus/main.zig +++ b/examples/play-opus/main.zig @@ -10,11 +10,9 @@ pub const modules = .{ // TODO(important): use standard entrypoint instead pub fn main() !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); - const allocator = gpa.allocator(); + // Initialize mach.Core + try mach.core.initModule(); - var app = try mach.App.init(allocator, .app); - defer app.deinit(allocator); - try app.run(.{ .allocator = allocator }); + // Main loop + while (try mach.core.tick()) {} } diff --git a/examples/sprite/main.zig b/examples/sprite/main.zig index c59c2845cc..177875b398 100644 --- a/examples/sprite/main.zig +++ b/examples/sprite/main.zig @@ -10,11 +10,9 @@ pub const modules = .{ // TODO(important): use standard entrypoint instead pub fn main() !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); - const allocator = gpa.allocator(); + // Initialize mach.Core + try mach.core.initModule(); - var app = try mach.App.init(allocator, .app); - defer app.deinit(allocator); - try app.run(.{ .allocator = allocator }); + // Main loop + while (try mach.core.tick()) {} } diff --git a/examples/text/main.zig b/examples/text/main.zig index 048021cbb3..b76e5b5285 100644 --- a/examples/text/main.zig +++ b/examples/text/main.zig @@ -10,11 +10,9 @@ pub const modules = .{ // TODO(important): use standard entrypoint instead pub fn main() !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); - const allocator = gpa.allocator(); + // Initialize mach.Core + try mach.core.initModule(); - var app = try mach.App.init(allocator, .app); - defer app.deinit(allocator); - try app.run(.{ .allocator = allocator }); + // Main loop + while (try mach.core.tick()) {} } diff --git a/src/main.zig b/src/main.zig index 393e7a9f84..c44c39418e 100644 --- a/src/main.zig +++ b/src/main.zig @@ -45,54 +45,50 @@ pub const Entities = @import("module/main.zig").Entities; pub const is_debug = builtin.mode == .Debug; -pub const App = struct { - mods: *Modules, - comptime main_mod: ModuleName = .app, +pub const core = struct { + var mods: Modules = undefined; + var stack_space: [8 * 1024 * 1024]u8 = undefined; - pub fn init(allocator: std.mem.Allocator, comptime main_mod: ModuleName) !App { - var mods: *Modules = try allocator.create(Modules); - try mods.init(allocator); + pub fn initModule() !void { + try mods.init(std.heap.c_allocator); // TODO: allocator - return .{ - .mods = mods, - .main_mod = main_mod, - }; + // TODO: this is a hack + mods.mod.mach_core.init(undefined); + mods.scheduleWithArgs(.mach_core, .init, .{.{ .allocator = std.heap.c_allocator }}); + mods.schedule(.app, .init); } - pub fn deinit(app: *App, allocator: std.mem.Allocator) void { - app.mods.deinit(allocator); - allocator.destroy(app.mods); - } - - pub fn run(app: *App, core_options: Core.InitOptions) !void { - var stack_space: [8 * 1024 * 1024]u8 = undefined; - - app.mods.mod.mach_core.init(undefined); // TODO - app.mods.scheduleWithArgs(.mach_core, .init, .{core_options}); - app.mods.schedule(app.main_mod, .init); - - // Main loop + pub fn tick() !bool { if (comptime builtin.target.isDarwin()) { - Core.Platform.run(on_each_update, .{app, &stack_space}); + // TODO: tick() should never block, but we should have a way to block for other platforms. + Core.Platform.run(on_each_update, .{}); } else { - while (try app.on_each_update(&stack_space)) {} + return try on_each_update(); } + + return false; } - fn on_each_update(app: *App, stack_space: []u8) !bool { - if (app.mods.mod.mach_core.state().should_close) { + // TODO: support deinitialization + // pub fn deinit() void { + // mods.deinit(std.heap.c_allocator); // TODO: allocator + // } + + fn on_each_update() !bool { + // TODO: this should not exist here + if (mods.mod.mach_core.state().should_close) { // Final Dispatch to deinitalize resources - app.mods.schedule(app.main_mod, .deinit); - try app.mods.dispatch(stack_space, .{}); - app.mods.schedule(.mach_core, .deinit); - try app.mods.dispatch(stack_space, .{}); + mods.schedule(.app, .deinit); + try mods.dispatch(&stack_space, .{}); + mods.schedule(.mach_core, .deinit); + try mods.dispatch(&stack_space, .{}); return false; } // Dispatch events until queue is empty - try app.mods.dispatch(stack_space, .{}); + try mods.dispatch(&stack_space, .{}); // Run `update` when `init` and all other systems are executed - app.mods.schedule(app.main_mod, .update); + mods.schedule(.app, .update); return true; } };