protected override void ReadMeshLodInfo( BinaryReader reader )
{
MeshChunkID chunkId;
// number of lod levels
short lodLevelCount = ReadShort( reader );
// load manual?
mesh.IsLodManual = ReadBool( reader );
// preallocate submesh lod face data if not manual
if ( !mesh.IsLodManual )
{
for ( int i = 0; i < mesh.SubMeshCount; i++ )
{
SubMesh sub = mesh.GetSubMesh( i );
// TODO: Create typed collection and implement resize
for ( int j = 1; j < lodLevelCount; j++ )
{
sub.lodFaceList.Add( null );
}
//sub.lodFaceList.Resize(mesh.lodCount - 1);
}
}
// Loop from 1 rather than 0 (full detail index is not in file)
for ( int i = 1; i < lodLevelCount; i++ )
{
chunkId = ReadChunk( reader );
if ( chunkId != MeshChunkID.MeshLODUsage )
{
throw new AxiomException( "Missing MeshLodUsage chunk in mesh '{0}'", mesh.Name );
}
// camera depth
MeshLodUsage usage = new MeshLodUsage();
usage.Value = ReadFloat( reader );
usage.UserValue = Utility.Sqrt( usage.Value );
if ( mesh.IsLodManual )
{
ReadMeshLodUsageManual( reader, i, ref usage );
}
else
{
ReadMeshLodUsageGenerated( reader, i, ref usage );
}
// push lod usage onto the mesh lod list
mesh.MeshLodUsageList.Add( usage );
}
Debug.Assert( mesh.LodLevelCount == lodLevelCount );
}