Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Put the render loop back in its right place, but with delaying functi…
Browse files Browse the repository at this point in the history
…onality to keep it down to roughly 60fps, not eating up all the X11 time.
  • Loading branch information
Eli Gottlieb committed Jul 19, 2010
1 parent a4ff7ca commit e56cb79
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions test/testshape.c
Expand Up @@ -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);

Expand All @@ -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");
Expand Down Expand Up @@ -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) {
Expand All @@ -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.
Expand Down

0 comments on commit e56cb79

Please sign in to comment.