Runt
2025-06-27 37251af47d1c5e622e8e62a76ff7077f9cd87069
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//
//  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()
    }
}