#include #include #include #include static void MyEventLoop(void) { SDL_Event ev; AG_Window *win; Uint32 Tr1 = SDL_GetTicks(), Tr2 = 0; for (;;) { Tr2 = SDL_GetTicks(); if (Tr2-Tr1 >= agView->rNom) { /* Time to redraw? */ AG_LockVFS(agView); /* Render GUI elements */ AG_BeginRendering(); AG_TAILQ_FOREACH(win, &agView->windows, windows) { AG_ObjectLock(win); AG_WindowDraw(win); AG_ObjectUnlock(win); } AG_EndRendering(); AG_UnlockVFS(agView); /* Recalibrate the effective refresh rate. */ Tr1 = SDL_GetTicks(); agView->rCur = agView->rNom - (Tr1-Tr2); if (agView->rCur < 1) { agView->rCur = 1; } } else if (SDL_PollEvent(&ev) != 0) { /* Send all SDL events to Agar-GUI. */ AG_ProcessEvent(&ev); } else if (AG_TAILQ_FIRST(&agTimeoutObjQ) != NULL) { /* Advance the timing wheels. */ AG_ProcessTimeout(Tr2); } else if (agView->rCur > agIdleThresh) { /* Idle the rest of the time. */ SDL_Delay(agView->rCur - agIdleThresh); } } } int main(int argc, char *argv[]) { AG_Window *win; AG_Table *tbl; if (AG_InitCore("event1", 0) == -1 || AG_InitVideo(320, 240, 32, AG_VIDEO_RESIZABLE) == -1) { return (1); } win = AG_WindowNew(0); AG_LabelNewStatic(win, 0, "Hello, world!"); AG_WindowShow(win); MyEventLoop(); return (0); }