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

Latest commit

 

History

History
265 lines (236 loc) · 8.04 KB

testdraw2.c

File metadata and controls

265 lines (236 loc) · 8.04 KB
 
1
Dec 21, 2008
Dec 21, 2008
2
/* Simple program: draw as many random objects on the screen as possible */
3
4
5
6
7
8
9
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "common.h"
Dec 21, 2008
Dec 21, 2008
10
#define NUM_OBJECTS 100
11
12
static CommonState *state;
Dec 21, 2008
Dec 21, 2008
13
static int num_objects;
14
15
16
17
18
19
20
static SDL_bool cycle_color;
static SDL_bool cycle_alpha;
static int cycle_direction = 1;
static int current_alpha = 255;
static int current_color = 255;
static SDL_BlendMode blendMode = SDL_BLENDMODE_NONE;
Dec 21, 2008
Dec 21, 2008
21
void
Feb 15, 2011
Feb 15, 2011
22
DrawPoints(SDL_Renderer * renderer)
Dec 21, 2008
Dec 21, 2008
23
24
25
{
int i;
int x, y;
Feb 15, 2011
Feb 15, 2011
26
SDL_Rect viewport;
Dec 21, 2008
Dec 21, 2008
27
28
/* Query the sizes */
Feb 15, 2011
Feb 15, 2011
29
SDL_RenderGetViewport(renderer, &viewport);
Dec 21, 2008
Dec 21, 2008
30
Dec 21, 2008
Dec 21, 2008
31
for (i = 0; i < num_objects * 4; ++i) {
Dec 21, 2008
Dec 21, 2008
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/* Cycle the color and alpha, if desired */
if (cycle_color) {
current_color += cycle_direction;
if (current_color < 0) {
current_color = 0;
cycle_direction = -cycle_direction;
}
if (current_color > 255) {
current_color = 255;
cycle_direction = -cycle_direction;
}
}
if (cycle_alpha) {
current_alpha += cycle_direction;
if (current_alpha < 0) {
current_alpha = 0;
cycle_direction = -cycle_direction;
}
if (current_alpha > 255) {
current_alpha = 255;
cycle_direction = -cycle_direction;
}
}
Feb 2, 2011
Feb 2, 2011
55
SDL_SetRenderDrawColor(renderer, 255, (Uint8) current_color,
Dec 21, 2008
Dec 21, 2008
56
57
(Uint8) current_color, (Uint8) current_alpha);
Feb 15, 2011
Feb 15, 2011
58
59
x = rand() % viewport.w;
y = rand() % viewport.h;
Feb 2, 2011
Feb 2, 2011
60
SDL_RenderDrawPoint(renderer, x, y);
Dec 21, 2008
Dec 21, 2008
61
62
63
}
}
64
void
Feb 15, 2011
Feb 15, 2011
65
DrawLines(SDL_Renderer * renderer)
66
{
Dec 21, 2008
Dec 21, 2008
67
int i;
68
int x1, y1, x2, y2;
Feb 15, 2011
Feb 15, 2011
69
SDL_Rect viewport;
70
71
/* Query the sizes */
Feb 15, 2011
Feb 15, 2011
72
SDL_RenderGetViewport(renderer, &viewport);
73
Dec 21, 2008
Dec 21, 2008
74
for (i = 0; i < num_objects; ++i) {
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/* Cycle the color and alpha, if desired */
if (cycle_color) {
current_color += cycle_direction;
if (current_color < 0) {
current_color = 0;
cycle_direction = -cycle_direction;
}
if (current_color > 255) {
current_color = 255;
cycle_direction = -cycle_direction;
}
}
if (cycle_alpha) {
current_alpha += cycle_direction;
if (current_alpha < 0) {
current_alpha = 0;
cycle_direction = -cycle_direction;
}
if (current_alpha > 255) {
current_alpha = 255;
cycle_direction = -cycle_direction;
}
}
Feb 2, 2011
Feb 2, 2011
98
SDL_SetRenderDrawColor(renderer, 255, (Uint8) current_color,
99
100
(Uint8) current_color, (Uint8) current_alpha);
Dec 20, 2008
Dec 20, 2008
101
if (i == 0) {
Feb 15, 2011
Feb 15, 2011
102
103
104
105
SDL_RenderDrawLine(renderer, 0, 0, viewport.w - 1, viewport.h - 1);
SDL_RenderDrawLine(renderer, 0, viewport.h - 1, viewport.w - 1, 0);
SDL_RenderDrawLine(renderer, 0, viewport.h / 2, viewport.w - 1, viewport.h / 2);
SDL_RenderDrawLine(renderer, viewport.w / 2, 0, viewport.w / 2, viewport.h - 1);
Dec 20, 2008
Dec 20, 2008
106
} else {
Feb 15, 2011
Feb 15, 2011
107
108
109
110
x1 = (rand() % (viewport.w*2)) - viewport.w;
x2 = (rand() % (viewport.w*2)) - viewport.w;
y1 = (rand() % (viewport.h*2)) - viewport.h;
y2 = (rand() % (viewport.h*2)) - viewport.h;
Feb 2, 2011
Feb 2, 2011
111
SDL_RenderDrawLine(renderer, x1, y1, x2, y2);
Dec 20, 2008
Dec 20, 2008
112
}
113
}
Dec 21, 2008
Dec 21, 2008
114
115
116
}
void
Feb 15, 2011
Feb 15, 2011
117
DrawRects(SDL_Renderer * renderer)
Dec 21, 2008
Dec 21, 2008
118
119
120
{
int i;
SDL_Rect rect;
Feb 15, 2011
Feb 15, 2011
121
SDL_Rect viewport;
122
Dec 21, 2008
Dec 21, 2008
123
/* Query the sizes */
Feb 15, 2011
Feb 15, 2011
124
SDL_RenderGetViewport(renderer, &viewport);
Dec 21, 2008
Dec 21, 2008
125
Dec 21, 2008
Dec 21, 2008
126
for (i = 0; i < num_objects / 4; ++i) {
Dec 21, 2008
Dec 21, 2008
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/* Cycle the color and alpha, if desired */
if (cycle_color) {
current_color += cycle_direction;
if (current_color < 0) {
current_color = 0;
cycle_direction = -cycle_direction;
}
if (current_color > 255) {
current_color = 255;
cycle_direction = -cycle_direction;
}
}
if (cycle_alpha) {
current_alpha += cycle_direction;
if (current_alpha < 0) {
current_alpha = 0;
cycle_direction = -cycle_direction;
}
if (current_alpha > 255) {
current_alpha = 255;
cycle_direction = -cycle_direction;
}
}
Feb 2, 2011
Feb 2, 2011
150
SDL_SetRenderDrawColor(renderer, 255, (Uint8) current_color,
Dec 21, 2008
Dec 21, 2008
151
152
(Uint8) current_color, (Uint8) current_alpha);
Feb 15, 2011
Feb 15, 2011
153
154
155
156
rect.w = rand() % (viewport.h / 2);
rect.h = rand() % (viewport.h / 2);
rect.x = (rand() % (viewport.w*2) - viewport.w) - (rect.w / 2);
rect.y = (rand() % (viewport.h*2) - viewport.h) - (rect.h / 2);
Feb 2, 2011
Feb 2, 2011
157
SDL_RenderFillRect(renderer, &rect);
Dec 21, 2008
Dec 21, 2008
158
}
159
160
161
162
163
164
165
166
167
168
}
int
main(int argc, char *argv[])
{
int i, done;
SDL_Event event;
Uint32 then, now, frames;
/* Initialize parameters */
Dec 21, 2008
Dec 21, 2008
169
num_objects = NUM_OBJECTS;
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
/* Initialize test framework */
state = CommonCreateState(argv, SDL_INIT_VIDEO);
if (!state) {
return 1;
}
for (i = 1; i < argc;) {
int consumed;
consumed = CommonArg(state, i);
if (consumed == 0) {
consumed = -1;
if (SDL_strcasecmp(argv[i], "--blend") == 0) {
if (argv[i + 1]) {
if (SDL_strcasecmp(argv[i + 1], "none") == 0) {
blendMode = SDL_BLENDMODE_NONE;
consumed = 2;
} else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) {
blendMode = SDL_BLENDMODE_BLEND;
consumed = 2;
} else if (SDL_strcasecmp(argv[i + 1], "add") == 0) {
blendMode = SDL_BLENDMODE_ADD;
consumed = 2;
Feb 5, 2011
Feb 5, 2011
193
194
195
} else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) {
blendMode = SDL_BLENDMODE_MOD;
consumed = 2;
196
197
198
199
200
201
202
203
204
}
}
} else if (SDL_strcasecmp(argv[i], "--cyclecolor") == 0) {
cycle_color = SDL_TRUE;
consumed = 1;
} else if (SDL_strcasecmp(argv[i], "--cyclealpha") == 0) {
cycle_alpha = SDL_TRUE;
consumed = 1;
} else if (SDL_isdigit(*argv[i])) {
Dec 21, 2008
Dec 21, 2008
205
num_objects = SDL_atoi(argv[i]);
206
207
208
209
210
consumed = 1;
}
}
if (consumed < 0) {
fprintf(stderr,
Feb 5, 2011
Feb 5, 2011
211
"Usage: %s %s [--blend none|blend|add|mod] [--cyclecolor] [--cyclealpha]\n",
212
213
214
215
216
217
218
219
220
221
222
argv[0], CommonUsage(state));
return 1;
}
i += consumed;
}
if (!CommonInit(state)) {
return 2;
}
/* Create the windows and initialize the renderers */
for (i = 0; i < state->num_windows; ++i) {
Feb 2, 2011
Feb 2, 2011
223
224
225
226
SDL_Renderer *renderer = state->renderers[i];
SDL_SetRenderDrawBlendMode(renderer, blendMode);
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
SDL_RenderClear(renderer);
227
228
}
Sep 16, 2010
Sep 16, 2010
229
srand((unsigned int)time(NULL));
230
231
232
233
234
235
236
237
238
239
240
241
/* Main render loop */
frames = 0;
then = SDL_GetTicks();
done = 0;
while (!done) {
/* Check for events */
++frames;
while (SDL_PollEvent(&event)) {
CommonEvent(state, &event, &done);
}
for (i = 0; i < state->num_windows; ++i) {
Feb 2, 2011
Feb 2, 2011
242
243
244
SDL_Renderer *renderer = state->renderers[i];
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
SDL_RenderClear(renderer);
Dec 21, 2008
Dec 21, 2008
245
Feb 15, 2011
Feb 15, 2011
246
247
248
DrawRects(renderer);
DrawLines(renderer);
DrawPoints(renderer);
Dec 21, 2008
Dec 21, 2008
249
Feb 2, 2011
Feb 2, 2011
250
SDL_RenderPresent(renderer);
251
252
253
}
}
Oct 10, 2009
Oct 10, 2009
254
255
CommonQuit(state);
256
257
258
259
260
261
262
263
264
265
/* Print out some timing information */
now = SDL_GetTicks();
if (now > then) {
double fps = ((double) frames * 1000) / (now - then);
printf("%2.2f frames per second\n", fps);
}
return 0;
}
/* vi: set ts=4 sw=4 expandtab: */