@@ -74,10 +74,7 @@ static void R_ColorShiftLightingBytes( byte bytes[ 4 ] )
7474 backward compatible with this bug for diagnostic purpose and fair comparison with
7575 other buggy engines. */
7676
77- if ( tr.mapOverBrightBits == 0 )
78- {
79- return ;
80- }
77+ ASSERT_LT ( tr.overbrightBits , tr.mapOverBrightBits );
8178
8279 /* Shift the color data based on overbright range.
8380
@@ -94,7 +91,7 @@ static void R_ColorShiftLightingBytes( byte bytes[ 4 ] )
9491 what hardware overbright bit feature was not doing, but
9592 this implementation is entirely software. */
9693
97- int shift = tr.mapOverBrightBits ;
94+ int shift = tr.mapOverBrightBits - tr. overbrightBits ;
9895
9996 // shift the data based on overbright range
10097 int r = bytes[ 0 ] << shift;
@@ -120,10 +117,7 @@ static void R_ColorShiftLightingBytes( byte bytes[ 4 ] )
120117
121118static void R_ColorShiftLightingBytesCompressed ( byte bytes[ 8 ] )
122119{
123- if ( tr.mapOverBrightBits == 0 )
124- {
125- return ;
126- }
120+ ASSERT_LT ( tr.overbrightBits , tr.mapOverBrightBits );
127121
128122 // color shift the endpoint colors in the dxt block
129123 unsigned short rgb565 = bytes[1 ] << 8 | bytes[0 ];
@@ -164,7 +158,7 @@ R_ProcessLightmap
164158*/
165159void R_ProcessLightmap ( byte *bytes, int width, int height, int bits )
166160{
167- if ( tr.mapOverBrightBits == 0 )
161+ if ( tr.overbrightBits >= tr. mapOverBrightBits )
168162 {
169163 return ;
170164 }
@@ -668,7 +662,7 @@ static void R_LoadLightmaps( lump_t *l, const char *bspName )
668662 lightMapBuffer[( index * 4 ) + 2 ] = buf_p[( ( x + ( y * internalLightMapSize ) ) * 3 ) + 2 ];
669663 lightMapBuffer[( index * 4 ) + 3 ] = 255 ;
670664
671- if ( tr.legacyOverBrightClamping )
665+ if ( tr.overbrightBits < tr. mapOverBrightBits )
672666 {
673667 R_ColorShiftLightingBytes ( &lightMapBuffer[( index * 4 ) + 0 ] );
674668 }
@@ -1029,7 +1023,7 @@ static void ParseFace( dsurface_t *ds, drawVert_t *verts, bspSurface_t *surf, in
10291023 cv->verts [ i ].lightColor = Color::Adapt ( verts[ i ].color );
10301024
10311025
1032- if ( tr.legacyOverBrightClamping )
1026+ if ( tr.overbrightBits < tr. mapOverBrightBits )
10331027 {
10341028 R_ColorShiftLightingBytes ( cv->verts [ i ].lightColor .ToArray () );
10351029 }
@@ -1239,7 +1233,7 @@ static void ParseMesh( dsurface_t *ds, drawVert_t *verts, bspSurface_t *surf )
12391233
12401234 points[ i ].lightColor = Color::Adapt ( verts[ i ].color );
12411235
1242- if ( tr.legacyOverBrightClamping )
1236+ if ( tr.overbrightBits < tr. mapOverBrightBits )
12431237 {
12441238 R_ColorShiftLightingBytes ( points[ i ].lightColor .ToArray () );
12451239 }
@@ -1366,7 +1360,7 @@ static void ParseTriSurf( dsurface_t *ds, drawVert_t *verts, bspSurface_t *surf,
13661360
13671361 cv->verts [ i ].lightColor = Color::Adapt ( verts[ i ].color );
13681362
1369- if ( tr.legacyOverBrightClamping )
1363+ if ( tr.overbrightBits < tr. mapOverBrightBits )
13701364 {
13711365 R_ColorShiftLightingBytes ( cv->verts [ i ].lightColor .ToArray () );
13721366 }
@@ -4145,7 +4139,7 @@ void R_LoadLightGrid( lump_t *l )
41454139 VectorSet ( tmpAmbient, r_forceAmbient.Get (), r_forceAmbient.Get (), r_forceAmbient.Get () );
41464140 }
41474141
4148- if ( tr.legacyOverBrightClamping )
4142+ if ( tr.overbrightBits < tr. mapOverBrightBits )
41494143 {
41504144 R_ColorShiftLightingBytes ( tmpAmbient );
41514145 R_ColorShiftLightingBytes ( tmpDirected );
@@ -4393,24 +4387,6 @@ void R_LoadEntities( lump_t *l, std::string &externalEntities )
43934387 tr.mapOverBrightBits = Math::Clamp ( atof ( value ), 0.0 , 3.0 );
43944388 continue ;
43954389 }
4396-
4397- if ( !Q_stricmp ( keyname, " overbrightClamping" ) )
4398- {
4399- if ( !Q_stricmp ( value, " 0" ) )
4400- {
4401- tr.legacyOverBrightClamping = false ;
4402- }
4403- else if ( !Q_stricmp ( value, " 1" ) )
4404- {
4405- tr.legacyOverBrightClamping = true ;
4406- }
4407- else
4408- {
4409- Log::Warn ( " invalid value for worldspawn key overbrightClamping" );
4410- }
4411-
4412- continue ;
4413- }
44144390 }
44154391
44164392 // check for deluxe mapping provided by NetRadiant's q3map2
@@ -5143,6 +5119,9 @@ void RE_LoadWorldMap( const char *name )
51435119 }
51445120 R_LoadEntities ( &header->lumps [ LUMP_ENTITIES ], externalEntities );
51455121
5122+ // Now we can set this after checking a possible worldspawn value for mapOverbrightBits
5123+ tr.overbrightBits = std::min ( tr.mapOverBrightBits , r_overbrightBits.Get () );
5124+
51465125 R_LoadShaders ( &header->lumps [ LUMP_SHADERS ] );
51475126
51485127 R_LoadLightmaps ( &header->lumps [ LUMP_LIGHTMAPS ], name );
@@ -5180,7 +5159,6 @@ void RE_LoadWorldMap( const char *name )
51805159 tr.worldLight = tr.lightMode ;
51815160 tr.modelLight = lightMode_t::FULLBRIGHT;
51825161 tr.modelDeluxe = deluxeMode_t::NONE;
5183- tr.mapLightFactor = 1 .0f ;
51845162
51855163 // Use fullbright lighting for everything if the world is fullbright.
51865164 if ( tr.worldLight != lightMode_t::FULLBRIGHT )
@@ -5254,9 +5232,9 @@ void RE_LoadWorldMap( const char *name )
52545232
52555233 /* Set GLSL overbright parameters if the legacy clamped overbright isn't used
52565234 and the lighting mode is not fullbright. */
5257- if ( !tr. legacyOverBrightClamping && tr.lightMode != lightMode_t::FULLBRIGHT )
5235+ if ( tr.lightMode != lightMode_t::FULLBRIGHT )
52585236 {
5259- tr.mapLightFactor = pow ( 2 , tr.mapOverBrightBits );
5237+ tr.mapLightFactor = float ( 1 << tr.overbrightBits );
52605238 }
52615239
52625240 tr.worldLoaded = true ;
0 commit comments