[gimp-dds] / tags / release-2.0.5 / mktables.c Repository:
ViewVC logotype

View of /tags/release-2.0.5/mktables.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 112 - (download) (as text) (annotate)
Sat May 10 00:44:43 2008 UTC (18 months, 1 week ago) by cocidius
File size: 2699 byte(s)
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