/// <summary>Draws a batch of indexed primitives</summary>
        /// <param name="startVertex">
        ///   Index of the first vertex in the vertex array. This vertex will become
        ///   the new index 0 for the index buffer.
        /// </param>
        /// <param name="vertexCount">Number of vertices used in the call</param>
        /// <param name="startIndex">
        ///   Position at which to begin processing the index array
        /// </param>
        /// <param name="indexCount">Number of indices that will be processed</param>
        /// <param name="type">Type of primitives to draw</param>
        /// <param name="context">Desired graphics device settings for the primitives</param>
        public void Draw(
            int startVertex, int vertexCount,
            int startIndex, int indexCount,
            PrimitiveType type, DrawContext context
            )
        {
#if XNA_4
            startIndex += PrimitiveBatch <VertexType> .BatchSize * this.currentDivisionIndex;

            int primitiveCount = VertexHelper.GetPrimitiveCount(indexCount, type);

            // If the DrawContext requires more than one pass, we have to draw the
            // primitives multiple times
            for (int pass = 0; pass < context.Passes; ++pass)
            {
                // Enter the pass and send all primitives to the graphics card
                context.Apply(pass);

                this.graphicsDevice.DrawIndexedPrimitives(
                    type,          // type of primitives to render
                    startVertex,   // offset that will be added to all vertex indices
                    0,             // lowest vertex used in the call (relative to previous parameter)
                    vertexCount,   // number of vertices used in the call
                    startIndex,    // where in the index array to begin processing
                    primitiveCount // number of primitives
                    );
            } // for
#else
            startIndex += PrimitiveBatch <VertexType> .BatchSize * this.currentDivisionIndex;

            context.Begin();
            try {
                int primitiveCount = VertexHelper.GetPrimitiveCount(indexCount, type);

                // If the DrawContext requires more than one pass, we have to draw the
                // primitives multiple times
                for (int pass = 0; pass < context.Passes; ++pass)
                {
                    // Enter the pass and send all primitives to the graphics card
                    context.BeginPass(pass);
                    try {
                        this.graphicsDevice.DrawIndexedPrimitives(
                            type,          // type of primitives to render
                            startVertex,   // offset that will be added to all vertex indices
                            0,             // lowest vertex used in the call (relative to previous parameter)
                            vertexCount,   // number of vertices used in the call
                            startIndex,    // where in the index array to begin processing
                            primitiveCount // number of primitives
                            );
                    }
                    finally {
                        context.EndPass();
                    }
                } // for
            }
            finally {
                context.End();
            }
#endif
        }
        /// <summary>Draws a batch of indexed primitives</summary>
        /// <param name="startVertex">
        ///   Index of the first vertex in the vertex array. This vertex will become
        ///   the new index 0 for the index buffer.
        /// </param>
        /// <param name="vertexCount">Number of vertices used in the call</param>
        /// <param name="startIndex">
        ///   Position at which to begin processing the index array
        /// </param>
        /// <param name="indexCount">Number of indices that will be processed</param>
        /// <param name="type">Type of primitives to draw</param>
        /// <param name="context">Desired graphics device settings for the primitives</param>
        public void Draw(
            int startVertex, int vertexCount,
            int startIndex, int indexCount,
            PrimitiveType type, DrawContext context
            )
        {
#if XNA_4
            int primitiveCount = VertexHelper.GetPrimitiveCount(indexCount, type);

            // If the DrawContext requires more than one pass, we have to draw the
            // primitives multiple times
            for (int pass = 0; pass < context.Passes; ++pass)
            {
                // Enter the effect pass and send all primitives to the graphics card
                context.Apply(pass);

                this.graphicsDevice.DrawUserIndexedPrimitives <VertexType>(
                    type,          // type of primitives to render
                    this.vertices, // vertex array
                    startVertex,   // offset that will be added to all vertex indices
                    vertexCount,   // number of vertices used in the call
                    this.indices,  // index array
                    startIndex,    // where in the index array to begin processing
                    primitiveCount // number of primitives
                    );
            } // for
#else
            context.Begin();
            try {
                int primitiveCount = VertexHelper.GetPrimitiveCount(indexCount, type);

                // If the DrawContext requires more than one pass, we have to draw the
                // primitives multiple times
                for (int pass = 0; pass < context.Passes; ++pass)
                {
                    // Enter the pass and send all primitives to the graphics card
                    context.BeginPass(pass);
                    try {
                        this.graphicsDevice.DrawUserIndexedPrimitives <VertexType>(
                            type,          // type of primitives to render
                            this.vertices, // vertex array
                            startVertex,   // offset that will be added to all vertex indices
                            vertexCount,   // number of vertices used in the call
                            this.indices,  // index array
                            startIndex,    // where in the index array to begin processing
                            primitiveCount // number of primitives
                            );
                    }
                    finally {
                        context.EndPass();
                    }
                } // for
            }
            finally {
                context.End();
            }
#endif
        }
        /// <summary>Draws a batch of primitives</summary>
        /// <param name="startVertex">Index of vertex to begin drawing with</param>
        /// <param name="vertexCount">Number of vertices used</param>
        /// <param name="type">Type of primitives that will be drawn</param>
        /// <param name="context">Desired graphics device settings for the primitives</param>
        public void Draw(
            int startVertex, int vertexCount,
            PrimitiveType type, DrawContext context
            )
        {
#if XNA_4
            int primitiveCount = VertexHelper.GetPrimitiveCount(vertexCount, type);

            // If the DrawContext requires more than one pass, we have to draw the
            // primitives multiple times
            for (int pass = 0; pass < context.Passes; ++pass)
            {
                // Enter the pass and send all primitives to the graphics card
                context.Apply(pass);

                this.graphicsDevice.DrawPrimitives(
                    type,          // type of primitives to render
                    startVertex,   // offset that will be added to all vertex indices
                    primitiveCount // number of primitives being drawn
                    );
            } // for
#else
            context.Begin();
            try {
                int primitiveCount = VertexHelper.GetPrimitiveCount(vertexCount, type);

                // If the DrawContext requires more than one pass, we have to draw the
                // primitives multiple times
                for (int pass = 0; pass < context.Passes; ++pass)
                {
                    // Enter the pass and send all primitives to the graphics card
                    context.BeginPass(pass);
                    try {
                        this.graphicsDevice.DrawPrimitives(
                            type,          // type of primitives to render
                            startVertex,   // offset that will be added to all vertex indices
                            primitiveCount // number of primitives being drawn
                            );
                    }
                    finally {
                        context.EndPass();
                    }
                } // for
            }
            finally {
                context.End();
            }
#endif
        }