private float[] FindVertices(GeometryShader shader) { List <float> verts = new List <float>(); FindSolidFacesDelegate <UInt16> solidCheck = (x => { var comp = BlockManager.Get(x).GetComponant <VisibilityBComponant>(); if (comp != null) { return(comp.SolidFaces); } return(Face.None); }); foreach (Octree <UInt16> octree in Chunk.Octrees) { var iter = (OctreeEnumerator <UInt16>)octree.GetEnumerator(); while (iter.MoveNext()) { OctreeLeaf <UInt16> leaf = iter.Current; BlockType type = BlockManager.Get(leaf.Value); var vis = type.GetComponant <VisibilityBComponant>(); if (vis == null || !vis.IsVisible) { continue; } var mdl = type.GetComponant <ModelBComponant>(); if (mdl == null) { continue; } int size = iter.Size; Vector3 offset = new Vector3(iter.X, iter.Y, iter.Z); verts.AddRange(mdl.Model.GenerateVertexData(offset, size, leaf.FindExposedFaces(solidCheck))); } } return(verts.ToArray()); }
public void UpdateVertices(GeometryShader shader) { Monitor.Enter(this); myVertices = FindVertices(shader); Monitor.Exit(this); }