reintroduce App.create

pull/5509/head
Mitchell Hashimoto 2025-06-27 09:09:54 -07:00
parent 1979fb92f4
commit 83690744b2
No known key found for this signature in database
GPG Key ID: 523D5DC389D273BC
3 changed files with 22 additions and 11 deletions

View File

@ -76,6 +76,15 @@ first: bool = true,
pub const CreateError = Allocator.Error || font.SharedGridSet.InitError;
/// Create a new app instance. This returns a stable pointer to the app
/// instance which is required for callbacks.
pub fn create(alloc: Allocator) CreateError!*App {
var app = try alloc.create(App);
errdefer alloc.destroy(app);
try app.init(alloc);
return app;
}
/// Initialize the main app instance. This creates the main window, sets
/// up the renderer state, compiles the shaders, etc. This is the primary
/// "startup" logic.
@ -111,6 +120,14 @@ pub fn deinit(self: *App) void {
self.font_grid_set.deinit();
}
pub fn destroy(self: *App) void {
// Deinitialize the app
self.deinit();
// Free the app memory
self.alloc.destroy(self);
}
/// Tick ticks the app loop. This will drain our mailbox and process those
/// events. This should be called by the application runtime on every loop
/// tick.

View File

@ -1317,12 +1317,8 @@ pub const CAPI = struct {
opts: *const apprt.runtime.App.Options,
config: *const Config,
) !*App {
var core_app = try global.alloc.create(CoreApp);
try core_app.init(global.alloc);
errdefer {
core_app.deinit();
global.alloc.destroy(core_app);
}
const core_app = try CoreApp.create(global.alloc);
errdefer core_app.destroy();
// Create our runtime app
var app = try global.alloc.create(App);
@ -1350,8 +1346,7 @@ pub const CAPI = struct {
const core_app = v.core_app;
v.terminate();
global.alloc.destroy(v);
core_app.deinit();
global.alloc.destroy(core_app);
core_app.destroy();
}
/// Update the focused state of the app.

View File

@ -98,9 +98,8 @@ pub fn main() !MainReturn {
}
// Create our app state
var app: App = undefined;
try app.init(alloc);
defer app.deinit();
const app: *App = try App.create(alloc);
defer app.destroy();
// Create our runtime app
var app_runtime: apprt.App = undefined;