From 3383851e44fda9248c4f1e474e5cbc55a87d274d Mon Sep 17 00:00:00 2001 From: castano Date: Fri, 18 Jan 2008 23:47:05 +0000 Subject: [PATCH] Add C# wrapper. --- src/nvtt/nvtt.cs | 186 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100755 src/nvtt/nvtt.cs diff --git a/src/nvtt/nvtt.cs b/src/nvtt/nvtt.cs new file mode 100755 index 0000000..14a8179 --- /dev/null +++ b/src/nvtt/nvtt.cs @@ -0,0 +1,186 @@ + + +namespace nvtt +{ + #region Enums + + #region enum Format + enum Format + { + // No compression. + RGB, + RGBA = RGB, + + // DX9 formats. + DXT1, + DXT1a, + DXT3, + DXT5, + DXT5n, + + // DX10 formats. + BC1 = DXT1, + BC1a = DXT1a, + BC2 = DXT3, + BC3 = DXT5, + BC3n = DXT5n, + BC4, + BC5, + } + #endregion + + #region enum Quality + /// Quality modes. + enum Quality + { + Fastest, + Normal, + Production, + Highest, + } + #endregion + + #region enum TextureType + /// Texture types. + enum TextureType + { + Texture2D, + TextureCube, + } + #endregion + + #endregion + + #region private static class Bindings + private static class Bindings + { + // Input Options + //NVTT_API NvttInputOptions nvttCreateInputOptions(); + //NVTT_API void nvttDestroyInputOptions(NvttInputOptions inputOptions); + + //NVTT_API void nvttSetInputOptionsTextureLayout(NvttInputOptions inputOptions, NvttTextureType type, int w, int h, int d); + //NVTT_API void nvttResetInputOptionsTextureLayout(NvttInputOptions inputOptions); + //NVTT_API NvttBoolean nvttSetInputOptionsMipmapData(NvttInputOptions inputOptions, const void * data, int w, int h, int d, int face, int mipmap); + + + // Compression Options + //NVTT_API NvttCompressionOptions nvttCreateCompressionOptions(); + //NVTT_API void nvttDestroyCompressionOptions(NvttCompressionOptions compressionOptions); + + //NVTT_API void nvttSetCompressionOptionsFormat(NvttCompressionOptions compressionOptions, NvttFormat format); + //NVTT_API void nvttSetCompressionOptionsQuality(NvttCompressionOptions compressionOptions, NvttQuality quality); + //NVTT_API void nvttSetCompressionOptionsPixelFormat(NvttCompressionOptions compressionOptions, unsigned int bitcount, unsigned int rmask, unsigned int gmask, unsigned int bmask, unsigned int amask); + + + // Output Options + //NVTT_API NvttOutputOptions nvttCreateOutputOptions(); + //NVTT_API void nvttDestroyOutputOptions(NvttOutputOptions outputOptions); + + //NVTT_API void nvttSetOutputOptionsFileName(NvttOutputOptions outputOptions, const char * fileName); + + + // Main entrypoint of the compression library. + //NVTT_API NvttBoolean nvttCompress(NvttInputOptions inputOptions, NvttOutputOptions outputOptions, NvttCompressionOptions compressionOptions); + + // Estimate the size of compressing the input with the given options. + //NVTT_API int nvttEstimateSize(NvttInputOptions inputOptions, NvttCompressionOptions compressionOptions); + } + #endregion + + #region public class InputOptions + public class InputOptions + { + public InputOptions() + { + options = Bindings.CreateInputOptions(); + } + public ~InputOptions() + { + Bindings.DestroyInputOptions(options); + } + + public void SetTextureLayout(TextureType type, int w, int h, int d) + { + Bindings.InputOptions_SetTextureLayout(options, type, w, h, d); + } + public void ResetTextureLayout() + { + Bindings.InputOptions_ResetTextureLayout(options); + } + + public void SetMipmapData(Image img, int face, int mipmap) + { + // TODO + //Bindings.InputOptions_SetMipmapData(options, img.Data, img.Width, img.Height, 1, face, mipmap); + } + + private IntPtr options; + } + #endregion + + #region public class CompressionOptions + public class CompressionOptions + { + public CompressionOptions() + { + options = Bindings.CreateCompressionOptions(); + } + public ~CompressionOptions() + { + Bindings.DestroyCompressionOptions(options); + } + + public void SetFormat(Format format) + { + Bindings.CompressionOptions_SetFormat(format); + } + public void SetQuality(Quality quality) + { + Bindings.CompressionOptions_SetQuality(quality); + } + public void SetPixelFormat(uint bitcount, uint rmask, uint gmask, uint bmask, uint amask) + { + Bindings.CompressionOptions_SetPixelFormat(bitcount, rmask, gmask, bmask, amask); + } + + private IntPtr options; + } + #endregion + + #region public class OutputOptions + public class OutputOptions + { + public OutputOptions() + { + options = Bindings.CreateOutputOptions(); + } + public ~OutputOptions() + { + Bindings.DestroyOutputOptions(options); + } + + public void SetFileName(string fileName) + { + // TODO + //Bindings.OutputOptions_SetFileName(fileName) + } + + private IntPtr options; + } + #endregion + + #region public static class Compressor + public static class Compressor + { + public bool Compress(InputOptions inputOptions, CompressionOptions compressionOptions, OutputOptions outputOptions) + { + Bindings.Compress(inputOptions.options, compressionOptions.options, outputOptions.options); + } + + public bool EstimateSize(InputOptions inputOptions, CompressionOptions compressionOptions) + { + Bindings.EstimateSize(inputOptions.options, compressionOptions.options); + } + } + #endregion +}