internal MyLodMeshMerge(MyClipmap parentClipmap, int lod, int lodDivisions, ref MatrixD worldMatrix, ref Vector3D massiveCenter, float massiveRadius, RenderFlags renderFlags) { Debug.Assert(parentClipmap != null, "Parent clipmap cannot be null"); Debug.Assert(lod >= 0, "Lod level must be non-negative"); Debug.Assert(lodDivisions >= 0, "Invalid number of lod divisions"); m_parentClipmap = parentClipmap; m_lod = lod; m_lodDivisions = lodDivisions; if (!IsUsed()) { return; } m_dirtyProxyIndices = new HashSet <int>(); m_cellProxyToAabbProxy = new Dictionary <MyClipmapCellProxy, int>(); m_boundingBoxes = new MyDynamicAABBTreeD(Vector3D.Zero); int cellCount = lodDivisions * lodDivisions * lodDivisions; m_mergeJobs = new MergeJobInfo[cellCount]; m_mergedLodMeshProxies = new MyClipmapCellProxy[cellCount]; m_trackedActors = new HashSet <MyActor> [cellCount]; for (int divideIndex = 0; divideIndex < cellCount; ++divideIndex) { m_mergedLodMeshProxies[divideIndex] = new MyClipmapCellProxy(new MyCellCoord(Lod, GetCellFromDivideIndex(divideIndex)), ref worldMatrix, massiveCenter, massiveRadius, renderFlags, true); m_mergeJobs[divideIndex] = new MergeJobInfo { CurrentWorkId = 0, LodMeshesBeingMerged = new List <LodMeshId>(), NextPossibleMergeStartTime = MyCommon.FrameCounter }; m_trackedActors[divideIndex] = new HashSet <MyActor>(); m_dirtyProxyIndices.Add(divideIndex); } }
internal MyLodMeshMerge(MyClipmap parentClipmap, int lod, int lodDivisions, ref MatrixD worldMatrix, ref Vector3D massiveCenter, float massiveRadius, RenderFlags renderFlags) { Debug.Assert(parentClipmap != null, "Parent clipmap cannot be null"); Debug.Assert(lod >= 0, "Lod level must be non-negative"); Debug.Assert(lodDivisions >= 0, "Invalid number of lod divisions"); m_parentClipmap = parentClipmap; m_lod = lod; m_lodDivisions = lodDivisions; if (m_lodDivisions <= 0) return; m_dirtyProxyIndices = new HashSet<int>(); m_cellProxyToAabbProxy = new Dictionary<MyClipmapCellProxy, int>(); m_boundingBoxes = new MyDynamicAABBTreeD(Vector3D.Zero); int cellCount = lodDivisions*lodDivisions*lodDivisions; m_mergeJobs = new MergeJobInfo[cellCount]; m_mergedLodMeshProxies = new MyClipmapCellProxy[cellCount]; m_trackedActors = new HashSet<MyActor>[cellCount]; for (int divideIndex = 0; divideIndex < cellCount; ++divideIndex) { m_mergedLodMeshProxies[divideIndex] = new MyClipmapCellProxy(new MyCellCoord(Lod, GetCellFromDivideIndex(divideIndex)), ref worldMatrix, massiveCenter, massiveRadius, renderFlags, true); m_mergeJobs[divideIndex] = new MergeJobInfo { CurrentWorkId = 0, LodMeshesBeingMerged = new List<LodMeshId>(), NextPossibleMergeStartTime = MyCommon.FrameCounter }; m_trackedActors[divideIndex] = new HashSet<MyActor>(); m_dirtyProxyIndices.Add(divideIndex); } }