mirror of
https://bitbucket.org/CPMADevs/cnq3
synced 2024-11-26 22:11:51 +00:00
fixed r_lightmap not being used and made it archived
removed the r_maplight* cvars removed dead code (RB_StageIteratorGeneric)
This commit is contained in:
parent
ec042e37e1
commit
f9fbe4797f
8 changed files with 40 additions and 186 deletions
|
@ -1,6 +1,8 @@
|
||||||
|
|
||||||
DD Mmm 17 - 1.49
|
DD Mmm 17 - 1.49
|
||||||
|
|
||||||
|
fix: r_lightmap is now archived and actually does its job
|
||||||
|
|
||||||
add: r_greyscale to control how monochromatic the final image looks
|
add: r_greyscale to control how monochromatic the final image looks
|
||||||
r_greyscale 0 (default) = full color (nothing done)
|
r_greyscale 0 (default) = full color (nothing done)
|
||||||
r_greyscale 1 = monochrome
|
r_greyscale 1 = monochrome
|
||||||
|
|
|
@ -120,16 +120,10 @@ void GL_TexEnv( int env )
|
||||||
switch ( env )
|
switch ( env )
|
||||||
{
|
{
|
||||||
case GL_MODULATE:
|
case GL_MODULATE:
|
||||||
qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
|
|
||||||
break;
|
|
||||||
case GL_REPLACE:
|
case GL_REPLACE:
|
||||||
qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
|
|
||||||
break;
|
|
||||||
case GL_DECAL:
|
case GL_DECAL:
|
||||||
qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
|
|
||||||
break;
|
|
||||||
case GL_ADD:
|
case GL_ADD:
|
||||||
qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD );
|
qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, env );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ri.Error( ERR_DROP, "GL_TexEnv: invalid env '%d' passed\n", env );
|
ri.Error( ERR_DROP, "GL_TexEnv: invalid env '%d' passed\n", env );
|
||||||
|
|
|
@ -65,30 +65,6 @@ static void R_LoadLightmaps( const lump_t* l )
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
byte image[LIGHTMAP_SIZE * LIGHTMAP_SIZE * 4];
|
byte image[LIGHTMAP_SIZE * LIGHTMAP_SIZE * 4];
|
||||||
|
|
||||||
for(k = 0; k < 3; k++) {
|
|
||||||
if(strlen(r_maplightColor->string) == 3) {
|
|
||||||
int hexNum = r_maplightColor->string[k] - 48 < 0 ? 0 : r_maplightColor->string[k] - 48;
|
|
||||||
hexNum = hexNum > 15 ? hexNum - 65 + 48 + 10: hexNum;
|
|
||||||
hexNum = hexNum > 15 ? hexNum - 97 + 65: hexNum;
|
|
||||||
|
|
||||||
vMaplightColorFilter[k] = ((float)hexNum * 16.0f) / 255.0f;
|
|
||||||
}
|
|
||||||
else if(strlen(r_maplightColor->string) == 6) {
|
|
||||||
int hexHigh = r_maplightColor->string[k * 2] - 48 < 0 ? 0 : r_maplightColor->string[k * 2] - 48;
|
|
||||||
hexHigh = hexHigh > 15 ? hexHigh - 65 + 48 + 10: hexHigh;
|
|
||||||
hexHigh = hexHigh > 15 ? hexHigh - 97 + 65: hexHigh;
|
|
||||||
|
|
||||||
int hexLow = r_maplightColor->string[k * 2 + 1] - 48 < 0 ? 0 : r_maplightColor->string[k * 2 + 1] - 48;
|
|
||||||
hexLow = hexLow > 15 ? hexLow - 65 + 48 + 10: hexLow;
|
|
||||||
hexLow = hexLow > 15 ? hexLow - 97 + 65: hexLow;
|
|
||||||
|
|
||||||
vMaplightColorFilter[k] = (((float)hexHigh * 16.0f) + (float)hexLow) / 255.0f;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
vMaplightColorFilter[k] = 1.0f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we are in r_vertexLight mode, we don't need the lightmaps at all
|
// if we are in r_vertexLight mode, we don't need the lightmaps at all
|
||||||
if (r_vertexLight->integer)
|
if (r_vertexLight->integer)
|
||||||
return;
|
return;
|
||||||
|
@ -112,25 +88,14 @@ static void R_LoadLightmaps( const lump_t* l )
|
||||||
for ( i = 0; i < tr.numLightmaps; ++i ) {
|
for ( i = 0; i < tr.numLightmaps; ++i ) {
|
||||||
// expand the 24 bit on-disk to 32 bit
|
// expand the 24 bit on-disk to 32 bit
|
||||||
for ( j = 0; j < LIGHTMAP_SIZE * LIGHTMAP_SIZE; ++j ) {
|
for ( j = 0; j < LIGHTMAP_SIZE * LIGHTMAP_SIZE; ++j ) {
|
||||||
R_ColorShiftLightingBytes( &p[j*3], &image[j*4] );
|
R_ColorShiftLightingBytes( &p[j * 3], &image[j * 4] );
|
||||||
image[j*4+3] = 255;
|
|
||||||
|
|
||||||
vec3_t vColor = {(float)image[j * 4 + 0] / 255.0f, (float)image[j * 4 + 1] / 255.0f, (float)image[j * 4 + 2] / 255.0f};
|
|
||||||
float greyColor = (vColor[0] + vColor[1] + vColor[2]) / 3.0f;
|
|
||||||
|
|
||||||
for(k = 0; k < 3; k++) {
|
for ( k = 0; k < 3; ++k ) {
|
||||||
if(r_maplightColorMode->integer > 0) {
|
const float c1 = (float)image[j * 4 + k] / 255.0f;
|
||||||
vColor[k] = vColor[k] * r_maplightSaturation->value + greyColor * (1.0f - r_maplightSaturation->value);
|
const float c2 = Com_Clamp( 0.0f, 1.0f, c1 );
|
||||||
}
|
image[j * 4 + k] = (byte)(c2 * 255.0f);
|
||||||
else {
|
|
||||||
vColor[k] = greyColor;
|
|
||||||
}
|
|
||||||
vColor[k] *= r_maplightBrightness->value;
|
|
||||||
vColor[k] *= vMaplightColorFilter[k];
|
|
||||||
vColor[k] = vColor[k] < 0.0f ? 0.0f : vColor[k];
|
|
||||||
vColor[k] = vColor[k] > 1.0f ? 1.0f : vColor[k];
|
|
||||||
image[j * 4 + k] = (byte)(vColor[k] * 255.0f);
|
|
||||||
}
|
}
|
||||||
|
image[j * 4 + 3] = 255;
|
||||||
}
|
}
|
||||||
tr.lightmaps[i] = R_CreateImage( va("*lightmap%d",i), image,
|
tr.lightmaps[i] = R_CreateImage( va("*lightmap%d",i), image,
|
||||||
LIGHTMAP_SIZE, LIGHTMAP_SIZE, GL_RGB, IMG_NOMIPMAP | IMG_NOPICMIP, GL_CLAMP );
|
LIGHTMAP_SIZE, LIGHTMAP_SIZE, GL_RGB, IMG_NOMIPMAP | IMG_NOPICMIP, GL_CLAMP );
|
||||||
|
|
|
@ -175,17 +175,33 @@ static void GL2_DynLights_LightingPass()
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
static void GL2_DynLights_MultitextureStage( int stage )
|
// returns qtrue if needs to break early
|
||||||
|
static qbool GL2_DynLights_MultitextureStage( int stage )
|
||||||
{
|
{
|
||||||
// everything we care about from the first stage is already done
|
static stageVars_t svarsMT; // this is a huge struct
|
||||||
const shaderStage_t* pStage = tess.xstages[++stage];
|
|
||||||
|
const shaderStage_t* pPrevStage = tess.xstages[stage++];
|
||||||
|
const shaderStage_t* pStage = tess.xstages[stage];
|
||||||
|
const qbool lightmapOnly = r_lightmap->integer && (pStage->type == ST_LIGHTMAP || pPrevStage->type == ST_LIGHTMAP);
|
||||||
|
|
||||||
|
if ( lightmapOnly ) {
|
||||||
|
const int prevEnv = glState.texEnv[glState.currenttmu];
|
||||||
|
GL_TexEnv( GL_REPLACE );
|
||||||
|
if ( pStage->type == ST_LIGHTMAP ) {
|
||||||
|
R_BindAnimatedImage( &pStage->bundle );
|
||||||
|
R_ComputeTexCoords( pStage, svarsMT );
|
||||||
|
qglTexCoordPointer( 2, GL_FLOAT, 0, svarsMT.texcoords );
|
||||||
|
}
|
||||||
|
qglDrawElements( GL_TRIANGLES, tess.numIndexes, GL_INDEX_TYPE, tess.indexes );
|
||||||
|
GL_TexEnv( prevEnv );
|
||||||
|
return qtrue;
|
||||||
|
}
|
||||||
|
|
||||||
GL_SelectTexture( 1 );
|
GL_SelectTexture( 1 );
|
||||||
qglEnable( GL_TEXTURE_2D );
|
qglEnable( GL_TEXTURE_2D );
|
||||||
GL_TexEnv( pStage->mtEnv );
|
GL_TexEnv( pStage->mtEnv );
|
||||||
R_BindAnimatedImage( &pStage->bundle );
|
R_BindAnimatedImage( &pStage->bundle );
|
||||||
|
|
||||||
static stageVars_t svarsMT; // this is a huge struct
|
|
||||||
R_ComputeTexCoords( pStage, svarsMT );
|
R_ComputeTexCoords( pStage, svarsMT );
|
||||||
qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||||
qglTexCoordPointer( 2, GL_FLOAT, 0, svarsMT.texcoords );
|
qglTexCoordPointer( 2, GL_FLOAT, 0, svarsMT.texcoords );
|
||||||
|
@ -194,6 +210,8 @@ static void GL2_DynLights_MultitextureStage( int stage )
|
||||||
|
|
||||||
qglDisable( GL_TEXTURE_2D );
|
qglDisable( GL_TEXTURE_2D );
|
||||||
GL_SelectTexture( 0 );
|
GL_SelectTexture( 0 );
|
||||||
|
|
||||||
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -231,6 +249,7 @@ void GL2_DynLights_StageIterator()
|
||||||
const shaderStage_t* pStage = tess.xstages[stage];
|
const shaderStage_t* pStage = tess.xstages[stage];
|
||||||
R_ComputeColors( pStage, tess.svars );
|
R_ComputeColors( pStage, tess.svars );
|
||||||
R_ComputeTexCoords( pStage, tess.svars );
|
R_ComputeTexCoords( pStage, tess.svars );
|
||||||
|
|
||||||
R_BindAnimatedImage( &pStage->bundle );
|
R_BindAnimatedImage( &pStage->bundle );
|
||||||
GL_State( pStage->stateBits );
|
GL_State( pStage->stateBits );
|
||||||
|
|
||||||
|
@ -239,11 +258,12 @@ void GL2_DynLights_StageIterator()
|
||||||
// so color changes are ignored unless we "update" the color pointer again
|
// so color changes are ignored unless we "update" the color pointer again
|
||||||
qglColorPointer( 4, GL_UNSIGNED_BYTE, 0, tess.svars.colors );
|
qglColorPointer( 4, GL_UNSIGNED_BYTE, 0, tess.svars.colors );
|
||||||
qglTexCoordPointer( 2, GL_FLOAT, 0, tess.svars.texcoords );
|
qglTexCoordPointer( 2, GL_FLOAT, 0, tess.svars.texcoords );
|
||||||
|
|
||||||
if (pStage->mtStages) {
|
if ( pStage->mtStages ) {
|
||||||
// we can't really cope with massive collapses, so
|
// we can't really cope with massive collapses, so
|
||||||
assert( pStage->mtStages == 1 );
|
assert( pStage->mtStages == 1 );
|
||||||
GL2_DynLights_MultitextureStage( stage );
|
if ( GL2_DynLights_MultitextureStage( stage ) )
|
||||||
|
break;
|
||||||
stage += pStage->mtStages;
|
stage += pStage->mtStages;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,6 +60,7 @@ cvar_t *r_drawentities;
|
||||||
cvar_t *r_drawworld;
|
cvar_t *r_drawworld;
|
||||||
cvar_t *r_speeds;
|
cvar_t *r_speeds;
|
||||||
cvar_t *r_fullbright;
|
cvar_t *r_fullbright;
|
||||||
|
cvar_t *r_lightmap;
|
||||||
cvar_t *r_novis;
|
cvar_t *r_novis;
|
||||||
cvar_t *r_nocull;
|
cvar_t *r_nocull;
|
||||||
cvar_t *r_nocurves;
|
cvar_t *r_nocurves;
|
||||||
|
@ -70,7 +71,6 @@ cvar_t *r_msaa;
|
||||||
|
|
||||||
cvar_t *r_ignoreGLErrors;
|
cvar_t *r_ignoreGLErrors;
|
||||||
|
|
||||||
cvar_t *r_lightmap;
|
|
||||||
cvar_t *r_vertexLight;
|
cvar_t *r_vertexLight;
|
||||||
cvar_t *r_uiFullScreen;
|
cvar_t *r_uiFullScreen;
|
||||||
cvar_t *r_mode;
|
cvar_t *r_mode;
|
||||||
|
@ -481,15 +481,6 @@ static void R_Register()
|
||||||
r_ext_compressed_textures = ri.Cvar_Get( "r_ext_compressed_textures", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
r_ext_compressed_textures = ri.Cvar_Get( "r_ext_compressed_textures", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
||||||
r_ext_max_anisotropy = ri.Cvar_Get( "r_ext_max_anisotropy", "16", CVAR_ARCHIVE | CVAR_LATCH );
|
r_ext_max_anisotropy = ri.Cvar_Get( "r_ext_max_anisotropy", "16", CVAR_ARCHIVE | CVAR_LATCH );
|
||||||
r_msaa = ri.Cvar_Get( "r_msaa", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
r_msaa = ri.Cvar_Get( "r_msaa", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
|
||||||
r_maplightBrightness = ri.Cvar_Get("r_maplightBrightness", "1", CVAR_ARCHIVE | CVAR_LATCH);
|
|
||||||
AssertCvarRange(r_maplightBrightness, 0.0f, 8.0f, qfalse);
|
|
||||||
r_maplightSaturation = ri.Cvar_Get("r_maplightSaturation", "1", CVAR_ARCHIVE | CVAR_LATCH);
|
|
||||||
AssertCvarRange(r_maplightSaturation, 0.0f, 4.0f, qfalse);
|
|
||||||
r_maplightColorMode = ri.Cvar_Get("r_maplightColorMode", "1", CVAR_ARCHIVE | CVAR_LATCH);
|
|
||||||
AssertCvarRange(r_maplightColorMode, 0, 1, qtrue);
|
|
||||||
r_maplightColor = ri.Cvar_Get("r_maplightColor", "ffffff", CVAR_ARCHIVE | CVAR_LATCH);
|
|
||||||
|
|
||||||
r_picmip = ri.Cvar_Get ("r_picmip", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
r_picmip = ri.Cvar_Get ("r_picmip", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
||||||
AssertCvarRange( r_picmip, 0, 16, qtrue );
|
AssertCvarRange( r_picmip, 0, 16, qtrue );
|
||||||
|
@ -508,6 +499,7 @@ static void R_Register()
|
||||||
r_customaspect = ri.Cvar_Get( "r_customaspect", "1.333", CVAR_ARCHIVE | CVAR_LATCH );
|
r_customaspect = ri.Cvar_Get( "r_customaspect", "1.333", CVAR_ARCHIVE | CVAR_LATCH );
|
||||||
r_vertexLight = ri.Cvar_Get( "r_vertexLight", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
r_vertexLight = ri.Cvar_Get( "r_vertexLight", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
||||||
r_fullbright = ri.Cvar_Get( "r_fullbright", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
r_fullbright = ri.Cvar_Get( "r_fullbright", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
||||||
|
r_lightmap = ri.Cvar_Get( "r_lightmap", "0", CVAR_ARCHIVE );
|
||||||
r_subdivisions = ri.Cvar_Get( "r_subdivisions", "4", CVAR_ARCHIVE | CVAR_LATCH );
|
r_subdivisions = ri.Cvar_Get( "r_subdivisions", "4", CVAR_ARCHIVE | CVAR_LATCH );
|
||||||
#ifdef USE_R_SMP
|
#ifdef USE_R_SMP
|
||||||
r_smp = ri.Cvar_Get( "r_smp", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
r_smp = ri.Cvar_Get( "r_smp", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
||||||
|
@ -560,7 +552,6 @@ static void R_Register()
|
||||||
|
|
||||||
r_nocurves = ri.Cvar_Get ("r_nocurves", "0", CVAR_CHEAT );
|
r_nocurves = ri.Cvar_Get ("r_nocurves", "0", CVAR_CHEAT );
|
||||||
r_drawworld = ri.Cvar_Get ("r_drawworld", "1", CVAR_CHEAT );
|
r_drawworld = ri.Cvar_Get ("r_drawworld", "1", CVAR_CHEAT );
|
||||||
r_lightmap = ri.Cvar_Get ("r_lightmap", "0", 0 );
|
|
||||||
r_portalOnly = ri.Cvar_Get ("r_portalOnly", "0", CVAR_CHEAT );
|
r_portalOnly = ri.Cvar_Get ("r_portalOnly", "0", CVAR_CHEAT );
|
||||||
|
|
||||||
r_flareSize = ri.Cvar_Get ("r_flareSize", "40", CVAR_CHEAT);
|
r_flareSize = ri.Cvar_Get ("r_flareSize", "40", CVAR_CHEAT);
|
||||||
|
|
|
@ -1011,14 +1011,6 @@ extern cvar_t *r_flareSize;
|
||||||
extern cvar_t *r_flareFade;
|
extern cvar_t *r_flareFade;
|
||||||
extern cvar_t *r_flareCoeff;
|
extern cvar_t *r_flareCoeff;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
|
||||||
extern cvar_t *r_maplightBrightness;
|
|
||||||
extern cvar_t *r_maplightSaturation;
|
|
||||||
extern cvar_t *r_maplightColor;
|
|
||||||
extern cvar_t *r_maplightColorMode;
|
|
||||||
extern vec3_t vMaplightColorFilter;
|
|
||||||
///////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
void R_NoiseInit();
|
void R_NoiseInit();
|
||||||
double R_NoiseGet4f( double x, double y, double z, double t );
|
double R_NoiseGet4f( double x, double y, double z, double t );
|
||||||
|
@ -1214,7 +1206,6 @@ void R_ComputeTexCoords( const shaderStage_t* pStage, stageVars_t& svars );
|
||||||
void R_BindAnimatedImage( const textureBundle_t* bundle );
|
void R_BindAnimatedImage( const textureBundle_t* bundle );
|
||||||
|
|
||||||
void RB_FogPass();
|
void RB_FogPass();
|
||||||
void RB_StageIteratorGeneric();
|
|
||||||
void RB_StageIteratorSky();
|
void RB_StageIteratorSky();
|
||||||
|
|
||||||
void RB_AddQuadStamp( vec3_t origin, vec3_t left, vec3_t up, byte *color );
|
void RB_AddQuadStamp( vec3_t origin, vec3_t left, vec3_t up, byte *color );
|
||||||
|
|
|
@ -262,33 +262,7 @@ void R_ComputeColors( const shaderStage_t* pStage, stageVars_t& svars )
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CGEN_EXACT_VERTEX:
|
case CGEN_EXACT_VERTEX:
|
||||||
if(r_fullbright->integer < 0) {
|
Com_Memcpy( svars.colors, tess.vertexColors, tess.numVertexes * sizeof( tess.vertexColors[0] ) );
|
||||||
for (i = 0; i < tess.numVertexes; i++) {
|
|
||||||
int k;
|
|
||||||
|
|
||||||
vec3_t vColor = {(float)tess.vertexColors[i][0] * tr.identityLight / 255.0f, (float)tess.vertexColors[i][1] * tr.identityLight / 255.0f, (float)tess.vertexColors[i][2] * tr.identityLight / 255.0f};
|
|
||||||
float greyColor = (vColor[0] + vColor[1] + vColor[2]) / 3.0f;
|
|
||||||
|
|
||||||
for(k = 0; k < 3; k++) {
|
|
||||||
if(r_maplightColorMode->integer > 0) {
|
|
||||||
vColor[k] = vColor[k] * r_maplightSaturation->value + greyColor * (1.0f - r_maplightSaturation->value);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
vColor[k] = greyColor;
|
|
||||||
}
|
|
||||||
vColor[k] *= r_maplightBrightness->value;
|
|
||||||
vColor[k] *= vMaplightColorFilter[k];
|
|
||||||
vColor[k] = vColor[k] < 0.0f ? 0.0f : vColor[k];
|
|
||||||
vColor[k] = vColor[k] > 1.0f ? 1.0f : vColor[k];
|
|
||||||
svars.colors[i][k] = (byte)(vColor[k] * 255.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
svars.colors[i][3] = tess.vertexColors[i][3];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Com_Memcpy( svars.colors, tess.vertexColors, tess.numVertexes * sizeof( tess.vertexColors[0] ) );
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case CGEN_ONE_MINUS_VERTEX:
|
case CGEN_ONE_MINUS_VERTEX:
|
||||||
if ( tr.identityLight == 1 )
|
if ( tr.identityLight == 1 )
|
||||||
|
@ -503,82 +477,3 @@ void R_ComputeTexCoords( const shaderStage_t* pStage, stageVars_t& svars )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
static void RB_IterateStagesGeneric( const shaderCommands_t* input )
|
|
||||||
{
|
|
||||||
for (int stage = 0; stage < MAX_SHADER_STAGES; ++stage)
|
|
||||||
{
|
|
||||||
const shaderStage_t* pStage = tess.xstages[stage];
|
|
||||||
if ( !pStage )
|
|
||||||
break;
|
|
||||||
|
|
||||||
R_ComputeColors( pStage, tess.svars );
|
|
||||||
R_ComputeTexCoords( pStage, tess.svars );
|
|
||||||
|
|
||||||
if ( r_lightmap->integer && (pStage->type == ST_LIGHTMAP) )
|
|
||||||
GL_TexEnv( GL_REPLACE );
|
|
||||||
|
|
||||||
R_BindAnimatedImage( &pStage->bundle );
|
|
||||||
GL_State( pStage->stateBits );
|
|
||||||
R_DrawElements( input->numIndexes, input->indexes );
|
|
||||||
|
|
||||||
// allow skipping out to show just lightmaps during development
|
|
||||||
if ( r_lightmap->integer && (pStage->type == ST_LIGHTMAP) ) {
|
|
||||||
GL_TexEnv( GL_MODULATE );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void RB_StageIteratorGeneric()
|
|
||||||
{
|
|
||||||
shaderCommands_t* input = &tess;
|
|
||||||
|
|
||||||
if (tess.pass == shaderCommands_t::TP_LIGHT)
|
|
||||||
return;
|
|
||||||
|
|
||||||
GL_Program();
|
|
||||||
|
|
||||||
RB_DeformTessGeometry();
|
|
||||||
|
|
||||||
GL_Cull( input->shader->cullType );
|
|
||||||
|
|
||||||
if ( input->shader->polygonOffset )
|
|
||||||
{
|
|
||||||
qglEnable( GL_POLYGON_OFFSET_FILL );
|
|
||||||
//qglPolygonOffset( r_offsetFactor->value, r_offsetUnits->value );
|
|
||||||
}
|
|
||||||
|
|
||||||
// geometry is per-shader and can be compiled
|
|
||||||
// color and tc are per-stage, and can't
|
|
||||||
|
|
||||||
qglDisableClientState( GL_COLOR_ARRAY );
|
|
||||||
qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
|
|
||||||
|
|
||||||
qglVertexPointer( 3, GL_FLOAT, 16, input->xyz ); // padded for SIMD
|
|
||||||
qglLockArraysEXT( 0, input->numVertexes );
|
|
||||||
|
|
||||||
qglEnableClientState( GL_COLOR_ARRAY );
|
|
||||||
qglColorPointer( 4, GL_UNSIGNED_BYTE, 0, input->svars.colors );
|
|
||||||
qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
|
||||||
qglTexCoordPointer( 2, GL_FLOAT, 0, input->svars.texcoords[0] );
|
|
||||||
|
|
||||||
// call shader function
|
|
||||||
RB_IterateStagesGeneric( input );
|
|
||||||
|
|
||||||
if ( tess.fogNum && tess.shader->fogPass ) {
|
|
||||||
RB_FogPass();
|
|
||||||
}
|
|
||||||
|
|
||||||
qglUnlockArraysEXT();
|
|
||||||
|
|
||||||
if ( input->shader->polygonOffset )
|
|
||||||
{
|
|
||||||
qglDisable( GL_POLYGON_OFFSET_FILL );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1541,8 +1541,6 @@ static void ComputeStageIteratorFunc()
|
||||||
}
|
}
|
||||||
|
|
||||||
shader.siFunc = GL2_DynLights_StageIterator;
|
shader.siFunc = GL2_DynLights_StageIterator;
|
||||||
|
|
||||||
//shader.siFunc = RB_StageIteratorGeneric;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2398,8 +2396,6 @@ void R_ShaderList_f( void )
|
||||||
ri.Printf( PRINT_ALL, " " );
|
ri.Printf( PRINT_ALL, " " );
|
||||||
} else if ( shader->siFunc == RB_StageIteratorSky ) {
|
} else if ( shader->siFunc == RB_StageIteratorSky ) {
|
||||||
ri.Printf( PRINT_ALL, "sky " );
|
ri.Printf( PRINT_ALL, "sky " );
|
||||||
} else if ( shader->siFunc == RB_StageIteratorGeneric ) {
|
|
||||||
ri.Printf( PRINT_ALL, "lgc " );
|
|
||||||
} else {
|
} else {
|
||||||
ri.Printf( PRINT_ALL, "??? " );
|
ri.Printf( PRINT_ALL, "??? " );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue