Mercurial > sdl-ios-xcode
diff test/testshape.c @ 4805:de3b3455f8ec
Put the render loop back in its right place, but with delaying functionality to keep it down to roughly 60fps, not eating up all the X11 time.
author | Eli Gottlieb <eligottlieb@gmail.com> |
---|---|
date | Mon, 19 Jul 2010 00:24:02 -0400 |
parents | b33752266d8f |
children | 2ae79ed78a5a |
line wrap: on
line diff
--- a/test/testshape.c Sun Jul 18 23:51:47 2010 -0400 +++ b/test/testshape.c Mon Jul 19 00:24:02 2010 -0400 @@ -6,11 +6,14 @@ #include <SDL_video.h> #include <SDL_shape.h> #include <SDL_keysym.h> +#include <SDL_timer.h> #define SHAPED_WINDOW_X 150 #define SHAPED_WINDOW_Y 150 #define SHAPED_WINDOW_DIMENSION 640 +#define TICK_INTERVAL 18 + void render(SDL_Window* window,SDL_Texture *texture,SDL_Rect texture_dimensions) { SDL_SelectRenderer(window); @@ -24,6 +27,16 @@ SDL_RenderPresent(); } +static Uint32 next_time; + +Uint32 time_left() { + Uint32 now = SDL_GetTicks(); + if(next_time <= now) + return 0; + else + return next_time - now; +} + int main(int argc,char** argv) { if(argc < 2) { printf("SDL_Shape requires at least one bitmap file as argument.\n"); @@ -106,7 +119,7 @@ SDL_QueryTexture(textures[current_picture],&format,&access,&texture_dimensions.w,&texture_dimensions.h); SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h); SDL_SetWindowShape(window,pictures[current_picture],&mode); - render(window,textures[current_picture],texture_dimensions); + next_time = SDL_GetTicks() + TICK_INTERVAL; while(should_exit == 0) { event_pending = SDL_PollEvent(&event); if(event_pending == 1) { @@ -123,13 +136,14 @@ SDL_QueryTexture(textures[current_picture],&format,&access,&texture_dimensions.w,&texture_dimensions.h); SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h); SDL_SetWindowShape(window,pictures[current_picture],&mode); - render(window,textures[current_picture],texture_dimensions); - } if(event.type == SDL_QUIT) should_exit = 1; event_pending = 0; } + render(window,textures[current_picture],texture_dimensions); + SDL_Delay(time_left()); + next_time += TICK_INTERVAL; } //Free the textures.