Add interface to specify color transformations.

2.0
castano 17 years ago
parent 5c95f5d5e6
commit 1b73dcaf7e

@ -83,6 +83,9 @@ void InputOptions::reset()
m.inputGamma = 2.2f;
m.outputGamma = 2.2f;
m.colorTransform = ColorTransform_None;
m.linearTransform = Matrix(identity);
m.generateMipmaps = false;
m.maxLevel = -1;
m.mipmapFilter = MipmapFilter_Box;
@ -258,3 +261,18 @@ void InputOptions::setNormalizeMipmaps(bool normalize)
{
m.normalizeMipmaps = normalize;
}
/// Set color transform.
void InputOptions::setColorTransform(ColorTransform t)
{
m.colorTransform = t;
}
// Set linear transform for the given channel.
void InputOptions::setLinearTransfrom(int channel, float w0, float w1, float w2, float w3)
{
nvCheck(channel >= 0 && channel < 4);
Vector4 w(w0, w1, w2, w3);
//m.linearTransform.setRow(channel, w);
}

@ -26,6 +26,7 @@
#include <nvcore/Ptr.h>
#include <nvmath/Vector.h>
#include <nvmath/Matrix.h>
#include <nvimage/Image.h>
#include "nvtt.h"
@ -58,7 +59,11 @@ namespace nvtt
// Gamma conversion.
float inputGamma;
float outputGamma;
// Color transform.
ColorTransform colorTransform;
nv::Matrix linearTransform;
// Mipmap generation options.
bool generateMipmaps;
int maxLevel;
@ -73,6 +78,7 @@ namespace nvtt
// Cone map options.
bool convertToConeMap;
};
// Internal image structure.

@ -459,6 +459,14 @@ bool nvtt::compress(const InputOptions & inputOptions, const OutputOptions & out
img = toFixedImage(floatImage.ptr(), inputOptions.m);
}
// @@ Where to do the color transform?
// - Color transform may not be linear, so we cannot do before computing mipmaps.
// - Should be done in linear space, that is, after gamma correction.
// @@ Error! gamma correction is not performed when mipmap data provied.
// @@ This code is too complicated, too prone to erros, and hard to understand. Must be simplified!
quantize(img, inputOptions.m, format);
compressMipmap(img, outputOptions, compressionOptions.m);

@ -139,7 +139,13 @@ namespace nvtt
MipmapFilter_Kaiser, ///< Kaiser-windowed Sinc filter is the best downsampling filter.
};
enum ColorTransform
{
ColorTransform_None,
ColorTransform_Linear,
ColorTransform_CoYCg,
ColorTransform_CoSCgY,
};
/// Input options. Specify format and layout of the input texture.
struct InputOptions
@ -179,6 +185,10 @@ namespace nvtt
NVTT_API void setNormalFilter(float small, float medium, float big, float large);
NVTT_API void setNormalizeMipmaps(bool b);
// Set color transforms.
NVTT_API void setColorTransform(ColorTransform t);
NVTT_API void setLinearTransfrom(int channel, float w0, float w1, float w2, float w3);
//private:
struct Private;
Private & m;

Loading…
Cancel
Save