Axiom.Core.StaticGeometry.DetermineGeometry C# (CSharp) Method

DetermineGeometry() protected method

protected DetermineGeometry ( SubMesh sm ) : List
sm SubMesh
return List
		protected List<SubMeshLodGeometryLink> DetermineGeometry( SubMesh sm )
		{
			// First, determine if we've already seen this submesh before
			List<SubMeshLodGeometryLink> lodList;
			if ( subMeshGeometryLookup.TryGetValue( sm, out lodList ) )
				return lodList;
			// Otherwise, we have to create a new one
			lodList = new List<SubMeshLodGeometryLink>();
			subMeshGeometryLookup[ sm ] = lodList;
			int numLods = sm.Parent.IsLodManual ? 1 : sm.Parent.LodLevelCount;
			for ( int lod = 0; lod < numLods; ++lod )
			{
				SubMeshLodGeometryLink geomLink = new SubMeshLodGeometryLink();
				lodList.Add( geomLink );
				IndexData lodIndexData = lod == 0 ? sm.indexData : sm.LodFaceList[ lod - 1 ];
				// Can use the original mesh geometry?
				if ( sm.useSharedVertices )
				{
					if ( sm.Parent.SubMeshCount == 1 )
					{
						// Ok, this is actually our own anyway
						geomLink.vertexData = sm.Parent.SharedVertexData;
						geomLink.indexData = lodIndexData;
					}
					else
						// We have to split it
						SplitGeometry( sm.Parent.SharedVertexData, lodIndexData, geomLink );
				}
				else
				{
					if ( lod == 0 )
					{
						// Ok, we can use the existing geometry; should be in full
						// use by just this SubMesh
						geomLink.vertexData = sm.VertexData;
						geomLink.indexData = sm.IndexData;
					}
					else
						// We have to split it
						SplitGeometry( sm.VertexData, lodIndexData, geomLink );
				}
				Debug.Assert( geomLink.vertexData.vertexStart == 0,
					"Cannot use vertexStart > 0 on indexed geometry due to " +
					"rendersystem incompatibilities - see the docs!" );
			}
			return lodList;
		}