Understanding the Topology of LowLevelMesh in RealityKitDrawingApp Sample Code

I have recently developed an interest in the shader effects commonly found in Apple's UI and have been studying them. Additionally, as I own a Vision Pro, I have a strong desire to understand LowLevelMesh and am currently analyzing the sample code after watching the related session.

The part where I am completely stuck and unable to understand is the initializer section of CurveExtruder.

    /// Initializes the `CurveExtruder` with the shape to sweep along the curve.
    ///
    /// - Parameters:
    ///   - shape: The 2D shape to sweep along the curve.
    init(shape: [SIMD2<Float>]) {
        self.shape = shape
        
        // Compute topology //
        // Triangle fan lists each vertex in `shape` once for each ring, except for vertex `0` of `shape` which
        // is listed twice. Plus one extra index for the end-index (0xFFFFFFFF).
        let indexCountPerFan = 2 * (shape.count + 1) + 1
        
        var topology: [UInt32] = []
        topology.reserveCapacity(indexCountPerFan)
        
        // Build triangle fan.
        for vertexIndex in shape.indices.reversed() {
            topology.append(UInt32(vertexIndex))
            topology.append(UInt32(shape.count + vertexIndex))
        }
        
        // Wrap around to the first vertex.
        topology.append(UInt32(shape.count - 1))
        topology.append(UInt32(2 * shape.count - 1))
        
        // Add end-index.
        topology.append(UInt32.max)
        assert(topology.count == indexCountPerFan)

I have tried to understand why the capacity reserved for the topology array is 2 * (shape.count + 1) + 1, but I am struggling to figure it out.

I do not understand the principle behind the order in which vertexIndex is added to the topology.

The confusion is even greater because, while the comment mentions trianglefan, the actual creation of the LowLevelMesh.Part object uses the topology: .triangleStrip argument. (Did I misunderstand? I know that the topology option includes triangle, but this uses duplicated vertices.)

I am feeling very stuck. It's hard to find answers even through search options or LLMs. Maybe this requires specialized knowledge in computer graphics, which makes me feel embarrassed to ask.

However, personally, I have tried various directions without external help but still cannot find a clear path, so I am desperately seeking assistance!

P.S. As Korean is my primary language, I apologize in advance if there are any awkward or rude expressions.

Understanding the Topology of LowLevelMesh in RealityKitDrawingApp Sample Code
 
 
Q