 extension Shape {
     
     @_inlineable
-    public func render(_ operation: (Shape.RasterOperation) -> Void) {
+    public func render(_ operation: (Shape.RenderOperation) -> Void) {
         
         for component in self {
             component.render(operation)


extension Shape.Component {
    
    public func render(_ operation: (Shape.RasterOperation) -> Void) {
        
        @inline(__always)
        func drawCubic(_ p0: Point, _ p1: Point, _ p2: Point, _ p3: Point, operation: (Shape.RasterOperation) -> Void) {
            
            let bezier = Bezier(p0, p1, p2, p3)
            let inflection = bezier.inflection
            if inflection.count == 0 {
                
                if let (t1, t2) = CubicBezierSelfIntersect(p0, p1, p2, p3) {
                    
                    let split_t = [t1, t2].filter { !$0.almostZero() && !$0.almostEqual(1) && 0...1 ~= $0 }
                    
                    if split_t.count == 0 {
                        
                        _cubic(p0, p1, p2, p3, operation: operation)
                    } else {
                        
                        let beziers = bezier.split(split_t)
                        
                        operation(.triangle(p0, beziers.last![0], beziers.last![3]))
                        
                        beziers.forEach {
                            _cubic($0[0], $0[1], $0[2], $0[3], operation: operation)
                        }
                    }
                } else {
                    _cubic(p0, p1, p2, p3, operation: operation)
                }
            } else {
                
                var last: Point?
                
                for b in bezier.split(inflection) {
                    if let last = last {
                        operation(.triangle(p0, last, b[3]))
                    }
                    _cubic(b[0], b[1], b[2], b[3], operation: operation)
                    last = b[3]
                }
            }
        }

}

@inline(__always)
private func _cubic(_ p0: Point, _ p1: Point, _ p2: Point, _ p3: Point, operation: (Shape.RenderOperation) -> Void) {
    
    let q1 = 3 * (p1 - p0)
    let q2 = 3 * (p2 + p0) - 6 * p1
