diff --git a/src/nvtt/Context.cpp b/src/nvtt/Context.cpp index 37c201b..d5a9944 100644 --- a/src/nvtt/Context.cpp +++ b/src/nvtt/Context.cpp @@ -277,6 +277,11 @@ bool Compressor::Private::compress(const InputOptions::Private & inputOptions, c // Resize input. img.resize(w, h, d, ResizeFilter_Box); + // Apply color transform. + if (inputOptions.colorTransform == ColorTransform_YCoCg) { + img.toYCoCg(); + } + nvtt::Surface tmp = img; if (!img.isNormalMap()) { tmp.toGamma(inputOptions.outputGamma); diff --git a/src/nvtt/InputOptions.cpp b/src/nvtt/InputOptions.cpp index 04861cd..95af5e6 100644 --- a/src/nvtt/InputOptions.cpp +++ b/src/nvtt/InputOptions.cpp @@ -104,6 +104,8 @@ void InputOptions::reset() m.inputGamma = 2.2f; m.outputGamma = 2.2f; + m.colorTransform = ColorTransform_None; + m.generateMipmaps = true; m.maxLevel = -1; m.mipmapFilter = MipmapFilter_Box; @@ -337,6 +339,12 @@ 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. // Stub for ABI compatibily, never implemented void InputOptions::setLinearTransform(int, float, float, float, float) diff --git a/src/nvtt/InputOptions.h b/src/nvtt/InputOptions.h index b28c8fb..c8c9073 100644 --- a/src/nvtt/InputOptions.h +++ b/src/nvtt/InputOptions.h @@ -55,6 +55,9 @@ namespace nvtt float inputGamma; float outputGamma; + // Color transform. + ColorTransform colorTransform; + // Mipmap generation options. bool generateMipmaps; int maxLevel; diff --git a/src/nvtt/nvtt.h b/src/nvtt/nvtt.h index b3b6166..049dad9 100644 --- a/src/nvtt/nvtt.h +++ b/src/nvtt/nvtt.h @@ -249,6 +249,17 @@ namespace nvtt ResizeFilter_Mitchell, }; + // Color transformation. + // deprecated since 2.1.0 + enum ColorTransform + { + ColorTransform_None, + ColorTransform_Linear, + ColorTransform_Swizzle, + ColorTransform_YCoCg, + ColorTransform_ScaledYCoCg, + }; + // Extents rounding mode. enum RoundMode { @@ -323,6 +334,7 @@ namespace nvtt NVTT_API void setNormalizeMipmaps(bool b); // Set color transforms. + NVTT_API void setColorTransform(ColorTransform t); NVTT_API void setLinearTransform(int channel, float w0, float w1, float w2, float w3); // Set resizing options.