OpenGL2: Store vertex colors and hdr lightmaps/lightgrid as RGBA16.

This commit is contained in:
SmileTheory 2016-10-11 03:28:20 -07:00
parent 239f539702
commit aa79738c50
15 changed files with 240 additions and 184 deletions

View file

@ -89,6 +89,7 @@ RB_AddQuadStampExt
void RB_AddQuadStampExt( vec3_t origin, vec3_t left, vec3_t up, float color[4], float s1, float t1, float s2, float t2 ) {
vec3_t normal;
int16_t iNormal[4];
uint16_t iColor[4];
int ndx;
RB_CheckVao(tess.vao);
@ -148,10 +149,13 @@ void RB_AddQuadStampExt( vec3_t origin, vec3_t left, vec3_t up, float color[4],
// constant color all the way around
// should this be identity and let the shader specify from entity?
VectorCopy4(color, tess.vertexColors[ndx]);
VectorCopy4(color, tess.vertexColors[ndx+1]);
VectorCopy4(color, tess.vertexColors[ndx+2]);
VectorCopy4(color, tess.vertexColors[ndx+3]);
R_VaoPackColor(iColor, color);
VectorCopy4(iColor, tess.color[ndx]);
VectorCopy4(iColor, tess.color[ndx + 1]);
VectorCopy4(iColor, tess.color[ndx + 2]);
VectorCopy4(iColor, tess.color[ndx + 3]);
tess.numVertexes += 4;
tess.numIndexes += 6;
@ -296,10 +300,10 @@ static void RB_SurfacePolychain( srfPoly_t *p ) {
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.vertexColors[numv][0] = p->verts[ i ].modulate[0] / 255.0f;
tess.vertexColors[numv][1] = p->verts[ i ].modulate[1] / 255.0f;
tess.vertexColors[numv][2] = p->verts[ i ].modulate[2] / 255.0f;
tess.vertexColors[numv][3] = p->verts[ i ].modulate[3] / 255.0f;
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;
tess.color[numv][3] = (int)p->verts[i].modulate[3] * 257;
numv++;
}
@ -325,7 +329,7 @@ static void RB_SurfaceVertsAndIndexes( int numVerts, srfVert_t *verts, int numIn
int16_t *normal;
int16_t *tangent;
glIndex_t *outIndex;
float *color;
uint16_t *color;
RB_CheckVao(tess.vao);
@ -381,9 +385,9 @@ static void RB_SurfaceVertsAndIndexes( int numVerts, srfVert_t *verts, int numIn
if ( tess.shader->vertexAttribs & ATTR_COLOR )
{
dv = verts;
color = tess.vertexColors[ tess.numVertexes ];
color = tess.color[ tess.numVertexes ];
for ( i = 0 ; i < numVerts ; i++, dv++, color+=4 )
VectorCopy4(dv->vertexColors, color);
VectorCopy4(dv->color, color);
}
if ( tess.shader->vertexAttribs & ATTR_LIGHTDIRECTION )
@ -639,34 +643,34 @@ static void DoRailCore( const vec3_t start, const vec3_t end, const vec3_t up, f
VectorMA( start, spanWidth, up, tess.xyz[tess.numVertexes] );
tess.texCoords[tess.numVertexes][0][0] = 0;
tess.texCoords[tess.numVertexes][0][1] = 0;
tess.vertexColors[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] * 0.25 / 255.0f;
tess.vertexColors[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] * 0.25 / 255.0f;
tess.vertexColors[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] * 0.25 / 255.0f;
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.vertexColors[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] / 255.0f;
tess.vertexColors[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] / 255.0f;
tess.vertexColors[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] / 255.0f;
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, spanWidth, up, tess.xyz[tess.numVertexes] );
tess.texCoords[tess.numVertexes][0][0] = t;
tess.texCoords[tess.numVertexes][0][1] = 0;
tess.vertexColors[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] / 255.0f;
tess.vertexColors[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] / 255.0f;
tess.vertexColors[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] / 255.0f;
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.vertexColors[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] / 255.0f;
tess.vertexColors[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] / 255.0f;
tess.vertexColors[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] / 255.0f;
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++;
tess.indexes[tess.numIndexes++] = vbase;
@ -723,9 +727,9 @@ static void DoRailDiscs( int numSegs, const vec3_t start, const vec3_t dir, cons
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.vertexColors[tess.numVertexes][0] = backEnd.currentEntity->e.shaderRGBA[0] / 255.0f;
tess.vertexColors[tess.numVertexes][1] = backEnd.currentEntity->e.shaderRGBA[1] / 255.0f;
tess.vertexColors[tess.numVertexes][2] = backEnd.currentEntity->e.shaderRGBA[2] / 255.0f;
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++;
VectorAdd( pos[j], dir, pos[j] );
@ -1010,7 +1014,7 @@ static void RB_SurfaceGrid( srfBspSurface_t *srf ) {
float *texCoords, *lightCoords;
int16_t *normal;
int16_t *tangent;
float *color;
uint16_t *color;
int16_t *lightdir;
srfVert_t *dv;
int rows, irows, vrows;
@ -1100,7 +1104,7 @@ static void RB_SurfaceGrid( srfBspSurface_t *srf ) {
tangent = tess.tangent[numVertexes];
texCoords = tess.texCoords[numVertexes][0];
lightCoords = tess.texCoords[numVertexes][1];
color = tess.vertexColors[numVertexes];
color = tess.color[numVertexes];
lightdir = tess.lightdir[numVertexes];
//vDlightBits = &tess.vertexDlightBits[numVertexes];
@ -1141,7 +1145,7 @@ static void RB_SurfaceGrid( srfBspSurface_t *srf ) {
if ( tess.shader->vertexAttribs & ATTR_COLOR )
{
VectorCopy4(dv->vertexColors, color);
VectorCopy4(dv->color, color);
color += 4;
}