Ejemplo n.º 1
0
        /// <summary>
        /// Merges two subsets.
        /// </summary>
        /// <param name="subSet">Subset to merge with.</param>
        public void Merge(SubSet subSet)
        {
            if (!CanMerge(subSet))
            {
                throw new GraphicsException("Subsets can't be merged!");
            }

            // Merge vertex unit
            VertexUnit unit = new VertexUnit(VertexUnit.Format, VertexUnit.Size + subSet.VertexUnit.Size);

            VertexUnit.Copy(VertexUnit, 0, unit, 0, VertexUnit.Size);
            VertexUnit.Copy(subSet.VertexUnit, 0, unit, VertexUnit.Size, subSet.VertexUnit.Size);

            VertexUnit.Dispose();
            VertexUnit = unit;

            // Merge index streams
            IndexStream index = IndexStream.Create(IndexStream.Size + subSet.IndexStream.Size, IndexStream.GetType());

            VertexStreams.IndexStream.Copy(IndexStream, 0, index, 0, IndexStream.Size, 0);
            VertexStreams.IndexStream.Copy(subSet.IndexStream, 0, index, IndexStream.Size, subSet.IndexStream.Size, VertexUnit.Size);
            IndexStream.Dispose();
            IndexStream = index;
        }