596 lines
15 KiB
C++
596 lines
15 KiB
C++
/****************************************************************************************
|
|
|
|
Copyright (C) NVIDIA Corporation 2003
|
|
|
|
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
|
|
*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
|
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
|
|
BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
|
|
WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
|
|
BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
|
|
ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
|
|
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
|
|
*****************************************************************************************/
|
|
#pragma once
|
|
|
|
#if defined(LINUX)
|
|
#include "WinBase.h"
|
|
#else
|
|
#include <windows.h>
|
|
#endif
|
|
|
|
typedef HRESULT (*MIPcallback)(void * data, int miplevel, DWORD size, int width, int height, void * user_data);
|
|
|
|
|
|
inline char * GetDXTCVersion() { return "Version 6.54";}
|
|
|
|
|
|
enum
|
|
{
|
|
|
|
dBackgroundNameStatic = 3,
|
|
dProfileDirNameStatic = 4,
|
|
dSaveButton = 5,
|
|
dProfileNameStatic = 6,
|
|
|
|
|
|
|
|
|
|
|
|
dbSwapRGB = 29,
|
|
dGenerateMipMaps = 30,
|
|
dMIPMapSourceFirst = dGenerateMipMaps,
|
|
dUseExistingMipMaps = 31,
|
|
dNoMipMaps = 32,
|
|
dMIPMapSourceLast = dNoMipMaps,
|
|
|
|
dSpecifiedMipMapsCombo = 39,
|
|
|
|
|
|
|
|
dbShowDifferences = 40,
|
|
dbShowFiltering = 41,
|
|
dbShowMipMapping = 42,
|
|
dbShowAnisotropic = 43,
|
|
|
|
dChangeClearColorButton = 50,
|
|
dDitherColor = 53,
|
|
|
|
dLoadBackgroundImageButton = 54,
|
|
dUseBackgroundImage = 55,
|
|
|
|
dbBinaryAlpha = 56,
|
|
dAlphaBlending = 57,
|
|
|
|
dFadeColor = 58, //.
|
|
dFadeAlpha = 59,
|
|
|
|
dFadeToColorButton = 60,
|
|
dAlphaBorder = 61,
|
|
dBorder = 62,
|
|
dBorderColorButton = 63,
|
|
|
|
dNormalMapCombo = 64,
|
|
|
|
dDitherMIP0 = 66,
|
|
dGreyScale = 67,
|
|
dQuickCompress = 68,
|
|
dLightingEnable = 69,
|
|
|
|
dbPreviewDisableMIPmaps = 71,
|
|
|
|
// WarpSharp is currently disabled
|
|
/*dSharpenEdgeRadius = 71,
|
|
dSharpenLambda = 72,
|
|
dSharpenMu = 73,
|
|
dSharpenTheta = 74,
|
|
dbSharpenUseTwoComponents = 75,
|
|
dbSharpenNonMaximalSuppression = 76,
|
|
dbSharpenFlavor2 = 77,
|
|
dbSharpenSharpBlur = 78,*/
|
|
|
|
dZoom = 79,
|
|
|
|
|
|
dTextureTypeCombo = 80,
|
|
|
|
dFadeAmount = 90,
|
|
dFadeToAlpha = 91,
|
|
dFadeToDelay = 92,
|
|
|
|
dBinaryAlphaThreshold = 94,
|
|
|
|
dFilterGamma = 100,
|
|
dFilterBlur = 101,
|
|
dFilterWidth = 102,
|
|
dbOverrideFilterWidth = 103,
|
|
dLoadProfile = 104,
|
|
dSaveProfile = 105,
|
|
dSharpenMethodCombo = 106,
|
|
dProfileCombo = 107,
|
|
dSelectProfileDirectory = 108,
|
|
|
|
|
|
|
|
|
|
|
|
dViewDXT1 = 200,
|
|
dViewDXT2 = 201,
|
|
dViewDXT3 = 202,
|
|
dViewDXT5 = 203,
|
|
dViewA4R4G4B4 = 204,
|
|
dViewA1R5G5B5 = 205,
|
|
dViewR5G6B5 = 206,
|
|
dViewA8R8G8B8 = 207,
|
|
|
|
|
|
// 3d viewing options
|
|
d3DPreviewButton = 300,
|
|
d2DPreviewButton = 301,
|
|
dPreviewRefresh = 302,
|
|
|
|
|
|
|
|
|
|
dAskToLoadMIPMaps = 400,
|
|
dShowAlphaWarning = 401,
|
|
dShowPower2Warning = 402,
|
|
dTextureFormatBasedOnAlpha = 403,
|
|
dSystemMessage = 404,
|
|
dHidePreviewButtons = 405,
|
|
|
|
dSpecifyAlphaBlendingButton = 500,
|
|
dUserSpecifiedFadingAmounts = 501,
|
|
dSharpenSettingsButton = 502,
|
|
dFilterSettingsButton = 503,
|
|
dNormalMapGenerationSettingsButton = 504,
|
|
dConfigSettingsButton = 505,
|
|
dFadingDialogButton = 506,
|
|
dPreviewDialogButton = 507,
|
|
dResetDefaultsButton = 508,
|
|
dImageDialogButton = 510,
|
|
|
|
|
|
|
|
dSaveTextureFormatCombo = 600,
|
|
dMIPFilterCombo = 601,
|
|
|
|
|
|
/////////// Normal Map
|
|
|
|
|
|
dScaleEditText = 1003,
|
|
dProxyItem = 1005,
|
|
dMinZEditText = 1008,
|
|
|
|
|
|
|
|
dALPHA = 1009,
|
|
dFirstCnvRadio = dALPHA,
|
|
dAVERAGE_RGB = 1010,
|
|
dBIASED_RGB = 1011,
|
|
dRED = 1012,
|
|
dGREEN = 1013,
|
|
dBLUE = 1014,
|
|
dMAX = 1015,
|
|
dCOLORSPACE = 1016,
|
|
dNORMALIZE = 1017,
|
|
dConvertToHeightMap = 1018,
|
|
dLastCnvRadio = dConvertToHeightMap,
|
|
|
|
d3DPreview = 1021,
|
|
dDecalTexture = 1022,
|
|
dbUseDecalTexture = 1023,
|
|
dbBrighten = 1024,
|
|
dbAnimateLight = 1025,
|
|
dStaticDecalName = 1026,
|
|
dbSignedOutput = 1027,
|
|
dbNormalMapSwapRGB = 1028,
|
|
|
|
|
|
dbWrap = 1030,
|
|
dbMultipleLayers = 1031,
|
|
db_16_16 = 1032,
|
|
|
|
dAlphaNone = 1033,
|
|
dFirstAlphaRadio = dAlphaNone,
|
|
dAlphaHeight = 1034,
|
|
dAlphaClear = 1035,
|
|
dAlphaWhite = 1036,
|
|
dLastAlphaRadio = dAlphaWhite,
|
|
|
|
dbInvertY = 1037,
|
|
db_12_12_8 = 1038,
|
|
dbInvertX = 1039,
|
|
|
|
dFilter4x = 1040,
|
|
dFirstFilterRadio = dFilter4x,
|
|
dFilter3x3 = 1041,
|
|
dFilter5x5 = 1042,
|
|
dFilterDuDv = 1043,
|
|
dFilter7x7 = 1044,
|
|
dFilter9x9 = 1045,
|
|
dLastFilterRadio = dFilter9x9,
|
|
|
|
|
|
dbNormalMapConversion = 1050,
|
|
dbErrorDiffusion = 1051,
|
|
|
|
|
|
dCustomFilterFirst = 2000,
|
|
// 5x5 Filter 0- 24
|
|
|
|
dCustomDiv = 2025,
|
|
dCustomBias = 2026,
|
|
|
|
dUnSharpRadius = 2027,
|
|
dUnSharpAmount = 2028,
|
|
dUnSharpThreshold = 2029,
|
|
|
|
dXSharpenStrength = 2030,
|
|
dXSharpenThreshold = 2031,
|
|
|
|
/*dWarpSharpenDisplaceAmount = 2032,
|
|
dWarpSharpenEdgeStrength = 2033,
|
|
dWarpSharpenRadius = 2034,
|
|
dWarpSharpenDepth = 2035,
|
|
dWarpSharpenElevation = 2036,*/
|
|
|
|
dCustomFilterLast = dXSharpenThreshold,
|
|
|
|
|
|
dSharpenTimesMIP0 = 2100,
|
|
dSharpenTimesFirst = dSharpenTimesMIP0,
|
|
|
|
dSharpenTimesMIP1 = 2101,
|
|
dSharpenTimesMIP2 = 2102,
|
|
dSharpenTimesMIP3 = 2103,
|
|
dSharpenTimesMIP4 = 2104,
|
|
dSharpenTimesMIP5 = 2105,
|
|
dSharpenTimesMIP6 = 2106,
|
|
dSharpenTimesMIP7 = 2107,
|
|
dSharpenTimesMIP8 = 2108,
|
|
dSharpenTimesMIP9 = 2109,
|
|
dSharpenTimesMIP10 = 2110,
|
|
dSharpenTimesMIP11 = 2111,
|
|
dSharpenTimesMIP12 = 2112,
|
|
dSharpenTimesMIP13 = 2113,
|
|
dSharpenTimesLast = dSharpenTimesMIP13,
|
|
|
|
dDeriveDiv = 2200, // balance
|
|
dDeriveBias = 2201,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
#ifndef TRGBA
|
|
#define TRGBA
|
|
typedef struct
|
|
{
|
|
unsigned char rgba[4];
|
|
} rgba_t;
|
|
#endif
|
|
|
|
#ifndef TPIXEL
|
|
#define TPIXEL
|
|
union tPixel
|
|
{
|
|
unsigned long u;
|
|
rgba_t c;
|
|
};
|
|
#endif
|
|
|
|
|
|
// Windows handle for our plug-in (seen as a dynamically linked library):
|
|
extern HANDLE hDllInstance;
|
|
class CMyD3DApplication;
|
|
|
|
typedef enum RescaleTypes
|
|
{
|
|
RESCALE_NONE, // no rescale
|
|
RESCALE_NEAREST_POWER2, // rescale to nearest power of two
|
|
RESCALE_BIGGEST_POWER2, // rescale to next bigger power of 2
|
|
RESCALE_SMALLEST_POWER2, // rescale to smaller power of 2
|
|
RESCALE_NEXT_SMALLEST_POWER2, // rescale to next smaller power of 2
|
|
RESCALE_PRESCALE, // rescale to this size
|
|
RESCALE_RELSCALE, // relative rescale
|
|
RESCALE_CLAMP, //
|
|
RESCALE_LAST, //
|
|
|
|
|
|
} RescaleTypes;
|
|
|
|
|
|
enum SharpenFilterTypes
|
|
{
|
|
kSharpenFilterNone,
|
|
kSharpenFilterNegative,
|
|
kSharpenFilterLighter,
|
|
kSharpenFilterDarker,
|
|
kSharpenFilterContrastMore,
|
|
kSharpenFilterContrastLess,
|
|
kSharpenFilterSmoothen,
|
|
kSharpenFilterSharpenSoft,
|
|
kSharpenFilterSharpenMedium,
|
|
kSharpenFilterSharpenStrong,
|
|
kSharpenFilterFindEdges,
|
|
kSharpenFilterContour,
|
|
kSharpenFilterEdgeDetect,
|
|
kSharpenFilterEdgeDetectSoft,
|
|
kSharpenFilterEmboss,
|
|
kSharpenFilterMeanRemoval,
|
|
kSharpenFilterUnSharp,
|
|
kSharpenFilterXSharpen,
|
|
kSharpenFilterWarpSharp,
|
|
kSharpenFilterCustom,
|
|
kSharpenFilterLast,
|
|
};
|
|
|
|
|
|
|
|
enum MIPFilterTypes
|
|
{
|
|
kMIPFilterPoint ,
|
|
kMIPFilterBox ,
|
|
kMIPFilterTriangle ,
|
|
kMIPFilterQuadratic ,
|
|
kMIPFilterCubic ,
|
|
|
|
kMIPFilterCatrom ,
|
|
kMIPFilterMitchell ,
|
|
|
|
kMIPFilterGaussian ,
|
|
kMIPFilterSinc ,
|
|
kMIPFilterBessel ,
|
|
|
|
kMIPFilterHanning ,
|
|
kMIPFilterHamming ,
|
|
kMIPFilterBlackman ,
|
|
kMIPFilterKaiser,
|
|
kMIPFilterLast,
|
|
};
|
|
|
|
|
|
enum TextureFormats
|
|
{
|
|
kDXT1 ,
|
|
kDXT1a , // DXT1 with one bit alpha
|
|
kDXT3 , // explicit alpha
|
|
kDXT5 , // interpolated alpha
|
|
k4444 , // a4 r4 g4 b4
|
|
k1555 , // a1 r5 g5 b5
|
|
k565 , // a0 r5 g6 b5
|
|
k8888 , // a8 r8 g8 b8
|
|
k888 , // a0 r8 g8 b8
|
|
k555 , // a0 r5 g5 b5
|
|
k8 , // paletted
|
|
kV8U8 , // DuDv
|
|
kCxV8U8 , // normal map
|
|
kA8 , // alpha only
|
|
k4 , // 16 bit color
|
|
kQ8W8V8U8,
|
|
kA8L8,
|
|
kTextureFormatLast
|
|
};
|
|
|
|
|
|
enum TextureTypes
|
|
{
|
|
kTextureType2D,
|
|
kTextureTypeCube,
|
|
kTextureTypeVolume,
|
|
kTextureTypeLast,
|
|
};
|
|
|
|
enum NormalMapTypes
|
|
{
|
|
kColorTextureMap,
|
|
kTangentSpaceNormalMap,
|
|
kObjectSpaceNormalMap,
|
|
};
|
|
|
|
|
|
#define CUSTOM_FILTER_ENTRIES 27
|
|
#define UNSHARP_ENTRIES 3
|
|
#define XSHARP_ENTRIES 3
|
|
//#define WARPSHARP_ENTRIES 5
|
|
|
|
#define CUSTOM_DATA_ENTRIES (CUSTOM_FILTER_ENTRIES+UNSHARP_ENTRIES+XSHARP_ENTRIES)
|
|
#define SHARP_TIMES_ENTRIES 14
|
|
|
|
typedef struct CompressionOptions
|
|
{
|
|
CompressionOptions()
|
|
{
|
|
|
|
rescaleImageType = RESCALE_NONE;
|
|
scaleX = 1;
|
|
scaleY = 1;
|
|
|
|
//bMipMapsInImage = false; // mip have been loaded in during read
|
|
|
|
MipMapType = dGenerateMipMaps; // dNoMipMaps, dUseExistingMipMaps, dGenerateMipMaps
|
|
SpecifiedMipMaps = 0; // if dSpecifyMipMaps or dUseExistingMipMaps is set (number of mipmaps to generate)
|
|
|
|
MIPFilterType = kMIPFilterTriangle; // for MIP maps
|
|
/*
|
|
for MIPFilterType, specify one betwee dMIPFilterFirst and dMIPFilterLast
|
|
*/
|
|
|
|
|
|
bBinaryAlpha = false; // zero or one alpha channel
|
|
|
|
normalMapType = kColorTextureMap;
|
|
|
|
bAlphaBorder= false; // make an alpha border
|
|
bBorder= false; // make a color border
|
|
BorderColor.u = 0; // color of border
|
|
|
|
|
|
bFadeColor = false; // fade color over MIP maps
|
|
bFadeAlpha = false; // fade alpha over MIP maps
|
|
|
|
FadeToColor.u = 0; // color to fade to
|
|
FadeToAlpha = 0; // alpha value to fade to (0-255)
|
|
|
|
FadeToDelay = 0; // start fading after 'n' MIP maps
|
|
|
|
FadeAmount = 0; // percentage of color to fade in
|
|
|
|
BinaryAlphaThreshold = 128; // When Binary Alpha is selected, below this value, alpha is zero
|
|
|
|
|
|
bDitherColor = false; // enable dithering during 16 bit conversion
|
|
bDitherMIP0 = false;// enable dithering during 16 bit conversion for each MIP level (after filtering)
|
|
bGreyScale = false; // treat image as a grey scale
|
|
bQuickCompress = false; // Fast compression scheme
|
|
bForceDXT1FourColors = false; // do not let DXT1 use 3 color representation
|
|
|
|
|
|
SharpenFilterType = kSharpenFilterNone;
|
|
bErrorDiffusion = false;
|
|
|
|
// sharpening after creating each MIP map level
|
|
// warp sharp filter parameters
|
|
// look here for details:
|
|
//
|
|
// "Enhancement by Image-Dependent Warping",
|
|
// IEEE Transactions on Image Processing, 1999, Vol. 8, No. 8, S. 1063
|
|
// Nur Arad and Craig Gotsman
|
|
// http://www.cs.technion.ac.il/~gotsman/AmendedPubl/EnhancementByImage/EnhancementByI-D.pdf
|
|
|
|
|
|
|
|
|
|
/*SharpenEdgeRadius = 2;
|
|
SharpenLambda = 10.0f;
|
|
SharpenMu = 0.01f;
|
|
SharpenTheta = 0.75;
|
|
bSharpenUseTwoComponents = false;
|
|
bSharpenNonMaximalSuppression = false;
|
|
bSharpenSharpBlur = false;
|
|
bSharpenFlavor2 = false;*/
|
|
|
|
// gamma value for Kaiser, Light Linear
|
|
FilterGamma = 2.2f;
|
|
// alpha value for
|
|
FilterBlur = 1.0f;
|
|
// width of filter
|
|
FilterWidth = 10.0f;
|
|
bOverrideFilterWidth = false;
|
|
|
|
TextureType = kTextureType2D; // regular decal, cube or volume
|
|
/*
|
|
for TextureType, specify one of:
|
|
dTextureType2D
|
|
dTextureTypeCube
|
|
dTextureTypeImage
|
|
dTextureTypeVolume
|
|
*/
|
|
|
|
TextureFormat = kDXT1;
|
|
/*
|
|
for TextureFormat, specify any from dTextureFormatFirst to
|
|
dTextureFormatLast
|
|
|
|
|
|
*/
|
|
|
|
bSwapRGB = false; // swap color positions R and G
|
|
user_data = 0;
|
|
|
|
};
|
|
|
|
RescaleTypes rescaleImageType; // changes to just rescale
|
|
float scaleX;
|
|
float scaleY;
|
|
|
|
//bool bMipMapsInImage; // mip have been loaded in during read
|
|
short MipMapType; // dNoMipMaps, dSpecifyMipMaps, dUseExistingMipMaps, dGenerateMipMaps
|
|
|
|
short SpecifiedMipMaps; // if dSpecifyMipMaps or dUseExistingMipMaps is set (number of mipmaps to generate)
|
|
|
|
MIPFilterTypes MIPFilterType; // for MIP map, select from MIPFilterTypes
|
|
|
|
bool bBinaryAlpha; // zero or one alpha channel
|
|
|
|
NormalMapTypes normalMapType; //
|
|
|
|
bool bAlphaBorder; // make an alpha border
|
|
bool bBorder; // make a color border
|
|
tPixel BorderColor; // color of border
|
|
|
|
|
|
bool bFadeColor; // fade color over MIP maps
|
|
bool bFadeAlpha; // fade alpha over MIP maps
|
|
|
|
tPixel FadeToColor; // color to fade to
|
|
int FadeToAlpha; // alpha value to fade to (0-255)
|
|
|
|
int FadeToDelay; // start fading after 'n' MIP maps
|
|
|
|
int FadeAmount; // percentage of color to fade in
|
|
|
|
int BinaryAlphaThreshold; // When Binary Alpha is selected, below this value, alpha is zero
|
|
|
|
|
|
bool bDitherColor; // enable dithering during 16 bit conversion
|
|
bool bDitherMIP0;// enable dithering during 16 bit conversion for each MIP level (after filtering)
|
|
bool bGreyScale; // treat image as a grey scale
|
|
bool bQuickCompress; // Fast compression scheme
|
|
bool bForceDXT1FourColors; // do not let DXT1 use 3 color representation
|
|
|
|
|
|
// sharpening after creating each MIP map level
|
|
|
|
|
|
|
|
float custom_data[CUSTOM_DATA_ENTRIES];
|
|
int sharpening_passes_per_mip_level[SHARP_TIMES_ENTRIES];
|
|
|
|
SharpenFilterTypes SharpenFilterType;
|
|
|
|
bool bErrorDiffusion; // diffuse error
|
|
|
|
|
|
|
|
// warp sharp filter parameters (disabled)
|
|
// look here for details:
|
|
//
|
|
// "Enhancement by Image-Dependent Warping",
|
|
// IEEE Transactions on Image Processing, 1999, Vol. 8, No. 8, S. 1063
|
|
// Nur Arad and Craig Gotsman
|
|
// http://www.cs.technion.ac.il/~gotsman/AmendedPubl/EnhancementByImage/EnhancementByI-D.pdf
|
|
|
|
/*int SharpenEdgeRadius;
|
|
float SharpenLambda;
|
|
float SharpenMu;
|
|
float SharpenTheta;
|
|
bool bSharpenUseTwoComponents;
|
|
bool bSharpenNonMaximalSuppression;
|
|
bool bSharpenSharpBlur;
|
|
bool bSharpenFlavor2;*/
|
|
|
|
// gamma value for Kaiser, Light Linear
|
|
float FilterGamma; // not implemented yet
|
|
// alpha value for kaiser filter
|
|
float FilterBlur;
|
|
// width of filter
|
|
float FilterWidth;
|
|
|
|
bool bOverrideFilterWidth; // use the specified width,instead of the default
|
|
|
|
TextureTypes TextureType;
|
|
TextureFormats TextureFormat;
|
|
|
|
bool bSwapRGB; // swap color positions R and G
|
|
void * user_data;
|
|
|
|
} CompressionOptions;
|
|
|