Skip to content

Commit bf586ee

Browse files
committed
tr_shader: add the naiveBlend keyword
1 parent 25b1240 commit bf586ee

File tree

4 files changed

+32
-9
lines changed

4 files changed

+32
-9
lines changed

src/engine/renderer/tr_init.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1283,7 +1283,7 @@ ScreenshotCmd screenshotPNGRegistration("screenshotPNG", ssFormat_t::SSF_PNG, "p
12831283
}
12841284

12851285
static float convertFloatFromSRGB_NOP( float f ) { return f; }
1286-
static Color::Color convertColorFromSRGB_NOP( Color::Color c ) { return c; }
1286+
Color::Color convertColorFromSRGB_NOP( Color::Color c ) { return c; }
12871287

12881288
/*
12891289
===============

src/engine/renderer/tr_local.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,11 @@ enum
979979
ALL = BIT( 3 )
980980
};
981981

982+
using floatProcessor_t = float(*)(float);
983+
using colorProcessor_t = Color::Color(*)(Color::Color);
984+
985+
Color::Color convertColorFromSRGB_NOP( Color::Color c );
986+
982987
struct shaderStage_t
983988
{
984989
stageType_t type;
@@ -998,6 +1003,8 @@ enum
9981003
stageShaderBinder_t shaderBinder;
9991004
stageMaterialProcessor_t materialProcessor;
10001005

1006+
colorProcessor_t convertColorFromSRGB;
1007+
10011008
textureBundle_t bundle[ MAX_TEXTURE_BUNDLES ];
10021009

10031010
expression_t ifExp;
@@ -1269,6 +1276,8 @@ enum
12691276
| GLS_BLUEMASK_FALSE
12701277
| GLS_ALPHAMASK_FALSE,
12711278

1279+
GLS_NAIVEBLEND = ( 1 << 30 ),
1280+
12721281
GLS_DEFAULT = GLS_DEPTHMASK_TRUE
12731282
};
12741283

@@ -2397,9 +2406,6 @@ enum
23972406
int h;
23982407
};
23992408

2400-
using floatProcessor_t = float(*)(float);
2401-
using colorProcessor_t = Color::Color(*)(Color::Color);
2402-
24032409
/*
24042410
** trGlobals_t
24052411
**

src/engine/renderer/tr_shade.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1698,7 +1698,7 @@ void Tess_ComputeColor( shaderStage_t *pStage )
16981698
{
16991699
tess.svars.color = pStage->constantColor;
17001700
tess.svars.color.Clamp();
1701-
tess.svars.color = tr.convertColorFromSRGB( tess.svars.color );
1701+
tess.svars.color = pStage->convertColorFromSRGB( tess.svars.color );
17021702
break;
17031703
}
17041704

@@ -1708,7 +1708,7 @@ void Tess_ComputeColor( shaderStage_t *pStage )
17081708
{
17091709
tess.svars.color = backEnd.currentEntity->e.shaderRGBA;
17101710
tess.svars.color.Clamp();
1711-
tess.svars.color = tr.convertColorFromSRGB( tess.svars.color );
1711+
tess.svars.color = pStage->convertColorFromSRGB( tess.svars.color );
17121712
}
17131713
else
17141714
{
@@ -1724,7 +1724,7 @@ void Tess_ComputeColor( shaderStage_t *pStage )
17241724
{
17251725
tess.svars.color = backEnd.currentEntity->e.shaderRGBA;
17261726
tess.svars.color.Clamp();
1727-
tess.svars.color = tr.convertColorFromSRGB( tess.svars.color );
1727+
tess.svars.color = pStage->convertColorFromSRGB( tess.svars.color );
17281728
}
17291729
else
17301730
{
@@ -1757,7 +1757,7 @@ void Tess_ComputeColor( shaderStage_t *pStage )
17571757

17581758
tess.svars.color = Color::White * glow;
17591759
tess.svars.color.Clamp();
1760-
tess.svars.color = tr.convertColorFromSRGB( tess.svars.color );
1760+
tess.svars.color = pStage->convertColorFromSRGB( tess.svars.color );
17611761
break;
17621762
}
17631763

src/engine/renderer/tr_shader.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1488,6 +1488,16 @@ static bool LoadMap( shaderStage_t *stage, const char *buffer, stageType_t type,
14881488
{
14891489
case stageType_t::ST_COLORMAP:
14901490
case stageType_t::ST_DIFFUSEMAP:
1491+
{
1492+
bool naiveBlend = stage->stateBits & GLS_NAIVEBLEND;
1493+
1494+
if ( !naiveBlend )
1495+
{
1496+
imageParams.bits |= IF_SRGB;
1497+
stage->convertColorFromSRGB = tr.convertColorFromSRGB;
1498+
}
1499+
}
1500+
break;
14911501
case stageType_t::ST_GLOWMAP:
14921502
case stageType_t::ST_REFLECTIONMAP:
14931503
case stageType_t::ST_SKYBOXMAP:
@@ -2074,12 +2084,15 @@ static bool ParseStage( shaderStage_t *stage, const char **text )
20742084
const char *token;
20752085
int colorMaskBits = 0;
20762086
int depthMaskBits = GLS_DEPTHMASK_TRUE, blendSrcBits = 0, blendDstBits = 0, atestBits = 0, depthFuncBits = 0, polyModeBits = 0;
2087+
int naiveBlendBits = 0;
20772088
bool depthMaskExplicit = false;
20782089
int imageBits = 0;
20792090
filterType_t filterType;
20802091
char buffer[ 1024 ] = "";
20812092
bool loadMap = false;
20822093

2094+
stage->convertColorFromSRGB = convertColorFromSRGB_NOP;
2095+
20832096
memset( delayedStageTextures, 0, sizeof( delayedStageTextures ) );
20842097

20852098
while ( true )
@@ -2648,6 +2661,10 @@ static bool ParseStage( shaderStage_t *stage, const char **text )
26482661
depthMaskBits = 0;
26492662
}
26502663
}
2664+
else if ( !Q_stricmp( token, "naiveBlend" ) )
2665+
{
2666+
naiveBlendBits |= GLS_NAIVEBLEND;
2667+
}
26512668
// stage <type>
26522669
else if ( !Q_stricmp( token, "stage" ) )
26532670
{
@@ -3336,7 +3353,7 @@ static bool ParseStage( shaderStage_t *stage, const char **text )
33363353
}
33373354

33383355
// compute state bits
3339-
stage->stateBits = colorMaskBits | depthMaskBits | blendSrcBits | blendDstBits | atestBits | depthFuncBits | polyModeBits;
3356+
stage->stateBits = colorMaskBits | depthMaskBits | blendSrcBits | blendDstBits | atestBits | depthFuncBits | polyModeBits | naiveBlendBits;
33403357

33413358
// Do not load heatHaze maps when r_heatHaze is disabled.
33423359
if ( stage->type == stageType_t::ST_HEATHAZEMAP && !r_heatHaze->integer )

0 commit comments

Comments
 (0)