summaryrefslogtreecommitdiff
path: root/src/renderer/tr_shade.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer/tr_shade.c')
-rw-r--r--src/renderer/tr_shade.c39
1 files changed, 34 insertions, 5 deletions
diff --git a/src/renderer/tr_shade.c b/src/renderer/tr_shade.c
index d4375b5e..93ec88ba 100644
--- a/src/renderer/tr_shade.c
+++ b/src/renderer/tr_shade.c
@@ -460,9 +460,18 @@ static void ProjectDlightTexture_altivec( void ) {
{
float luminance;
- luminance = (dl->color[0] * 255.0f + dl->color[1] * 255.0f + dl->color[2] * 255.0f) / 3;
+ luminance = LUMA(dl->color[0], dl->color[1], dl->color[2]) * 255.0f;
floatColor[0] = floatColor[1] = floatColor[2] = luminance;
}
+ else if(r_greyscale->value)
+ {
+ float luminance;
+
+ luminance = LUMA(dl->color[0], dl->color[1], dl->color[2]) * 255.0f;
+ floatColor[0] = LERP(dl->color[0] * 255.0f, luminance, r_greyscale->value);
+ floatColor[1] = LERP(dl->color[1] * 255.0f, luminance, r_greyscale->value);
+ floatColor[2] = LERP(dl->color[2] * 255.0f, luminance, r_greyscale->value);
+ }
else
{
floatColor[0] = dl->color[0] * 255.0f;
@@ -613,10 +622,19 @@ static void ProjectDlightTexture_scalar( void ) {
if(r_greyscale->integer)
{
float luminance;
-
- luminance = (dl->color[0] * 255.0f + dl->color[1] * 255.0f + dl->color[2] * 255.0f) / 3;
+
+ luminance = LUMA(dl->color[0], dl->color[1], dl->color[2]) * 255.0f;
floatColor[0] = floatColor[1] = floatColor[2] = luminance;
}
+ else if(r_greyscale->value)
+ {
+ float luminance;
+
+ luminance = LUMA(dl->color[0], dl->color[1], dl->color[2]) * 255.0f;
+ floatColor[0] = LERP(dl->color[0] * 255.0f, luminance, r_greyscale->value);
+ floatColor[1] = LERP(dl->color[1] * 255.0f, luminance, r_greyscale->value);
+ floatColor[2] = LERP(dl->color[2] * 255.0f, luminance, r_greyscale->value);
+ }
else
{
floatColor[0] = dl->color[0] * 255.0f;
@@ -965,11 +983,22 @@ static void ComputeColors( shaderStage_t *pStage )
if(r_greyscale->integer)
{
int scale;
+ for(i = 0; i < tess.numVertexes; i++)
+ {
+ scale = LUMA(tess.svars.colors[i][0], tess.svars.colors[i][1], tess.svars.colors[i][2]);
+ tess.svars.colors[i][0] = tess.svars.colors[i][1] = tess.svars.colors[i][2] = scale;
+ }
+ }
+ else if(r_greyscale->value)
+ {
+ float scale;
for(i = 0; i < tess.numVertexes; i++)
{
- scale = (tess.svars.colors[i][0] + tess.svars.colors[i][1] + tess.svars.colors[i][2]) / 3;
- tess.svars.colors[i][0] = tess.svars.colors[i][1] = tess.svars.colors[i][2] = scale;
+ scale = LUMA(tess.svars.colors[i][0], tess.svars.colors[i][1], tess.svars.colors[i][2]);
+ tess.svars.colors[i][0] = LERP(tess.svars.colors[i][0], scale, r_greyscale->value);
+ tess.svars.colors[i][1] = LERP(tess.svars.colors[i][1], scale, r_greyscale->value);
+ tess.svars.colors[i][2] = LERP(tess.svars.colors[i][2], scale, r_greyscale->value);
}
}
}