OSDN Git Service

fix compression by the libtxc_dxtn
authorRudolf Polzer <divverent@xonotic.org>
Tue, 12 Jul 2011 19:51:45 +0000 (21:51 +0200)
committerRudolf Polzer <divverent@xonotic.org>
Thu, 14 Jul 2011 17:12:23 +0000 (19:12 +0200)
s2tc_compressor.cpp
s2tc_libtxc_dxtn.c

index dbd81e5..5816172 100644 (file)
@@ -550,5 +550,11 @@ void rgb565_image(unsigned char *out, const unsigned char *rgba, int w, int h, i
                        for(x = 0; x < w; ++x)
                                out[(x + y * w) * 4 + 3] = diffuse(&diffuse_a, rgba[(x + y * w) * srccomps + 3] * (alpharange / 255.0));
        }
+       else
+       {
+               for(y = 0; y < h; ++y)
+                       for(x = 0; x < w; ++x)
+                               out[(x + y * w) * 4 + 3] = alpharange;
+       }
 }
 
index 3bf5dd5..d5f0d60 100644 (file)
@@ -10,7 +10,7 @@ void fetch_2d_texel_rgb_dxt1(GLint srcRowStride, const GLubyte *pixdata,
        // fetches a single texel (i,j) into pixdata (RGB)
        GLubyte *t = texel;
        const GLubyte *blksrc = (pixdata + ((srcRowStride + 3) / 4 * (j / 4) + (i / 4)) * 8);
-       unsigned int c = blksrc[i] + 256*blksrc[i+1] + 65536*blksrc[i+2] + 16777216*blksrc[i+3];
+       unsigned int c = blksrc[0] + 256*blksrc[1] + 65536*blksrc[2] + 16777216*blksrc[3];
        t[0] = (((c >> 11) & 0x1F) + ((c >> 27) & 0x1F)) * (0.5f / 31.0f * 255.0f);
        t[1] = (((c >>  5) & 0x3F) + ((c >> 21) & 0x3F)) * (0.5f / 63.0f * 255.0f);
        t[2] = (((c      ) & 0x1F) + ((c >> 16) & 0x1F)) * (0.5f / 31.0f * 255.0f);
@@ -22,7 +22,7 @@ void fetch_2d_texel_rgba_dxt1(GLint srcRowStride, const GLubyte *pixdata,
        // fetches a single texel (i,j) into pixdata (RGBA)
        GLubyte *t = texel;
        const GLubyte *blksrc = (pixdata + ((srcRowStride + 3) / 4 * (j / 4) + (i / 4)) * 8);
-       unsigned int c = blksrc[i] + 256*blksrc[i+1] + 65536*blksrc[i+2] + 16777216*blksrc[i+3];
+       unsigned int c = blksrc[0] + 256*blksrc[1] + 65536*blksrc[2] + 16777216*blksrc[3];
        t[0] = (((c >> 11) & 0x1F) + ((c >> 27) & 0x1F)) * (0.5f / 31.0f * 255.0f);
        t[1] = (((c >>  5) & 0x3F) + ((c >> 21) & 0x3F)) * (0.5f / 63.0f * 255.0f);
        t[2] = (((c      ) & 0x1F) + ((c >> 16) & 0x1F)) * (0.5f / 31.0f * 255.0f);
@@ -35,19 +35,19 @@ void fetch_2d_texel_rgba_dxt3(GLint srcRowStride, const GLubyte *pixdata,
        // fetches a single texel (i,j) into pixdata (RGBA)
        GLubyte *t = texel;
        const GLubyte *blksrc = (pixdata + ((srcRowStride + 3) / 4 * (j / 4) + (i / 4)) * 16) + 8;
-       unsigned int c = blksrc[i] + 256*blksrc[i+1] + 65536*blksrc[i+2] + 16777216*blksrc[i+3];
+       unsigned int c = blksrc[0] + 256*blksrc[1] + 65536*blksrc[2] + 16777216*blksrc[3];
        t[0] = (((c >> 11) & 0x1F) + ((c >> 27) & 0x1F)) * (0.5f / 31.0f * 255.0f);
        t[1] = (((c >>  5) & 0x3F) + ((c >> 21) & 0x3F)) * (0.5f / 63.0f * 255.0f);
        t[2] = (((c      ) & 0x1F) + ((c >> 16) & 0x1F)) * (0.5f / 31.0f * 255.0f);
        t[3] = (
-                         (blksrc[i-8] & 0x0F)
-                       + (blksrc[i-8] >> 4)
-                       + (blksrc[i-7] & 0x0F)
-                       + (blksrc[i-7] >> 4)
-                       + (blksrc[i-6] & 0x0F)
-                       + (blksrc[i-6] >> 4)
-                       + (blksrc[i-5] & 0x0F)
-                       + (blksrc[i-5] >> 4)
+                         (blksrc[-8] & 0x0F)
+                       + (blksrc[-8] >> 4)
+                       + (blksrc[-7] & 0x0F)
+                       + (blksrc[-7] >> 4)
+                       + (blksrc[-6] & 0x0F)
+                       + (blksrc[-6] >> 4)
+                       + (blksrc[-5] & 0x0F)
+                       + (blksrc[-5] >> 4)
               ) * (0.125f / 15.0f * 255.0f);
 }
 
@@ -57,11 +57,11 @@ void fetch_2d_texel_rgba_dxt5(GLint srcRowStride, const GLubyte *pixdata,
        // fetches a single texel (i,j) into pixdata (RGBA)
        GLubyte *t = texel;
        const GLubyte *blksrc = (pixdata + ((srcRowStride + 3) / 4 * (j / 4) + (i / 4)) * 16) + 8;
-       unsigned int c = blksrc[i] + 256*blksrc[i+1] + 65536*blksrc[i+2] + 16777216*blksrc[i+3];
+       unsigned int c = blksrc[0] + 256*blksrc[1] + 65536*blksrc[2] + 16777216*blksrc[3];
        t[0] = (((c >> 11) & 0x1F) + ((c >> 27) & 0x1F)) * (0.5f / 31.0f * 255.0f);
        t[1] = (((c >>  5) & 0x3F) + ((c >> 21) & 0x3F)) * (0.5f / 63.0f * 255.0f);
        t[2] = (((c      ) & 0x1F) + ((c >> 16) & 0x1F)) * (0.5f / 31.0f * 255.0f);
-       t[3] = (0.5 * blksrc[i-8] + 0.5 * blksrc[i-7]);
+       t[3] = (0.5 * blksrc[-8] + 0.5 * blksrc[-7]);
 }
 
 void tx_compress_dxtn(GLint srccomps, GLint width, GLint height,