Merge changes from The Witness.
This commit is contained in:
@ -92,8 +92,8 @@ void ClusterFit::setColourSet(const ColorSet * set)
|
||||
{
|
||||
int p = order[i];
|
||||
#if NVTT_USE_SIMD
|
||||
NV_ALIGN_16 Vector4 tmp(values[p] * set->weights[p], set->weights[p]);
|
||||
m_weighted[i] = SimdVector(tmp.component);
|
||||
NV_ALIGN_16 Vector4 tmp(values[p], 1);
|
||||
m_weighted[i] = SimdVector(tmp.component) * SimdVector(set->weights[p]);
|
||||
m_xxsum += m_weighted[i] * m_weighted[i];
|
||||
m_xsum += m_weighted[i];
|
||||
#else
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "nvimage/BlockDXT.h"
|
||||
|
||||
#include "nvmath/Vector.inl"
|
||||
#include "nvmath/Color.inl"
|
||||
|
||||
#include "nvcore/Memory.h"
|
||||
|
||||
@ -111,18 +112,15 @@ void FastCompressorDXT5n::compressBlock(ColorBlock & rgba, nvtt::AlphaMode alpha
|
||||
QuickCompress::compressDXT5(rgba, block);
|
||||
}
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
void CompressorDXT1::compressBlock(ColorSet & set, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output)
|
||||
{
|
||||
set.setUniformWeights();
|
||||
set.createMinimalSet(false);
|
||||
|
||||
ClusterFit fit;
|
||||
fit.setMetric(compressionOptions.colorWeight);
|
||||
set.createMinimalSet(/*ignoreTransparent*/false);
|
||||
|
||||
BlockDXT1 * block = new(output) BlockDXT1;
|
||||
|
||||
if (set.isSingleColor(true))
|
||||
if (set.isSingleColor(/*ignoreAlpha*/true))
|
||||
{
|
||||
Color32 c;
|
||||
c.r = uint8(clamp(set.colors[0].x, 0.0f, 1.0f) * 255);
|
||||
@ -133,16 +131,19 @@ void CompressorDXT1::compressBlock(ColorSet & set, nvtt::AlphaMode alphaMode, co
|
||||
}
|
||||
else
|
||||
{
|
||||
ClusterFit fit;
|
||||
fit.setMetric(compressionOptions.colorWeight);
|
||||
fit.setColourSet(&set);
|
||||
|
||||
Vector3 start, end;
|
||||
|
||||
fit.compress4(&start, &end);
|
||||
QuickCompress::outputBlock4(set, start, end, block);
|
||||
|
||||
if (fit.compress3(&start, &end)) {
|
||||
QuickCompress::outputBlock3(set, start, end, block);
|
||||
}
|
||||
else {
|
||||
QuickCompress::outputBlock4(set, start, end, block);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
@ -219,16 +220,15 @@ void CompressorDXT3::compressBlock(ColorBlock & rgba, nvtt::AlphaMode alphaMode,
|
||||
nvsquish::WeightedClusterFit fit;
|
||||
fit.SetMetric(compressionOptions.colorWeight.x, compressionOptions.colorWeight.y, compressionOptions.colorWeight.z);
|
||||
|
||||
int flags = 0;
|
||||
if (alphaMode == nvtt::AlphaMode_Transparency) flags |= nvsquish::kWeightColourByAlpha;
|
||||
int flags = 0;
|
||||
if (alphaMode == nvtt::AlphaMode_Transparency) flags |= nvsquish::kWeightColourByAlpha;
|
||||
|
||||
nvsquish::ColourSet colours((uint8 *)rgba.colors(), flags);
|
||||
fit.SetColourSet(&colours, 0);
|
||||
fit.Compress(&block->color);
|
||||
nvsquish::ColourSet colours((uint8 *)rgba.colors(), flags);
|
||||
fit.SetColourSet(&colours, 0);
|
||||
fit.Compress(&block->color);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CompressorDXT5::compressBlock(ColorBlock & rgba, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output)
|
||||
{
|
||||
BlockDXT5 * block = new(output) BlockDXT5;
|
||||
|
@ -64,7 +64,7 @@ namespace nv
|
||||
|
||||
|
||||
// Normal CPU compressors.
|
||||
#if 1
|
||||
#if 0
|
||||
struct CompressorDXT1 : public ColorSetCompressor
|
||||
{
|
||||
virtual void compressBlock(ColorSet & set, nvtt::AlphaMode alphaMode, const nvtt::CompressionOptions::Private & compressionOptions, void * output);
|
||||
|
@ -310,7 +310,7 @@ void PixelFormatConverter::compress(nvtt::AlphaMode /*alphaMode*/, uint w, uint
|
||||
{
|
||||
for (uint y = 0; y < h; y++)
|
||||
{
|
||||
const float * src = (const float *)data + y * w;
|
||||
const float * src = (const float *)data + (z * h + y) * w;
|
||||
|
||||
BitStream stream(dst);
|
||||
|
||||
|
Reference in New Issue
Block a user