diff options
author | Mike Erwin <significant.bit@gmail.com> | 2017-05-22 01:07:23 +0300 |
---|---|---|
committer | Mike Erwin <significant.bit@gmail.com> | 2017-05-22 01:07:23 +0300 |
commit | 054eb9422ca5bfea460229374cd8986d297f74c8 (patch) | |
tree | 06ddc74df976616205c8f3ee43a93a6b155467fc /intern | |
parent | ea31c55b08e0add843f56af0a62d030fd25606f2 (diff) |
Gawain: use integer math to convert int16 to int10
@fclem does this work for you?
Diffstat (limited to 'intern')
-rw-r--r-- | intern/gawain/src/vertex_format.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/intern/gawain/src/vertex_format.c b/intern/gawain/src/vertex_format.c index d2f89455cbc..963e660dc3d 100644 --- a/intern/gawain/src/vertex_format.c +++ b/intern/gawain/src/vertex_format.c @@ -276,6 +276,13 @@ static int quantize(float x) return clampi(qx, SIGNED_INT_10_MIN, SIGNED_INT_10_MAX); } +static int convert_i16(short x) + { + // 16-bit signed --> 10-bit signed + return x >> 6; + // TODO: round? + } + PackedNormal convert_i10_v3(const float data[3]) { PackedNormal n = { .x = quantize(data[0]), .y = quantize(data[1]), .z = quantize(data[2]) }; @@ -284,10 +291,6 @@ PackedNormal convert_i10_v3(const float data[3]) PackedNormal convert_i10_s3(const short data[3]) { - PackedNormal n = { - .x = quantize((float)data[0] / 32767.0f), - .y = quantize((float)data[1] / 32767.0f), - .z = quantize((float)data[2] / 32767.0f) - }; + PackedNormal n = { .x = convert_i16(data[0]), .y = convert_i16(data[1]), .z = convert_i16(data[2]) }; return n; } |