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