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

DetermineGeometry() public method

Look up or calculate the geometry data to use for this SubMesh
public DetermineGeometry ( SubMesh sm ) : List
sm SubMesh
return List
		public List<SubMeshLodGeometryLink> DetermineGeometry( SubMesh sm )
		{
			// First, determine if we've already seen this submesh before
			if ( mSubMeshGeometryLookup.ContainsKey( sm ) )
			{
				return mSubMeshGeometryLookup[ sm ];
			}

			// Otherwise, we have to create a new one
			List<SubMeshLodGeometryLink> lodList = new List<SubMeshLodGeometryLink>();
			mSubMeshGeometryLookup[ sm ] = lodList;

			int numLods = sm.Parent.IsLodManual ? 1 : sm.Parent.LodLevelCount;
			lodList.Capacity = numLods;

			for ( int lod = 0; lod < numLods; ++lod )
			{
				SubMeshLodGeometryLink geomLink = lodList[ lod ];
				IndexData lodIndexData;
				if ( lod == 0 )
				{
					lodIndexData = sm.IndexData;
				}
				else
				{
					lodIndexData = 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, ref 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, ref geomLink );
					}
				}

				Debug.Assert( geomLink.vertexData.vertexStart == 0, "Cannot use vertexStart > 0 on indexed geometry due to rendersystem incompatibilities - see the docs!" );
			}

			return lodList;
		}