From e56cb798efdeffc6daa477a07a0bc3f7fb6f0054 Mon Sep 17 00:00:00 2001 From: Eli Gottlieb Date: Mon, 19 Jul 2010 00:24:02 -0400 Subject: [PATCH] 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. --- test/testshape.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/test/testshape.c b/test/testshape.c index 714346e53..1c4a3ebbc 100644 --- a/test/testshape.c +++ b/test/testshape.c @@ -6,11 +6,14 @@ #include #include #include +#include #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 @@ void render(SDL_Window* window,SDL_Texture *texture,SDL_Rect texture_dimensions) 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 @@ int main(int argc,char** argv) { 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 @@ int main(int argc,char** argv) { 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.