From: havoc Date: Thu, 29 Dec 2005 08:43:50 +0000 (+0000) Subject: eliminated special case for gamma 1.0 as it was making worse gamma ramps than the... X-Git-Tag: xonotic-v0.1.0preview~4413 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=a9fc7c56ca413323bb1973c4629fed10e08d13f7;p=xonotic%2Fdarkplaces.git eliminated special case for gamma 1.0 as it was making worse gamma ramps than the general case, and tweaked the code a bit to round to nearest so it should hit exactly 65535 git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@5874 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/palette.c b/palette.c index c536b332..8996f011 100644 --- a/palette.c +++ b/palette.c @@ -112,54 +112,28 @@ void Palette_SetupSpecialPalettes(void) void BuildGammaTable8(float prescale, float gamma, float scale, float base, unsigned char *out) { int i, adjusted; - double invgamma, d; + double invgamma; - gamma = bound(0.1, gamma, 5.0); - if (gamma == 1) // LordHavoc: dodge the math - { - for (i = 0;i < 256;i++) - { - adjusted = (int) (i * prescale * scale + base * 255.0); - out[i] = bound(0, adjusted, 255); - } - } - else + invgamma = 1.0 / gamma; + prescale /= 255.0f; + for (i = 0;i < 256;i++) { - invgamma = 1.0 / gamma; - prescale /= 255.0f; - for (i = 0;i < 256;i++) - { - d = pow((double) i * prescale, invgamma) * scale + base; - adjusted = (int) (255.0 * d); - out[i] = bound(0, adjusted, 255); - } + adjusted = (int) (255.0 * (pow((double) i * prescale, invgamma) * scale + base) + 0.5); + out[i] = bound(0, adjusted, 255); } } void BuildGammaTable16(float prescale, float gamma, float scale, float base, unsigned short *out) { int i, adjusted; - double invgamma, d; + double invgamma; - gamma = bound(0.1, gamma, 5.0); - if (gamma == 1) // LordHavoc: dodge the math - { - for (i = 0;i < 256;i++) - { - adjusted = (int) (i * 256.0 * prescale * scale + base * 65535.0); - out[i] = bound(0, adjusted, 65535); - } - } - else + invgamma = 1.0 / gamma; + prescale /= 255.0f; + for (i = 0;i < 256;i++) { - invgamma = 1.0 / gamma; - prescale /= 255.0f; - for (i = 0;i < 256;i++) - { - d = pow((double) i * prescale, invgamma) * scale + base; - adjusted = (int) (65535.0 * d); - out[i] = bound(0, adjusted, 65535); - } + adjusted = (int) (65535.0 * (pow((double) i * prescale, invgamma) * scale + base) + 0.5); + out[i] = bound(0, adjusted, 65535); } }