@@ -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 }
@@ -4112,7 +4106,7 @@ void R_LoadLightGrid( lump_t *l )
41124106 VectorSet ( tmpAmbient, r_forceAmbient.Get (), r_forceAmbient.Get (), r_forceAmbient.Get () );
41134107 }
41144108
4115- if ( tr.legacyOverBrightClamping )
4109+ if ( tr.overbrightBits < tr. mapOverBrightBits )
41164110 {
41174111 R_ColorShiftLightingBytes ( tmpAmbient );
41184112 R_ColorShiftLightingBytes ( tmpDirected );
@@ -4360,24 +4354,6 @@ void R_LoadEntities( lump_t *l, std::string &externalEntities )
43604354 tr.mapOverBrightBits = Math::Clamp ( atof ( value ), 0.0 , 3.0 );
43614355 continue ;
43624356 }
4363-
4364- if ( !Q_stricmp ( keyname, " overbrightClamping" ) )
4365- {
4366- if ( !Q_stricmp ( value, " 0" ) )
4367- {
4368- tr.legacyOverBrightClamping = false ;
4369- }
4370- else if ( !Q_stricmp ( value, " 1" ) )
4371- {
4372- tr.legacyOverBrightClamping = true ;
4373- }
4374- else
4375- {
4376- Log::Warn ( " invalid value for worldspawn key overbrightClamping" );
4377- }
4378-
4379- continue ;
4380- }
43814357 }
43824358
43834359 // check for deluxe mapping provided by NetRadiant's q3map2
@@ -5110,6 +5086,9 @@ void RE_LoadWorldMap( const char *name )
51105086 }
51115087 R_LoadEntities ( &header->lumps [ LUMP_ENTITIES ], externalEntities );
51125088
5089+ // Now we can set this after checking a possible worldspawn value for mapOverbrightBits
5090+ tr.overbrightBits = std::min ( tr.mapOverBrightBits , r_overbrightBits.Get () );
5091+
51135092 R_LoadShaders ( &header->lumps [ LUMP_SHADERS ] );
51145093
51155094 R_LoadLightmaps ( &header->lumps [ LUMP_LIGHTMAPS ], name );
@@ -5147,7 +5126,6 @@ void RE_LoadWorldMap( const char *name )
51475126 tr.worldLight = tr.lightMode ;
51485127 tr.modelLight = lightMode_t::FULLBRIGHT;
51495128 tr.modelDeluxe = deluxeMode_t::NONE;
5150- tr.mapLightFactor = 1 .0f ;
51515129
51525130 // Use fullbright lighting for everything if the world is fullbright.
51535131 if ( tr.worldLight != lightMode_t::FULLBRIGHT )
@@ -5221,9 +5199,9 @@ void RE_LoadWorldMap( const char *name )
52215199
52225200 /* Set GLSL overbright parameters if the legacy clamped overbright isn't used
52235201 and the lighting mode is not fullbright. */
5224- if ( !tr. legacyOverBrightClamping && tr.lightMode != lightMode_t::FULLBRIGHT )
5202+ if ( tr.lightMode != lightMode_t::FULLBRIGHT )
52255203 {
5226- tr.mapLightFactor = pow ( 2 , tr.mapOverBrightBits );
5204+ tr.mapLightFactor = float ( 1 << tr.overbrightBits );
52275205 }
52285206
52295207 tr.worldLoaded = true ;
0 commit comments