@ -1,10 +1,15 @@
namespace nvtt
{
using System ;
using System.Runtime.InteropServices ;
namespace Nvidia.TextureTools
{
#region Enums
#region enum Format
#region enum Format
/// <summary>
/// Compression format.
/// </summary>
enum Format
{
// No compression.
@ -29,8 +34,10 @@ namespace nvtt
}
# endregion
#region enum Quality
/// Quality modes.
#region enum Quality
/// <summary>
/// Quality modes.
/// </summary>
enum Quality
{
Fastest ,
@ -41,7 +48,9 @@ namespace nvtt
# endregion
#region enum TextureType
/// Texture types.
/// <summary>
/// Texture types.
/// </summary>
enum TextureType
{
Texture2D ,
@ -51,136 +60,164 @@ namespace nvtt
# 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
#region public class InputOptions
/// <summary>
/// Input options.
/// </summary>
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 = Bindings . CreateInputOptions ( ) ;
options = nvtt CreateInputOptions( ) ;
}
public ~ InputOptions ( )
{
Bindings . DestroyInputOptions ( options ) ;
{
nvtt DestroyInputOptions( options ) ;
}
public void SetTextureLayout ( TextureType type , int w , int h , int d )
{
Bindings . InputOptions_SetTextureLayout ( options , type , w , h , d ) ;
nvttSetInputOptions TextureLayout( options , type , w , h , d ) ;
}
public void ResetTextureLayout ( )
{
Bindings . InputOptions_ResetTextureLayout ( options ) ;
nvttResetInputOptions TextureLayout( options ) ;
}
public void SetMipmapData ( Image img , int face , int mipmap )
public void SetMipmapData ( I ntPtr data , int width , int height , int depth , int face , int mipmap )
{
// TODO
//Bindings.InputOptions_SetMipmapData(options, img.Data, img.Width, img.Height, 1, face, mipmap);
nvttSetInputOptionsMipmapData ( options , data , width , height , depth , face , mipmap ) ;
}
private IntPtr options ;
}
# endregion
#region public class CompressionOptions
#region public class CompressionOptions
/// <summary>
/// Compression options.
/// </summary>
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 = Bindings . CreateCompressionOptions ( ) ;
options = nvtt CreateCompressionOptions( ) ;
}
public ~ CompressionOptions ( )
{
Bindings . DestroyCompressionOptions ( options ) ;
nvtt DestroyCompressionOptions( options ) ;
}
public void SetFormat ( Format format )
{
Bindings . CompressionOptions_SetFormat ( format ) ;
nvttSetCompressionOptionsFormat( options , format ) ;
}
public void SetQuality ( Quality quality )
{
Bindings . CompressionOptions_SetQuality ( quality ) ;
nvttSetCompressionOptionsQuality( options , quality ) ;
}
public void SetPixelFormat ( uint bitcount , uint rmask , uint gmask , uint bmask , uint amask )
{
Bindings. CompressionOptions_SetPixelFormat ( bitcount , rmask , gmask , bmask , amask ) ;
nvttSetCompressionOptionsPixelFormat( options , bitcount , rmask , gmask , bmask , amask ) ;
}
private IntPtr options ;
}
# endregion
#region public class OutputOptions
#region public class OutputOptions
/// <summary>
/// Output options.
/// </summary>
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 = Bindings . CreateOutputOptions ( ) ;
options = nvtt CreateOutputOptions( ) ;
}
public ~ OutputOptions ( )
{
Bindings . DestroyOutputOptions ( options ) ;
nvtt DestroyOutputOptions( options ) ;
}
public void SetFileName ( string fileName )
{
// TODO
//Bindings.OutputOptions_SetFileName(fileName)
{
nvttSetOutputOptionsFileName ( options , fileName ) ;
}
private IntPtr options ;
}
# 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 )
{
Bindings . Compress ( inputOptions . options , compressionOptions . options , outputOptions . options ) ;
nvtt Compress( inputOptions . options , compressionOptions . options , outputOptions . options ) ;
}
public bool EstimateSize ( InputOptions inputOptions , CompressionOptions compressionOptions )
{
Bindings . EstimateSize ( inputOptions . options , compressionOptions . options ) ;
nvtt EstimateSize( inputOptions . options , compressionOptions . options ) ;
}
}
# endregion
}
# endregion
} // Nvidia.TextureTools namespace