static unsafe void CompressMasked(byte[] rgba, int mask, byte *pBlock, SquishFlags flags) { // fix any bad flags flags = FixFlags(flags); // get the block locations byte *colourBlock = pBlock; byte *alphaBock = pBlock; if ((flags & (SquishFlags.kDxt3 | SquishFlags.kDxt5)) != 0) { colourBlock = pBlock + 8; } // create the minimal point set ColourSet colours = new ColourSet(rgba, mask, flags); // check the compression type and compress colour if (colours.GetCount() == 1) { // always do a single colour fit SingleColourFit fit = new SingleColourFit(colours, flags); fit.Compress(colourBlock); } else if ((flags & SquishFlags.kColourRangeFit) != 0 || colours.GetCount() == 0) { // do a range fit RangeFit fit = new RangeFit(colours, flags); fit.Compress(colourBlock); } else { // default to a cluster fit (could be iterative or not) ClusterFit fit = new ClusterFit(colours, flags); fit.Compress(colourBlock); } // compress alpha separately if necessary if ((flags & SquishFlags.kDxt3) != 0) { alpha.CompressAlphaDxt3(rgba, mask, alphaBock); } else if ((flags & SquishFlags.kDxt5) != 0) { alpha.CompressAlphaDxt5(rgba, mask, alphaBock); } }
static unsafe void CompressMasked(byte[] rgba, int mask, byte* pBlock, SquishFlags flags) { // fix any bad flags flags = FixFlags(flags); // get the block locations byte* colourBlock = pBlock; byte* alphaBock = pBlock; if ((flags & (SquishFlags.kDxt3 | SquishFlags.kDxt5)) != 0) colourBlock = pBlock + 8; // create the minimal point set ColourSet colours = new ColourSet(rgba, mask, flags); // check the compression type and compress colour if (colours.GetCount() == 1) { // always do a single colour fit SingleColourFit fit = new SingleColourFit(colours, flags); fit.Compress(colourBlock); } else if ((flags & SquishFlags.kColourRangeFit) != 0 || colours.GetCount() == 0) { // do a range fit RangeFit fit = new RangeFit(colours, flags); fit.Compress(colourBlock); } else { // default to a cluster fit (could be iterative or not) ClusterFit fit = new ClusterFit(colours, flags); fit.Compress(colourBlock); } // compress alpha separately if necessary if ((flags & SquishFlags.kDxt3) != 0) { alpha.CompressAlphaDxt3(rgba, mask, alphaBock); } else if ((flags & SquishFlags.kDxt5) != 0) { alpha.CompressAlphaDxt5(rgba, mask, alphaBock); } }