diff --git a/anaglym.cc b/anaglym.cc index 21f831f..c9ef4ee 100644 --- a/anaglym.cc +++ b/anaglym.cc @@ -22,7 +22,7 @@ static void update(); static void addEvent(const Event & event); static Uint32 updateCallback(Uint32 interval, void * param); -static bool lastDrawCompleted; +static bool lastUpdateCompleted; static bool engine_running; static SDL_Event userEvent; static SDL_cond * event_condition; @@ -46,6 +46,31 @@ static int engine_thread(void * param) { SDL_mutexP(event_mutex); SDL_CondWait(event_condition, event_mutex); + bool moreEvents = true; + while (moreEvents) + { + Event event; + SDL_mutexP(event_queue_mutex); + if (event_queue.size() < 1) + moreEvents = false; + else + { + event = event_queue.front(); + event_queue.pop(); + } + SDL_mutexV(event_queue_mutex); + if (moreEvents) + { + /* process the event */ + switch (event.type) + { + case EVENT_UPDATE: + g_engine->update(); + lastUpdateCompleted = true; + break; + } + } + } } } engine_running = false; @@ -82,7 +107,7 @@ int main(int argc, char * argv[]) usage(); } - lastDrawCompleted = true; + lastUpdateCompleted = true; engine_running = true; /* setup SDL update event */ userEvent.type = SDL_USEREVENT; @@ -114,7 +139,7 @@ int main(int argc, char * argv[]) /* called by SDL when the update timer expires */ static Uint32 updateCallback(Uint32 interval, void * param) { - if (lastDrawCompleted) + if (lastUpdateCompleted) SDL_PushEvent(&userEvent); return interval; } @@ -157,6 +182,7 @@ static void update() { Event update_event; update_event.type = EVENT_UPDATE; + lastUpdateCompleted = false; addEvent(update_event); }