This is an automated email from the git hooks/post-receive script. smcv pushed a commit to tag 1.51 in repository iortcw.
commit e4f3869ae108c9ef052831a00c748683518e09bb Author: MAN-AT-ARMS <m4n4t4...@gmail.com> Date: Tue Nov 29 08:22:31 2016 -0500 All: Rend2: Don't interleave texCoords and lightCoords in tess --- MP/code/rend2/tr_animation.c | 8 ++--- MP/code/rend2/tr_backend.c | 48 +++++++++++++++--------------- MP/code/rend2/tr_flares.c | 16 +++++----- MP/code/rend2/tr_local.h | 3 +- MP/code/rend2/tr_model_iqm.c | 8 ++--- MP/code/rend2/tr_shade_calc.c | 2 +- MP/code/rend2/tr_sky.c | 12 ++++---- MP/code/rend2/tr_surface.c | 68 +++++++++++++++++++++---------------------- MP/code/rend2/tr_vbo.c | 33 ++++++++------------- SP/code/rend2/tr_animation.c | 8 ++--- SP/code/rend2/tr_backend.c | 32 ++++++++++---------- SP/code/rend2/tr_flares.c | 16 +++++----- SP/code/rend2/tr_local.h | 3 +- SP/code/rend2/tr_model_iqm.c | 8 ++--- SP/code/rend2/tr_shade_calc.c | 2 +- SP/code/rend2/tr_sky.c | 12 ++++---- SP/code/rend2/tr_surface.c | 68 +++++++++++++++++++++---------------------- SP/code/rend2/tr_vbo.c | 33 ++++++++------------- 18 files changed, 180 insertions(+), 200 deletions(-) diff --git a/MP/code/rend2/tr_animation.c b/MP/code/rend2/tr_animation.c index 2f2e649..80b7679 100644 --- a/MP/code/rend2/tr_animation.c +++ b/MP/code/rend2/tr_animation.c @@ -1183,8 +1183,8 @@ void RB_SurfaceAnim( mdsSurface_t *surface ) { R_VaoPackNormal(tempNormal, newNormal); - tess.texCoords[baseVertex + j][0][0] = v->texCoords[0]; - tess.texCoords[baseVertex + j][0][1] = v->texCoords[1]; + tess.texCoords[baseVertex + j][0] = v->texCoords[0]; + tess.texCoords[baseVertex + j][1] = v->texCoords[1]; v = (mdsVertex_t *)&v->weights[v->numWeights]; } @@ -1752,8 +1752,8 @@ void RB_MDRSurfaceAnim( mdrSurface_t *surface ) R_VaoPackNormal(tess.normal[baseVertex + j], tempNormal); - tess.texCoords[baseVertex + j][0][0] = v->texCoords[0]; - tess.texCoords[baseVertex + j][0][1] = v->texCoords[1]; + tess.texCoords[baseVertex + j][0] = v->texCoords[0]; + tess.texCoords[baseVertex + j][1] = v->texCoords[1]; v = (mdrVertex_t *)&v->weights[v->numWeights]; } diff --git a/MP/code/rend2/tr_backend.c b/MP/code/rend2/tr_backend.c index 2e196ee..b908761 100644 --- a/MP/code/rend2/tr_backend.c +++ b/MP/code/rend2/tr_backend.c @@ -970,29 +970,29 @@ const void *RB_StretchPic( const void *data ) { tess.xyz[ numVerts ][1] = cmd->y; tess.xyz[ numVerts ][2] = 0; - tess.texCoords[ numVerts ][0][0] = cmd->s1; - tess.texCoords[ numVerts ][0][1] = cmd->t1; + tess.texCoords[ numVerts ][0] = cmd->s1; + tess.texCoords[ numVerts ][1] = cmd->t1; tess.xyz[ numVerts + 1 ][0] = cmd->x + cmd->w; tess.xyz[ numVerts + 1 ][1] = cmd->y; tess.xyz[ numVerts + 1 ][2] = 0; - tess.texCoords[ numVerts + 1 ][0][0] = cmd->s2; - tess.texCoords[ numVerts + 1 ][0][1] = cmd->t1; + tess.texCoords[ numVerts + 1 ][0] = cmd->s2; + tess.texCoords[ numVerts + 1 ][1] = cmd->t1; tess.xyz[ numVerts + 2 ][0] = cmd->x + cmd->w; tess.xyz[ numVerts + 2 ][1] = cmd->y + cmd->h; tess.xyz[ numVerts + 2 ][2] = 0; - tess.texCoords[ numVerts + 2 ][0][0] = cmd->s2; - tess.texCoords[ numVerts + 2 ][0][1] = cmd->t2; + tess.texCoords[ numVerts + 2 ][0] = cmd->s2; + tess.texCoords[ numVerts + 2 ][1] = cmd->t2; tess.xyz[ numVerts + 3 ][0] = cmd->x; tess.xyz[ numVerts + 3 ][1] = cmd->y + cmd->h; tess.xyz[ numVerts + 3 ][2] = 0; - tess.texCoords[ numVerts + 3 ][0][0] = cmd->s1; - tess.texCoords[ numVerts + 3 ][0][1] = cmd->t2; + tess.texCoords[ numVerts + 3 ][0] = cmd->s1; + tess.texCoords[ numVerts + 3 ][1] = cmd->t2; return (const void *)( cmd + 1 ); } @@ -1066,32 +1066,32 @@ const void *RB_RotatedPic( const void *data ) { tess.xyz[ numVerts ][1] = cmd->y + ( sin( angle ) * cmd->h ); tess.xyz[ numVerts ][2] = 0; - tess.texCoords[ numVerts ][0][0] = cmd->s1; - tess.texCoords[ numVerts ][0][1] = cmd->t1; + tess.texCoords[ numVerts ][0] = cmd->s1; + tess.texCoords[ numVerts ][1] = cmd->t1; angle = cmd->angle * pi2 + 0.25 * pi2; tess.xyz[ numVerts + 1 ][0] = cmd->x + ( cos( angle ) * cmd->w ); tess.xyz[ numVerts + 1 ][1] = cmd->y + ( sin( angle ) * cmd->h ); tess.xyz[ numVerts + 1 ][2] = 0; - tess.texCoords[ numVerts + 1 ][0][0] = cmd->s2; - tess.texCoords[ numVerts + 1 ][0][1] = cmd->t1; + tess.texCoords[ numVerts + 1 ][0] = cmd->s2; + tess.texCoords[ numVerts + 1 ][1] = cmd->t1; angle = cmd->angle * pi2 + 0.50 * pi2; tess.xyz[ numVerts + 2 ][0] = cmd->x + ( cos( angle ) * cmd->w ); tess.xyz[ numVerts + 2 ][1] = cmd->y + ( sin( angle ) * cmd->h ); tess.xyz[ numVerts + 2 ][2] = 0; - tess.texCoords[ numVerts + 2 ][0][0] = cmd->s2; - tess.texCoords[ numVerts + 2 ][0][1] = cmd->t2; + tess.texCoords[ numVerts + 2 ][0] = cmd->s2; + tess.texCoords[ numVerts + 2 ][1] = cmd->t2; angle = cmd->angle * pi2 + 0.75 * pi2; tess.xyz[ numVerts + 3 ][0] = cmd->x + ( cos( angle ) * cmd->w ); tess.xyz[ numVerts + 3 ][1] = cmd->y + ( sin( angle ) * cmd->h ); tess.xyz[ numVerts + 3 ][2] = 0; - tess.texCoords[ numVerts + 3 ][0][0] = cmd->s1; - tess.texCoords[ numVerts + 3 ][0][1] = cmd->t2; + tess.texCoords[ numVerts + 3 ][0] = cmd->s1; + tess.texCoords[ numVerts + 3 ][1] = cmd->t2; return (const void *)( cmd + 1 ); } @@ -1165,29 +1165,29 @@ const void *RB_StretchPicGradient( const void *data ) { tess.xyz[ numVerts ][1] = cmd->y; tess.xyz[ numVerts ][2] = 0; - tess.texCoords[ numVerts ][0][0] = cmd->s1; - tess.texCoords[ numVerts ][0][1] = cmd->t1; + tess.texCoords[ numVerts ][0] = cmd->s1; + tess.texCoords[ numVerts ][1] = cmd->t1; tess.xyz[ numVerts + 1 ][0] = cmd->x + cmd->w; tess.xyz[ numVerts + 1 ][1] = cmd->y; tess.xyz[ numVerts + 1 ][2] = 0; - tess.texCoords[ numVerts + 1 ][0][0] = cmd->s2; - tess.texCoords[ numVerts + 1 ][0][1] = cmd->t1; + tess.texCoords[ numVerts + 1 ][0] = cmd->s2; + tess.texCoords[ numVerts + 1 ][1] = cmd->t1; tess.xyz[ numVerts + 2 ][0] = cmd->x + cmd->w; tess.xyz[ numVerts + 2 ][1] = cmd->y + cmd->h; tess.xyz[ numVerts + 2 ][2] = 0; - tess.texCoords[ numVerts + 2 ][0][0] = cmd->s2; - tess.texCoords[ numVerts + 2 ][0][1] = cmd->t2; + tess.texCoords[ numVerts + 2 ][0] = cmd->s2; + tess.texCoords[ numVerts + 2 ][1] = cmd->t2; tess.xyz[ numVerts + 3 ][0] = cmd->x; tess.xyz[ numVerts + 3 ][1] = cmd->y + cmd->h; tess.xyz[ numVerts + 3 ][2] = 0; - tess.texCoords[ numVerts + 3 ][0][0] = cmd->s1; - tess.texCoords[ numVerts + 3 ][0][1] = cmd->t2; + tess.texCoords[ numVerts + 3 ][0] = cmd->s1; + tess.texCoords[ numVerts + 3 ][1] = cmd->t2; return (const void *)( cmd + 1 ); } diff --git a/MP/code/rend2/tr_flares.c b/MP/code/rend2/tr_flares.c index e7827c0..08207df 100644 --- a/MP/code/rend2/tr_flares.c +++ b/MP/code/rend2/tr_flares.c @@ -474,8 +474,8 @@ void RB_RenderFlare( flare_t *f ) { // FIXME: use quadstamp? tess.xyz[tess.numVertexes][0] = f->windowX - size; tess.xyz[tess.numVertexes][1] = f->windowY - size; - tess.texCoords[tess.numVertexes][0][0] = 0; - tess.texCoords[tess.numVertexes][0][1] = 0; + tess.texCoords[tess.numVertexes][0] = 0; + tess.texCoords[tess.numVertexes][1] = 0; tess.color[tess.numVertexes][0] = iColor[0]; tess.color[tess.numVertexes][1] = iColor[1]; tess.color[tess.numVertexes][2] = iColor[2]; @@ -485,8 +485,8 @@ void RB_RenderFlare( flare_t *f ) { tess.xyz[tess.numVertexes][0] = f->windowX - size; tess.xyz[tess.numVertexes][1] = f->windowY + size; - tess.texCoords[tess.numVertexes][0][0] = 0; - tess.texCoords[tess.numVertexes][0][1] = 1; + tess.texCoords[tess.numVertexes][0] = 0; + tess.texCoords[tess.numVertexes][1] = 1; tess.color[tess.numVertexes][0] = iColor[0]; tess.color[tess.numVertexes][1] = iColor[1]; tess.color[tess.numVertexes][2] = iColor[2]; @@ -496,8 +496,8 @@ void RB_RenderFlare( flare_t *f ) { tess.xyz[tess.numVertexes][0] = f->windowX + size; tess.xyz[tess.numVertexes][1] = f->windowY + size; - tess.texCoords[tess.numVertexes][0][0] = 1; - tess.texCoords[tess.numVertexes][0][1] = 1; + tess.texCoords[tess.numVertexes][0] = 1; + tess.texCoords[tess.numVertexes][1] = 1; tess.color[tess.numVertexes][0] = iColor[0]; tess.color[tess.numVertexes][1] = iColor[1]; tess.color[tess.numVertexes][2] = iColor[2]; @@ -507,8 +507,8 @@ void RB_RenderFlare( flare_t *f ) { tess.xyz[tess.numVertexes][0] = f->windowX + size; tess.xyz[tess.numVertexes][1] = f->windowY - size; - tess.texCoords[tess.numVertexes][0][0] = 1; - tess.texCoords[tess.numVertexes][0][1] = 0; + tess.texCoords[tess.numVertexes][0] = 1; + tess.texCoords[tess.numVertexes][1] = 0; tess.color[tess.numVertexes][0] = iColor[0]; tess.color[tess.numVertexes][1] = iColor[1]; tess.color[tess.numVertexes][2] = iColor[2]; diff --git a/MP/code/rend2/tr_local.h b/MP/code/rend2/tr_local.h index a7cbb40..fc066ae 100644 --- a/MP/code/rend2/tr_local.h +++ b/MP/code/rend2/tr_local.h @@ -2220,7 +2220,8 @@ typedef struct shaderCommands_s vec4_t xyz[SHADER_MAX_VERTEXES] QALIGN(16); int16_t normal[SHADER_MAX_VERTEXES][4] QALIGN(16); int16_t tangent[SHADER_MAX_VERTEXES][4] QALIGN(16); - vec2_t texCoords[SHADER_MAX_VERTEXES][2] QALIGN(16); + vec2_t texCoords[SHADER_MAX_VERTEXES] QALIGN(16); + vec2_t lightCoords[SHADER_MAX_VERTEXES] QALIGN(16); uint16_t color[SHADER_MAX_VERTEXES][4] QALIGN(16); int16_t lightdir[SHADER_MAX_VERTEXES][4] QALIGN(16); //int vertexDlightBits[SHADER_MAX_VERTEXES] QALIGN(16); diff --git a/MP/code/rend2/tr_model_iqm.c b/MP/code/rend2/tr_model_iqm.c index 5d5de9a..6c06b4b 100644 --- a/MP/code/rend2/tr_model_iqm.c +++ b/MP/code/rend2/tr_model_iqm.c @@ -1026,7 +1026,7 @@ void RB_IQMSurfaceAnim( surfaceType_t *surface ) { vec4_t *outXYZ; int16_t *outNormal; int16_t *outTangent; - vec2_t (*outTexCoord)[2]; + vec2_t *outTexCoord; uint16_t *outColor; int frame = data->num_frames ? backEnd.currentEntity->e.frame % data->num_frames : 0; @@ -1096,10 +1096,8 @@ void RB_IQMSurfaceAnim( surfaceType_t *surface ) { nrmMat[ 7] = vtxMat[ 2]*vtxMat[ 4] - vtxMat[ 0]*vtxMat[ 6]; nrmMat[ 8] = vtxMat[ 0]*vtxMat[ 5] - vtxMat[ 1]*vtxMat[ 4]; - (*outTexCoord)[0][0] = data->texcoords[2*vtx + 0]; - (*outTexCoord)[0][1] = data->texcoords[2*vtx + 1]; - (*outTexCoord)[1][0] = (*outTexCoord)[0][0]; - (*outTexCoord)[1][1] = (*outTexCoord)[0][1]; + (*outTexCoord)[0] = data->texcoords[2*vtx + 0]; + (*outTexCoord)[1] = data->texcoords[2*vtx + 1]; (*outXYZ)[0] = vtxMat[ 0] * data->positions[3*vtx+0] + diff --git a/MP/code/rend2/tr_shade_calc.c b/MP/code/rend2/tr_shade_calc.c index 452476d..cc1ed17 100644 --- a/MP/code/rend2/tr_shade_calc.c +++ b/MP/code/rend2/tr_shade_calc.c @@ -263,7 +263,7 @@ void RB_CalcBulgeVertexes( deformStage_t *ds ) { now = backEnd.refdef.time * ds->bulgeSpeed * 0.001f; - for ( i = 0; i < tess.numVertexes; i++, xyz += 4, st += 4, normal += 4 ) { + for ( i = 0; i < tess.numVertexes; i++, xyz += 4, st += 2, normal += 4 ) { int off; float scale; vec3_t fNormal; diff --git a/MP/code/rend2/tr_sky.c b/MP/code/rend2/tr_sky.c index 53086bc..10dca6c 100644 --- a/MP/code/rend2/tr_sky.c +++ b/MP/code/rend2/tr_sky.c @@ -400,8 +400,8 @@ static void DrawSkySide( struct image_s *image, const int mins[2], const int max tess.xyz[tess.numVertexes][2] = s_skyPoints[t][s][2]; tess.xyz[tess.numVertexes][3] = 1.0; - tess.texCoords[tess.numVertexes][0][0] = s_skyTexCoords[t][s][0]; - tess.texCoords[tess.numVertexes][0][1] = s_skyTexCoords[t][s][1]; + tess.texCoords[tess.numVertexes][0] = s_skyTexCoords[t][s][0]; + tess.texCoords[tess.numVertexes][1] = s_skyTexCoords[t][s][1]; tess.numVertexes++; @@ -517,8 +517,8 @@ static void DrawSkySideInner( struct image_s *image, const int mins[2], const in tess.xyz[tess.numVertexes][2] = s_skyPoints[t][s][2]; tess.xyz[tess.numVertexes][3] = 1.0; - tess.texCoords[tess.numVertexes][0][0] = s_skyTexCoords[t][s][0]; - tess.texCoords[tess.numVertexes][0][1] = s_skyTexCoords[t][s][1]; + tess.texCoords[tess.numVertexes][0] = s_skyTexCoords[t][s][0]; + tess.texCoords[tess.numVertexes][1] = s_skyTexCoords[t][s][1]; tess.numVertexes++; @@ -764,8 +764,8 @@ static void FillCloudySkySide( const int mins[2], const int maxs[2], qboolean ad for ( s = mins[0] + HALF_SKY_SUBDIVISIONS; s <= maxs[0] + HALF_SKY_SUBDIVISIONS; s++ ) { VectorAdd( s_skyPoints[t][s], backEnd.viewParms.or.origin, tess.xyz[tess.numVertexes] ); - tess.texCoords[tess.numVertexes][0][0] = s_skyTexCoords[t][s][0]; - tess.texCoords[tess.numVertexes][0][1] = s_skyTexCoords[t][s][1]; + tess.texCoords[tess.numVertexes][0] = s_skyTexCoords[t][s][0]; + tess.texCoords[tess.numVertexes][1] = s_skyTexCoords[t][s][1]; tess.numVertexes++; diff --git a/MP/code/rend2/tr_surface.c b/MP/code/rend2/tr_surface.c index 278b370..b652745 100644 --- a/MP/code/rend2/tr_surface.c +++ b/MP/code/rend2/tr_surface.c @@ -141,17 +141,17 @@ void RB_AddQuadStampExt( vec3_t origin, vec3_t left, vec3_t up, float color[4], VectorCopy4(iNormal, tess.normal[ndx + 3]); // standard square texture coordinates - VectorSet2(tess.texCoords[ndx ][0], s1, t1); - VectorSet2(tess.texCoords[ndx ][1], s1, t1); + VectorSet2(tess.texCoords[ndx], s1, t1); + VectorSet2(tess.lightCoords[ndx], s1, t1); - VectorSet2(tess.texCoords[ndx+1][0], s2, t1); - VectorSet2(tess.texCoords[ndx+1][1], s2, t1); + VectorSet2(tess.texCoords[ndx+1], s2, t1); + VectorSet2(tess.lightCoords[ndx+1], s2, t1); - VectorSet2(tess.texCoords[ndx+2][0], s2, t2); - VectorSet2(tess.texCoords[ndx+2][1], s2, t2); + VectorSet2(tess.texCoords[ndx+2], s2, t2); + VectorSet2(tess.lightCoords[ndx+2], s2, t2); - VectorSet2(tess.texCoords[ndx+3][0], s1, t2); - VectorSet2(tess.texCoords[ndx+3][1], s1, t2); + VectorSet2(tess.texCoords[ndx+3], s1, t2); + VectorSet2(tess.lightCoords[ndx+3], s1, t2); // constant color all the way around // should this be identity and let the shader specify from entity? @@ -192,19 +192,19 @@ void RB_InstantQuad2(vec4_t quadVerts[4], vec2_t texCoords[4]) tess.firstIndex = 0; VectorCopy4(quadVerts[0], tess.xyz[tess.numVertexes]); - VectorCopy2(texCoords[0], tess.texCoords[tess.numVertexes][0]); + VectorCopy2(texCoords[0], tess.texCoords[tess.numVertexes]); tess.numVertexes++; VectorCopy4(quadVerts[1], tess.xyz[tess.numVertexes]); - VectorCopy2(texCoords[1], tess.texCoords[tess.numVertexes][0]); + VectorCopy2(texCoords[1], tess.texCoords[tess.numVertexes]); tess.numVertexes++; VectorCopy4(quadVerts[2], tess.xyz[tess.numVertexes]); - VectorCopy2(texCoords[2], tess.texCoords[tess.numVertexes][0]); + VectorCopy2(texCoords[2], tess.texCoords[tess.numVertexes]); tess.numVertexes++; VectorCopy4(quadVerts[3], tess.xyz[tess.numVertexes]); - VectorCopy2(texCoords[3], tess.texCoords[tess.numVertexes][0]); + VectorCopy2(texCoords[3], tess.texCoords[tess.numVertexes]); tess.numVertexes++; tess.indexes[tess.numIndexes++] = 0; @@ -326,8 +326,8 @@ static void RB_SurfacePolychain( srfPoly_t *p ) { numv = tess.numVertexes; for ( i = 0; i < p->numVerts; i++ ) { VectorCopy( p->verts[i].xyz, tess.xyz[numv] ); - tess.texCoords[numv][0][0] = p->verts[i].st[0]; - tess.texCoords[numv][0][1] = p->verts[i].st[1]; + tess.texCoords[numv][0] = p->verts[i].st[0]; + tess.texCoords[numv][1] = p->verts[i].st[1]; tess.color[numv][0] = (int)p->verts[i].modulate[0] * 257; tess.color[numv][1] = (int)p->verts[i].modulate[1] * 257; tess.color[numv][2] = (int)p->verts[i].modulate[2] * 257; @@ -397,16 +397,16 @@ static void RB_SurfaceVertsAndIndexes( int numVerts, srfVert_t *verts, int numIn if ( tess.shader->vertexAttribs & ATTR_TEXCOORD ) { dv = verts; - texCoords = tess.texCoords[ tess.numVertexes ][0]; - for ( i = 0 ; i < numVerts ; i++, dv++, texCoords+=4 ) + texCoords = tess.texCoords[tess.numVertexes]; + for ( i = 0 ; i < numVerts ; i++, dv++, texCoords+=2 ) VectorCopy2(dv->st, texCoords); } if ( tess.shader->vertexAttribs & ATTR_LIGHTCOORD ) { dv = verts; - lightCoords = tess.texCoords[ tess.numVertexes ][1]; - for ( i = 0 ; i < numVerts ; i++, dv++, lightCoords+=4 ) + lightCoords = tess.lightCoords[ tess.numVertexes ]; + for ( i = 0 ; i < numVerts ; i++, dv++, lightCoords+=2 ) VectorCopy2(dv->lightmap, lightCoords); } @@ -668,16 +668,16 @@ static void DoRailCore( const vec3_t start, const vec3_t end, const vec3_t up, f // FIXME: use quad stamp? VectorMA( start, spanWidth, up, tess.xyz[tess.numVertexes] ); - tess.texCoords[tess.numVertexes][0][0] = 0; - tess.texCoords[tess.numVertexes][0][1] = 0; + tess.texCoords[tess.numVertexes][0] = 0; + tess.texCoords[tess.numVertexes][1] = 0; tess.color[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] * 0.25f * 257.0f; tess.color[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] * 0.25f * 257.0f; tess.color[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] * 0.25f * 257.0f; tess.numVertexes++; VectorMA( start, spanWidth2, up, tess.xyz[tess.numVertexes] ); - tess.texCoords[tess.numVertexes][0][0] = 0; - tess.texCoords[tess.numVertexes][0][1] = 1; + tess.texCoords[tess.numVertexes][0] = 0; + tess.texCoords[tess.numVertexes][1] = 1; tess.color[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] * 257; tess.color[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] * 257; tess.color[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] * 257; @@ -685,16 +685,16 @@ static void DoRailCore( const vec3_t start, const vec3_t end, const vec3_t up, f VectorMA( end, spanWidth, up, tess.xyz[tess.numVertexes] ); - tess.texCoords[tess.numVertexes][0][0] = t; - tess.texCoords[tess.numVertexes][0][1] = 0; + tess.texCoords[tess.numVertexes][0] = t; + tess.texCoords[tess.numVertexes][1] = 0; tess.color[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] * 257; tess.color[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] * 257; tess.color[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] * 257; tess.numVertexes++; VectorMA( end, spanWidth2, up, tess.xyz[tess.numVertexes] ); - tess.texCoords[tess.numVertexes][0][0] = t; - tess.texCoords[tess.numVertexes][0][1] = 1; + tess.texCoords[tess.numVertexes][0] = t; + tess.texCoords[tess.numVertexes][1] = 1; tess.color[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] * 257; tess.color[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] * 257; tess.color[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] * 257; @@ -752,8 +752,8 @@ static void DoRailDiscs( int numSegs, const vec3_t start, const vec3_t dir, cons for ( j = 0; j < 4; j++ ) { VectorCopy( pos[j], tess.xyz[tess.numVertexes] ); - tess.texCoords[tess.numVertexes][0][0] = ( j < 2 ); - tess.texCoords[tess.numVertexes][0][1] = ( j && j != 3 ); + tess.texCoords[tess.numVertexes][0] = ( j < 2 ); + tess.texCoords[tess.numVertexes][1] = ( j && j != 3 ); tess.color[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] * 257; tess.color[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] * 257; tess.color[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] * 257; @@ -977,8 +977,8 @@ static void RB_SurfaceMesh(mdvSurface_t *surface) { numVerts = surface->numVerts; for ( j = 0; j < numVerts; j++ ) { - tess.texCoords[Doug + j][0][0] = texCoords[j].st[0]; - tess.texCoords[Doug + j][0][1] = texCoords[j].st[1]; + tess.texCoords[Doug + j][0] = texCoords[j].st[0]; + tess.texCoords[Doug + j][1] = texCoords[j].st[1]; // FIXME: fill in lightmapST for completeness? } @@ -1135,8 +1135,8 @@ static void RB_SurfaceGrid( srfBspSurface_t *srf ) { xyz = tess.xyz[numVertexes]; normal = tess.normal[numVertexes]; tangent = tess.tangent[numVertexes]; - texCoords = tess.texCoords[numVertexes][0]; - lightCoords = tess.texCoords[numVertexes][1]; + texCoords = tess.texCoords[numVertexes]; + lightCoords = tess.lightCoords[numVertexes]; color = tess.color[numVertexes]; lightdir = tess.lightdir[numVertexes]; //vDlightBits = &tess.vertexDlightBits[numVertexes]; @@ -1167,13 +1167,13 @@ static void RB_SurfaceGrid( srfBspSurface_t *srf ) { if ( tess.shader->vertexAttribs & ATTR_TEXCOORD ) { VectorCopy2(dv->st, texCoords); - texCoords += 4; + texCoords += 2; } if ( tess.shader->vertexAttribs & ATTR_LIGHTCOORD ) { VectorCopy2(dv->lightmap, lightCoords); - lightCoords += 4; + lightCoords += 2; } if ( tess.shader->vertexAttribs & ATTR_COLOR ) diff --git a/MP/code/rend2/tr_vbo.c b/MP/code/rend2/tr_vbo.c index 08dbed6..7b68f43 100644 --- a/MP/code/rend2/tr_vbo.c +++ b/MP/code/rend2/tr_vbo.c @@ -428,7 +428,8 @@ void R_InitVaos(void) vertexesSize += sizeof(tess.normal[0]); vertexesSize += sizeof(tess.tangent[0]); vertexesSize += sizeof(tess.color[0]); - vertexesSize += sizeof(tess.texCoords[0][0]) * 2; + vertexesSize += sizeof(tess.texCoords[0]); + vertexesSize += sizeof(tess.lightCoords[0]); vertexesSize += sizeof(tess.lightdir[0]); vertexesSize *= SHADER_MAX_VERTEXES; @@ -470,29 +471,27 @@ void R_InitVaos(void) tess.vao->attribs[ATTR_INDEX_COLOR ].normalized = GL_TRUE; tess.vao->attribs[ATTR_INDEX_LIGHTDIRECTION].normalized = GL_TRUE; - tess.vao->attribs[ATTR_INDEX_POSITION ].offset = offset; offset += sizeof(tess.xyz[0]) * SHADER_MAX_VERTEXES; - tess.vao->attribs[ATTR_INDEX_NORMAL ].offset = offset; offset += sizeof(tess.normal[0]) * SHADER_MAX_VERTEXES; - tess.vao->attribs[ATTR_INDEX_TANGENT ].offset = offset; offset += sizeof(tess.tangent[0]) * SHADER_MAX_VERTEXES; - // these next two are actually interleaved - tess.vao->attribs[ATTR_INDEX_TEXCOORD ].offset = offset; - tess.vao->attribs[ATTR_INDEX_LIGHTCOORD ].offset = offset + sizeof(tess.texCoords[0][0]); - offset += sizeof(tess.texCoords[0][0]) * 2 * SHADER_MAX_VERTEXES; - - tess.vao->attribs[ATTR_INDEX_COLOR ].offset = offset; offset += sizeof(tess.color[0]) * SHADER_MAX_VERTEXES; + tess.vao->attribs[ATTR_INDEX_POSITION ].offset = offset; offset += sizeof(tess.xyz[0]) * SHADER_MAX_VERTEXES; + tess.vao->attribs[ATTR_INDEX_NORMAL ].offset = offset; offset += sizeof(tess.normal[0]) * SHADER_MAX_VERTEXES; + tess.vao->attribs[ATTR_INDEX_TANGENT ].offset = offset; offset += sizeof(tess.tangent[0]) * SHADER_MAX_VERTEXES; + tess.vao->attribs[ATTR_INDEX_TEXCOORD ].offset = offset; offset += sizeof(tess.texCoords[0]) * SHADER_MAX_VERTEXES; + tess.vao->attribs[ATTR_INDEX_LIGHTCOORD ].offset = offset; offset += sizeof(tess.lightCoords[0]) * SHADER_MAX_VERTEXES; + tess.vao->attribs[ATTR_INDEX_COLOR ].offset = offset; offset += sizeof(tess.color[0]) * SHADER_MAX_VERTEXES; tess.vao->attribs[ATTR_INDEX_LIGHTDIRECTION].offset = offset; tess.vao->attribs[ATTR_INDEX_POSITION ].stride = sizeof(tess.xyz[0]); tess.vao->attribs[ATTR_INDEX_NORMAL ].stride = sizeof(tess.normal[0]); tess.vao->attribs[ATTR_INDEX_TANGENT ].stride = sizeof(tess.tangent[0]); + tess.vao->attribs[ATTR_INDEX_TEXCOORD ].stride = sizeof(tess.texCoords[0]); + tess.vao->attribs[ATTR_INDEX_LIGHTCOORD ].stride = sizeof(tess.lightCoords[0]); tess.vao->attribs[ATTR_INDEX_COLOR ].stride = sizeof(tess.color[0]); - tess.vao->attribs[ATTR_INDEX_TEXCOORD ].stride = sizeof(tess.texCoords[0][0]) * 2; - tess.vao->attribs[ATTR_INDEX_LIGHTCOORD ].stride = sizeof(tess.texCoords[0][0]) * 2; tess.vao->attribs[ATTR_INDEX_LIGHTDIRECTION].stride = sizeof(tess.lightdir[0]); tess.attribPointers[ATTR_INDEX_POSITION] = tess.xyz; - tess.attribPointers[ATTR_INDEX_TEXCOORD] = tess.texCoords; tess.attribPointers[ATTR_INDEX_NORMAL] = tess.normal; tess.attribPointers[ATTR_INDEX_TANGENT] = tess.tangent; + tess.attribPointers[ATTR_INDEX_TEXCOORD] = tess.texCoords; + tess.attribPointers[ATTR_INDEX_LIGHTCOORD] = tess.lightCoords; tess.attribPointers[ATTR_INDEX_COLOR] = tess.color; tess.attribPointers[ATTR_INDEX_LIGHTDIRECTION] = tess.lightdir; @@ -613,14 +612,6 @@ void RB_UpdateTessVao(unsigned int attribBits) attribUpload = attribBits; - if((attribUpload & ATTR_TEXCOORD) || (attribUpload & ATTR_LIGHTCOORD)) - { - // these are interleaved, so we update both if either need it - // this translates to updating ATTR_TEXCOORD twice as large as it needs - attribUpload &= ~ATTR_LIGHTCOORD; - attribUpload |= ATTR_TEXCOORD; - } - for (attribIndex = 0; attribIndex < ATTR_INDEX_COUNT; attribIndex++) { uint32_t attribBit = 1 << attribIndex; diff --git a/SP/code/rend2/tr_animation.c b/SP/code/rend2/tr_animation.c index 2384751..5d24a33 100644 --- a/SP/code/rend2/tr_animation.c +++ b/SP/code/rend2/tr_animation.c @@ -1195,8 +1195,8 @@ void RB_SurfaceAnim( mdsSurface_t *surface ) { R_VaoPackNormal(tempNormal, newNormal); - tess.texCoords[baseVertex + j][0][0] = v->texCoords[0]; - tess.texCoords[baseVertex + j][0][1] = v->texCoords[1]; + tess.texCoords[baseVertex + j][0] = v->texCoords[0]; + tess.texCoords[baseVertex + j][1] = v->texCoords[1]; v = (mdsVertex_t *)&v->weights[v->numWeights]; } @@ -1745,8 +1745,8 @@ void RB_MDRSurfaceAnim( mdrSurface_t *surface ) R_VaoPackNormal(tess.normal[baseVertex + j], tempNormal); - tess.texCoords[baseVertex + j][0][0] = v->texCoords[0]; - tess.texCoords[baseVertex + j][0][1] = v->texCoords[1]; + tess.texCoords[baseVertex + j][0] = v->texCoords[0]; + tess.texCoords[baseVertex + j][1] = v->texCoords[1]; v = (mdrVertex_t *)&v->weights[v->numWeights]; } diff --git a/SP/code/rend2/tr_backend.c b/SP/code/rend2/tr_backend.c index e3811f7..d411d79 100644 --- a/SP/code/rend2/tr_backend.c +++ b/SP/code/rend2/tr_backend.c @@ -1320,29 +1320,29 @@ const void *RB_StretchPic( const void *data ) { tess.xyz[ numVerts ][1] = cmd->y; tess.xyz[ numVerts ][2] = 0; - tess.texCoords[ numVerts ][0][0] = cmd->s1; - tess.texCoords[ numVerts ][0][1] = cmd->t1; + tess.texCoords[ numVerts ][0] = cmd->s1; + tess.texCoords[ numVerts ][1] = cmd->t1; tess.xyz[ numVerts + 1 ][0] = cmd->x + cmd->w; tess.xyz[ numVerts + 1 ][1] = cmd->y; tess.xyz[ numVerts + 1 ][2] = 0; - tess.texCoords[ numVerts + 1 ][0][0] = cmd->s2; - tess.texCoords[ numVerts + 1 ][0][1] = cmd->t1; + tess.texCoords[ numVerts + 1 ][0] = cmd->s2; + tess.texCoords[ numVerts + 1 ][1] = cmd->t1; tess.xyz[ numVerts + 2 ][0] = cmd->x + cmd->w; tess.xyz[ numVerts + 2 ][1] = cmd->y + cmd->h; tess.xyz[ numVerts + 2 ][2] = 0; - tess.texCoords[ numVerts + 2 ][0][0] = cmd->s2; - tess.texCoords[ numVerts + 2 ][0][1] = cmd->t2; + tess.texCoords[ numVerts + 2 ][0] = cmd->s2; + tess.texCoords[ numVerts + 2 ][1] = cmd->t2; tess.xyz[ numVerts + 3 ][0] = cmd->x; tess.xyz[ numVerts + 3 ][1] = cmd->y + cmd->h; tess.xyz[ numVerts + 3 ][2] = 0; - tess.texCoords[ numVerts + 3 ][0][0] = cmd->s1; - tess.texCoords[ numVerts + 3 ][0][1] = cmd->t2; + tess.texCoords[ numVerts + 3 ][0] = cmd->s1; + tess.texCoords[ numVerts + 3 ][1] = cmd->t2; return (const void *)( cmd + 1 ); } @@ -1415,29 +1415,29 @@ const void *RB_StretchPicGradient( const void *data ) { tess.xyz[ numVerts ][1] = cmd->y; tess.xyz[ numVerts ][2] = 0; - tess.texCoords[ numVerts ][0][0] = cmd->s1; - tess.texCoords[ numVerts ][0][1] = cmd->t1; + tess.texCoords[ numVerts ][0] = cmd->s1; + tess.texCoords[ numVerts ][1] = cmd->t1; tess.xyz[ numVerts + 1 ][0] = cmd->x + cmd->w; tess.xyz[ numVerts + 1 ][1] = cmd->y; tess.xyz[ numVerts + 1 ][2] = 0; - tess.texCoords[ numVerts + 1 ][0][0] = cmd->s2; - tess.texCoords[ numVerts + 1 ][0][1] = cmd->t1; + tess.texCoords[ numVerts + 1 ][0] = cmd->s2; + tess.texCoords[ numVerts + 1 ][1] = cmd->t1; tess.xyz[ numVerts + 2 ][0] = cmd->x + cmd->w; tess.xyz[ numVerts + 2 ][1] = cmd->y + cmd->h; tess.xyz[ numVerts + 2 ][2] = 0; - tess.texCoords[ numVerts + 2 ][0][0] = cmd->s2; - tess.texCoords[ numVerts + 2 ][0][1] = cmd->t2; + tess.texCoords[ numVerts + 2 ][0] = cmd->s2; + tess.texCoords[ numVerts + 2 ][1] = cmd->t2; tess.xyz[ numVerts + 3 ][0] = cmd->x; tess.xyz[ numVerts + 3 ][1] = cmd->y + cmd->h; tess.xyz[ numVerts + 3 ][2] = 0; - tess.texCoords[ numVerts + 3 ][0][0] = cmd->s1; - tess.texCoords[ numVerts + 3 ][0][1] = cmd->t2; + tess.texCoords[ numVerts + 3 ][0] = cmd->s1; + tess.texCoords[ numVerts + 3 ][1] = cmd->t2; return (const void *)( cmd + 1 ); } diff --git a/SP/code/rend2/tr_flares.c b/SP/code/rend2/tr_flares.c index a807aee..9c081b4 100644 --- a/SP/code/rend2/tr_flares.c +++ b/SP/code/rend2/tr_flares.c @@ -480,8 +480,8 @@ void RB_RenderFlare( flare_t *f ) { // FIXME: use quadstamp? tess.xyz[tess.numVertexes][0] = f->windowX - size; tess.xyz[tess.numVertexes][1] = f->windowY - size; - tess.texCoords[tess.numVertexes][0][0] = 0; - tess.texCoords[tess.numVertexes][0][1] = 0; + tess.texCoords[tess.numVertexes][0] = 0; + tess.texCoords[tess.numVertexes][1] = 0; tess.color[tess.numVertexes][0] = iColor[0]; tess.color[tess.numVertexes][1] = iColor[1]; tess.color[tess.numVertexes][2] = iColor[2]; @@ -491,8 +491,8 @@ void RB_RenderFlare( flare_t *f ) { tess.xyz[tess.numVertexes][0] = f->windowX - size; tess.xyz[tess.numVertexes][1] = f->windowY + size; - tess.texCoords[tess.numVertexes][0][0] = 0; - tess.texCoords[tess.numVertexes][0][1] = 1; + tess.texCoords[tess.numVertexes][0] = 0; + tess.texCoords[tess.numVertexes][1] = 1; tess.color[tess.numVertexes][0] = iColor[0]; tess.color[tess.numVertexes][1] = iColor[1]; tess.color[tess.numVertexes][2] = iColor[2]; @@ -502,8 +502,8 @@ void RB_RenderFlare( flare_t *f ) { tess.xyz[tess.numVertexes][0] = f->windowX + size; tess.xyz[tess.numVertexes][1] = f->windowY + size; - tess.texCoords[tess.numVertexes][0][0] = 1; - tess.texCoords[tess.numVertexes][0][1] = 1; + tess.texCoords[tess.numVertexes][0] = 1; + tess.texCoords[tess.numVertexes][1] = 1; tess.color[tess.numVertexes][0] = iColor[0]; tess.color[tess.numVertexes][1] = iColor[1]; tess.color[tess.numVertexes][2] = iColor[2]; @@ -513,8 +513,8 @@ void RB_RenderFlare( flare_t *f ) { tess.xyz[tess.numVertexes][0] = f->windowX + size; tess.xyz[tess.numVertexes][1] = f->windowY - size; - tess.texCoords[tess.numVertexes][0][0] = 1; - tess.texCoords[tess.numVertexes][0][1] = 0; + tess.texCoords[tess.numVertexes][0] = 1; + tess.texCoords[tess.numVertexes][1] = 0; tess.color[tess.numVertexes][0] = iColor[0]; tess.color[tess.numVertexes][1] = iColor[1]; tess.color[tess.numVertexes][2] = iColor[2]; diff --git a/SP/code/rend2/tr_local.h b/SP/code/rend2/tr_local.h index 976f777..8930563 100644 --- a/SP/code/rend2/tr_local.h +++ b/SP/code/rend2/tr_local.h @@ -2248,7 +2248,8 @@ typedef struct shaderCommands_s vec4_t xyz[SHADER_MAX_VERTEXES] QALIGN(16); int16_t normal[SHADER_MAX_VERTEXES][4] QALIGN(16); int16_t tangent[SHADER_MAX_VERTEXES][4] QALIGN(16); - vec2_t texCoords[SHADER_MAX_VERTEXES][2] QALIGN(16); + vec2_t texCoords[SHADER_MAX_VERTEXES] QALIGN(16); + vec2_t lightCoords[SHADER_MAX_VERTEXES] QALIGN(16); uint16_t color[SHADER_MAX_VERTEXES][4] QALIGN(16); int16_t lightdir[SHADER_MAX_VERTEXES][4] QALIGN(16); //int vertexDlightBits[SHADER_MAX_VERTEXES] QALIGN(16); diff --git a/SP/code/rend2/tr_model_iqm.c b/SP/code/rend2/tr_model_iqm.c index cc102ed..f4d0a23 100644 --- a/SP/code/rend2/tr_model_iqm.c +++ b/SP/code/rend2/tr_model_iqm.c @@ -1026,7 +1026,7 @@ void RB_IQMSurfaceAnim( surfaceType_t *surface ) { vec4_t *outXYZ; int16_t *outNormal; int16_t *outTangent; - vec2_t (*outTexCoord)[2]; + vec2_t *outTexCoord; uint16_t *outColor; int frame = data->num_frames ? backEnd.currentEntity->e.frame % data->num_frames : 0; @@ -1096,10 +1096,8 @@ void RB_IQMSurfaceAnim( surfaceType_t *surface ) { nrmMat[ 7] = vtxMat[ 2]*vtxMat[ 4] - vtxMat[ 0]*vtxMat[ 6]; nrmMat[ 8] = vtxMat[ 0]*vtxMat[ 5] - vtxMat[ 1]*vtxMat[ 4]; - (*outTexCoord)[0][0] = data->texcoords[2*vtx + 0]; - (*outTexCoord)[0][1] = data->texcoords[2*vtx + 1]; - (*outTexCoord)[1][0] = (*outTexCoord)[0][0]; - (*outTexCoord)[1][1] = (*outTexCoord)[0][1]; + (*outTexCoord)[0] = data->texcoords[2*vtx + 0]; + (*outTexCoord)[1] = data->texcoords[2*vtx + 1]; (*outXYZ)[0] = vtxMat[ 0] * data->positions[3*vtx+0] + diff --git a/SP/code/rend2/tr_shade_calc.c b/SP/code/rend2/tr_shade_calc.c index e9f2a5b..a946dbd 100644 --- a/SP/code/rend2/tr_shade_calc.c +++ b/SP/code/rend2/tr_shade_calc.c @@ -263,7 +263,7 @@ void RB_CalcBulgeVertexes( deformStage_t *ds ) { now = backEnd.refdef.time * ds->bulgeSpeed * 0.001f; - for ( i = 0; i < tess.numVertexes; i++, xyz += 4, st += 4, normal += 4 ) { + for ( i = 0; i < tess.numVertexes; i++, xyz += 4, st += 2, normal += 4 ) { int off; float scale; vec3_t fNormal; diff --git a/SP/code/rend2/tr_sky.c b/SP/code/rend2/tr_sky.c index 426e517..291258b 100644 --- a/SP/code/rend2/tr_sky.c +++ b/SP/code/rend2/tr_sky.c @@ -397,8 +397,8 @@ static void DrawSkySide( struct image_s *image, const int mins[2], const int max tess.xyz[tess.numVertexes][2] = s_skyPoints[t][s][2]; tess.xyz[tess.numVertexes][3] = 1.0; - tess.texCoords[tess.numVertexes][0][0] = s_skyTexCoords[t][s][0]; - tess.texCoords[tess.numVertexes][0][1] = s_skyTexCoords[t][s][1]; + tess.texCoords[tess.numVertexes][0] = s_skyTexCoords[t][s][0]; + tess.texCoords[tess.numVertexes][1] = s_skyTexCoords[t][s][1]; tess.numVertexes++; @@ -514,8 +514,8 @@ static void DrawSkySideInner( struct image_s *image, const int mins[2], const in tess.xyz[tess.numVertexes][2] = s_skyPoints[t][s][2]; tess.xyz[tess.numVertexes][3] = 1.0; - tess.texCoords[tess.numVertexes][0][0] = s_skyTexCoords[t][s][0]; - tess.texCoords[tess.numVertexes][0][1] = s_skyTexCoords[t][s][1]; + tess.texCoords[tess.numVertexes][0] = s_skyTexCoords[t][s][0]; + tess.texCoords[tess.numVertexes][1] = s_skyTexCoords[t][s][1]; tess.numVertexes++; @@ -761,8 +761,8 @@ static void FillCloudySkySide( const int mins[2], const int maxs[2], qboolean ad for ( s = mins[0] + HALF_SKY_SUBDIVISIONS; s <= maxs[0] + HALF_SKY_SUBDIVISIONS; s++ ) { VectorAdd( s_skyPoints[t][s], backEnd.viewParms.or.origin, tess.xyz[tess.numVertexes] ); - tess.texCoords[tess.numVertexes][0][0] = s_skyTexCoords[t][s][0]; - tess.texCoords[tess.numVertexes][0][1] = s_skyTexCoords[t][s][1]; + tess.texCoords[tess.numVertexes][0] = s_skyTexCoords[t][s][0]; + tess.texCoords[tess.numVertexes][1] = s_skyTexCoords[t][s][1]; tess.numVertexes++; diff --git a/SP/code/rend2/tr_surface.c b/SP/code/rend2/tr_surface.c index f77ebf2..e047472 100644 --- a/SP/code/rend2/tr_surface.c +++ b/SP/code/rend2/tr_surface.c @@ -141,17 +141,17 @@ void RB_AddQuadStampExt( vec3_t origin, vec3_t left, vec3_t up, float color[4], VectorCopy4(iNormal, tess.normal[ndx + 3]); // standard square texture coordinates - VectorSet2(tess.texCoords[ndx ][0], s1, t1); - VectorSet2(tess.texCoords[ndx ][1], s1, t1); + VectorSet2(tess.texCoords[ndx], s1, t1); + VectorSet2(tess.lightCoords[ndx], s1, t1); - VectorSet2(tess.texCoords[ndx+1][0], s2, t1); - VectorSet2(tess.texCoords[ndx+1][1], s2, t1); + VectorSet2(tess.texCoords[ndx+1], s2, t1); + VectorSet2(tess.lightCoords[ndx+1], s2, t1); - VectorSet2(tess.texCoords[ndx+2][0], s2, t2); - VectorSet2(tess.texCoords[ndx+2][1], s2, t2); + VectorSet2(tess.texCoords[ndx+2], s2, t2); + VectorSet2(tess.lightCoords[ndx+2], s2, t2); - VectorSet2(tess.texCoords[ndx+3][0], s1, t2); - VectorSet2(tess.texCoords[ndx+3][1], s1, t2); + VectorSet2(tess.texCoords[ndx+3], s1, t2); + VectorSet2(tess.lightCoords[ndx+3], s1, t2); // constant color all the way around // should this be identity and let the shader specify from entity? @@ -192,19 +192,19 @@ void RB_InstantQuad2(vec4_t quadVerts[4], vec2_t texCoords[4]) tess.firstIndex = 0; VectorCopy4(quadVerts[0], tess.xyz[tess.numVertexes]); - VectorCopy2(texCoords[0], tess.texCoords[tess.numVertexes][0]); + VectorCopy2(texCoords[0], tess.texCoords[tess.numVertexes]); tess.numVertexes++; VectorCopy4(quadVerts[1], tess.xyz[tess.numVertexes]); - VectorCopy2(texCoords[1], tess.texCoords[tess.numVertexes][0]); + VectorCopy2(texCoords[1], tess.texCoords[tess.numVertexes]); tess.numVertexes++; VectorCopy4(quadVerts[2], tess.xyz[tess.numVertexes]); - VectorCopy2(texCoords[2], tess.texCoords[tess.numVertexes][0]); + VectorCopy2(texCoords[2], tess.texCoords[tess.numVertexes]); tess.numVertexes++; VectorCopy4(quadVerts[3], tess.xyz[tess.numVertexes]); - VectorCopy2(texCoords[3], tess.texCoords[tess.numVertexes][0]); + VectorCopy2(texCoords[3], tess.texCoords[tess.numVertexes]); tess.numVertexes++; tess.indexes[tess.numIndexes++] = 0; @@ -326,8 +326,8 @@ static void RB_SurfacePolychain( srfPoly_t *p ) { numv = tess.numVertexes; for ( i = 0; i < p->numVerts; i++ ) { VectorCopy( p->verts[i].xyz, tess.xyz[numv] ); - tess.texCoords[numv][0][0] = p->verts[i].st[0]; - tess.texCoords[numv][0][1] = p->verts[i].st[1]; + tess.texCoords[numv][0] = p->verts[i].st[0]; + tess.texCoords[numv][1] = p->verts[i].st[1]; tess.color[numv][0] = (int)p->verts[i].modulate[0] * 257; tess.color[numv][1] = (int)p->verts[i].modulate[1] * 257; tess.color[numv][2] = (int)p->verts[i].modulate[2] * 257; @@ -397,16 +397,16 @@ static void RB_SurfaceVertsAndIndexes( int numVerts, srfVert_t *verts, int numIn if ( tess.shader->vertexAttribs & ATTR_TEXCOORD ) { dv = verts; - texCoords = tess.texCoords[ tess.numVertexes ][0]; - for ( i = 0 ; i < numVerts ; i++, dv++, texCoords+=4 ) + texCoords = tess.texCoords[tess.numVertexes]; + for ( i = 0 ; i < numVerts ; i++, dv++, texCoords+=2 ) VectorCopy2(dv->st, texCoords); } if ( tess.shader->vertexAttribs & ATTR_LIGHTCOORD ) { dv = verts; - lightCoords = tess.texCoords[ tess.numVertexes ][1]; - for ( i = 0 ; i < numVerts ; i++, dv++, lightCoords+=4 ) + lightCoords = tess.lightCoords[ tess.numVertexes ]; + for ( i = 0 ; i < numVerts ; i++, dv++, lightCoords+=2 ) VectorCopy2(dv->lightmap, lightCoords); } @@ -666,16 +666,16 @@ static void DoRailCore( const vec3_t start, const vec3_t end, const vec3_t up, f // FIXME: use quad stamp? VectorMA( start, spanWidth, up, tess.xyz[tess.numVertexes] ); - tess.texCoords[tess.numVertexes][0][0] = 0; - tess.texCoords[tess.numVertexes][0][1] = 0; + tess.texCoords[tess.numVertexes][0] = 0; + tess.texCoords[tess.numVertexes][1] = 0; tess.color[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] * 0.25f * 257.0f; tess.color[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] * 0.25f * 257.0f; tess.color[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] * 0.25f * 257.0f; tess.numVertexes++; VectorMA( start, spanWidth2, up, tess.xyz[tess.numVertexes] ); - tess.texCoords[tess.numVertexes][0][0] = 0; - tess.texCoords[tess.numVertexes][0][1] = 1; + tess.texCoords[tess.numVertexes][0] = 0; + tess.texCoords[tess.numVertexes][1] = 1; tess.color[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] * 257; tess.color[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] * 257; tess.color[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] * 257; @@ -683,16 +683,16 @@ static void DoRailCore( const vec3_t start, const vec3_t end, const vec3_t up, f VectorMA( end, spanWidth, up, tess.xyz[tess.numVertexes] ); - tess.texCoords[tess.numVertexes][0][0] = t; - tess.texCoords[tess.numVertexes][0][1] = 0; + tess.texCoords[tess.numVertexes][0] = t; + tess.texCoords[tess.numVertexes][1] = 0; tess.color[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] * 257; tess.color[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] * 257; tess.color[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] * 257; tess.numVertexes++; VectorMA( end, spanWidth2, up, tess.xyz[tess.numVertexes] ); - tess.texCoords[tess.numVertexes][0][0] = t; - tess.texCoords[tess.numVertexes][0][1] = 1; + tess.texCoords[tess.numVertexes][0] = t; + tess.texCoords[tess.numVertexes][1] = 1; tess.color[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] * 257; tess.color[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] * 257; tess.color[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] * 257; @@ -750,8 +750,8 @@ static void DoRailDiscs( int numSegs, const vec3_t start, const vec3_t dir, cons for ( j = 0; j < 4; j++ ) { VectorCopy( pos[j], tess.xyz[tess.numVertexes] ); - tess.texCoords[tess.numVertexes][0][0] = ( j < 2 ); - tess.texCoords[tess.numVertexes][0][1] = ( j && j != 3 ); + tess.texCoords[tess.numVertexes][0] = ( j < 2 ); + tess.texCoords[tess.numVertexes][1] = ( j && j != 3 ); tess.color[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] * 257; tess.color[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] * 257; tess.color[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] * 257; @@ -975,8 +975,8 @@ static void RB_SurfaceMesh(mdvSurface_t *surface) { numVerts = surface->numVerts; for ( j = 0; j < numVerts; j++ ) { - tess.texCoords[Doug + j][0][0] = texCoords[j].st[0]; - tess.texCoords[Doug + j][0][1] = texCoords[j].st[1]; + tess.texCoords[Doug + j][0] = texCoords[j].st[0]; + tess.texCoords[Doug + j][1] = texCoords[j].st[1]; // FIXME: fill in lightmapST for completeness? } @@ -1133,8 +1133,8 @@ static void RB_SurfaceGrid( srfBspSurface_t *srf ) { xyz = tess.xyz[numVertexes]; normal = tess.normal[numVertexes]; tangent = tess.tangent[numVertexes]; - texCoords = tess.texCoords[numVertexes][0]; - lightCoords = tess.texCoords[numVertexes][1]; + texCoords = tess.texCoords[numVertexes]; + lightCoords = tess.lightCoords[numVertexes]; color = tess.color[numVertexes]; lightdir = tess.lightdir[numVertexes]; //vDlightBits = &tess.vertexDlightBits[numVertexes]; @@ -1165,13 +1165,13 @@ static void RB_SurfaceGrid( srfBspSurface_t *srf ) { if ( tess.shader->vertexAttribs & ATTR_TEXCOORD ) { VectorCopy2(dv->st, texCoords); - texCoords += 4; + texCoords += 2; } if ( tess.shader->vertexAttribs & ATTR_LIGHTCOORD ) { VectorCopy2(dv->lightmap, lightCoords); - lightCoords += 4; + lightCoords += 2; } if ( tess.shader->vertexAttribs & ATTR_COLOR ) diff --git a/SP/code/rend2/tr_vbo.c b/SP/code/rend2/tr_vbo.c index 08dbed6..7b68f43 100644 --- a/SP/code/rend2/tr_vbo.c +++ b/SP/code/rend2/tr_vbo.c @@ -428,7 +428,8 @@ void R_InitVaos(void) vertexesSize += sizeof(tess.normal[0]); vertexesSize += sizeof(tess.tangent[0]); vertexesSize += sizeof(tess.color[0]); - vertexesSize += sizeof(tess.texCoords[0][0]) * 2; + vertexesSize += sizeof(tess.texCoords[0]); + vertexesSize += sizeof(tess.lightCoords[0]); vertexesSize += sizeof(tess.lightdir[0]); vertexesSize *= SHADER_MAX_VERTEXES; @@ -470,29 +471,27 @@ void R_InitVaos(void) tess.vao->attribs[ATTR_INDEX_COLOR ].normalized = GL_TRUE; tess.vao->attribs[ATTR_INDEX_LIGHTDIRECTION].normalized = GL_TRUE; - tess.vao->attribs[ATTR_INDEX_POSITION ].offset = offset; offset += sizeof(tess.xyz[0]) * SHADER_MAX_VERTEXES; - tess.vao->attribs[ATTR_INDEX_NORMAL ].offset = offset; offset += sizeof(tess.normal[0]) * SHADER_MAX_VERTEXES; - tess.vao->attribs[ATTR_INDEX_TANGENT ].offset = offset; offset += sizeof(tess.tangent[0]) * SHADER_MAX_VERTEXES; - // these next two are actually interleaved - tess.vao->attribs[ATTR_INDEX_TEXCOORD ].offset = offset; - tess.vao->attribs[ATTR_INDEX_LIGHTCOORD ].offset = offset + sizeof(tess.texCoords[0][0]); - offset += sizeof(tess.texCoords[0][0]) * 2 * SHADER_MAX_VERTEXES; - - tess.vao->attribs[ATTR_INDEX_COLOR ].offset = offset; offset += sizeof(tess.color[0]) * SHADER_MAX_VERTEXES; + tess.vao->attribs[ATTR_INDEX_POSITION ].offset = offset; offset += sizeof(tess.xyz[0]) * SHADER_MAX_VERTEXES; + tess.vao->attribs[ATTR_INDEX_NORMAL ].offset = offset; offset += sizeof(tess.normal[0]) * SHADER_MAX_VERTEXES; + tess.vao->attribs[ATTR_INDEX_TANGENT ].offset = offset; offset += sizeof(tess.tangent[0]) * SHADER_MAX_VERTEXES; + tess.vao->attribs[ATTR_INDEX_TEXCOORD ].offset = offset; offset += sizeof(tess.texCoords[0]) * SHADER_MAX_VERTEXES; + tess.vao->attribs[ATTR_INDEX_LIGHTCOORD ].offset = offset; offset += sizeof(tess.lightCoords[0]) * SHADER_MAX_VERTEXES; + tess.vao->attribs[ATTR_INDEX_COLOR ].offset = offset; offset += sizeof(tess.color[0]) * SHADER_MAX_VERTEXES; tess.vao->attribs[ATTR_INDEX_LIGHTDIRECTION].offset = offset; tess.vao->attribs[ATTR_INDEX_POSITION ].stride = sizeof(tess.xyz[0]); tess.vao->attribs[ATTR_INDEX_NORMAL ].stride = sizeof(tess.normal[0]); tess.vao->attribs[ATTR_INDEX_TANGENT ].stride = sizeof(tess.tangent[0]); + tess.vao->attribs[ATTR_INDEX_TEXCOORD ].stride = sizeof(tess.texCoords[0]); + tess.vao->attribs[ATTR_INDEX_LIGHTCOORD ].stride = sizeof(tess.lightCoords[0]); tess.vao->attribs[ATTR_INDEX_COLOR ].stride = sizeof(tess.color[0]); - tess.vao->attribs[ATTR_INDEX_TEXCOORD ].stride = sizeof(tess.texCoords[0][0]) * 2; - tess.vao->attribs[ATTR_INDEX_LIGHTCOORD ].stride = sizeof(tess.texCoords[0][0]) * 2; tess.vao->attribs[ATTR_INDEX_LIGHTDIRECTION].stride = sizeof(tess.lightdir[0]); tess.attribPointers[ATTR_INDEX_POSITION] = tess.xyz; - tess.attribPointers[ATTR_INDEX_TEXCOORD] = tess.texCoords; tess.attribPointers[ATTR_INDEX_NORMAL] = tess.normal; tess.attribPointers[ATTR_INDEX_TANGENT] = tess.tangent; + tess.attribPointers[ATTR_INDEX_TEXCOORD] = tess.texCoords; + tess.attribPointers[ATTR_INDEX_LIGHTCOORD] = tess.lightCoords; tess.attribPointers[ATTR_INDEX_COLOR] = tess.color; tess.attribPointers[ATTR_INDEX_LIGHTDIRECTION] = tess.lightdir; @@ -613,14 +612,6 @@ void RB_UpdateTessVao(unsigned int attribBits) attribUpload = attribBits; - if((attribUpload & ATTR_TEXCOORD) || (attribUpload & ATTR_LIGHTCOORD)) - { - // these are interleaved, so we update both if either need it - // this translates to updating ATTR_TEXCOORD twice as large as it needs - attribUpload &= ~ATTR_LIGHTCOORD; - attribUpload |= ATTR_TEXCOORD; - } - for (attribIndex = 0; attribIndex < ATTR_INDEX_COUNT; attribIndex++) { uint32_t attribBit = 1 << attribIndex; -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/iortcw.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits