Working toward render timing
This commit is contained in:
@@ -4,6 +4,16 @@
|
||||
namespace lime {
|
||||
|
||||
|
||||
AutoGCRoot* Application::callback = 0;
|
||||
|
||||
|
||||
double Application::GetTicks () {
|
||||
|
||||
return SDL_GetTicks ();
|
||||
|
||||
}
|
||||
|
||||
|
||||
SDLApplication::SDLApplication () {
|
||||
|
||||
SDL_Init (SDL_INIT_VIDEO);
|
||||
@@ -22,23 +32,43 @@ namespace lime {
|
||||
|
||||
SDL_Event event;
|
||||
active = true;
|
||||
bool firstTime = true;
|
||||
lastUpdate = SDL_GetTicks ();
|
||||
Uint32 currentUpdate = 0;
|
||||
int deltaTime = 0;
|
||||
|
||||
while (active) {
|
||||
|
||||
while (active && SDL_WaitEvent (&event)) {
|
||||
|
||||
HandleEvent (&event);
|
||||
event.type = -1;
|
||||
if (!active) break;
|
||||
|
||||
}
|
||||
event.type = -1;
|
||||
|
||||
while (active && SDL_PollEvent (&event)) {
|
||||
while (active && (firstTime || SDL_WaitEvent (&event))) {
|
||||
|
||||
firstTime = false;
|
||||
|
||||
HandleEvent (&event);
|
||||
event.type = -1;
|
||||
if (!active) break;
|
||||
|
||||
while (active && SDL_PollEvent (&event)) {
|
||||
|
||||
HandleEvent (&event);
|
||||
event.type = -1;
|
||||
if (!active) break;
|
||||
|
||||
}
|
||||
|
||||
currentUpdate = SDL_GetTicks ();
|
||||
deltaTime = currentUpdate - lastUpdate;
|
||||
|
||||
if (deltaTime > 16) {
|
||||
|
||||
updateEvent.deltaTime = deltaTime;
|
||||
UpdateEvent::Dispatch (&updateEvent);
|
||||
|
||||
RenderEvent::Dispatch (&renderEvent);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -92,7 +122,11 @@ namespace lime {
|
||||
ProcessWindowEvent (event);
|
||||
break;
|
||||
|
||||
case SDL_WINDOWEVENT_EXPOSED: /*poll*/ break;
|
||||
case SDL_WINDOWEVENT_EXPOSED:
|
||||
|
||||
RenderEvent::Dispatch (&renderEvent);
|
||||
break;
|
||||
|
||||
case SDL_WINDOWEVENT_SIZE_CHANGED: /*resize*/ break;
|
||||
case SDL_WINDOWEVENT_FOCUS_GAINED: /*focus in*/ break;
|
||||
case SDL_WINDOWEVENT_FOCUS_LOST: /*focus out*/ break;
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
#include <SDL.h>
|
||||
#include <app/Application.h>
|
||||
#include <app/RenderEvent.h>
|
||||
#include <app/UpdateEvent.h>
|
||||
#include <ui/KeyEvent.h>
|
||||
#include <ui/MouseEvent.h>
|
||||
#include <ui/TouchEvent.h>
|
||||
@@ -32,8 +34,11 @@ namespace lime {
|
||||
|
||||
bool active;
|
||||
KeyEvent keyEvent;
|
||||
Uint32 lastUpdate;
|
||||
MouseEvent mouseEvent;
|
||||
RenderEvent renderEvent;
|
||||
TouchEvent touchEvent;
|
||||
UpdateEvent updateEvent;
|
||||
WindowEvent windowEvent;
|
||||
|
||||
};
|
||||
|
||||
@@ -23,6 +23,13 @@ namespace lime {
|
||||
}
|
||||
|
||||
|
||||
void SDLRenderer::Flip () {
|
||||
|
||||
SDL_RenderPresent (sdlRenderer);
|
||||
|
||||
}
|
||||
|
||||
|
||||
Renderer* CreateRenderer (Window* window) {
|
||||
|
||||
return new SDLRenderer (window);
|
||||
|
||||
@@ -16,6 +16,8 @@ namespace lime {
|
||||
SDLRenderer (Window* window);
|
||||
~SDLRenderer ();
|
||||
|
||||
virtual void Flip ();
|
||||
|
||||
SDL_Renderer* sdlRenderer;
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user