randr/xfree86: Fix initial gamma computation.

- The previous version overflowed sometimes.
This commit is contained in:
Maarten Maathuis 2008-12-22 19:53:14 +01:00
parent ba9dc353a6
commit b5736d237a

View File

@ -2248,24 +2248,23 @@ xf86CrtcSetInitialGamma(xf86CrtcPtr crtc, float gamma_red, float gamma_green,
* So take the default gamma size for lack of something better. * So take the default gamma size for lack of something better.
*/ */
for (i = 0; i < size; i++) { for (i = 0; i < size; i++) {
/* Code partially borrowed from ComputeGamma(). */
if (gamma_red == 1.0) if (gamma_red == 1.0)
red[i] = i << 8; red[i] = i << 8;
else else
red[i] = (CARD16)((pow((double)i/(double)size, red[i] = (CARD16)(pow((double)i/(double)(size - 1),
gamma_red) * (double)size + 0.5)*256); (double)gamma_red) * (double)(size - 1) * 256);
if (gamma_green == 1.0) if (gamma_green == 1.0)
green[i] = i << 8; green[i] = i << 8;
else else
green[i] = (CARD16)((pow((double)i/(double)size, green[i] = (CARD16)(pow((double)i/(double)(size - 1),
gamma_green) * (double)size + 0.5)*256); (double)gamma_green) * (double)(size - 1) * 256);
if (gamma_blue == 1.0) if (gamma_blue == 1.0)
blue[i] = i << 8; blue[i] = i << 8;
else else
blue[i] = (CARD16)((pow((double)i/(double)size, blue[i] = (CARD16)(pow((double)i/(double)(size - 1),
gamma_blue) * (double)size + 0.5)*256); (double)gamma_blue) * (double)(size - 1) * 256);
} }
/* Default size is 256, so anything else is failure. */ /* Default size is 256, so anything else is failure. */