我只需要渲染二维文本,但我发现的示例(MetalByExample.com 的文本渲染)是在 Objective-C 中的,非常混乱,并且可能有很多垃圾(完整功能不需要的代码或步骤)。我应该如何在 Metal 中渲染简单的文本?这在 SwiftUI 中是微不足道的,但我如何在 Metal 中做到这一点?我知道这个问题有点含糊,但是关于如何在 Metal 中呈现简单文本的有用资源很少。给定这个起始代码,我怎么能渲染一个简单的 hello world 文本?
import Cocoa
import MetalKit
class ViewController: NSViewController {
private let Device = MTLCreateSystemDefaultDevice()!
private var CommandQue: MTLCommandQueue!, Pipeline: MTLRenderPipelineState!
private var View: MTKView {
return view as! MTKView
}
override func viewDidLoad() {
super.viewDidLoad()
View.delegate = self
View.device = Device
CommandQue = Device.makeCommandQueue()
let PipelineDescriptor = MTLRenderPipelineDescriptor()
let Library = Device.makeDefaultLibrary()!
PipelineDescriptor.vertexFunction = Library.makeFunction(name: "V")
PipelineDescriptor.fragmentFunction = Library.makeFunction(name: "T")
Pipeline = try? Device.makeRenderPipelineState(descriptor: PipelineDescriptor)
}
}
extension ViewController: MTKViewDelegate {
func mtkView(_ _: MTKView, drawableSizeWillChange Size: CGSize) {
View.draw()
}
func draw(in _: MTKView) {
let CommandBuffer = CommandQue.makeCommandBuffer()!, CommandEncoder = CommandBuffer.makeRenderCommandEncoder(descriptor: View.currentRenderPassDescriptor!)!
CommandEncoder.setRenderPipelineState(Pipeline!)
// Render
CommandEncoder.endEncoding()
CommandBuffer.present(View.currentDrawable!)
CommandBuffer.commit()
}
}
基本上我怎么能在 Metal 中复制这个简单的 SwiftUI?我不是要“为我编写此代码”,但我想要一些关于从哪里开始的指示?
struct ContentView: View {
var body: some View {
Text("Hello, World!")
}
}