Parent Directory
|
Revision Log
Replacing 2.0.1 release tag, phase 2 of 2
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 fprintf(fp, 55 "static const unsigned char expand5[32] =\n" 56 "{"); 57 for(i = 0; i < 32; ++i) 58 { 59 if(i % 8 == 0) fprintf(fp, "\n "); 60 expand5[i] = (i << 3) | (i >> 2); 61 fprintf(fp, "0x%02x, ", expand5[i]); 62 } 63 fprintf(fp, "\n};\n\n"); 64 65 fprintf(fp, 66 "static const unsigned char expand6[64] =\n" 67 "{"); 68 for(i = 0; i < 64; ++i) 69 { 70 if(i % 8 == 0) fprintf(fp, "\n "); 71 expand6[i] = (i << 2) | (i >> 4); 72 fprintf(fp, "0x%02x, ", expand6[i]); 73 } 74 fprintf(fp, "\n};\n\n"); 75 76 for(i = 0; i < 256 + 16; ++i) 77 { 78 v = i - 8; 79 if(v < 0) v = 0; 80 if(v > 255) v = 255; 81 quantRB[i] = expand5[mul8bit(v, 31)]; 82 quantG[i] = expand6[mul8bit(v, 63)]; 83 } 84 85 fprintf(fp, 86 "static const unsigned char quantRB[256 + 16] =\n" 87 "{"); 88 for(i = 0; i < 256 + 16; ++i) 89 { 90 if(i % 8 == 0) fprintf(fp, "\n "); 91 fprintf(fp, "0x%02x, ", quantRB[i]); 92 } 93 fprintf(fp, "\n};\n\n"); 94 95 fprintf(fp, 96 "static const unsigned char quantG[256 + 16] =\n" 97 "{"); 98 for(i = 0; i < 256 + 16; ++i) 99 { 100 if(i % 8 == 0) fprintf(fp, "\n "); 101 fprintf(fp, "0x%02x, ", quantG[i]); 102 } 103 fprintf(fp, "\n};\n\n"); 104 105 prepare_opt_table(&omatch5[0][0], expand5, 32); 106 prepare_opt_table(&omatch6[0][0], expand6, 64); 107 108 fprintf(fp, 109 "static const unsigned char omatch5[256][2] =\n" 110 "{"); 111 for(i = 0; i < 256; ++i) 112 { 113 if(i % 4 == 0) fprintf(fp, "\n "); 114 fprintf(fp, "{0x%02x, 0x%02x}, ", omatch5[i][0], omatch5[i][1]); 115 } 116 fprintf(fp, "\n};\n\n"); 117 118 fprintf(fp, 119 "static const unsigned char omatch6[256][2] =\n" 120 "{"); 121 for(i = 0; i < 256; ++i) 122 { 123 if(i % 4 == 0) fprintf(fp, "\n "); 124 fprintf(fp, "{0x%02x, 0x%02x}, ", omatch6[i][0], omatch6[i][1]); 125 } 126 fprintf(fp, "\n};\n\n"); 127 128 fprintf(fp, "#endif\n"); 129 130 fclose(fp); 131 132 return(0); 133 }
| ViewVC Help | |
| Powered by ViewVC 1.0.4 |