From 09998a6f7aebbe0338e97dfc95f0e4f896de86f3 Mon Sep 17 00:00:00 2001 From: TimeServ <timeserv@users.sourceforge.net> Date: Sat, 11 Mar 2006 07:55:04 +0000 Subject: [PATCH] improve colormap generation for 16-bpp software git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2085 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/sw/vid_win2.c | 18 +++++++++++++++--- engine/sw/vid_x.c | 17 ++++++++++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/engine/sw/vid_win2.c b/engine/sw/vid_win2.c index d758ec279..2b5efcabe 100644 --- a/engine/sw/vid_win2.c +++ b/engine/sw/vid_win2.c @@ -77,6 +77,7 @@ void R_GammaCorrectAndSetPalette(const unsigned char *pal) { extern qbyte gammatable[256]; int j, i; + int r, g, b; float f; unsigned short *data; r_flushcache++; @@ -87,11 +88,22 @@ void R_GammaCorrectAndSetPalette(const unsigned char *pal) { f = (1 - ((float)j/VID_GRADES)); f = (float)gammatable[(int)(f*255)]/255; + f *= 2; for (i = 0; i < 256; i++) { - data[i] = ((int)(pal[i*3+0]*f*(1<<redbits)/256)<<redshift) + - ((int)(pal[i*3+1]*f*(1<<greenbits)/256)<<greenshift) + - ((int)(pal[i*3+2]*f*(1<<bluebits)/256)<<blueshift); + r = pal[i*3+0]*f; + g = pal[i*3+1]*f; + b = pal[i*3+2]*f; + if (r > 255) + r = 255; + if (g > 255) + g = 255; + if (b > 255) + b = 255; + r >>= 8 - redbits; + g >>= 8 - greenbits; + b >>= 8 - bluebits; + data[i] = (r<<redshift) + (g<<greenshift) + (b<<blueshift); } data+=256; } diff --git a/engine/sw/vid_x.c b/engine/sw/vid_x.c index ff8fb8a28..39916d354 100644 --- a/engine/sw/vid_x.c +++ b/engine/sw/vid_x.c @@ -703,11 +703,22 @@ printf("%8x\n", (int)vid_dpy); { f = (1 - ((float)j/VID_GRADES)); f = (float)gammatable[(int)(f*255)]/255; + f *= 2; for (i = 0; i < 256; i++) { - data[i] = ((int)(pal[i*3+0]*f*(1<<redbits)/256)<<redshift) + - ((int)(pal[i*3+1]*f*(1<<greenbits)/256)<<greenshift) + - ((int)(pal[i*3+2]*f*(1<<bluebits)/256)<<blueshift); + r = pal[i*3+0]*f; + g = pal[i*3+1]*f; + b = pal[i*3+2]*f; + if (r > 255) + r = 255; + if (g > 255) + g = 255; + if (b > 255) + b = 255; + r >>= 8 - redbits; + g >>= 8 - greenbits; + b >>= 8 - bluebits; + data[i] = (r<<redshift) + (g<<greenshift) + (b<<blueshift); } data+=256; }