static void Run() { InitPlatform(); u8 *mem = (u8 *)MemAllocZeroed(MB(512)); Arena *arena = CreateArenaDebug(mem, MB(512), __LINE__); isize renderer_mem_size = MB(8); rawptr renderer_mem = ArenaAlloc(arena, renderer_mem_size); Arena *renderer_arena = CreateArenaDebug(renderer_mem, MB(8), __LINE__); Assert(CreateSystemWindow(), "Failed to initialize the window"); Assert(InitRenderer(renderer_arena), "Failed to initialize the renderer"); b32 quit = false; while (!quit) { if (HandleEvents()) break; BeginFrame(); DrawTriangle(); FinishFrame(); } DestroyRenderer(); } static b32 HandleEvents() { b32 quit = false; WindowEvent e; while (GetWindowEvent(&e)) { quit = ProcessEvent(&e); } return quit; } static b32 WaitForAndHandleEvent() { WindowEvent e; WaitForWindowEvent(&e); return ProcessEvent(&e); } static b32 ProcessEvent(WindowEvent *e) { b32 quit = false; switch (e->type) { case EVENT_QUIT: quit = true; break; case EVENT_RESIZE: SetRenderResolution(e->resize.w, e->resize.h); break; case EVENT_MINIMIZE: break; case EVENT_SHOW: break; default: break; } return quit; }