|
|
|
@ -22,7 +22,6 @@
|
|
|
|
|
// OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
|
|
|
|
|
|
#include "BlockDXT.h"
|
|
|
|
|
|
|
|
|
|
#include "ColorBlock.h"
|
|
|
|
|
|
|
|
|
|
#include "nvcore/Stream.h"
|
|
|
|
@ -39,17 +38,17 @@ using namespace nv;
|
|
|
|
|
uint BlockDXT1::evaluatePalette(Color32 color_array[4]) const
|
|
|
|
|
{
|
|
|
|
|
// Does bit expansion before interpolation.
|
|
|
|
|
color_array[0].r = (col0.r << 3) | (col0.r >> 2);
|
|
|
|
|
color_array[0].g = (col0.g << 2) | (col0.g >> 4);
|
|
|
|
|
color_array[0].b = (col0.b << 3) | (col0.b >> 2);
|
|
|
|
|
color_array[0].g = (col0.g << 2) | (col0.g >> 4);
|
|
|
|
|
color_array[0].r = (col0.r << 3) | (col0.r >> 2);
|
|
|
|
|
color_array[0].a = 0xFF;
|
|
|
|
|
|
|
|
|
|
// @@ Same as above, but faster?
|
|
|
|
|
// Color32 c;
|
|
|
|
|
// c.u = ((col0.u << 3) & 0xf8) | ((col0.u << 5) & 0xfc00) | ((col0.u << 8) & 0xf80000);
|
|
|
|
|
// c.u |= (c.u >> 5) & 0x070007;
|
|
|
|
|
// c.u |= (c.u >> 6) & 0x000300;
|
|
|
|
|
// color_array[0].u = c.u;
|
|
|
|
|
// Color32 c;
|
|
|
|
|
// c.u = ((col0.u << 3) & 0xf8) | ((col0.u << 5) & 0xfc00) | ((col0.u << 8) & 0xf80000);
|
|
|
|
|
// c.u |= (c.u >> 5) & 0x070007;
|
|
|
|
|
// c.u |= (c.u >> 6) & 0x000300;
|
|
|
|
|
// color_array[0].u = c.u;
|
|
|
|
|
|
|
|
|
|
color_array[1].r = (col1.r << 3) | (col1.r >> 2);
|
|
|
|
|
color_array[1].g = (col1.g << 2) | (col1.g >> 4);
|
|
|
|
@ -57,10 +56,10 @@ uint BlockDXT1::evaluatePalette(Color32 color_array[4]) const
|
|
|
|
|
color_array[1].a = 0xFF;
|
|
|
|
|
|
|
|
|
|
// @@ Same as above, but faster?
|
|
|
|
|
// c.u = ((col1.u << 3) & 0xf8) | ((col1.u << 5) & 0xfc00) | ((col1.u << 8) & 0xf80000);
|
|
|
|
|
// c.u |= (c.u >> 5) & 0x070007;
|
|
|
|
|
// c.u |= (c.u >> 6) & 0x000300;
|
|
|
|
|
// color_array[1].u = c.u;
|
|
|
|
|
// c.u = ((col1.u << 3) & 0xf8) | ((col1.u << 5) & 0xfc00) | ((col1.u << 8) & 0xf80000);
|
|
|
|
|
// c.u |= (c.u >> 5) & 0x070007;
|
|
|
|
|
// c.u |= (c.u >> 6) & 0x000300;
|
|
|
|
|
// color_array[1].u = c.u;
|
|
|
|
|
|
|
|
|
|
if( col0.u > col1.u ) {
|
|
|
|
|
// Four-color block: derive the other two colors.
|
|
|
|
@ -97,14 +96,14 @@ uint BlockDXT1::evaluatePalette(Color32 color_array[4]) const
|
|
|
|
|
uint BlockDXT1::evaluatePaletteNV5x(Color32 color_array[4]) const
|
|
|
|
|
{
|
|
|
|
|
// Does bit expansion before interpolation.
|
|
|
|
|
color_array[0].r = (3 * col0.r * 22) / 8;
|
|
|
|
|
color_array[0].b = col0.b * 22 / 8;
|
|
|
|
|
color_array[0].g = (col0.g << 2) | (col0.g >> 4);
|
|
|
|
|
color_array[0].b = (3 * col0.b * 22) / 8;
|
|
|
|
|
color_array[0].r = col0.r * 22 / 8;
|
|
|
|
|
color_array[0].a = 0xFF;
|
|
|
|
|
|
|
|
|
|
color_array[1].r = (3 * col1.r * 22) / 8;
|
|
|
|
|
color_array[1].r = col1.r * 22 / 8;
|
|
|
|
|
color_array[1].g = (col1.g << 2) | (col1.g >> 4);
|
|
|
|
|
color_array[1].b = (3 * col1.b * 22) / 8;
|
|
|
|
|
color_array[1].b = col1.b * 22 / 8;
|
|
|
|
|
color_array[1].a = 0xFF;
|
|
|
|
|
|
|
|
|
|
if( col0.u > col1.u ) {
|
|
|
|
@ -117,8 +116,8 @@ uint BlockDXT1::evaluatePaletteNV5x(Color32 color_array[4]) const
|
|
|
|
|
color_array[3].r = (2 * col1.r + col0.r) * 22 / 8;
|
|
|
|
|
color_array[3].g = (256 * color_array[1].g + (color_array[0].g - color_array[1].g)/4 + 128 + (color_array[0].g - color_array[1].g) * 80) / 256;
|
|
|
|
|
color_array[3].b = (2 * col1.b + col0.b) * 22 / 8;
|
|
|
|
|
|
|
|
|
|
color_array[3].a = 0xFF;
|
|
|
|
|
|
|
|
|
|
return 4;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
@ -224,7 +223,6 @@ void BlockDXT1::decodeBlockNV5x(ColorBlock * block) const
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void BlockDXT1::setIndices(int * idx)
|
|
|
|
|
{
|
|
|
|
|
indices = 0;
|
|
|
|
|