public static void AddReadRequest(VFVoxelChunkData chunkData) { IntVector4 chunkPos = chunkData.ChunkPosLod; // Req to chunks out of range will return, these chunks will be null and can not be write according to WriteVoxelAtIdx's code if (chunkPos.x < 0 || chunkPos.x >= VoxelTerrainConstants._worldMaxCX) { return; } if (chunkPos.y < 0 || chunkPos.y >= VoxelTerrainConstants.WorldMaxCY(chunkPos.w)) { return; } if (chunkPos.z < 0 || chunkPos.z >= VoxelTerrainConstants._worldMaxCZ) { return; } // no caching IntVector4 piecePos; VFFileDataClone.WorldChunkPosToPiecePos(chunkPos, out piecePos); IntVector4 fileIndex; VFFileDataClone.PiecePos2FileIndex(piecePos, out fileIndex); VFPieceDataClone pieceData = GetPieceDataSub(piecePos, GetFileSetSub(fileIndex)); pieceData.Decompress(); pieceData.SetChunkData(chunkData); pieceData._data = null; pieceData = null; }
void decompressData(VFVoxelChunkData chunkData) { int lod = chunkData.LOD; int px, py, pz; VFFileUtil.WorldChunkPosToPiecePos(chunkData.ChunkPosLod, out px, out py, out pz); int fx, fz; VFFileUtil.PiecePos2FilePos(px, py, pz, lod, out fx, out fz); VFPieceDataClone pieceData = VFDataReaderClone.GetPieceDataSub(new IntVector4(px, py, pz, lod), VFDataReaderClone.GetFileSetSub(new IntVector4(fx, 0, fz, lod))); pieceData.Decompress(); pieceData.SetChunkData(chunkData); pieceData._data = null; pieceData = null; }