Mercurial > sdl-ios-xcode
comparison test/testsprite2.c @ 1917:3f54b3ec5a07
Implemented scaling in the D3D renderer
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 19 Jul 2006 05:45:42 +0000 |
parents | c773b0c0ac89 |
children | a788656ca29a |
comparison
equal
deleted
inserted
replaced
1916:c773b0c0ac89 | 1917:3f54b3ec5a07 |
---|---|
15 static SDL_TextureID *sprites; | 15 static SDL_TextureID *sprites; |
16 static SDL_Rect *positions; | 16 static SDL_Rect *positions; |
17 static SDL_Rect *velocities; | 17 static SDL_Rect *velocities; |
18 static int sprite_w, sprite_h; | 18 static int sprite_w, sprite_h; |
19 static SDL_TextureBlendMode blendMode = SDL_TextureBlendMode_Mask; | 19 static SDL_TextureBlendMode blendMode = SDL_TextureBlendMode_Mask; |
20 static SDL_TextureScaleMode scaleMode = SDL_TextureScaleMode_None; | |
20 | 21 |
21 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ | 22 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ |
22 static void | 23 static void |
23 quit(int rc) | 24 quit(int rc) |
24 { | 25 { |
85 SDL_GetWindowSize(window, &window_w, &window_h); | 86 SDL_GetWindowSize(window, &window_w, &window_h); |
86 | 87 |
87 /* Move the sprite, bounce at the wall, and draw */ | 88 /* Move the sprite, bounce at the wall, and draw */ |
88 n = 0; | 89 n = 0; |
89 SDL_RenderFill(NULL, BACKGROUND); | 90 SDL_RenderFill(NULL, BACKGROUND); |
90 /* | |
91 for (i = 0; i < num_sprites; ++i) { | |
92 position = &positions[i]; | |
93 SDL_RenderFill(position, BACKGROUND); | |
94 } | |
95 */ | |
96 for (i = 0; i < num_sprites; ++i) { | 91 for (i = 0; i < num_sprites; ++i) { |
97 position = &positions[i]; | 92 position = &positions[i]; |
98 velocity = &velocities[i]; | 93 velocity = &velocities[i]; |
99 position->x += velocity->x; | 94 position->x += velocity->x; |
100 if ((position->x < 0) || (position->x >= (window_w - sprite_w))) { | 95 if ((position->x < 0) || (position->x >= (window_w - sprite_w))) { |
106 velocity->y = -velocity->y; | 101 velocity->y = -velocity->y; |
107 position->y += velocity->y; | 102 position->y += velocity->y; |
108 } | 103 } |
109 | 104 |
110 /* Blit the sprite onto the screen */ | 105 /* Blit the sprite onto the screen */ |
111 SDL_RenderCopy(sprite, NULL, position, blendMode, | 106 SDL_RenderCopy(sprite, NULL, position, blendMode, scaleMode); |
112 SDL_TextureScaleMode_None); | |
113 } | 107 } |
114 | 108 |
115 /* Update the screen! */ | 109 /* Update the screen! */ |
116 SDL_RenderPresent(); | 110 SDL_RenderPresent(); |
117 } | 111 } |
140 if (SDL_strcasecmp(argv[i], "--blend") == 0) { | 134 if (SDL_strcasecmp(argv[i], "--blend") == 0) { |
141 if (argv[i + 1]) { | 135 if (argv[i + 1]) { |
142 if (SDL_strcasecmp(argv[i + 1], "none") == 0) { | 136 if (SDL_strcasecmp(argv[i + 1], "none") == 0) { |
143 blendMode = SDL_TextureBlendMode_None; | 137 blendMode = SDL_TextureBlendMode_None; |
144 consumed = 2; | 138 consumed = 2; |
139 } else if (SDL_strcasecmp(argv[i + 1], "mask") == 0) { | |
140 blendMode = SDL_TextureBlendMode_Mask; | |
141 consumed = 2; | |
145 } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { | 142 } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { |
146 blendMode = SDL_TextureBlendMode_Blend; | 143 blendMode = SDL_TextureBlendMode_Blend; |
147 consumed = 2; | 144 consumed = 2; |
148 } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { | 145 } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { |
149 blendMode = SDL_TextureBlendMode_Add; | 146 blendMode = SDL_TextureBlendMode_Add; |
150 consumed = 2; | 147 consumed = 2; |
151 } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { | 148 } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { |
152 blendMode = SDL_TextureBlendMode_Mod; | 149 blendMode = SDL_TextureBlendMode_Mod; |
150 consumed = 2; | |
151 } | |
152 } | |
153 } else if (SDL_strcasecmp(argv[i], "--scale") == 0) { | |
154 if (argv[i + 1]) { | |
155 if (SDL_strcasecmp(argv[i + 1], "none") == 0) { | |
156 scaleMode = SDL_TextureScaleMode_None; | |
157 consumed = 2; | |
158 } else if (SDL_strcasecmp(argv[i + 1], "fast") == 0) { | |
159 scaleMode = SDL_TextureScaleMode_Fast; | |
160 consumed = 2; | |
161 } else if (SDL_strcasecmp(argv[i + 1], "slow") == 0) { | |
162 scaleMode = SDL_TextureScaleMode_Slow; | |
163 consumed = 2; | |
164 } else if (SDL_strcasecmp(argv[i + 1], "best") == 0) { | |
165 scaleMode = SDL_TextureScaleMode_Best; | |
153 consumed = 2; | 166 consumed = 2; |
154 } | 167 } |
155 } | 168 } |
156 } else if (SDL_isdigit(*argv[i])) { | 169 } else if (SDL_isdigit(*argv[i])) { |
157 num_sprites = SDL_atoi(argv[i]); | 170 num_sprites = SDL_atoi(argv[i]); |
158 consumed = 1; | 171 consumed = 1; |
159 } | 172 } |
160 } | 173 } |
161 if (consumed < 0) { | 174 if (consumed < 0) { |
162 fprintf(stderr, "Usage: %s %s [--blend none|blend|add|mod]", | 175 fprintf(stderr, |
176 "Usage: %s %s [--blend none|mask|blend|add|mod] [--scale none|fast|slow|best]", | |
163 argv[0], CommonUsage(state)); | 177 argv[0], CommonUsage(state)); |
164 quit(1); | 178 quit(1); |
165 } | 179 } |
166 i += consumed; | 180 i += consumed; |
167 } | 181 } |
190 if (!positions || !velocities) { | 204 if (!positions || !velocities) { |
191 fprintf(stderr, "Out of memory!\n"); | 205 fprintf(stderr, "Out of memory!\n"); |
192 quit(2); | 206 quit(2); |
193 } | 207 } |
194 srand(time(NULL)); | 208 srand(time(NULL)); |
209 if (scaleMode != SDL_TextureScaleMode_None) { | |
210 sprite_w += sprite_w / 2; | |
211 sprite_h += sprite_h / 2; | |
212 } | |
195 for (i = 0; i < num_sprites; ++i) { | 213 for (i = 0; i < num_sprites; ++i) { |
196 positions[i].x = rand() % (state->window_w - sprite_w); | 214 positions[i].x = rand() % (state->window_w - sprite_w); |
197 positions[i].y = rand() % (state->window_h - sprite_h); | 215 positions[i].y = rand() % (state->window_h - sprite_h); |
198 positions[i].w = sprite_w; | 216 positions[i].w = sprite_w; |
199 positions[i].h = sprite_h; | 217 positions[i].h = sprite_h; |