|  |  | @ -1,4 +1,4 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | // stb_dxt.h - v1.04 - DXT1/DXT5 compressor - public domain
 |  |  |  | // stb_dxt.h - v1.05 - DXT1/DXT5 compressor - public domain
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | // original by fabian "ryg" giesen - ported to C by stb
 |  |  |  | // original by fabian "ryg" giesen - ported to C by stb
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // use '#define STB_DXT_IMPLEMENTATION' before including to create the implementation
 |  |  |  | // use '#define STB_DXT_IMPLEMENTATION' before including to create the implementation
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //
 |  |  |  | //
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -9,6 +9,7 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | //     and "high quality" using mode.
 |  |  |  | //     and "high quality" using mode.
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //
 |  |  |  | //
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // version history:
 |  |  |  | // version history:
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | //   v1.05  - (stb) support bc5/3dc (Arvids Kokins), use extern "C" in C++ (Pavel Krajcevski)
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //   v1.04  - (ryg) default to no rounding bias for lerped colors (as per S3TC/DX10 spec);
 |  |  |  | //   v1.04  - (ryg) default to no rounding bias for lerped colors (as per S3TC/DX10 spec);
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //            single color match fix (allow for inexact color interpolation);
 |  |  |  | //            single color match fix (allow for inexact color interpolation);
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //            optimal DXT5 index finder; "high quality" mode that runs multiple refinement steps.
 |  |  |  | //            optimal DXT5 index finder; "high quality" mode that runs multiple refinement steps.
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -29,7 +30,17 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | #define STB_DXT_DITHER    1   // use dithering. dubious win. never use for normal maps and the like!
 |  |  |  | #define STB_DXT_DITHER    1   // use dithering. dubious win. never use for normal maps and the like!
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #define STB_DXT_HIGHQUAL  2   // high quality mode, does two refinement steps instead of 1. ~30-40% slower.
 |  |  |  | #define STB_DXT_HIGHQUAL  2   // high quality mode, does two refinement steps instead of 1. ~30-40% slower.
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void stb_compress_dxt_block(unsigned char *dest, const unsigned char *src, int alpha, int mode); |  |  |  | #ifdef __cplusplus | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | extern "C" { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | void stb_compress_dxt_block(unsigned char *dest, const unsigned char *src_rgba_four_bytes_per_pixel, int alpha, int mode); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | void stb_compress_bc5_block(unsigned char *dest, const unsigned char *src_rg_two_byte_per_pixel, int mode); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #ifdef __cplusplus | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #define STB_COMPRESS_DXT_BLOCK |  |  |  | #define STB_COMPRESS_DXT_BLOCK | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #ifdef STB_DXT_IMPLEMENTATION |  |  |  | #ifdef STB_DXT_IMPLEMENTATION | 
			
		
	
	
		
		
			
				
					|  |  | @ -536,7 +547,7 @@ static void stb__CompressColorBlock(unsigned char *dest, unsigned char *block, i | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // Alpha block compression (this is easy for a change)
 |  |  |  | // Alpha block compression (this is easy for a change)
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static void stb__CompressAlphaBlock(unsigned char *dest,unsigned char *src,int mode) |  |  |  | static void stb__CompressAlphaBlock(unsigned char *dest,unsigned char *src, int stride) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |    int i,dist,bias,dist4,dist2,bits,mask; |  |  |  |    int i,dist,bias,dist4,dist2,bits,mask; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -566,7 +577,7 @@ static void stb__CompressAlphaBlock(unsigned char *dest,unsigned char *src,int m | 
			
		
	
		
		
			
				
					
					|  |  |  |    bits = 0,mask=0; |  |  |  |    bits = 0,mask=0; | 
			
		
	
		
		
			
				
					
					|  |  |  |    
 |  |  |  |    
 | 
			
		
	
		
		
			
				
					
					|  |  |  |    for (i=0;i<16;i++) { |  |  |  |    for (i=0;i<16;i++) { | 
			
		
	
		
		
			
				
					
					|  |  |  |       int a = src[i*4+3]*7 + bias; |  |  |  |       int a = src[i*stride]*7 + bias; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       int ind,t; |  |  |  |       int ind,t; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |       // select index. this is a "linear scale" lerp factor between 0 (val=min) and 7 (val=max).
 |  |  |  |       // select index. this is a "linear scale" lerp factor between 0 (val=min) and 7 (val=max).
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -617,12 +628,18 @@ void stb_compress_dxt_block(unsigned char *dest, const unsigned char *src, int a | 
			
		
	
		
		
			
				
					
					|  |  |  |    } |  |  |  |    } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |    if (alpha) { |  |  |  |    if (alpha) { | 
			
		
	
		
		
			
				
					
					|  |  |  |       stb__CompressAlphaBlock(dest,(unsigned char*) src,mode); |  |  |  |       stb__CompressAlphaBlock(dest,(unsigned char*) src+3, 4); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       dest += 8; |  |  |  |       dest += 8; | 
			
		
	
		
		
			
				
					
					|  |  |  |    } |  |  |  |    } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |    stb__CompressColorBlock(dest,(unsigned char*) src,mode); |  |  |  |    stb__CompressColorBlock(dest,(unsigned char*) src,mode); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | void stb_compress_bc5_block(unsigned char *dest, const unsigned char *src) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |    stb__CompressAlphaBlock(dest,(unsigned char*) src,2); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |    stb__CompressAlphaBlock(dest + 8,(unsigned char*) src+1,2); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | #endif // STB_DXT_IMPLEMENTATION
 |  |  |  | #endif // STB_DXT_IMPLEMENTATION
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #endif // STB_INCLUDE_STB_DXT_H
 |  |  |  | #endif // STB_INCLUDE_STB_DXT_H
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |