using System; using System.Runtime.InteropServices; namespace Nvidia.TextureTools { #region Enums #region enum Format /// /// Compression 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 public class InputOptions /// /// Input options. /// public class InputOptions { #region Bindings [DllImport("nvtt")] private extern static IntPtr nvttCreateInputOptions(); [DllImport("nvtt")] private extern static void nvttDestroyInputOptions(IntPtr inputOptions); [DllImport("nvtt")] private extern static void nvttSetInputOptionsTextureLayout(IntPtr inputOptions, TextureType type, int w, int h, int d); [DllImport("nvtt")] private extern static void nvttResetInputOptionsTextureLayout(IntPtr inputOptions); [DllImport("nvtt")] private extern static bool nvttSetInputOptionsMipmapData(IntPtr inputOptions, IntPtr data, int w, int h, int d, int face, int mipmap); #endregion internal IntPtr options; public InputOptions() { options = nvttCreateInputOptions(); } public ~InputOptions() { nvttDestroyInputOptions(options); } public void SetTextureLayout(TextureType type, int w, int h, int d) { nvttSetInputOptionsTextureLayout(options, type, w, h, d); } public void ResetTextureLayout() { nvttResetInputOptionsTextureLayout(options); } public void SetMipmapData(IntPtr data, int width, int height, int depth, int face, int mipmap) { nvttSetInputOptionsMipmapData(options, data, width, height, depth, face, mipmap); } } #endregion #region public class CompressionOptions /// /// Compression options. /// public class CompressionOptions { #region Bindings [DllImport("nvtt")] private extern static IntPtr nvttCreateCompressionOptions(); [DllImport("nvtt")] private extern static void nvttDestroyCompressionOptions(IntPtr compressionOptions); [DllImport("nvtt")] private extern static void nvttSetCompressionOptionsFormat(IntPtr compressionOptions, Format format); [DllImport("nvtt")] private extern static void nvttSetCompressionOptionsQuality(IntPtr compressionOptions, Quality quality); [DllImport("nvtt")] private extern static void nvttSetCompressionOptionsPixelFormat(IntPtr compressionOptions, uint bitcount, uint rmask, uint gmask, uint bmask, uint amask); #endregion internal IntPtr options; public CompressionOptions() { options = nvttCreateCompressionOptions(); } public ~CompressionOptions() { nvttDestroyCompressionOptions(options); } public void SetFormat(Format format) { nvttSetCompressionOptionsFormat(options, format); } public void SetQuality(Quality quality) { nvttSetCompressionOptionsQuality(options, quality); } public void SetPixelFormat(uint bitcount, uint rmask, uint gmask, uint bmask, uint amask) { nvttSetCompressionOptionsPixelFormat(options, bitcount, rmask, gmask, bmask, amask); } } #endregion #region public class OutputOptions /// /// Output options. /// public class OutputOptions { #region Bindings [DllImport("nvtt")] private extern static IntPtr nvttCreateOutputOptions(); [DllImport("nvtt")] private extern static void nvttDestroyOutputOptions(IntPtr outputOptions); [DllImport("nvtt", CharSet = CharSet.Ansi)] private extern static void nvttSetOutputOptionsFileName(IntPtr outputOptions, string fileName); #endregion internal IntPtr options; public OutputOptions() { options = nvttCreateOutputOptions(); } public ~OutputOptions() { nvttDestroyOutputOptions(options); } public void SetFileName(string fileName) { nvttSetOutputOptionsFileName(options, fileName); } } #endregion #region public static class Compressor public static class Compressor { #region Bindings [DllImport("nvtt")] private extern static bool nvttCompress(IntPtr inputOptions, IntPtr compressionOptions, IntPtr outputOptions); [DllImport("nvtt")] private extern static void nvttEstimateSize(IntPtr inputOptions, IntPtr compressionOptions); #endregion public bool Compress(InputOptions inputOptions, CompressionOptions compressionOptions, OutputOptions outputOptions) { nvttCompress(inputOptions.options, compressionOptions.options, outputOptions.options); } public bool EstimateSize(InputOptions inputOptions, CompressionOptions compressionOptions) { nvttEstimateSize(inputOptions.options, compressionOptions.options); } } #endregion } // Nvidia.TextureTools namespace