Files
FC1/RenderDll/Common/Textures/nvdxt_options.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

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;