Я следовал этому учебнику.Я скачал источник и попытался «перевести» его на Swift.Это мой «переведенный» код:
import Cocoa
import AppKit
import MetalKit
import simd
class MetalViewController: NSViewController {
@IBOutlet var inview: MTKView!
override func viewDidLoad() {
super.viewDidLoad()
let _view: MTKView = self.inview
_view.device = MTLCreateSystemDefaultDevice()
let _renderer: Renderer=initView(view: _view)
_view.delegate=_renderer as? MTKViewDelegate
_view.preferredFramesPerSecond=60
}
}
class Renderer: NSObject {
init(device: MTLDevice){
self._device=device
self._commandQueue=_device.makeCommandQueue()!
super.init()
}
func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) {
}
func draw(in view: MTKView) {
let color = Color(red: 1.0,green: 0.0,blue: 0.0,alpha: 0.0)
view.clearColor = MTLClearColorMake(color.red, color.green, color.blue, color.alpha)
let commandbuffer = _commandQueue.makeCommandBuffer()
let renderpassdescriptor: MTLRenderPassDescriptor = view.currentRenderPassDescriptor!
let renderencoder: MTLRenderCommandEncoder = (commandbuffer?.makeRenderCommandEncoder(descriptor: renderpassdescriptor))!
renderencoder.endEncoding()
commandbuffer!.present(view.currentDrawable!)
commandbuffer!.commit()
}
var _device: MTLDevice
var _commandQueue: MTLCommandQueue
}
struct Color{
var red, green, blue, alpha: Double
}
func initView(view: MTKView) -> Renderer{
var renderer: Renderer
renderer=Renderer(device: view.device!)
return renderer
}
Поэтому я поместил AAPLRenderer и AAPLViewControllers в один файл и сделал так, чтобы не было заголовочных файлов.Я связал представление с @IBOutlet с контроллером представления, потому что представление было NSView, и я не могу привести его к MTKView без получения ошибки времени компиляции.AppDelegate является оригинальным, и у меня нет основного файла.
В итоге я получаю окно, которое не показывает красный цвет, а скорее ничего не показывает.Я не понимаю, почему это происходит.Пожалуйста, помогите мне, спасибо.