diff --git a/sdl_opengl_bare.d b/sdl_opengl_bare.d index f052310..18d8103 100644 --- a/sdl_opengl_bare.d +++ b/sdl_opengl_bare.d @@ -5,6 +5,7 @@ import derelict.opengl.glu; enum int WIDTH = 800; enum int HEIGHT = 600; +static bool drawing = false; void init() { @@ -21,6 +22,7 @@ void init() void display() { + drawing = true; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); glColor3f(1, 1, 1); @@ -33,6 +35,18 @@ void display() glVertex3f(5.0, -5.0, 0.0); glEnd(); SDL_GL_SwapBuffers(); + drawing = false; +} + +extern (C) Uint32 timer_callback(Uint32 interval, void *param) +{ + if (!drawing) + { + SDL_Event event; + event.type = SDL_USEREVENT; + SDL_PushEvent(&event); + } + return interval; } int main(char[][] args) @@ -58,8 +72,8 @@ int main(char[][] args) } init(); - display(); SDL_Event event; + SDL_AddTimer(1000 / 50, &timer_callback, null); while (SDL_WaitEvent(&event)) { if (event.type == SDL_QUIT) @@ -69,6 +83,10 @@ int main(char[][] args) if (event.key.keysym.sym == SDLK_ESCAPE) break; } + else if (event.type == SDL_USEREVENT) + { + display(); + } } SDL_Quit();