Integrate more accurate index selection by Rich Geldreich.

This commit is contained in:
Ignacio Castano 2020-04-05 20:37:29 -07:00
parent f54acd4e13
commit c7cf85ffce

View File

@ -24,6 +24,7 @@
// v1.00 - (stb) first release // v1.00 - (stb) first release
// //
// contributors: // contributors:
// Rich Geldreich (more accurate index selection)
// Kevin Schmidt (#defines for "freestanding" compilation) // Kevin Schmidt (#defines for "freestanding" compilation)
// github:ppiastucki (BC4 support) // github:ppiastucki (BC4 support)
// //
@ -239,14 +240,14 @@ static unsigned int stb__MatchColorsBlock(unsigned char *block, unsigned char *c
// but it's very close and a lot faster. // but it's very close and a lot faster.
// http://cbloomrants.blogspot.com/2008/12/12-08-08-dxtc-summary.html // http://cbloomrants.blogspot.com/2008/12/12-08-08-dxtc-summary.html
c0Point = (stops[1] + stops[3]) >> 1; c0Point = (stops[1] + stops[3]);
halfPoint = (stops[3] + stops[2]) >> 1; halfPoint = (stops[3] + stops[2]);
c3Point = (stops[2] + stops[0]) >> 1; c3Point = (stops[2] + stops[0]);
if(!dither) { if(!dither) {
// the version without dithering is straightforward // the version without dithering is straightforward
for (i=15;i>=0;i--) { for (i=15;i>=0;i--) {
int dot = dots[i]; int dot = dots[i]*2;
mask <<= 2; mask <<= 2;
if(dot < halfPoint) if(dot < halfPoint)
@ -259,9 +260,9 @@ static unsigned int stb__MatchColorsBlock(unsigned char *block, unsigned char *c
int err[8],*ep1 = err,*ep2 = err+4; int err[8],*ep1 = err,*ep2 = err+4;
int *dp = dots, y; int *dp = dots, y;
c0Point <<= 4; c0Point <<= 3;
halfPoint <<= 4; halfPoint <<= 3;
c3Point <<= 4; c3Point <<= 3;
for(i=0;i<8;i++) for(i=0;i<8;i++)
err[i] = 0; err[i] = 0;