private void CreateLayerArraysAndProperLayeredGraph() { int numberOfLayers = this.gridLayerOffsets.Count; this.layerOffsets = new double[numberOfLayers]; int i = numberOfLayers - 1; foreach (KeyValuePair <int, double> kv in this.gridLayerOffsets) { layerOffsets[i] = kv.Value; gridLayerToLayer[kv.Key] = i--; } int nOfNodes = CountTotalNodesIncludingVirtual(nodesToIndices[tree.Root]); ////debugging !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //int tt = 0; //foreach (IntEdge ie in this.intGraph.Edges) // tt += this.OriginalNodeLayer(ie.Source) - this.OriginalNodeLayer(ie.Target) - 1; //if (tt + this.intGraph.Nodes.Count != nOfNodes) // throw new Exception(); int[] layering = new int[nOfNodes]; List <int>[] layers = new List <int> [numberOfLayers]; for (i = 0; i < numberOfLayers; i++) { layers[i] = new List <int>(); } WalkTreeAndInsertLayerEdges(layering, layers); this.layerArrays = new LayerArrays(layering); int[][] ll = layerArrays.Layers = new int[numberOfLayers][]; i = 0; foreach (List <int> layer in layers) { ll[i++] = layer.ToArray(); } this.properLayeredGraph = new ProperLayeredGraph(intGraph); }
/// <summary> /// Returns the same arrays but with no empty layers. /// </summary> /// <returns></returns> internal LayerArrays DropEmptyLayers() { int[] drop = new int[this.Layers.Length]; int dropVal = 0; for (int i = 0; i < this.Layers.Length; i++) { drop[i] = dropVal; if (this.Layers[i].Length == 0) { dropVal++; } } if (dropVal == 0) { return(this); } //we do have empty layers int[] ny = new int[Y.Length]; for (int i = 0; i < ny.Length; i++) { ny[i] = Y[i] - drop[Y[i]]; } //copy the layers itself int[][] nls = new int[this.layers.Length - dropVal][]; for (int i = 0; i < layers.Length; i++) { if (layers[i].Length > 0) { nls[i - drop[i]] = (int[])layers[i].Clone(); } } LayerArrays la = new LayerArrays(ny); la.layers = nls; return(la); }
private void DrawInstanced([NotNull] CommandBuffer cmd, ArraySegment <int> visible, int shaderPass) { if (visible.Count < 1) { return; } EnsureArrayCapacity(ref _matrices, visible.Count); EnsureArrayCapacity(ref _saturation, visible.Count); EnsureArrayCapacity(ref _edgeFadeout, visible.Count); EnsureArrayCapacity(ref _edgeSharpness, visible.Count); if (Batch.Permutation.LayerMode == LayerMode.None) { _yLayerInputStart = null; _yLayerInputExtent = null; _yLayerOutputStart = null; _yLayerOutputEnd = null; } else { EnsureArrayCapacity(ref _yLayerInputStart, visible.Count); EnsureArrayCapacity(ref _yLayerInputExtent, visible.Count); EnsureArrayCapacity(ref _yLayerOutputStart, visible.Count); EnsureArrayCapacity(ref _yLayerOutputEnd, visible.Count); } if (Batch.Permutation.LayerMode != LayerMode.Triplanar) { _xLayerInputStart = null; _xLayerInputExtent = null; _xLayerOutputStart = null; _xLayerOutputEnd = null; _zLayerInputStart = null; _zLayerInputExtent = null; _zLayerOutputStart = null; _zLayerOutputEnd = null; } else { EnsureArrayCapacity(ref _xLayerInputStart, visible.Count); EnsureArrayCapacity(ref _xLayerInputExtent, visible.Count); EnsureArrayCapacity(ref _xLayerOutputStart, visible.Count); EnsureArrayCapacity(ref _xLayerOutputEnd, visible.Count); EnsureArrayCapacity(ref _zLayerInputStart, visible.Count); EnsureArrayCapacity(ref _zLayerInputExtent, visible.Count); EnsureArrayCapacity(ref _zLayerOutputStart, visible.Count); EnsureArrayCapacity(ref _zLayerOutputEnd, visible.Count); } // Copy decal data into arrays var arx = LayerArrays.Create(_xLayerInputStart, _xLayerInputExtent, _xLayerOutputStart, _xLayerOutputEnd); var ary = LayerArrays.Create(_yLayerInputStart, _yLayerInputExtent, _yLayerOutputStart, _yLayerOutputEnd); var arz = LayerArrays.Create(_zLayerInputStart, _zLayerInputExtent, _zLayerOutputStart, _zLayerOutputEnd); for (var i = 0; i < visible.Count; i++) { // ReSharper disable once PossibleNullReferenceException var decal = Batch.Decals[visible.Array[visible.Offset + i]]; decal.Properties.LoadInto( i, _saturation, _edgeFadeout, _edgeSharpness, arx, ary, arz ); _matrices[i] = decal.Decal.WorldTransform; } // Set arrays into instancing property block _instancingPropertyBlock.Clear(); InstanceProperties.LoadInto( _instancingPropertyBlock, _saturation, _edgeFadeout, _edgeSharpness, arx, ary, arz ); var mat = Batch.GetMaterial(true); cmd.DrawMeshInstanced(_box, 0, mat, shaderPass, _matrices, visible.Count, _instancingPropertyBlock); }
public RecoveryLayerCalculator(LayerArrays recoveredLayerArrays) { layers = recoveredLayerArrays; }