OpenGL2: Store vertex colors and hdr lightmaps/lightgrid as RGBA16.
This commit is contained in:
parent
239f539702
commit
aa79738c50
15 changed files with 240 additions and 184 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue