         return cache.pool[commandQueue]?.makeContext(colorSpace: colorSpace, outputPremultiplied: outputPremultiplied, workingFormat: workingFormat)
     }
     
-    func render(to texture: MTLTexture, commandBuffer: MTLCommandBuffer, bounds: Rect, workingFormat: CIFormat) {
+    func render(to output: MTLTexture, commandBuffer: MTLCommandBuffer, bounds: Rect, workingFormat: CIFormat) {
         
         guard let minX = Int(exactly: floor(bounds.minX)) else { return }
         guard let minY = Int(exactly: floor(bounds.minY)) else { return }

        
        if !need_to_render.isEmpty {
            
            let buffers: [(Block, MappedBuffer<UInt8>)] = autoreleasepool {
                
                guard let commandBuffer = commandBuffer.commandQueue.makeCommandBuffer() else { return [] }
                
                let buffers: [(Block, MappedBuffer<UInt8>)] = need_to_render.compactMap { block in
                    
                    let extent = Rect(x: block.minX, y: block.minY, width: block.width, height: block.height)
                    

        
        var pool = WeakDictionary<MTLCommandQueue, CIContextPool>()
        
        var table: [Block: (MTLTexture, Int, Int)] = [:]
        
        subscript(block: Block) -> (MTLTexture, Int, Int)? {
            get {
                return lck.synchronized { table[block] }
            }
