private void Erode( ErosionParametersComponent erosionParameters, MeshParametersComponent meshParameters, MapInfoComponent mapInfo) { const int maxThreadCount = 65535; var brush = GeneralHelper.CreateBrush(erosionParameters, meshParameters.MapResolution); var brushShader = new BrushShader() { IndexBuffer = GeneralHelper.GetBufferFor(brush.IndexOffsets, erosionParameters.Erosion, "brushIndices"), WeightBuffer = GeneralHelper.GetBufferFor(brush.Weights, erosionParameters.Erosion, "brushWeights") }; var randomIndices = GeneralHelper.GenerateIndices( erosionParameters.ErosionIterationCount, erosionParameters.ErosionBrushRadius, meshParameters.MapResolution); var randomIndexBuffer = GeneralHelper.GetBufferFor(randomIndices, erosionParameters.Erosion, "randomIndices"); var mapBuffer = GeneralHelper.GetBufferFor(mapInfo.Map, erosionParameters.Erosion, "map"); SetErosionParameters(erosionParameters, mapInfo, brush); erosionParameters.Erosion.Dispatch( 0, Math.Min(erosionParameters.ErosionIterationCount / 1024, maxThreadCount), 1, 1); mapBuffer.GetData(mapInfo.Map); GeneralHelper.ReleaseBuffers(new List <ComputeBuffer>() { brushShader.IndexBuffer, brushShader.WeightBuffer, mapBuffer, randomIndexBuffer }); }