1
0
Fork 0

cogl/tests: Avoid floats when converting between int formats

All we need is an intermediate int format with twice as many bits and
to put division at the end to avoid any loss of precision.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3903>

(cherry picked from commit 3eb32cf750)
This commit is contained in:
Daniel van Vugt 2024-07-25 19:08:11 +08:00 committed by Robert Mader
parent 35c0c245ee
commit 6e12b423c7

View file

@ -35,19 +35,13 @@ get_bits (uint32_t in,
static int
rgb16_to_rgb8 (int rgb16)
{
float r;
r = rgb16 / (float) ((1 << 16) - 1);
return (int) (r * (float) ((1 << 8) - 1));
return (int) ((int32_t) rgb16 * 0xff / 0xffff);
}
static int
rgb8_to_rgb16 (int rgb8)
{
float r;
r = rgb8 / (float) ((1 << 8) - 1);
return (int) (r * (float) ((1 << 16) - 1));
return (int) ((int32_t) rgb8 * 0xffff / 0xff);
}
static void