diff --git a/src/engine/renderer/tr_local.h b/src/engine/renderer/tr_local.h index df6d8ce7ea..f4441e5b2f 100644 --- a/src/engine/renderer/tr_local.h +++ b/src/engine/renderer/tr_local.h @@ -1319,6 +1319,8 @@ enum class shaderProfilerRenderSubGroupsMode { int autoSpriteMode; + bool forceLightMap; + uint8_t numDeforms; deformStage_t deforms[ MAX_SHADER_DEFORMS ]; diff --git a/src/engine/renderer/tr_shader.cpp b/src/engine/renderer/tr_shader.cpp index eeac8658df..8052e1ee7f 100644 --- a/src/engine/renderer/tr_shader.cpp +++ b/src/engine/renderer/tr_shader.cpp @@ -5869,6 +5869,14 @@ static shader_t *FinishShader() numStages = MAX_SHADER_STAGES; GroupActiveStages(); + if ( shader.forceLightMap && numStages == 1 ) { + shaderStage_t* pStage = &stages[0]; + + if ( pStage->type == stageType_t::ST_COLORMAP ) { + pStage->type = stageType_t::ST_DIFFUSEMAP; + } + } + // set appropriate stage information for ( size_t stage = 0; stage < numStages; stage++ ) { @@ -6233,6 +6241,11 @@ shader_t *R_FindShader( const char *name, shaderType_t type, int flags ) shader.entitySpriteFaceViewDirection = true; } + if ( flags & RSF_FORCE_LIGHTMAP ) + { + shader.forceLightMap = true; + } + // attempt to define shader from an explicit parameter file shaderText = FindShaderInShaderText( strippedName ); diff --git a/src/engine/renderer/tr_types.h b/src/engine/renderer/tr_types.h index 3746d33eed..42f9ed1221 100644 --- a/src/engine/renderer/tr_types.h +++ b/src/engine/renderer/tr_types.h @@ -90,7 +90,7 @@ enum RegisterShaderFlags_t { RSF_NOMIP = BIT( 2 ), RSF_FITSCREEN = BIT( 3 ), RSF_LIGHT_ATTENUATION = BIT( 4 ), - RSF_NOLIGHTSCALE = BIT( 5 ), // TODO(0.56): delete, does nothing + RSF_FORCE_LIGHTMAP = BIT( 5 ), // Used to make particles/trails work with the lightGrid in GLSL RSF_SPRITE = BIT( 6 ), };