diff options
author | Jack Palevich <jackpal@google.com> | 2009-09-24 15:01:03 -0700 |
---|---|---|
committer | Jack Palevich <jackpal@google.com> | 2009-09-24 15:01:03 -0700 |
commit | 1b0eae1b322d3164b83c3f6346999da8c4916fa6 (patch) | |
tree | 82c26d766cfe97249f00bec69a91d51be725df74 | |
parent | f18c39f0218a3795a481c92073e73f40b71df349 (diff) | |
download | quake-1b0eae1b322d3164b83c3f6346999da8c4916fa6.tar.gz |
Stop using illegal-for-OpenGL-ES glColorPointer(3 calls.
Fixes alias models.
Should have helped particles, but they are still missing-in-action.
-rwxr-xr-x | quake/src/WinQuake/gl_rlight.cpp | 62 | ||||
-rwxr-xr-x | quake/src/WinQuake/gl_rmain.cpp | 55 | ||||
-rwxr-xr-x | quake/src/WinQuake/r_part.cpp | 99 |
3 files changed, 111 insertions, 105 deletions
diff --git a/quake/src/WinQuake/gl_rlight.cpp b/quake/src/WinQuake/gl_rlight.cpp index 65da688..8a6fca2 100755 --- a/quake/src/WinQuake/gl_rlight.cpp +++ b/quake/src/WinQuake/gl_rlight.cpp @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
@@ -32,7 +32,7 @@ R_AnimateLight void R_AnimateLight (void)
{
int i,j,k;
-
+
//
// light animations
// 'm' is normal light, 'a' is no light, 'z' is double bright
@@ -48,7 +48,7 @@ void R_AnimateLight (void) k = cl_lightstyle[j].map[k] - 'a';
k = k*22;
d_lightstylevalue[j] = k;
- }
+ }
}
/*
@@ -92,21 +92,23 @@ void R_RenderDlight (dlight_t *light) glEnableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, gVertexBuffer);
- glColorPointer(3, GL_FLOAT, 0, gColorBuffer);
+ glColorPointer(4, GL_FLOAT, 0, gColorBuffer);
{
float* pPos = gVertexBuffer;
float* pColor = gColorBuffer;
- *pColor++ = 0.2;
- *pColor++ = 0.1;
- *pColor++ = 0.0;
+ *pColor++ = 0.2f;
+ *pColor++ = 0.1f;
+ *pColor++ = 0.0f;
+ *pColor++ = 1.0f;
for (i=0 ; i<3 ; i++)
*pPos++ = light->origin[i] - vpn[i]*rad;
for (i=16 ; i>=0 ; i--)
{
- *pColor++ = 0.0;
- *pColor++ = 0.0;
- *pColor++ = 0.0;
+ *pColor++ = 0.0f;
+ *pColor++ = 0.0f;
+ *pColor++ = 0.0f;
+ *pColor++ = 0.0f;
a = i/16.0 * M_PI*2;
for (j=0 ; j<3 ; j++)
*pPos++ = light->origin[j] + vright[j]*cos(a)*rad
@@ -117,7 +119,7 @@ void R_RenderDlight (dlight_t *light) glDisableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glColor3f(0,0,0); // Ensure the color ends up being zero just like the non-OpenGLES code
-
+
#else
glBegin (GL_TRIANGLE_FAN);
glColor3f (0.2,0.1,0.0);
@@ -193,13 +195,13 @@ void R_MarkLights (dlight_t *light, int bit, mnode_t *node) float dist;
msurface_t *surf;
int i;
-
+
if (node->contents < 0)
return;
splitplane = node->plane;
dist = DotProduct (light->origin, splitplane->normal) - splitplane->dist;
-
+
if (dist > light->radius)
{
R_MarkLights (light, bit, node->children[0]);
@@ -210,7 +212,7 @@ void R_MarkLights (dlight_t *light, int bit, mnode_t *node) R_MarkLights (light, bit, node->children[1]);
return;
}
-
+
// mark the polygons
surf = cl.worldmodel->surfaces + node->firstsurface;
for (i=0 ; i<node->numsurfaces ; i++, surf++)
@@ -282,7 +284,7 @@ int RecursiveLightPoint (mnode_t *node, vec3_t start, vec3_t end) if (node->contents < 0)
return -1; // didn't hit anything
-
+
// calculate mid point
// FIXME: optimize for axial
@@ -290,23 +292,23 @@ int RecursiveLightPoint (mnode_t *node, vec3_t start, vec3_t end) front = DotProduct (start, plane->normal) - plane->dist;
back = DotProduct (end, plane->normal) - plane->dist;
side = front < 0;
-
+
if ( (back < 0) == side)
return RecursiveLightPoint (node->children[side], start, end);
-
+
frac = front / (front-back);
mid[0] = start[0] + (end[0] - start[0])*frac;
mid[1] = start[1] + (end[1] - start[1])*frac;
mid[2] = start[2] + (end[2] - start[2])*frac;
-
-// go down front side
+
+// go down front side
r = RecursiveLightPoint (node->children[side], start, mid);
if (r >= 0)
return r; // hit something
-
+
if ( (back < 0) == side )
return -1; // didn't hit anuthing
-
+
// check for impact on this node
VectorCopy (mid, lightspot);
lightplane = plane;
@@ -318,17 +320,17 @@ int RecursiveLightPoint (mnode_t *node, vec3_t start, vec3_t end) continue; // no lightmaps
tex = surf->texinfo;
-
+
s = (int) (DotProduct (mid, tex->vecs[0]) + tex->vecs[0][3]);
t = (int) (DotProduct (mid, tex->vecs[1]) + tex->vecs[1][3]);
if (s < surf->texturemins[0] ||
t < surf->texturemins[1])
continue;
-
+
ds = s - surf->texturemins[0];
dt = t - surf->texturemins[1];
-
+
if ( ds > surf->extents[0] || dt > surf->extents[1] )
continue;
@@ -353,10 +355,10 @@ int RecursiveLightPoint (mnode_t *node, vec3_t start, vec3_t end) lightmap += ((surf->extents[0]>>4)+1) *
((surf->extents[1]>>4)+1);
}
-
+
r >>= 8;
}
-
+
return r;
}
@@ -368,16 +370,16 @@ int R_LightPoint (vec3_t p) {
vec3_t end;
int r;
-
+
if (!cl.worldmodel->lightdata)
return 255;
-
+
end[0] = p[0];
end[1] = p[1];
end[2] = p[2] - 2048;
-
+
r = RecursiveLightPoint (cl.worldmodel->nodes, p, end);
-
+
if (r == -1)
r = 0;
diff --git a/quake/src/WinQuake/gl_rmain.cpp b/quake/src/WinQuake/gl_rmain.cpp index 064deb4..03e7889 100755 --- a/quake/src/WinQuake/gl_rmain.cpp +++ b/quake/src/WinQuake/gl_rmain.cpp @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -35,7 +35,7 @@ mplane_t frustum[4]; int c_brush_polys, c_alias_polys; -qboolean envmap; // true during envmap command capture +qboolean envmap; // true during envmap command capture int currenttexture = -1; // to avoid unnecessary texture sets @@ -237,7 +237,7 @@ void R_DrawSpriteModel (entity_t *e) 1, 0, 1, 1 }; - + VectorMA (e->origin, frame->down, up, point); VectorMA (point, frame->left, right, pPoint); pPoint += 3; @@ -252,12 +252,12 @@ void R_DrawSpriteModel (entity_t *e) VectorMA (e->origin, frame->down, up, point); VectorMA (point, frame->right, right, pPoint); - + glVertexPointer(3, GL_FLOAT, 0, gVertexBuffer); glTexCoordPointer(2, GL_FLOAT, 0, texCoords); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); } - + #else glBegin (GL_QUADS); @@ -280,7 +280,7 @@ void R_DrawSpriteModel (entity_t *e) VectorMA (e->origin, frame->down, up, point); VectorMA (point, frame->right, right, point); glVertex3fv (point); - + glEnd (); #endif @@ -349,7 +349,7 @@ lastposenum = posenum; count = *order++; if (!count) break; // done - + #ifdef USE_OPENGLES { int primType; @@ -357,7 +357,7 @@ lastposenum = posenum; float* pColor; float* pTexCoord; float* pPos; - + if (count < 0) { count = -count; @@ -365,12 +365,12 @@ lastposenum = posenum; } else primType = GL_TRIANGLE_STRIP; - + // texture coordinates come from the draw list glTexCoordPointer(2, GL_FLOAT, 0, gTexCoordBuffer); glVertexPointer(3, GL_FLOAT, 0, gVertexBuffer); - glColorPointer(3, GL_FLOAT, 0, gColorBuffer); - + glColorPointer(4, GL_FLOAT, 0, gColorBuffer); + pColor = gColorBuffer; pPos = gVertexBuffer; pTexCoord = gTexCoordBuffer; @@ -381,18 +381,19 @@ lastposenum = posenum; *pTexCoord++ = ((float *)order)[0]; *pTexCoord++ = ((float *)order)[1]; order += 2; - + // normals and vertexes come from the frame list l = shadedots[verts->lightnormalindex] * shadelight; *pColor++ = l; *pColor++ = l; *pColor++ = l; + *pColor++ = 1.0f; *pPos++ = verts->v[0]; *pPos++ = verts->v[1]; *pPos++ = verts->v[2]; verts++; } while (--c); - + glDrawArrays(primType, 0, count); } @@ -464,14 +465,14 @@ void GL_DrawAliasShadow (aliashdr_t *paliashdr, int posenum) count = *order++; if (!count) break; // done - + #ifdef USE_OPENGLES { int primType; int c; float* pVertex; - + if (count < 0) { count = -count; @@ -479,7 +480,7 @@ void GL_DrawAliasShadow (aliashdr_t *paliashdr, int posenum) } else primType = GL_TRIANGLE_STRIP; - + pVertex = gVertexBuffer; for(c = 0; c < count; c++) { @@ -496,11 +497,11 @@ void GL_DrawAliasShadow (aliashdr_t *paliashdr, int posenum) pVertex[1] -= shadevector[1]*(pVertex[2]+lheight); pVertex[2] = height; // height -= 0.001; - + pVertex += 3; verts++; } - + glVertexPointer(3, GL_FLOAT, 0, gVertexBuffer); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDrawArrays(primType, 0, count); @@ -538,10 +539,10 @@ void GL_DrawAliasShadow (aliashdr_t *paliashdr, int posenum) } while (--count); glEnd (); - + #endif - } + } } @@ -655,7 +656,7 @@ void R_DrawAliasModel (entity_t *e) shadedots = r_avertexnormal_dots[((int)(e->angles[1] * (SHADEDOT_QUANT / 360.0))) & (SHADEDOT_QUANT - 1)]; shadelight = shadelight / 200.0; - + an = e->angles[1]/180*M_PI; shadevector[0] = cos(-an); shadevector[1] = sin(-an); @@ -826,7 +827,7 @@ void R_DrawViewModel (void) ambientlight = j; shadelight = j; -// add dynamic lights +// add dynamic lights for (lnum=0 ; lnum<MAX_DLIGHTS ; lnum++) { dl = &cl_dlights[lnum]; @@ -932,7 +933,7 @@ void R_SetFrustum (void) { int i; - if (r_refdef.fov_x == 90) + if (r_refdef.fov_x == 90) { // front side is visible @@ -1130,7 +1131,7 @@ static void setRotateM(float* rm, int rmOffset, float zx = z * x; float xs = x * s; float ys = y * s; - float zs = z * s; + float zs = z * s; rm[rmOffset + 0] = x*x*nc + c; rm[rmOffset + 4] = xy*nc - zs; rm[rmOffset + 8] = zx*nc + ys; @@ -1215,7 +1216,7 @@ void R_SetupGL (void) glCullFace(GL_FRONT); glMatrixMode(GL_MODELVIEW); - + #ifdef DO_OWN_MATRIX_MATH float mv[16]; @@ -1229,7 +1230,7 @@ void R_SetupGL (void) translateM(mv, 0, -r_refdef.vieworg[0], -r_refdef.vieworg[1], -r_refdef.vieworg[2]); glLoadMatrixf(mv); - + memcpy(r_world_matrix, mv, sizeof(r_world_matrix)); #else @@ -1523,6 +1524,6 @@ void R_RenderView (void) { // glFinish (); time2 = Sys_FloatTime (); - Con_Printf ("%3i ms %4i wpoly %4i epoly\n", (int)((time2-time1)*1000), c_brush_polys, c_alias_polys); + Con_Printf ("%3i ms %4i wpoly %4i epoly\n", (int)((time2-time1)*1000), c_brush_polys, c_alias_polys); } } diff --git a/quake/src/WinQuake/r_part.cpp b/quake/src/WinQuake/r_part.cpp index 3688c81..9ed4223 100755 --- a/quake/src/WinQuake/r_part.cpp +++ b/quake/src/WinQuake/r_part.cpp @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -86,20 +86,20 @@ void R_DarkFieldParticles (entity_t *ent) free_particles = p->next; p->next = active_particles; active_particles = p; - + p->die = cl.time + 0.2 + (rand()&7) * 0.02; p->color = 150 + rand()%6; p->type = pt_slowgrav; - + dir[0] = j*8; dir[1] = i*8; dir[2] = k*8; - + p->org[0] = org[0] + i + (rand()&3); p->org[1] = org[1] + j + (rand()&3); p->org[2] = org[2] + k + (rand()&3); - - VectorNormalize (dir); + + VectorNormalize (dir); vel = 50 + (rand()&63); VectorScale (dir, vel, p->vel); } @@ -130,7 +130,7 @@ void R_EntityParticles (entity_t *ent) float sr, sp, sy, cr, cp, cy; vec3_t forward; float dist; - + dist = 64; count = 50; @@ -152,7 +152,7 @@ avelocities[0][i] = (rand()&255) * 0.01; angle = cl.time * avelocities[i][2]; sr = sin(angle); cr = cos(angle); - + forward[0] = cp*cy; forward[1] = cp*sy; forward[2] = -sp; @@ -167,10 +167,10 @@ avelocities[0][i] = (rand()&255) * 0.01; p->die = cl.time + 0.01; p->color = 0x6f; p->type = pt_explode; - - p->org[0] = ent->origin[0] + r_avertexnormals[i][0]*dist + forward[0]*beamlength; - p->org[1] = ent->origin[1] + r_avertexnormals[i][1]*dist + forward[1]*beamlength; - p->org[2] = ent->origin[2] + r_avertexnormals[i][2]*dist + forward[2]*beamlength; + + p->org[0] = ent->origin[0] + r_avertexnormals[i][0]*dist + forward[0]*beamlength; + p->org[1] = ent->origin[1] + r_avertexnormals[i][1]*dist + forward[1]*beamlength; + p->org[2] = ent->origin[2] + r_avertexnormals[i][2]*dist + forward[2]*beamlength; } } @@ -183,7 +183,7 @@ R_ClearParticles void R_ClearParticles (void) { int i; - + free_particles = &particles[0]; active_particles = NULL; @@ -201,7 +201,7 @@ void R_ReadPointFile_f (void) int c; particle_t *p; char name[MAX_OSPATH]; - + sprintf (name,"maps/%s.pts", sv.name); COM_FOpenFile (name, &f); @@ -210,7 +210,7 @@ void R_ReadPointFile_f (void) Con_Printf ("couldn't open %s\n", name); return; } - + Con_Printf ("Reading %s...\n", name); c = 0; for ( ;; ) @@ -219,7 +219,7 @@ void R_ReadPointFile_f (void) if (r != 3) break; c++; - + if (!free_particles) { Con_Printf ("Not enough free particles\n"); @@ -229,7 +229,7 @@ void R_ReadPointFile_f (void) free_particles = p->next; p->next = active_particles; active_particles = p; - + p->die = 99999; p->color = (-c)&15; p->type = pt_static; @@ -252,7 +252,7 @@ void R_ParseParticleEffect (void) { vec3_t org, dir; int i, count, msgcount, color; - + for (i=0 ; i<3 ; i++) org[i] = MSG_ReadCoord (); for (i=0 ; i<3 ; i++) @@ -264,10 +264,10 @@ if (msgcount == 255) count = 1024; else count = msgcount; - + R_RunParticleEffect (org, dir, color, count); } - + /* =============== R_ParticleExplosion @@ -278,7 +278,7 @@ void R_ParticleExplosion (vec3_t org) { int i, j; particle_t *p; - + for (i=0 ; i<1024 ; i++) { if (!free_particles) @@ -356,7 +356,7 @@ void R_BlobExplosion (vec3_t org) { int i, j; particle_t *p; - + for (i=0 ; i<1024 ; i++) { if (!free_particles) @@ -401,7 +401,7 @@ void R_RunParticleEffect (vec3_t org, vec3_t dir, int color, int count) { int i, j; particle_t *p; - + for (i=0 ; i<count ; i++) { if (!free_particles) @@ -473,20 +473,20 @@ void R_LavaSplash (vec3_t org) free_particles = p->next; p->next = active_particles; active_particles = p; - + p->die = cl.time + 2 + (rand()&31) * 0.02; p->color = 224 + (rand()&7); p->type = pt_slowgrav; - + dir[0] = j*8 + (rand()&7); dir[1] = i*8 + (rand()&7); dir[2] = 256; - + p->org[0] = org[0] + dir[0]; p->org[1] = org[1] + dir[1]; p->org[2] = org[2] + (rand()&63); - - VectorNormalize (dir); + + VectorNormalize (dir); vel = 50 + (rand()&63); VectorScale (dir, vel, p->vel); } @@ -515,20 +515,20 @@ void R_TeleportSplash (vec3_t org) free_particles = p->next; p->next = active_particles; active_particles = p; - + p->die = cl.time + 0.2 + (rand()&7) * 0.02; p->color = 7 + (rand()&7); p->type = pt_slowgrav; - + dir[0] = j*8; dir[1] = i*8; dir[2] = k*8; - + p->org[0] = org[0] + i + (rand()&3); p->org[1] = org[1] + j + (rand()&3); p->org[2] = org[2] + k + (rand()&3); - - VectorNormalize (dir); + + VectorNormalize (dir); vel = 50 + (rand()&63); VectorScale (dir, vel, p->vel); } @@ -563,7 +563,7 @@ void R_RocketTrail (vec3_t start, vec3_t end, int type) free_particles = p->next; p->next = active_particles; active_particles = p; - + VectorCopy (vec3_origin, p->vel); p->die = cl.time + 2; @@ -600,7 +600,7 @@ void R_RocketTrail (vec3_t start, vec3_t end, int type) p->color = 52 + ((tracercount&4)<<1); else p->color = 230 + ((tracercount&4)<<1); - + tracercount++; VectorCopy (start, p->org); @@ -632,7 +632,7 @@ void R_RocketTrail (vec3_t start, vec3_t end, int type) p->org[j] = start[j] + ((rand()&15)-8); break; } - + VectorAdd (start, vec, start); } @@ -670,12 +670,12 @@ void R_DrawParticles (void) glEnable (GL_BLEND); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - + #ifdef USE_OPENGLES glEnableClientState(GL_COLOR_ARRAY); glVertexPointer(3, GL_FLOAT, 0, gVertexBuffer); glTexCoordPointer(2, GL_BYTE, 0, gTexCoordBuffer); - glColorPointer(3, GL_UNSIGNED_BYTE, 0, gColorBuffer); + glColorPointer(4, GL_UNSIGNED_BYTE, 0, gColorBuffer); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); #else glBegin (GL_TRIANGLES); @@ -696,8 +696,8 @@ void R_DrawParticles (void) time1 = frametime * 5; grav = frametime * sv_gravity.value * 0.05; dvel = 4*frametime; - - for ( ;; ) + + for ( ;; ) { kill = active_particles; if (kill && kill->die < cl.time) @@ -743,9 +743,10 @@ void R_DrawParticles (void) pColor = (unsigned char*) gColorBuffer; pUV = (unsigned char*) gTexCoordBuffer; } - + memcpy(pColor, (byte *)&d_8to24table[(int)p->color], 3); - pColor += 3; + pColor[3] = 1.0f; + pColor += 4; *pUV++ = 0; *pUV++ = 0; *pPos++ = p->org[0]; @@ -753,7 +754,8 @@ void R_DrawParticles (void) *pPos++ = p->org[2]; memcpy(pColor, (byte *)&d_8to24table[(int)p->color], 3); - pColor += 3; + pColor[3] = 1.0f; + pColor += 4; *pUV++ = 255; *pUV++ = 0; *pPos++ = p->org[0] + up[0]*scale; @@ -761,15 +763,16 @@ void R_DrawParticles (void) *pPos++ = p->org[2] + up[2]*scale; memcpy(pColor, (byte *)&d_8to24table[(int)p->color], 3); - pColor += 3; + pColor[3] = 1.0f; + pColor += 4; *pUV++ = 0; *pUV++ = 255; *pPos++ = p->org[0] + right[0]*scale; *pPos++ = p->org[1] + right[1]*scale; *pPos++ = p->org[2] + right[2]*scale; - + particleIndex += 3; - + #else glColor3ubv ((byte *)&d_8to24table[(int)p->color]); glTexCoord2f (0,0); @@ -785,7 +788,7 @@ void R_DrawParticles (void) p->org[0] += p->vel[0]*frametime; p->org[1] += p->vel[1]*frametime; p->org[2] += p->vel[2]*frametime; - + switch (p->type) { case pt_static: @@ -848,7 +851,7 @@ void R_DrawParticles (void) #ifdef GLQUAKE #ifdef USE_OPENGLES - glDrawArrays(GL_TRIANGLES, 0, particleIndex); + glDrawArrays(GL_TRIANGLES, 0, particleIndex); glDisableClientState(GL_COLOR_ARRAY); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); #else |