I've now got a basic ETC1 RDO compressor working. Clusterization is now used on both the block colors/intensity table indices and selectors. This compressor supports the entire ETC1 format: 2 subblocks per block, flipping, and both differential and individual block color modes.
Here's kodim14 using only 256 unique selector vectors and 256 block colors/intensity table indices:
This is just a bare minimum prototype. It doesn't support crunch-style macroblock tiling, or required things like mipmaps, texture arrays, etc. It's a proof of principle prototype that crunch-style RDO compression is totally doable in the full ETC1 format.
Here are more examples. I have PSNR and SSIM stats, which I'm going to focus on next.
16 block color, 16 selector clusters:
32, 32:
64, 64:
128, 128:
512, 512:
4096:
512 block color, 3072 selector clusters:
Here's kodim14 using only 256 unique selector vectors and 256 block colors/intensity table indices:
This is just a bare minimum prototype. It doesn't support crunch-style macroblock tiling, or required things like mipmaps, texture arrays, etc. It's a proof of principle prototype that crunch-style RDO compression is totally doable in the full ETC1 format.
Here are more examples. I have PSNR and SSIM stats, which I'm going to focus on next.
16 block color, 16 selector clusters:
32, 32:
64, 64:
128, 128:
512, 512:
4096:
512 block color, 3072 selector clusters: