1 
2 #include "nvtt.h"
3 #include "nvtt_wrapper.h"
4 
5 
6 // InputOptions class.
nvttCreateInputOptions()7 NvttInputOptions * nvttCreateInputOptions()
8 {
9 	return new nvtt::InputOptions();
10 }
11 
nvttDestroyInputOptions(NvttInputOptions * inputOptions)12 void nvttDestroyInputOptions(NvttInputOptions * inputOptions)
13 {
14 	delete inputOptions;
15 }
16 
nvttSetInputOptionsTextureLayout(NvttInputOptions * inputOptions,NvttTextureType type,int w,int h,int d)17 void nvttSetInputOptionsTextureLayout(NvttInputOptions * inputOptions, NvttTextureType type, int w, int h, int d)
18 {
19 	inputOptions->setTextureLayout((nvtt::TextureType)type, w, h, d);
20 }
21 
nvttResetInputOptionsTextureLayout(NvttInputOptions * inputOptions)22 void nvttResetInputOptionsTextureLayout(NvttInputOptions * inputOptions)
23 {
24 	inputOptions->resetTextureLayout();
25 }
26 
nvttSetInputOptionsMipmapData(NvttInputOptions * inputOptions,const void * data,int w,int h,int d,int face,int mipmap)27 NvttBoolean nvttSetInputOptionsMipmapData(NvttInputOptions * inputOptions, const void * data, int w, int h, int d, int face, int mipmap)
28 {
29 	return (NvttBoolean)inputOptions->setMipmapData(data, w, h, d, face, mipmap);
30 }
31 
nvttSetInputOptionsFormat(NvttInputOptions * inputOptions,NvttInputFormat format)32 void nvttSetInputOptionsFormat(NvttInputOptions * inputOptions, NvttInputFormat format)
33 {
34 	inputOptions->setFormat((nvtt::InputFormat)format);
35 }
36 
nvttSetInputOptionsAlphaMode(NvttInputOptions * inputOptions,NvttAlphaMode alphaMode)37 void nvttSetInputOptionsAlphaMode(NvttInputOptions * inputOptions, NvttAlphaMode alphaMode)
38 {
39 	inputOptions->setAlphaMode((nvtt::AlphaMode)alphaMode);
40 }
41 
nvttSetInputOptionsGamma(NvttInputOptions * inputOptions,float inputGamma,float outputGamma)42 void nvttSetInputOptionsGamma(NvttInputOptions * inputOptions, float inputGamma, float outputGamma)
43 {
44 	inputOptions->setGamma(inputGamma, outputGamma);
45 }
46 
nvttSetInputOptionsWrapMode(NvttInputOptions * inputOptions,NvttWrapMode mode)47 void nvttSetInputOptionsWrapMode(NvttInputOptions * inputOptions, NvttWrapMode mode)
48 {
49 	inputOptions->setWrapMode((nvtt::WrapMode)mode);
50 }
51 
nvttSetInputOptionsMipmapFilter(NvttInputOptions * inputOptions,NvttMipmapFilter filter)52 void nvttSetInputOptionsMipmapFilter(NvttInputOptions * inputOptions, NvttMipmapFilter filter)
53 {
54 	inputOptions->setMipmapFilter((nvtt::MipmapFilter)filter);
55 }
56 
nvttSetInputOptionsMipmapGeneration(NvttInputOptions * inputOptions,NvttBoolean enabled,int maxLevel)57 void nvttSetInputOptionsMipmapGeneration(NvttInputOptions * inputOptions, NvttBoolean enabled, int maxLevel)
58 {
59 	inputOptions->setMipmapGeneration(enabled != NVTT_False, maxLevel);
60 }
61 
nvttSetInputOptionsKaiserParameters(NvttInputOptions * inputOptions,float width,float alpha,float stretch)62 void nvttSetInputOptionsKaiserParameters(NvttInputOptions * inputOptions, float width, float alpha, float stretch)
63 {
64 	inputOptions->setKaiserParameters(width, alpha, stretch);
65 }
66 
nvttSetInputOptionsNormalMap(NvttInputOptions * inputOptions,NvttBoolean b)67 void nvttSetInputOptionsNormalMap(NvttInputOptions * inputOptions, NvttBoolean b)
68 {
69 	inputOptions->setNormalMap(b != NVTT_False);
70 }
71 
nvttSetInputOptionsConvertToNormalMap(NvttInputOptions * inputOptions,NvttBoolean convert)72 void nvttSetInputOptionsConvertToNormalMap(NvttInputOptions * inputOptions, NvttBoolean convert)
73 {
74 	inputOptions->setConvertToNormalMap(convert != NVTT_False);
75 }
76 
nvttSetInputOptionsHeightEvaluation(NvttInputOptions * inputOptions,float redScale,float greenScale,float blueScale,float alphaScale)77 void nvttSetInputOptionsHeightEvaluation(NvttInputOptions * inputOptions, float redScale, float greenScale, float blueScale, float alphaScale)
78 {
79 	inputOptions->setHeightEvaluation(redScale, greenScale, blueScale, alphaScale);
80 }
81 
nvttSetInputOptionsNormalFilter(NvttInputOptions * inputOptions,float small,float medium,float big,float large)82 void nvttSetInputOptionsNormalFilter(NvttInputOptions * inputOptions, float small, float medium, float big, float large)
83 {
84 	inputOptions->setNormalFilter(small, medium, big, large);
85 }
86 
nvttSetInputOptionsNormalizeMipmaps(NvttInputOptions * inputOptions,NvttBoolean b)87 void nvttSetInputOptionsNormalizeMipmaps(NvttInputOptions * inputOptions, NvttBoolean b)
88 {
89 	inputOptions->setNormalizeMipmaps(b != NVTT_False);
90 }
91 
nvttSetInputOptionsColorTransform(NvttInputOptions * inputOptions,NvttColorTransform t)92 void nvttSetInputOptionsColorTransform(NvttInputOptions * inputOptions, NvttColorTransform t)
93 {
94 	inputOptions->setColorTransform((nvtt::ColorTransform)t);
95 }
96 
nvttSetInputOptionsLinearTransfrom(NvttInputOptions * inputOptions,int channel,float w0,float w1,float w2,float w3)97 void nvttSetInputOptionsLinearTransfrom(NvttInputOptions * inputOptions, int channel, float w0, float w1, float w2, float w3)
98 {
99 	inputOptions->setLinearTransform(channel, w0, w1, w2, w3);
100 }
101 
nvttSetInputOptionsMaxExtents(NvttInputOptions * inputOptions,int dim)102 void nvttSetInputOptionsMaxExtents(NvttInputOptions * inputOptions, int dim)
103 {
104 	inputOptions->setMaxExtents(dim);
105 }
106 
nvttSetInputOptionsRoundMode(NvttInputOptions * inputOptions,NvttRoundMode mode)107 void nvttSetInputOptionsRoundMode(NvttInputOptions * inputOptions, NvttRoundMode mode)
108 {
109 	inputOptions->setRoundMode((nvtt::RoundMode)mode);
110 }
111 
112 
113 // CompressionOptions class.
nvttCreateCompressionOptions()114 NvttCompressionOptions * nvttCreateCompressionOptions()
115 {
116 	return new nvtt::CompressionOptions();
117 }
118 
nvttDestroyCompressionOptions(NvttCompressionOptions * compressionOptions)119 void nvttDestroyCompressionOptions(NvttCompressionOptions * compressionOptions)
120 {
121 	delete compressionOptions;
122 }
123 
nvttSetCompressionOptionsFormat(NvttCompressionOptions * compressionOptions,NvttFormat format)124 void nvttSetCompressionOptionsFormat(NvttCompressionOptions * compressionOptions, NvttFormat format)
125 {
126 	compressionOptions->setFormat((nvtt::Format)format);
127 }
128 
nvttSetCompressionOptionsQuality(NvttCompressionOptions * compressionOptions,NvttQuality quality)129 void nvttSetCompressionOptionsQuality(NvttCompressionOptions * compressionOptions, NvttQuality quality)
130 {
131 	compressionOptions->setQuality((nvtt::Quality)quality);
132 }
133 
nvttSetCompressionOptionsColorWeights(NvttCompressionOptions * compressionOptions,float red,float green,float blue,float alpha)134 void nvttSetCompressionOptionsColorWeights(NvttCompressionOptions * compressionOptions, float red, float green, float blue, float alpha)
135 {
136 	compressionOptions->setColorWeights(red, green, blue, alpha);
137 }
138 
139 /*void nvttEnableCompressionOptionsCudaCompression(NvttCompressionOptions * compressionOptions, NvttBoolean enable)
140 {
141 	compressionOptions->enableCudaCompression(enable != NVTT_False);
142 }*/
143 
nvttSetCompressionOptionsPixelFormat(NvttCompressionOptions * compressionOptions,unsigned int bitcount,unsigned int rmask,unsigned int gmask,unsigned int bmask,unsigned int amask)144 void nvttSetCompressionOptionsPixelFormat(NvttCompressionOptions * compressionOptions, unsigned int bitcount, unsigned int rmask, unsigned int gmask, unsigned int bmask, unsigned int amask)
145 {
146 	compressionOptions->setPixelFormat(bitcount, rmask, gmask, bmask, amask);
147 }
148 
nvttSetCompressionOptionsQuantization(NvttCompressionOptions * compressionOptions,NvttBoolean colorDithering,NvttBoolean alphaDithering,NvttBoolean binaryAlpha,int alphaThreshold)149 void nvttSetCompressionOptionsQuantization(NvttCompressionOptions * compressionOptions, NvttBoolean colorDithering, NvttBoolean alphaDithering, NvttBoolean binaryAlpha, int alphaThreshold)
150 {
151 	compressionOptions->setQuantization(colorDithering != NVTT_False, alphaDithering != NVTT_False, binaryAlpha != NVTT_False, alphaThreshold);
152 }
153 
154 
155 // OutputOptions class.
nvttCreateOutputOptions()156 NvttOutputOptions * nvttCreateOutputOptions()
157 {
158 	return new nvtt::OutputOptions();
159 }
160 
nvttDestroyOutputOptions(NvttOutputOptions * outputOptions)161 void nvttDestroyOutputOptions(NvttOutputOptions * outputOptions)
162 {
163 	delete outputOptions;
164 }
165 
nvttSetOutputOptionsFileName(NvttOutputOptions * outputOptions,const char * fileName)166 void nvttSetOutputOptionsFileName(NvttOutputOptions * outputOptions, const char * fileName)
167 {
168 	outputOptions->setFileName(fileName);
169 }
170 
nvttSetOutputOptionsOutputHeader(NvttOutputOptions * outputOptions,NvttBoolean b)171 void nvttSetOutputOptionsOutputHeader(NvttOutputOptions * outputOptions, NvttBoolean b)
172 {
173 	outputOptions->setOutputHeader(b != NVTT_False);
174 }
175 /*
176 void nvttSetOutputOptionsErrorHandler(NvttOutputOptions * outputOptions, nvttErrorHandler errorHandler)
177 {
178 	outputOptions->setErrorHandler(errorHandler);
179 }
180 
181 void nvttSetOutputOptionsOutputHandler(NvttOutputOptions * outputOptions, nvttOutputHandler outputHandler, nvttImageHandler imageHandler)
182 {
183 }
184 */
185 
186 
187 // Compressor class.
nvttCompress(const NvttCompressor * compressor,const NvttInputOptions * inputOptions,const NvttCompressionOptions * compressionOptions,const NvttOutputOptions * outputOptions)188 NvttBoolean nvttCompress(const NvttCompressor * compressor, const NvttInputOptions * inputOptions, const NvttCompressionOptions * compressionOptions, const NvttOutputOptions * outputOptions)
189 {
190 	return (NvttBoolean)compressor->process(*inputOptions, *compressionOptions, *outputOptions);
191 }
192 
nvttEstimateSize(const NvttCompressor * compressor,const NvttInputOptions * inputOptions,const NvttCompressionOptions * compressionOptions)193 int nvttEstimateSize(const NvttCompressor * compressor, const NvttInputOptions * inputOptions, const NvttCompressionOptions * compressionOptions)
194 {
195 	return compressor->estimateSize(*inputOptions, *compressionOptions);
196 }
197 
198 
199 // Global functions.
nvttErrorString(NvttError e)200 const char * nvttErrorString(NvttError e)
201 {
202 	return nvtt::errorString((nvtt::Error)e);
203 }
204 
nvttVersion()205 unsigned int nvttVersion()
206 {
207 	return nvtt::version();
208 }
209