Mercurial > sdl-ios-xcode
annotate XCodeiPhoneOS/Demos/src/fireworks.c @ 2448:e060950cbf30 gsoc2008_iphone
updated #include path, added comments.
author | Holmes Futrell <hfutrell@umail.ucsb.edu> |
---|---|
date | Sat, 16 Aug 2008 00:13:42 +0000 |
parents | ac26bd83db1f |
children |
rev | line source |
---|---|
2382 | 1 /* |
2 * fireworks.c | |
3 * written by Holmes Futrell | |
4 * use however you want | |
5 */ | |
6 | |
7 #include "SDL.h" | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
8 #include "SDL_opengles.h" |
2382 | 9 #include "common.h" |
10 #include <math.h> | |
11 #include <time.h> | |
12 | |
13 #define MILLESECONDS_PER_FRAME 16 /* about 60 frames per second */ | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
14 #define ACCEL 0.0001f /* acceleration due to gravity, units in pixels per millesecond squared */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
15 #define WIND_RESISTANCE 0.00005f /* acceleration per unit velocity due to wind resistance */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
16 #define MAX_PARTICLES 2000 /* maximum number of particles displayed at once */ |
2382 | 17 |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
18 static GLuint particleTextureID; /* OpenGL particle texture id */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
19 static SDL_bool pointSizeExtensionSupported; /* is GL_OES_point_size_array supported ? */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
20 /* |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
21 used to describe what type of particle a given struct particle is. |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
22 emitter - this particle flies up, shooting off trail particles, then finally explodes into dust particles. |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
23 trail - shoots off, following emitter particle |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
24 dust - radiates outwards from emitter explosion |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
25 */ |
2382 | 26 enum particleType { |
27 emitter = 0, | |
28 trail, | |
29 dust | |
30 }; | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
31 /* |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
32 struct particle is used to describe each particle displayed on screen |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
33 */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
34 struct particle { |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
35 GLfloat x; /* x position of particle */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
36 GLfloat y; /* y position of particle */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
37 GLubyte color[4]; /* rgba color of particle */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
38 GLfloat size; /* size of particle in pixels */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
39 GLfloat xvel; /* x velocity of particle in pixels per milesecond */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
40 GLfloat yvel; /* y velocity of particle in pixels per millescond */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
41 int isActive; /* if not active, then particle is overwritten */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
42 enum particleType type; /* see enum particleType */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
43 } particles[MAX_PARTICLES]; /* this array holds all our particles */ |
2382 | 44 |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
45 static int num_active_particles; /* how many members of the particle array are actually being drawn / animated? */ |
2382 | 46 |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
47 /* function declarations */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
48 void spawnTrailFromEmitter(struct particle *emitter); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
49 void spawnEmitterParticle(GLfloat x, GLfloat y); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
50 void explodeEmitter(struct particle *emitter); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
51 void initializeParticles(void); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
52 void initializeTexture(); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
53 int nextPowerOfTwo(int x); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
54 void drawParticles(); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
55 void stepParticles(void); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
56 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
57 /* helper function (used in texture loading) |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
58 returns next power of two greater than or equal to x |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
59 */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
60 int nextPowerOfTwo(int x) { |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
61 int val=1; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
62 while (val < x) { |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
63 val *= 2; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
64 } |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
65 return val; |
2382 | 66 } |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
67 /* |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
68 steps each active particle by timestep MILLESECONDS_PER_FRAME |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
69 */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
70 void stepParticles(void) { |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
71 int i; |
2382 | 72 struct particle *slot = particles; |
73 struct particle *curr = particles; | |
74 for (i=0; i<num_active_particles; i++) { | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
75 /* is the particle actually active, or is it marked for deletion? */ |
2382 | 76 if (curr->isActive) { |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
77 /* is the particle off the screen? */ |
2382 | 78 if (curr->y > SCREEN_HEIGHT) curr->isActive = 0; |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
79 else if (curr->y < 0) curr->isActive = 0; |
2382 | 80 if (curr->x > SCREEN_WIDTH) curr->isActive = 0; |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
81 else if (curr->x < 0) curr->isActive = 0; |
2382 | 82 |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
83 /* step velocity, then step position */ |
2382 | 84 curr->yvel += ACCEL * MILLESECONDS_PER_FRAME; |
85 curr->xvel += 0.0f; | |
86 curr->y += curr->yvel * MILLESECONDS_PER_FRAME; | |
87 curr->x += curr->xvel * MILLESECONDS_PER_FRAME; | |
88 | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
89 /* particle behavior */ |
2382 | 90 if (curr->type == emitter) { |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
91 /* if we're an emitter, spawn a trail */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
92 spawnTrailFromEmitter(curr); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
93 /* if we've reached our peak, explode */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
94 if (curr->yvel > 0.0) { |
2382 | 95 explodeEmitter(curr); |
96 } | |
97 } | |
98 else { | |
99 float speed = sqrt(curr->xvel*curr->xvel + curr->yvel*curr->yvel); | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
100 /* if wind resistance is not powerful enough to stop us completely, |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
101 then apply winde resistance, otherwise just stop us completely */ |
2382 | 102 if (WIND_RESISTANCE * MILLESECONDS_PER_FRAME < speed) { |
103 float normx = curr->xvel / speed; | |
104 float normy = curr->yvel / speed; | |
105 curr->xvel -= normx * WIND_RESISTANCE * MILLESECONDS_PER_FRAME; | |
106 curr->yvel -= normy * WIND_RESISTANCE * MILLESECONDS_PER_FRAME; | |
107 } | |
108 else { | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
109 curr->xvel = curr->yvel = 0; /* stop particle */ |
2382 | 110 } |
111 | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
112 if (curr->color[3] <= MILLESECONDS_PER_FRAME * 0.1275f) { |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
113 /* if this next step will cause us to fade out completely |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
114 then just mark for deletion */ |
2382 | 115 curr->isActive = 0; |
116 } | |
117 else { | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
118 /* otherwise, let's fade a bit more */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
119 curr->color[3] -= MILLESECONDS_PER_FRAME * 0.1275f; |
2382 | 120 } |
121 | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
122 /* if we're a dust particle, shrink our size */ |
2382 | 123 if (curr->type == dust) |
124 curr->size -= MILLESECONDS_PER_FRAME * 0.010f; | |
125 | |
126 } | |
127 | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
128 /* if we're still active, pack ourselves in the array next |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
129 to the last active guy (pack the array tightly) */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
130 if (curr->isActive) |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
131 *(slot++) = *curr; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
132 } /* endif (curr->isActive) */ |
2382 | 133 curr++; |
134 } | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
135 /* the number of active particles is computed as the difference between |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
136 old number of active particles, where slot points, and the |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
137 new size of the array, where particles points */ |
2382 | 138 num_active_particles = slot - particles; |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
139 } |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
140 /* |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
141 This draws all the particles shown on screen |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
142 */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
143 void drawParticles() { |
2382 | 144 |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
145 /* draw the background */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
146 glClear(GL_COLOR_BUFFER_BIT); |
2382 | 147 |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
148 /* set up the position and color pointers */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
149 glVertexPointer(2, GL_FLOAT, sizeof(struct particle), particles); |
2382 | 150 glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(struct particle), particles[0].color); |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
151 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
152 if (pointSizeExtensionSupported) { |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
153 /* pass in our array of point sizes */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
154 glPointSizePointerOES(GL_FLOAT, sizeof(struct particle), &(particles[0].size)); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
155 } |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
156 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
157 /* draw our particles! */ |
2382 | 158 glDrawArrays(GL_POINTS, 0, num_active_particles); |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
159 |
2382 | 160 /* update screen */ |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
161 SDL_RenderPresent(); |
2382 | 162 |
163 } | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
164 /* |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
165 This causes an emitter to explode in a circular bloom of dust particles |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
166 */ |
2382 | 167 void explodeEmitter(struct particle *emitter) { |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
168 /* first off, we're done with this particle, so turn active off */ |
2382 | 169 emitter->isActive = 0; |
170 int i; | |
171 for (i=0; i<200; i++) { | |
172 | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
173 if (num_active_particles >= MAX_PARTICLES) |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
174 return; |
2382 | 175 |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
176 /* come up with a random angle and speed for new particle */ |
2382 | 177 float theta = randomFloat(0, 2.0f * 3.141592); |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
178 float exponent = 3.0f; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
179 float speed = randomFloat(0.00, powf(0.17, exponent)); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
180 speed = powf(speed, 1.0f / exponent); |
2382 | 181 |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
182 /*select the particle at the end of our array */ |
2382 | 183 struct particle *p = &particles[num_active_particles]; |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
184 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
185 /* set the particles properties */ |
2382 | 186 p->xvel = speed * cos(theta); |
187 p->yvel = speed * sin(theta); | |
188 p->x = emitter->x + emitter->xvel; | |
189 p->y = emitter->y + emitter->yvel; | |
190 p->isActive = 1; | |
191 p->type = dust; | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
192 p->size = 15; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
193 /* inherit emitter's color */ |
2382 | 194 p->color[0] = emitter->color[0]; |
195 p->color[1] = emitter->color[1]; | |
196 p->color[2] = emitter->color[2]; | |
197 p->color[3] = 255; | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
198 /* our array has expanded at the end */ |
2382 | 199 num_active_particles++; |
200 } | |
201 | |
202 } | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
203 /* |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
204 This spawns a trail particle from an emitter |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
205 */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
206 void spawnTrailFromEmitter(struct particle *emitter) { |
2382 | 207 |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
208 if (num_active_particles >= MAX_PARTICLES) |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
209 return; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
210 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
211 /* select the particle at the slot at the end of our array */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
212 struct particle *p = &particles[num_active_particles]; |
2382 | 213 |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
214 /* set position and velocity to roughly that of the emitter */ |
2382 | 215 p->x = emitter->x + randomFloat(-3.0, 3.0); |
216 p->y = emitter->y + emitter->size / 2.0f; | |
217 p->xvel = emitter->xvel + randomFloat(-0.005, 0.005); | |
218 p->yvel = emitter->yvel + 0.1; | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
219 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
220 /* set the color to a random-ish orangy type color */ |
2382 | 221 p->color[0] = (0.8f + randomFloat(-0.1, 0.0)) * 255; |
222 p->color[1] = (0.4f + randomFloat(-0.1, 0.1)) * 255; | |
223 p->color[2] = (0.0f + randomFloat(0.0, 0.2)) * 255; | |
224 p->color[3] = (0.7f) * 255; | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
225 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
226 /* set other attributes */ |
2382 | 227 p->size = 10; |
228 p->type = trail; | |
229 p->isActive = 1; | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
230 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
231 /* our array has expanded at the end */ |
2382 | 232 num_active_particles++; |
233 | |
234 } | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
235 /* |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
236 spawns a new emitter particle at the bottom of the screen |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
237 destined for the point (x,y). |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
238 */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
239 void spawnEmitterParticle(GLfloat x, GLfloat y) { |
2382 | 240 |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
241 if (num_active_particles >= MAX_PARTICLES) |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
242 return; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
243 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
244 /* find particle at endpoint of array */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
245 struct particle *p = &particles[num_active_particles]; |
2382 | 246 |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
247 /* set the color randomly */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
248 switch(rand() % 4) { |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
249 case 0: |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
250 p->color[0] = 255; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
251 p->color[1] = 100; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
252 p->color[2] = 100; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
253 break; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
254 case 1: |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
255 p->color[0] = 100; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
256 p->color[1] = 255; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
257 p->color[2] = 100; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
258 break; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
259 case 2: |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
260 p->color[0] = 100; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
261 p->color[1] = 100; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
262 p->color[2] = 255; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
263 break; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
264 case 3: |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
265 p->color[0] = 255; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
266 p->color[1] = 150; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
267 p->color[2] = 50; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
268 break; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
269 } |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
270 p->color[3] = 255; |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
271 /* set position to (x, SCREEN_HEIGHT) */ |
2382 | 272 p->x = x; |
273 p->y = SCREEN_HEIGHT; | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
274 /* set velocity so that terminal point is (x,y) */ |
2382 | 275 p->xvel = 0; |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
276 p->yvel = -sqrt(2*ACCEL*(SCREEN_HEIGHT-y)); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
277 /* set other attributes */ |
2382 | 278 p->size = 10; |
279 p->type = emitter; | |
280 p->isActive = 1; | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
281 /* our array has expanded at the end */ |
2382 | 282 num_active_particles++; |
283 } | |
284 | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
285 /* just sets the endpoint of the particle array to element zero */ |
2382 | 286 void initializeParticles(void) { |
287 num_active_particles = 0; | |
288 } | |
289 | |
290 /* | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
291 loads the particle texture |
2382 | 292 */ |
293 void initializeTexture() { | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
294 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
295 int bpp; /* texture bits per pixel */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
296 Uint32 Rmask, Gmask, Bmask, Amask; /* masks for pixel format passed into OpenGL */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
297 SDL_Surface *bmp_surface; /* the bmp is loaded here */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
298 SDL_Surface *bmp_surface_rgba8888; /* this serves as a destination to convert the BMP |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
299 to format passed into OpenGL */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
300 |
2382 | 301 bmp_surface = SDL_LoadBMP("stroke.bmp"); |
302 if (bmp_surface == NULL) { | |
303 fatalError("could not load stroke.bmp"); | |
304 } | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
305 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
306 /* Grab info about format that will be passed into OpenGL */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
307 SDL_PixelFormatEnumToMasks(SDL_PIXELFORMAT_ABGR8888, &bpp, &Rmask, &Gmask, &Bmask, &Amask); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
308 /* Create surface that will hold pixels passed into OpenGL */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
309 bmp_surface_rgba8888 = SDL_CreateRGBSurface(0, bmp_surface->w, bmp_surface->h, bpp, Rmask, Gmask, Bmask, Amask); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
310 /* Blit to this surface, effectively converting the format */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
311 SDL_BlitSurface(bmp_surface, NULL, bmp_surface_rgba8888, NULL); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
312 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
313 glGenTextures(1, &particleTextureID); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
314 glBindTexture(GL_TEXTURE_2D, particleTextureID); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
315 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,\ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
316 nextPowerOfTwo(bmp_surface->w),\ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
317 nextPowerOfTwo(bmp_surface->h),\ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
318 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
319 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
320 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
321 /* this is where we actually pass in the pixel data */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
322 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bmp_surface->w, bmp_surface->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, bmp_surface_rgba8888->pixels); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
323 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
324 /* free bmp surface and converted bmp surface */ |
2382 | 325 SDL_FreeSurface(bmp_surface); |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
326 SDL_FreeSurface(bmp_surface_rgba8888); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
327 |
2382 | 328 } |
329 | |
330 int main(int argc, char *argv[]) { | |
331 | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
332 SDL_WindowID windowID; /* ID of main window */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
333 Uint32 startFrame; /* time frame began to process */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
334 Uint32 endFrame; /* time frame ended processing */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
335 Uint32 delay; /* time to pause waiting to draw next frame */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
336 int done; /* should we clean up and exit? */ |
2382 | 337 |
338 /* initialize SDL */ | |
339 if (SDL_Init(SDL_INIT_VIDEO) < 0) { | |
340 fatalError("Could not initialize SDL"); | |
341 } | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
342 /* seed the random number generator */ |
2382 | 343 srand(time(NULL)); |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
344 /* |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
345 request some OpenGL parameters |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
346 that may speed drawing |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
347 */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
348 SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
349 SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
350 SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
351 SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
352 SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
353 SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 0); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
354 SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
355 |
2382 | 356 /* create main window and renderer */ |
357 windowID = SDL_CreateWindow(NULL, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT,\ | |
358 SDL_WINDOW_OPENGL|SDL_WINDOW_SHOWN|SDL_WINDOW_BORDERLESS); | |
359 SDL_CreateRenderer(windowID, 0, 0); | |
360 | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
361 /* load the particle texture */ |
2382 | 362 initializeTexture(); |
363 | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
364 /* check if GL_POINT_SIZE_ARRAY_OES is supported |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
365 this is used to give each particle its own size |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
366 */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
367 pointSizeExtensionSupported = SDL_GL_ExtensionSupported("GL_OES_point_size_array"); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
368 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
369 /* set up some OpenGL state */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
370 glEnable(GL_TEXTURE_2D); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
371 glEnable(GL_BLEND); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
372 glBlendFunc(GL_SRC_ALPHA, GL_ONE); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
373 glEnableClientState(GL_VERTEX_ARRAY); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
374 glEnableClientState(GL_COLOR_ARRAY); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
375 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
376 glEnable(GL_POINT_SPRITE_OES); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
377 glTexEnvi(GL_POINT_SPRITE_OES, GL_COORD_REPLACE_OES, 1); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
378 |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
379 if (pointSizeExtensionSupported) { |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
380 /* we use this to set the sizes of all the particles */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
381 glEnableClientState(GL_POINT_SIZE_ARRAY_OES); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
382 } |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
383 else { |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
384 /* if extension not available then all particles have size 10 */ |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
385 glPointSize(10); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
386 } |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
387 |
2382 | 388 done = 0; |
389 /* enter main loop */ | |
390 while(!done) { | |
391 startFrame = SDL_GetTicks(); | |
392 SDL_Event event; | |
393 while (SDL_PollEvent(&event)) { | |
394 if (event.type == SDL_QUIT) { | |
395 done = 1; | |
396 } | |
397 if (event.type == SDL_MOUSEBUTTONDOWN) { | |
398 int which = event.button.which; | |
399 int x, y; | |
400 SDL_SelectMouse(which); | |
401 SDL_GetMouseState(&x, &y); | |
402 spawnEmitterParticle(x, y); | |
403 } | |
404 } | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
405 stepParticles(); |
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
406 drawParticles(); |
2382 | 407 endFrame = SDL_GetTicks(); |
408 | |
409 /* figure out how much time we have left, and then sleep */ | |
410 delay = MILLESECONDS_PER_FRAME - (endFrame - startFrame); | |
411 if (delay > MILLESECONDS_PER_FRAME) { | |
412 delay = MILLESECONDS_PER_FRAME; | |
413 } | |
414 if (delay > 0) { | |
415 SDL_Delay(delay); | |
416 } | |
417 } | |
418 | |
419 /* delete textures */ | |
2417
ac26bd83db1f
Cleaned up code, added comments, added randomized colors, added check for extension GL_POINT_SIZE_ARRAY_OES, which not all OpenGL ES systems have.
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
2382
diff
changeset
|
420 glDeleteTextures(1, &particleTextureID); |
2382 | 421 /* shutdown SDL */ |
422 SDL_Quit(); | |
423 | |
424 return 0; | |
425 } |