windows: implement tick, call core.initWindow, various fixes

This commit is contained in:
foxnne 2024-11-30 18:46:54 -06:00 committed by Emi Gutekanst
parent 0ec182c3f4
commit e15cbe63de
2 changed files with 28 additions and 8 deletions

View file

@ -161,6 +161,7 @@ pub fn init(core: *Core) !void {
pub fn initWindow(core: *Core, window_id: mach.ObjectID) !void {
var core_window = core.windows.getValue(window_id);
defer core.windows.setValueRaw(window_id, core_window);
core_window.instance = gpu.createInstance(null) orelse {
log.err("failed to create GPU instance", .{});
@ -228,8 +229,6 @@ pub fn initWindow(core: *Core, window_id: mach.ObjectID) !void {
core_window.framebuffer_format = core_window.swap_chain_descriptor.format;
core_window.framebuffer_width = core_window.swap_chain_descriptor.width;
core_window.framebuffer_height = core_window.swap_chain_descriptor.height;
core.windows.setValueRaw(window_id, core_window);
}
pub fn tick(core: *Core, core_mod: mach.Mod(Core)) !void {
@ -266,6 +265,7 @@ pub fn main(core: *Core, core_mod: mach.Mod(Core)) !void {
// The user wants mach.Core to take control of the main loop.
if (supports_non_blocking) {
while (core.state != .exited) {
try Platform.tick(core);
core_mod.run(core.on_tick.?);
core_mod.call(.presentFrame);
}