【发布时间】:2025-12-12 10:25:02
【问题描述】:
帮我弄清楚metal api,我想通过mtlView渲染正常的图片,但它不适合我,这是我的代码,我做错了什么?接下来我想用UISlider和CIColorControls来改变这张图片60fps的对比度,请解释一下。
import MetalKit
class ViewController: UIViewController, MTKViewDelegate {
let device = MTLCreateSystemDefaultDevice()
let colorSpace = CGColorSpaceCreateDeviceRGB()
lazy var commandQueue: MTLCommandQueue = {
[unowned self] in
return self.device!.makeCommandQueue()
}()!
lazy var ciContext: CIContext = {
[unowned self] in
return CIContext(mtlDevice: self.device!)
}()
@IBOutlet weak var mtlView: MTKView!
let filter = CIFilter(name: "CIPhotoEffectProcess" )
let contrastFilter = CIFilter(name: "CIColorControls")
var image = CIImage()
@IBOutlet weak var slider: UISlider!
override func viewDidLoad() {
super.viewDidLoad()
mtlView.delegate = self
let img = UIImage(named: "picture")
let ciImage = CIImage(image: img!)
image = ciImage!
}
func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) {
}
func draw(in view: MTKView) {
guard let targetTexture = view.currentDrawable?.texture else {
return
}
let commandBuffer = commandQueue.makeCommandBuffer()
let bounds = CGRect(origin: CGPoint.zero, size: view.drawableSize)
ciContext.render(image,
to: targetTexture,
commandBuffer: commandBuffer,
bounds: bounds,
colorSpace: colorSpace)
commandBuffer?.present(view.currentDrawable!)
commandBuffer?.commit()
}
}
【问题讨论】: