@@ -4735,12 +4735,13 @@ static bool ParseShader( const char *_text )
4735
4735
return true ;
4736
4736
}
4737
4737
4738
- static int packLinearizeTexture ( bool linearizeTexture , bool linearizeLightMap )
4738
+ static int packLinearizeTexture ( bool linearizeColorMap, bool linearizeMaterialMap , bool linearizeLightMap )
4739
4739
{
4740
- /* HACK: emulate two-bits bitfield
4741
- even: no texture linearization (first bit)
4742
- less than 2: no lightmap linearization (second bit) */
4743
- return int (linearizeTexture) + ( 2 * int (linearizeLightMap) );
4740
+ /* HACK: emulate three-bits bitfield
4741
+ even: no color map linearization (first bit)
4742
+ less than 2: no light map linearization (second bit)
4743
+ positive: no material map linearization (extra bit) */
4744
+ return ( int (linearizeColorMap) + ( 2 * int (linearizeLightMap) ) ) * ( linearizeMaterialMap ? -1 : 1 );
4744
4745
}
4745
4746
4746
4747
/*
@@ -5161,28 +5162,6 @@ static void CollapseStages()
5161
5162
{
5162
5163
shaderStage_t *stage = &stages[ s ];
5163
5164
5164
- switch ( stage->type )
5165
- {
5166
- case stageType_t::ST_COLORMAP:
5167
- case stageType_t::ST_COLLAPSE_COLORMAP:
5168
- case stageType_t::ST_SKYBOXMAP:
5169
- stage->linearizeTexture = tr.worldLinearizeTexture ;
5170
- break ;
5171
- case stageType_t::ST_STYLELIGHTMAP:
5172
- case stageType_t::ST_STYLECOLORMAP:
5173
- stage->linearizeTexture = tr.worldLinearizeLightMap ;
5174
- break ;
5175
- case stageType_t::ST_LIGHTMAP:
5176
- stage->linearizeTexture = packLinearizeTexture ( false , tr.worldLinearizeLightMap );
5177
- break ;
5178
- case stageType_t::ST_DIFFUSEMAP:
5179
- case stageType_t::ST_COLLAPSE_DIFFUSEMAP:
5180
- stage->linearizeTexture = packLinearizeTexture ( tr.worldLinearizeTexture , tr.worldLinearizeLightMap );
5181
- break ;
5182
- default :
5183
- break ;
5184
- }
5185
-
5186
5165
switch ( stage->type )
5187
5166
{
5188
5167
case stageType_t::ST_LIGHTMAP:
@@ -5234,6 +5213,31 @@ static void CollapseStages()
5234
5213
// see https://github.com/DaemonEngine/Daemon/issues/376
5235
5214
stage->isHeightMapInNormalMap = stage->isHeightMapInNormalMap && ( stage->enableNormalMapping || stage->enableReliefMapping );
5236
5215
5216
+ switch ( stage->type )
5217
+ {
5218
+ case stageType_t::ST_COLORMAP:
5219
+ case stageType_t::ST_COLLAPSE_COLORMAP:
5220
+ case stageType_t::ST_SKYBOXMAP:
5221
+ stage->linearizeTexture = tr.worldLinearizeTexture ;
5222
+ break ;
5223
+ case stageType_t::ST_STYLELIGHTMAP:
5224
+ case stageType_t::ST_STYLECOLORMAP:
5225
+ stage->linearizeTexture = tr.worldLinearizeLightMap ;
5226
+ break ;
5227
+ case stageType_t::ST_LIGHTMAP:
5228
+ stage->linearizeTexture = packLinearizeTexture ( false , false , tr.worldLinearizeLightMap );
5229
+ break ;
5230
+ case stageType_t::ST_DIFFUSEMAP:
5231
+ case stageType_t::ST_COLLAPSE_DIFFUSEMAP:
5232
+ stage->linearizeTexture = packLinearizeTexture (
5233
+ tr.worldLinearizeTexture ,
5234
+ stage->hasMaterialMap && stages->collapseType == collapseType_t::COLLAPSE_PHONG,
5235
+ tr.worldLinearizeLightMap );
5236
+ break ;
5237
+ default :
5238
+ break ;
5239
+ }
5240
+
5237
5241
// Bind fallback textures if required.
5238
5242
if ( !stage->enableNormalMapping && !( stage->enableReliefMapping && stage->isHeightMapInNormalMap ) )
5239
5243
{
0 commit comments