Parent Directory
|
Revision Log
Release 2.0.5 tag
1 #include <stdlib.h> 2 #include <stdio.h> 3 4 int mul8bit(int a, int b) 5 { 6 int t = a * b + 128; 7 return((t + (t >> 8)) >> 8); 8 } 9 10 static void prepare_opt_table(unsigned char *tab, 11 const unsigned char *expand, int size) 12 { 13 int i, mn, mx, bestE, minE, maxE, e; 14 15 for(i = 0; i < 256; ++i) 16 { 17 bestE = 256; 18 19 for(mn = 0; mn < size; ++mn) 20 { 21 for(mx = 0; mx < size; ++mx) 22 { 23 minE = expand[mn]; 24 maxE = expand[mx]; 25 e = abs(maxE + mul8bit(minE - maxE, 0x55) - i); 26 27 if(e < bestE) 28 { 29 tab[i * 2 + 0] = mx; 30 tab[i * 2 + 1] = mn; 31 bestE = e; 32 } 33 } 34 } 35 } 36 } 37 38 int main(void) 39 { 40 FILE *fp; 41 int i, v; 42 unsigned char expand5[32]; 43 unsigned char expand6[64]; 44 unsigned char quantRB[256 + 16]; 45 unsigned char quantG[256 + 16]; 46 unsigned char omatch5[256][2]; 47 unsigned char omatch6[256][2]; 48 49 fp = fopen("dxt_tables.h", "w"); 50 fprintf(fp, 51 "#ifndef DXT_TABLES_H\n" 52 "#define DXT_TABLES_H\n\n"); 53 54 for(i = 0; i < 32; ++i) 55 expand5[i] = (i << 3) | (i >> 2); 56 57 for(i = 0; i < 64; ++i) 58 expand6[i] = (i << 2) | (i >> 4); 59 60 for(i = 0; i < 256 + 16; ++i) 61 { 62 v = i - 8; 63 if(v < 0) v = 0; 64 if(v > 255) v = 255; 65 quantRB[i] = expand5[mul8bit(v, 31)]; 66 quantG[i] = expand6[mul8bit(v, 63)]; 67 } 68 69 fprintf(fp, 70 "static const unsigned char quantRB[256 + 16] =\n" 71 "{"); 72 for(i = 0; i < 256 + 16; ++i) 73 { 74 if(i % 8 == 0) fprintf(fp, "\n "); 75 fprintf(fp, "0x%02x, ", quantRB[i]); 76 } 77 fprintf(fp, "\n};\n\n"); 78 79 fprintf(fp, 80 "static const unsigned char quantG[256 + 16] =\n" 81 "{"); 82 for(i = 0; i < 256 + 16; ++i) 83 { 84 if(i % 8 == 0) fprintf(fp, "\n "); 85 fprintf(fp, "0x%02x, ", quantG[i]); 86 } 87 fprintf(fp, "\n};\n\n"); 88 89 prepare_opt_table(&omatch5[0][0], expand5, 32); 90 prepare_opt_table(&omatch6[0][0], expand6, 64); 91 92 fprintf(fp, 93 "static const unsigned char omatch5[256][2] =\n" 94 "{"); 95 for(i = 0; i < 256; ++i) 96 { 97 if(i % 4 == 0) fprintf(fp, "\n "); 98 fprintf(fp, "{0x%02x, 0x%02x}, ", omatch5[i][0], omatch5[i][1]); 99 } 100 fprintf(fp, "\n};\n\n"); 101 102 fprintf(fp, 103 "static const unsigned char omatch6[256][2] =\n" 104 "{"); 105 for(i = 0; i < 256; ++i) 106 { 107 if(i % 4 == 0) fprintf(fp, "\n "); 108 fprintf(fp, "{0x%02x, 0x%02x}, ", omatch6[i][0], omatch6[i][1]); 109 } 110 fprintf(fp, "\n};\n\n"); 111 112 fprintf(fp, "#endif\n"); 113 114 fclose(fp); 115 116 return(0); 117 }
| ViewVC Help | |
| Powered by ViewVC 1.0.4 |