OpenMetaverse.TerrainCompressor.CompressPatch C# (CSharp) Method

CompressPatch() private static method

private static CompressPatch ( float patchData, TerrainPatch header, int prequant ) : int[]
patchData float
header TerrainPatch
prequant int
return int[]
        private static int[] CompressPatch(float[] patchData, TerrainPatch.Header header, int prequant)
        {
            float[] block = new float[16 * 16];
            int wordsize = prequant;
            float oozrange = 1.0f / (float)header.Range;
            float range = (float)(1 << prequant);
            float premult = oozrange * range;
            float sub = (float)(1 << (prequant - 1)) + header.DCOffset * premult;

            header.QuantWBits = wordsize - 2;
            header.QuantWBits |= (prequant - 2) << 4;

            int k = 0;
            for (int j = 0; j < 16; j++)
            {
                for (int i = 0; i < 16; i++)
                    block[k++] = patchData[j * 16 + i] * premult - sub;
            }

            float[] ftemp = new float[16 * 16];
            int[] itemp = new int[16 * 16];

            for (int o = 0; o < 16; o++)
                DCTLine16(block, ftemp, o);
            for (int o = 0; o < 16; o++)
                DCTColumn16(ftemp, itemp, o);

            return itemp;
        }

Same methods

TerrainCompressor::CompressPatch ( float heightmap, int patchX, int patchY, TerrainPatch header, int prequant ) : int[]