public static unsafe byte[] CompressDDS(byte[] input, int width, int height, CrnglueFormat format, CrnglueMipmaps mipmaps, bool highQualitySlow) { IntPtr output; int outputSize; fixed(byte *b = input) { if (CrnGlueCompressDDS((IntPtr)b, width, height, format, mipmaps, highQualitySlow, out output, out outputSize) == 0) { throw new Exception("Compression failed"); } } var result = Copy(output, outputSize); CrnGlueFreeDDS(output); Thread.Sleep(10000); return(result); }
public static unsafe List <CrunchMipLevel> GenerateMipmaps(byte[] input, int width, int height, CrnglueMipmaps mipmaps) { CrnglueMipmapOutput output; fixed(byte *b = input) { if (CrnGlueGenerateMipmaps((IntPtr)b, width, height, mipmaps, out output) == 0) { throw new Exception("Mipmap generation failed"); } } var result = new List <CrunchMipLevel>(); for (int i = 0; i < output.levelCount; i++) { result.Add(new CrunchMipLevel() { Width = output.levels[i].width, Height = output.levels[i].height, Bytes = Copy(output.levels[i].data, output.levels[i].dataSize) }); } CrnGlueFreeMipmaps(ref output); return(result); }
static extern int CrnGlueGenerateMipmaps(IntPtr input, int width, int height, CrnglueMipmaps mipmaps, out CrnglueMipmapOutput output);
static extern int CrnGlueCompressDDS(IntPtr input, int inWidth, int inHeight, CrnglueFormat format, CrnglueMipmaps mipmaps, bool highQualitySlow, out IntPtr output, out int outputSize);