aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Palevich <jackpal@google.com>2009-09-24 15:01:03 -0700
committerJack Palevich <jackpal@google.com>2009-09-24 15:01:03 -0700
commit1b0eae1b322d3164b83c3f6346999da8c4916fa6 (patch)
tree82c26d766cfe97249f00bec69a91d51be725df74
parentf18c39f0218a3795a481c92073e73f40b71df349 (diff)
downloadquake-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-xquake/src/WinQuake/gl_rlight.cpp62
-rwxr-xr-xquake/src/WinQuake/gl_rmain.cpp55
-rwxr-xr-xquake/src/WinQuake/r_part.cpp99
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