Mercurial > sdl-ios-xcode
comparison 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 |
comparison
equal
deleted
inserted
replaced
4804:b33752266d8f | 4805:de3b3455f8ec |
---|---|
4 #include <SDL_rect.h> | 4 #include <SDL_rect.h> |
5 #include <SDL_pixels.h> | 5 #include <SDL_pixels.h> |
6 #include <SDL_video.h> | 6 #include <SDL_video.h> |
7 #include <SDL_shape.h> | 7 #include <SDL_shape.h> |
8 #include <SDL_keysym.h> | 8 #include <SDL_keysym.h> |
9 #include <SDL_timer.h> | |
9 | 10 |
10 #define SHAPED_WINDOW_X 150 | 11 #define SHAPED_WINDOW_X 150 |
11 #define SHAPED_WINDOW_Y 150 | 12 #define SHAPED_WINDOW_Y 150 |
12 #define SHAPED_WINDOW_DIMENSION 640 | 13 #define SHAPED_WINDOW_DIMENSION 640 |
14 | |
15 #define TICK_INTERVAL 18 | |
13 | 16 |
14 void render(SDL_Window* window,SDL_Texture *texture,SDL_Rect texture_dimensions) { | 17 void render(SDL_Window* window,SDL_Texture *texture,SDL_Rect texture_dimensions) { |
15 SDL_SelectRenderer(window); | 18 SDL_SelectRenderer(window); |
16 | 19 |
17 //Clear render-target to blue. | 20 //Clear render-target to blue. |
20 | 23 |
21 //Render the texture. | 24 //Render the texture. |
22 SDL_RenderCopy(texture,&texture_dimensions,&texture_dimensions); | 25 SDL_RenderCopy(texture,&texture_dimensions,&texture_dimensions); |
23 | 26 |
24 SDL_RenderPresent(); | 27 SDL_RenderPresent(); |
28 } | |
29 | |
30 static Uint32 next_time; | |
31 | |
32 Uint32 time_left() { | |
33 Uint32 now = SDL_GetTicks(); | |
34 if(next_time <= now) | |
35 return 0; | |
36 else | |
37 return next_time - now; | |
25 } | 38 } |
26 | 39 |
27 int main(int argc,char** argv) { | 40 int main(int argc,char** argv) { |
28 if(argc < 2) { | 41 if(argc < 2) { |
29 printf("SDL_Shape requires at least one bitmap file as argument.\n"); | 42 printf("SDL_Shape requires at least one bitmap file as argument.\n"); |
104 Uint32 format = 0,access = 0; | 117 Uint32 format = 0,access = 0; |
105 SDL_Rect texture_dimensions = {0,0,0,0}; | 118 SDL_Rect texture_dimensions = {0,0,0,0}; |
106 SDL_QueryTexture(textures[current_picture],&format,&access,&texture_dimensions.w,&texture_dimensions.h); | 119 SDL_QueryTexture(textures[current_picture],&format,&access,&texture_dimensions.w,&texture_dimensions.h); |
107 SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h); | 120 SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h); |
108 SDL_SetWindowShape(window,pictures[current_picture],&mode); | 121 SDL_SetWindowShape(window,pictures[current_picture],&mode); |
109 render(window,textures[current_picture],texture_dimensions); | 122 next_time = SDL_GetTicks() + TICK_INTERVAL; |
110 while(should_exit == 0) { | 123 while(should_exit == 0) { |
111 event_pending = SDL_PollEvent(&event); | 124 event_pending = SDL_PollEvent(&event); |
112 if(event_pending == 1) { | 125 if(event_pending == 1) { |
113 if(event.type == SDL_KEYDOWN) { | 126 if(event.type == SDL_KEYDOWN) { |
114 button_down = 1; | 127 button_down = 1; |
121 if(current_picture >= num_pictures) | 134 if(current_picture >= num_pictures) |
122 current_picture = 0; | 135 current_picture = 0; |
123 SDL_QueryTexture(textures[current_picture],&format,&access,&texture_dimensions.w,&texture_dimensions.h); | 136 SDL_QueryTexture(textures[current_picture],&format,&access,&texture_dimensions.w,&texture_dimensions.h); |
124 SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h); | 137 SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h); |
125 SDL_SetWindowShape(window,pictures[current_picture],&mode); | 138 SDL_SetWindowShape(window,pictures[current_picture],&mode); |
126 render(window,textures[current_picture],texture_dimensions); | |
127 | |
128 } | 139 } |
129 if(event.type == SDL_QUIT) | 140 if(event.type == SDL_QUIT) |
130 should_exit = 1; | 141 should_exit = 1; |
131 event_pending = 0; | 142 event_pending = 0; |
132 } | 143 } |
144 render(window,textures[current_picture],texture_dimensions); | |
145 SDL_Delay(time_left()); | |
146 next_time += TICK_INTERVAL; | |
133 } | 147 } |
134 | 148 |
135 //Free the textures. | 149 //Free the textures. |
136 for(i=0;i<num_pictures;i++) | 150 for(i=0;i<num_pictures;i++) |
137 SDL_DestroyTexture(textures[i]); | 151 SDL_DestroyTexture(textures[i]); |