//
|
// Renderer.swift
|
// LiveProject
|
// 渲染工具
|
// Created by 倪路朋 on 6/26/25.
|
//
|
import CoreVideo
|
import Metal
|
import MetalKit
|
|
class MetalRenderer: NSObject, MTKViewDelegate {
|
var device: MTLDevice!
|
var commandQueue: MTLCommandQueue!
|
|
func setup(view: MTKView) {
|
self.device = view.device
|
self.commandQueue = device.makeCommandQueue()
|
// 初始化 texture、pipeline 等
|
}
|
|
// ✅ 必须实现的方法 1:窗口大小改变时调用
|
func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) {
|
// 可以留空或更新视图缩放、渲染区域等
|
}
|
|
// ✅ 必须实现的方法 2:每一帧绘制时调用
|
func draw(in view: MTKView) {
|
guard let drawable = view.currentDrawable,
|
let descriptor = view.currentRenderPassDescriptor else { return }
|
|
let commandBuffer = commandQueue.makeCommandBuffer()!
|
let encoder = commandBuffer.makeRenderCommandEncoder(descriptor: descriptor)!
|
// 渲染逻辑,如绘制纹理
|
encoder.endEncoding()
|
commandBuffer.present(drawable)
|
commandBuffer.commit()
|
}
|
}
|