From 6155c202a71146f507d43efdf63eae70985d6af6 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 26 Mar 2022 04:58:14 +0000 Subject: [PATCH] minor cosmetics --- .../Framework/Scenes/TerrainCompressor.cs | 111 +++--------------- 1 file changed, 19 insertions(+), 92 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/TerrainCompressor.cs b/OpenSim/Region/Framework/Scenes/TerrainCompressor.cs index cb08b3a1d0..8e593a2478 100644 --- a/OpenSim/Region/Framework/Scenes/TerrainCompressor.cs +++ b/OpenSim/Region/Framework/Scenes/TerrainCompressor.cs @@ -141,10 +141,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP header.QuantWBits |= wordsize << 4; int k = 0; - for (int j = 0; j < 16; j++) + for (int j = 0; j < 256 ; j += 16) { - for (int i = 0; i < 16; i++) - block[k++] = (patchData[j * 16 + i] - sub) * premult; + int nj = j + 16; + for (int i = j; i < nj; ++i) + block[k++] = (patchData[i] - sub) * premult; } wbits = (prequant >> 1); @@ -152,87 +153,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP dct16x16(block, iout, ref wbits); } -/* - // new using terrain data and patchs indexes - public static List CreateLayerDataPackets(TerrainData terrData, int[] map) - { - List ret = new List(); - - int numberPatchs = map.Length / 2; - byte[] data = new byte[numberPatchs * 256 * 2]; - - //create packet and global header - LayerDataPacket layer = new LayerDataPacket(); - - byte landPacketType; - if (terrData.SizeX > Constants.RegionSize || terrData.SizeY > Constants.RegionSize) - landPacketType = (byte)TerrainPatch.LayerType.LandExtended; - else - landPacketType = (byte)TerrainPatch.LayerType.Land; - - layer.LayerID.Type = landPacketType; - - BitPack bitpack = new BitPack(data, 0); - bitpack.PackBits(STRIDE, 16); - bitpack.PackBitsFromByte(16); - bitpack.PackBitsFromByte(landPacketType); - - int s; - for (int i = 0; i < numberPatchs; i++) - { - s = 2 * i; - CreatePatchFromTerrainData(bitpack, terrData, map[s], map[s + 1]); - - if (bitpack.BytePos > 950 && i != numberPatchs - 1) - { - //finish this packet - bitpack.PackBitsFromByte(END_OF_PATCHES); - - layer.LayerData.Data = new byte[bitpack.BytePos + 1]; - Buffer.BlockCopy(bitpack.Data, 0, layer.LayerData.Data, 0, bitpack.BytePos + 1); - ret.Add(layer); - - // start another - layer = new LayerDataPacket(); - layer.LayerID.Type = landPacketType; - - bitpack = new BitPack(data, 0); - bitpack.PackBits(STRIDE, 16); - bitpack.PackBitsFromByte(16); - bitpack.PackBitsFromByte(landPacketType); - } - } - - bitpack.PackBitsFromByte(END_OF_PATCHES); - - layer.LayerData.Data = new byte[bitpack.BytePos + 1]; - Buffer.BlockCopy(bitpack.Data, 0, layer.LayerData.Data, 0, bitpack.BytePos + 1); - ret.Add(layer); - - return ret; - } -*/ - public unsafe static void CreatePatchFromTerrainData(BitPack output, TerrainData terrData, int patchX, int patchY) { - float frange; - - TerrainPatch.Header header = PrescanPatch(terrData, patchX, patchY, out frange); + TerrainPatch.Header header = PrescanPatch(terrData, patchX, patchY, out float frange); header.QuantWBits = 130; - bool largeRegion = false; - // If larger than legacy region size, pack patch X and Y info differently. - if (terrData.SizeX > Constants.RegionSize || terrData.SizeY > Constants.RegionSize) - { - header.PatchIDs = (patchY & 0xFFFF); - header.PatchIDs += (patchX << 16); - largeRegion = true; - } - else - { - header.PatchIDs = (patchY & 0x1F); - header.PatchIDs += (patchX << 5); - } + bool largeRegion = terrData.SizeX > Constants.RegionSize || terrData.SizeY > Constants.RegionSize; if (Math.Round(frange, 2) == 1.0) { @@ -242,18 +168,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP output.PackBitsFromByte(1); //range low output.PackBitsFromByte(0); //range high if (largeRegion) - output.PackBits(header.PatchIDs, 32); + output.PackBits((patchX << 16) | (patchY & 0xFFFF), 32); else - output.PackBits(header.PatchIDs, 10); + output.PackBits((patchX << 5) | (patchY & 0x1F) , 10); // and thats all output.PackBits(ZERO_EOB, 2); return; } - int wbits; + header.PatchIDs = largeRegion ? + (patchX << 16) | (patchY & 0xFFFF) : + (patchX << 5) | (patchY & 0x1F); + int* patch = stackalloc int[256]; - CompressPatch(terrData, patchX, patchY, header, 10, out wbits, patch); + CompressPatch(terrData, patchX, patchY, header, 10, out int wbits, patch); EncodePatchHeader(output, header, largeRegion, ref wbits); EncodePatch(output, patch, 0, wbits); } @@ -261,16 +190,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP // Scan the height info we're returning and return a patch packet header for this patch. private static TerrainPatch.Header PrescanPatch(TerrainData terrData, int patchX, int patchY, out float frange) { - TerrainPatch.Header header = new TerrainPatch.Header(); - float zmax = float.MinValue; - float zmin = float.MaxValue; - - terrData.GetPatchMinMax(patchX, patchY, out zmin, out zmax); - - header.DCOffset = zmin; + terrData.GetPatchMinMax(patchX, patchY, out float zmin, out float zmax); frange = ((zmax - zmin) + 1.0f); - header.Range = (int)frange; + TerrainPatch.Header header = new TerrainPatch.Header() + { + DCOffset = zmin, + Range = (int)frange + }; return header; }