protected virtual void ReadMeshLodUsageGenerated( BinaryReader reader, int lodNum, ref MeshLodUsage usage )
{
usage.ManualName = "";
usage.ManualMesh = null;
// get one set of detail per submesh
MeshChunkID chunkId;
for ( int i = 0; i < mesh.SubMeshCount; i++ )
{
chunkId = ReadChunk( reader );
if ( chunkId != MeshChunkID.MeshLODGenerated )
{
throw new AxiomException( "Missing MeshLodGenerated chunk in '{0}'", mesh.Name );
}
// get the current submesh
SubMesh sm = mesh.GetSubMesh( i );
// drop another index data object into the list
IndexData indexData = new IndexData();
sm.lodFaceList[ lodNum - 1 ] = indexData;
// number of indices
indexData.indexCount = ReadInt( reader );
bool is32bit = ReadBool( reader );
// create an appropriate index buffer and stuff in the data
if ( is32bit )
{
indexData.indexBuffer =
HardwareBufferManager.Instance.CreateIndexBuffer(
IndexType.Size32,
indexData.indexCount,
mesh.IndexBufferUsage,
mesh.UseIndexShadowBuffer );
// lock the buffer
IntPtr data = indexData.indexBuffer.Lock( BufferLocking.Discard );
// stuff the data into the index buffer
ReadInts( reader, indexData.indexCount, data );
// unlock the index buffer
indexData.indexBuffer.Unlock();
}
else
{
indexData.indexBuffer =
HardwareBufferManager.Instance.CreateIndexBuffer(
IndexType.Size16,
indexData.indexCount,
mesh.IndexBufferUsage,
mesh.UseIndexShadowBuffer );
// lock the buffer
IntPtr data = indexData.indexBuffer.Lock( BufferLocking.Discard );
// stuff the data into the index buffer
ReadShorts( reader, indexData.indexCount, data );
// unlock the index buffer
indexData.indexBuffer.Unlock();
}
}
}