Improve frame timing
This commit is contained in:
@@ -55,12 +55,13 @@ namespace lime {
|
||||
|
||||
int SDLApplication::Exec () {
|
||||
|
||||
framePeriod = 1000.0 / 60.0;
|
||||
SDL_Event event;
|
||||
active = true;
|
||||
lastUpdate = SDL_GetTicks ();
|
||||
nextUpdate = lastUpdate;
|
||||
|
||||
bool firstTime = true;
|
||||
Uint32 nextUpdate = lastUpdate;
|
||||
|
||||
while (active) {
|
||||
|
||||
@@ -70,14 +71,6 @@ namespace lime {
|
||||
|
||||
firstTime = false;
|
||||
|
||||
if (timerActive && timerID) {
|
||||
|
||||
SDL_RemoveTimer (timerID);
|
||||
timerActive = false;
|
||||
timerID = 0;
|
||||
|
||||
}
|
||||
|
||||
HandleEvent (&event);
|
||||
event.type = -1;
|
||||
if (!active) break;
|
||||
@@ -92,18 +85,15 @@ namespace lime {
|
||||
|
||||
currentUpdate = SDL_GetTicks ();
|
||||
|
||||
if (currentUpdate - lastUpdate < 16) {
|
||||
if (currentUpdate >= nextUpdate) {
|
||||
|
||||
lastUpdate = currentUpdate;
|
||||
SDL_RemoveTimer (timerID);
|
||||
OnTimer (0, 0);
|
||||
|
||||
} else if (!timerActive) {
|
||||
|
||||
timerActive = true;
|
||||
timerID = SDL_AddTimer (lastUpdate + 16 - currentUpdate, OnTimer, 0);
|
||||
|
||||
} else {
|
||||
|
||||
lastUpdate = currentUpdate;
|
||||
|
||||
OnTimer (0, 0);
|
||||
timerID = SDL_AddTimer (nextUpdate - currentUpdate, OnTimer, 0);
|
||||
|
||||
}
|
||||
|
||||
@@ -129,6 +119,14 @@ namespace lime {
|
||||
|
||||
currentUpdate = SDL_GetTicks ();
|
||||
updateEvent.deltaTime = currentUpdate - lastUpdate;
|
||||
lastUpdate = currentUpdate;
|
||||
|
||||
while (nextUpdate <= currentUpdate) {
|
||||
|
||||
nextUpdate += framePeriod;
|
||||
|
||||
}
|
||||
|
||||
UpdateEvent::Dispatch (&updateEvent);
|
||||
RenderEvent::Dispatch (&renderEvent);
|
||||
break;
|
||||
|
||||
@@ -34,9 +34,11 @@ namespace lime {
|
||||
|
||||
bool active;
|
||||
Uint32 currentUpdate;
|
||||
double framePeriod;
|
||||
KeyEvent keyEvent;
|
||||
Uint32 lastUpdate;
|
||||
MouseEvent mouseEvent;
|
||||
double nextUpdate;
|
||||
RenderEvent renderEvent;
|
||||
TouchEvent touchEvent;
|
||||
UpdateEvent updateEvent;
|
||||
|
||||
Reference in New Issue
Block a user