                     from: texture,
                     sourceSlice: 0,
                     sourceLevel: 0,
-                    sourceOrigin: MTLOrigin(x: offset_x + _minX - block.minX, y: offset_y + _minY - block.minY, z: 0),
+                    sourceOrigin: MTLOrigin(x: _minX - block.minX, y: _minY - block.minY, z: 0),
                     sourceSize: MTLSize(width: width, height: height, depth: 1),
                     to: output,
                     destinationSlice: 0,

                    need_to_render.append(Block(minX: block2.minX, minY: block.minY, maxX: block.maxX, maxY: block.maxY))
                    
                } else {
                    need_to_render.append(block)
                }
            }
        }
        
        do {
            var _need_to_render: [Block] = need_to_render.reversed()
            need_to_render = []
            while let block = _need_to_render.popLast() {
                
                if let index = need_to_render.firstIndex(where: { $0.maxY == block.minY && $0.minX == block.minX && $0.maxX == block.maxX }), block.maxY - need_to_render[index].minY <= maxBlockSize {

                    need_to_render.append(Block(minX: block.minX, minY: block2.minY, maxX: block.maxX, maxY: block.maxY))
                    
                } else {
                    
                    need_to_render.append(block)
                }
            }
