public VertexData Clone( bool copyData )
{
VertexData dest = new VertexData();
// Copy vertex buffers in turn
Dictionary<short, HardwareVertexBuffer> bindings = vertexBufferBinding.Bindings;
foreach ( short source in bindings.Keys )
{
HardwareVertexBuffer srcbuf = bindings[ source ];
HardwareVertexBuffer dstBuf;
if ( copyData )
{
// create new buffer with the same settings
dstBuf =
HardwareBufferManager.Instance.CreateVertexBuffer( srcbuf.VertexDeclaration, srcbuf.VertexCount, srcbuf.Usage, srcbuf.HasShadowBuffer );
// copy data
dstBuf.CopyData( srcbuf, 0, 0, srcbuf.Size, true );
}
else
{
// don't copy, point at existing buffer
dstBuf = srcbuf;
}
// Copy binding
dest.vertexBufferBinding.SetBinding( source, dstBuf );
}
// Basic vertex info
dest.vertexStart = this.vertexStart;
dest.vertexCount = this.vertexCount;
// Copy elements
for ( int i = 0; i < vertexDeclaration.ElementCount; i++ )
{
VertexElement element = vertexDeclaration.GetElement( i );
dest.vertexDeclaration.AddElement( element.Source, element.Offset, element.Type, element.Semantic, element.Index );
}
// Copy hardware shadow buffer if set up
if ( hardwareShadowVolWBuffer != null )
{
dest.hardwareShadowVolWBuffer =
HardwareBufferManager.Instance.CreateVertexBuffer( hardwareShadowVolWBuffer.VertexDeclaration, hardwareShadowVolWBuffer.VertexCount, hardwareShadowVolWBuffer.Usage, hardwareShadowVolWBuffer.HasShadowBuffer );
// copy data
dest.hardwareShadowVolWBuffer.CopyData( hardwareShadowVolWBuffer, 0, 0, hardwareShadowVolWBuffer.Size,true );
}
// copy anim data
dest.HWAnimationDataList = HWAnimationDataList;
dest.HWAnimDataItemsUsed = HWAnimDataItemsUsed;
return dest;
}