MetalByTutorials/21-metal-performance-shaders/sobel.playground/Sources/Renderer.swift

36 lines
1.0 KiB
Swift

import MetalKit
import MetalPerformanceShaders
public class Renderer: NSObject, MTKViewDelegate {
public var device: MTLDevice!
var queue: MTLCommandQueue!
var texIn: MTLTexture!
public override init() {
device = MTLCreateSystemDefaultDevice()!
queue = device.makeCommandQueue()
let textureLoader = MTKTextureLoader(device: device)
let url = Bundle.main.url(forResource: "fruit.jpg", withExtension: "")!
do {
texIn = try textureLoader.newTexture(URL: url, options: [:])
}
catch {
fatalError(error.localizedDescription)
}
}
public func draw(in view: MTKView) {
guard let commandBuffer = queue.makeCommandBuffer(),
let drawable = view.currentDrawable else { return }
let shader = MPSImageSobel(device: device)
shader.encode(commandBuffer: commandBuffer, sourceTexture: texIn,
destinationTexture: drawable.texture)
commandBuffer.present(drawable)
commandBuffer.commit()
}
public func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) { }
}