/// <summary> /// Creates a vertex buffer from the data added so far /// </summary> public IVertexBuffer Build( ) { int numVertices = -1; foreach ( KeyValuePair<VertexFieldSemantic, List<float>> kvp in m_Streams ) { int streamVertexCount = kvp.Value.Count / m_Format.GetDescriptor( kvp.Key ).NumElements; if ( numVertices == -1 ) { numVertices = streamVertexCount; continue; } if ( numVertices != streamVertexCount ) { throw new InvalidOperationException( string.Format( "Expected stream for field \"{0}\" to contain {1} vertices, not {2}", kvp.Key, numVertices, streamVertexCount ) ); } } VertexBufferData data = new VertexBufferData( m_Format, numVertices ); foreach ( KeyValuePair<VertexFieldSemantic, List<float>> kvp in m_Streams ) { float[] elements = data.Add<float>( kvp.Key, m_Format.GetDescriptor( kvp.Key ).NumElements ); Debug.Assert( elements.Length == kvp.Value.Count ); for ( int elementIndex = 0; elementIndex < elements.Length; ++elementIndex ) { elements[ elementIndex ] = kvp.Value[ elementIndex ]; } } IVertexBuffer vb = Graphics.Factory.CreateVertexBuffer( ); vb.Create( data ); return vb; }