private static MapDisplay.DisplayBuffers GenerateMapBuffers(List <IntVector3.IndexedIntVector3> points) { List <uint> voxels = new List <uint>(points.Count); List <uint> hindices = new List <uint>(points.Count / 2); IntVector3 prevFour = points[0]; IntVector3 prevTwo = points[0]; hindices.Add(0); int hFourCount = 1; for (int i = 0; i < points.Count; ++i) { var iv = points[i]; voxels.Add(iv.v.ToVoxel()); if (TestHilbertIndices.isDifferentHilbertCube(iv.v, prevFour, 4)) { prevFour = iv.v; hindices.Add((uint)i); hFourCount++; } } for (int i = 0; i < points.Count; ++i) { var iv = points[i]; if (!TestHilbertIndices.isDifferentHilbertCube(iv.v, prevFour, 4)) { if (TestHilbertIndices.isDifferentHilbertCube(iv.v, prevTwo, 2)) { prevTwo = iv.v; hindices.Add((uint)i); } } else { prevFour = iv.v; } } uint[] hilbertRanges = new uint[] { (uint)points.Count, (uint)hindices.Count, (uint)hFourCount }; // (uint)hindices.Count }; MapDisplay.DisplayBuffers dbuffers = new MapDisplay.DisplayBuffers(); dbuffers.display = new ComputeBuffer(voxels.Count, sizeof(uint)); dbuffers.display.SetData(voxels.ToArray()); dbuffers.hilbertIndices = new ComputeBuffer(hindices.Count, sizeof(uint)); dbuffers.hilbertIndices.SetData(hindices.ToArray()); dbuffers.hilbertLODRanges = new ComputeBuffer(hilbertRanges.Length, sizeof(uint)); dbuffers.hilbertLODRanges.SetData(hilbertRanges); return(dbuffers); }
public static bool TestDisplayBufferFromPerlinGen(uint[] uis, out MapDisplay.DisplayBuffers displayBuffers, VGenConfig vGenConfig) { List <IntVector3.IndexedIntVector3> points; if (!PackedVoxelsToIndexedIntVector3s(uis, out points, vGenConfig)) { displayBuffers = new MapDisplay.DisplayBuffers(); return(false); } displayBuffers = GenTestBuffers(vGenConfig.ChunkDimension, points); return(true); }
public bool TestDisplayBufferFromSolidVoxels(uint[] uis, out MapDisplay.DisplayBuffers displayBuffers) { if (uis.Length == 0) { displayBuffers = new MapDisplay.DisplayBuffers(); return(false); } var points = new List <IntVector3.IndexedIntVector3>(uis.Length); for (int i = 0; i < uis.Length; ++i) { points.Add(new IntVector3.IndexedIntVector3() { index = i, v = IntVector3.FromVoxelInt((int)uis[i]) }); } displayBuffers = GenTestBuffers(_chunkSize, points); return(true); }