protected virtual void ReadGeometryVertexBuffer( BinaryReader reader, VertexData data )
{
// Index to bind this buffer to
short bindIdx = ReadShort( reader );
// Per-vertex size, must agree with declaration at this index
short vertexSize = ReadShort( reader );
// check for vertex data header
MeshChunkID chunkID = ReadChunk( reader );
if ( chunkID != MeshChunkID.GeometryVertexBufferData )
{
throw new AxiomException( "Can't find vertex buffer data area!" );
}
// check that vertex size agrees
if ( data.vertexDeclaration.GetVertexSize( bindIdx ) != vertexSize )
{
throw new AxiomException( "Vertex buffer size does not agree with vertex declaration!" );
}
// create/populate vertex buffer
HardwareVertexBuffer buffer = HardwareBufferManager.Instance.CreateVertexBuffer( data.vertexDeclaration.Clone( bindIdx ), data.vertexCount, mesh.VertexBufferUsage, mesh.UseVertexShadowBuffer );
IntPtr bufferPtr = buffer.Lock( BufferLocking.Discard );
ReadBytes( reader, data.vertexCount * vertexSize, bufferPtr );
buffer.Unlock();
// set binding
data.vertexBufferBinding.SetBinding( bindIdx, buffer );
}