Skip to content

Commit 5302a8b

Browse files
committed
WIP: naive blending compatibility
1 parent 4b7fd65 commit 5302a8b

File tree

4 files changed

+27
-8
lines changed

4 files changed

+27
-8
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: 6 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;
@@ -1004,6 +1009,7 @@ enum
10041009
stageType_t collapsedStageTypes[ MAX_TEXTURE_BUNDLES ];
10051010
char collapsedStageTextures[ MAX_TEXTURE_BUNDLES ][ MAX_QPATH ];
10061011

1012+
colorProcessor_t convertColorFromSRGB;
10071013
expression_t ifExp;
10081014

10091015
waveForm_t rgbWave;
@@ -2401,9 +2407,6 @@ enum
24012407
int h;
24022408
};
24032409

2404-
using floatProcessor_t = float(*)(float);
2405-
using colorProcessor_t = Color::Color(*)(Color::Color);
2406-
24072410
/*
24082411
** trGlobals_t
24092412
**

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: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1480,6 +1480,20 @@ static bool LoadMap( shaderStage_t *stage, const char *buffer, stageType_t type,
14801480
{
14811481
case stageType_t::ST_COLORMAP:
14821482
case stageType_t::ST_DIFFUSEMAP:
1483+
{
1484+
int blendSrcBits = stage->stateBits & GLS_SRCBLEND_BITS;
1485+
int blendDstBits = stage->stateBits & GLS_DSTBLEND_BITS;
1486+
1487+
bool blended = blendSrcBits != 0 && blendDstBits != 0
1488+
&& !(blendSrcBits == GLS_SRCBLEND_ONE && blendDstBits == GLS_DSTBLEND_ZERO);
1489+
1490+
if ( !blended )
1491+
{
1492+
imageParams.bits |= IF_SRGB;
1493+
stage->convertColorFromSRGB = tr.convertColorFromSRGB;
1494+
}
1495+
}
1496+
break;
14831497
case stageType_t::ST_GLOWMAP:
14841498
case stageType_t::ST_REFLECTIONMAP:
14851499
case stageType_t::ST_SKYBOXMAP:
@@ -2072,6 +2086,8 @@ static bool ParseStage( shaderStage_t *stage, const char **text )
20722086
char buffer[ 1024 ] = "";
20732087
bool loadMap = false;
20742088

2089+
stage->convertColorFromSRGB = convertColorFromSRGB_NOP;
2090+
20752091
while ( true )
20762092
{
20772093
token = COM_ParseExt2( text, true );

0 commit comments

Comments
 (0)