Index: src/utils/SkTextureCompressor_LATC.cpp |
diff --git a/src/utils/SkTextureCompressor_LATC.cpp b/src/utils/SkTextureCompressor_LATC.cpp |
index 5db0fc6c04e609c4ad3c72a0393a3ec9ee870e51..9d42b4f71dcdeff40544ac7f9ae907bf407d3b0a 100644 |
--- a/src/utils/SkTextureCompressor_LATC.cpp |
+++ b/src/utils/SkTextureCompressor_LATC.cpp |
@@ -14,46 +14,6 @@ |
// much slower. The fast option is much faster, but much less accurate. YMMV. |
#define COMPRESS_LATC_SLOW 0 |
#define COMPRESS_LATC_FAST 1 |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// Generates an LATC palette. LATC constructs |
-// a palette of eight colors from LUM0 and LUM1 using the algorithm: |
-// |
-// LUM0, if lum0 > lum1 and code(x,y) == 0 |
-// LUM1, if lum0 > lum1 and code(x,y) == 1 |
-// (6*LUM0+ LUM1)/7, if lum0 > lum1 and code(x,y) == 2 |
-// (5*LUM0+2*LUM1)/7, if lum0 > lum1 and code(x,y) == 3 |
-// (4*LUM0+3*LUM1)/7, if lum0 > lum1 and code(x,y) == 4 |
-// (3*LUM0+4*LUM1)/7, if lum0 > lum1 and code(x,y) == 5 |
-// (2*LUM0+5*LUM1)/7, if lum0 > lum1 and code(x,y) == 6 |
-// ( LUM0+6*LUM1)/7, if lum0 > lum1 and code(x,y) == 7 |
-// |
-// LUM0, if lum0 <= lum1 and code(x,y) == 0 |
-// LUM1, if lum0 <= lum1 and code(x,y) == 1 |
-// (4*LUM0+ LUM1)/5, if lum0 <= lum1 and code(x,y) == 2 |
-// (3*LUM0+2*LUM1)/5, if lum0 <= lum1 and code(x,y) == 3 |
-// (2*LUM0+3*LUM1)/5, if lum0 <= lum1 and code(x,y) == 4 |
-// ( LUM0+4*LUM1)/5, if lum0 <= lum1 and code(x,y) == 5 |
-// 0, if lum0 <= lum1 and code(x,y) == 6 |
-// 255, if lum0 <= lum1 and code(x,y) == 7 |
- |
-static const int kLATCPaletteSize = 8; |
-static void generate_latc_palette(uint8_t palette[], uint8_t lum0, uint8_t lum1) { |
- palette[0] = lum0; |
- palette[1] = lum1; |
- if (lum0 > lum1) { |
- for (int i = 1; i < 7; i++) { |
- palette[i+1] = ((7-i)*lum0 + i*lum1) / 7; |
- } |
- } else { |
- for (int i = 1; i < 5; i++) { |
- palette[i+1] = ((5-i)*lum0 + i*lum1) / 5; |
- } |
- palette[6] = 0; |
- palette[7] = 255; |
- } |
-} |
//////////////////////////////////////////////////////////////////////////////// |
@@ -119,8 +79,46 @@ |
//////////////////////////////////////////////////////////////////////////////// |
// LATC compressed texels down into square 4x4 blocks |
+static const int kLATCPaletteSize = 8; |
static const int kLATCBlockSize = 4; |
static const int kLATCPixelsPerBlock = kLATCBlockSize * kLATCBlockSize; |
+ |
+// Generates an LATC palette. LATC constructs |
+// a palette of eight colors from LUM0 and LUM1 using the algorithm: |
+// |
+// LUM0, if lum0 > lum1 and code(x,y) == 0 |
+// LUM1, if lum0 > lum1 and code(x,y) == 1 |
+// (6*LUM0+ LUM1)/7, if lum0 > lum1 and code(x,y) == 2 |
+// (5*LUM0+2*LUM1)/7, if lum0 > lum1 and code(x,y) == 3 |
+// (4*LUM0+3*LUM1)/7, if lum0 > lum1 and code(x,y) == 4 |
+// (3*LUM0+4*LUM1)/7, if lum0 > lum1 and code(x,y) == 5 |
+// (2*LUM0+5*LUM1)/7, if lum0 > lum1 and code(x,y) == 6 |
+// ( LUM0+6*LUM1)/7, if lum0 > lum1 and code(x,y) == 7 |
+// |
+// LUM0, if lum0 <= lum1 and code(x,y) == 0 |
+// LUM1, if lum0 <= lum1 and code(x,y) == 1 |
+// (4*LUM0+ LUM1)/5, if lum0 <= lum1 and code(x,y) == 2 |
+// (3*LUM0+2*LUM1)/5, if lum0 <= lum1 and code(x,y) == 3 |
+// (2*LUM0+3*LUM1)/5, if lum0 <= lum1 and code(x,y) == 4 |
+// ( LUM0+4*LUM1)/5, if lum0 <= lum1 and code(x,y) == 5 |
+// 0, if lum0 <= lum1 and code(x,y) == 6 |
+// 255, if lum0 <= lum1 and code(x,y) == 7 |
+ |
+static void generate_latc_palette(uint8_t palette[], uint8_t lum0, uint8_t lum1) { |
+ palette[0] = lum0; |
+ palette[1] = lum1; |
+ if (lum0 > lum1) { |
+ for (int i = 1; i < 7; i++) { |
+ palette[i+1] = ((7-i)*lum0 + i*lum1) / 7; |
+ } |
+ } else { |
+ for (int i = 1; i < 5; i++) { |
+ palette[i+1] = ((5-i)*lum0 + i*lum1) / 5; |
+ } |
+ palette[6] = 0; |
+ palette[7] = 255; |
+ } |
+} |
// Compress a block by using the bounding box of the pixels. It is assumed that |
// there are no extremal pixels in this block otherwise we would have used |
@@ -395,24 +393,6 @@ |
#endif // COMPRESS_LATC_FAST |
-void decompress_latc_block(uint8_t* dst, int dstRowBytes, const uint8_t* src) { |
- uint64_t block = SkEndian_SwapLE64(*(reinterpret_cast<const uint64_t *>(src))); |
- uint8_t lum0 = block & 0xFF; |
- uint8_t lum1 = (block >> 8) & 0xFF; |
- |
- uint8_t palette[kLATCPaletteSize]; |
- generate_latc_palette(palette, lum0, lum1); |
- |
- block >>= 16; |
- for (int j = 0; j < 4; ++j) { |
- for (int i = 0; i < 4; ++i) { |
- dst[i] = palette[block & 0x7]; |
- block >>= 3; |
- } |
- dst += dstRowBytes; |
- } |
-} |
- |
//////////////////////////////////////////////////////////////////////////////// |
namespace SkTextureCompressor { |
@@ -438,14 +418,4 @@ |
#endif |
} |
-void DecompressLATC(uint8_t* dst, int dstRowBytes, const uint8_t* src, int width, int height) { |
- for (int j = 0; j < height; j += 4) { |
- for (int i = 0; i < width; i += 4) { |
- decompress_latc_block(dst + i, dstRowBytes, src); |
- src += 8; |
- } |
- dst += 4 * dstRowBytes; |
- } |
-} |
- |
} // SkTextureCompressor |