LiveProject/views/VideoRendererView.swift
@@ -8,18 +8,39 @@
import MetalKit
struct VideoRendererView: UIViewRepresentable {
    let renderer: MetalRenderer  // 自定义 Metal 渲染器,支持传入 RGBA/YUV 数据帧
    @Binding var pixelBuffer: CVPixelBuffer?
    @Binding var rotate:Int?;
    func makeUIView(context: Context) -> MTKView {
        let mtkView = MTKView()
        mtkView.device = MTLCreateSystemDefaultDevice()
        mtkView.framebufferOnly = false
        mtkView.enableSetNeedsDisplay = false
        mtkView.isPaused = true
        mtkView.delegate = renderer
        renderer.setup(view: mtkView)
        return mtkView
    //用 Coordinator 缓存实例
    func makeCoordinator() -> Coordinator {
        return Coordinator()
    }
    func updateUIView(_ uiView: MTKView, context: Context) {}
    func makeUIView(context: Context) -> MTKView {
        return context.coordinator.mtkView
    }
    func updateUIView(_ uiView: MTKView, context: Context) {
        if let buffer = pixelBuffer {
            //print("updateUIView")
            context.coordinator.renderer.display(pixelBuffer: buffer)
        }
        if let angle = rotate{
            //print("updateUIView rotate \(angle)")
            context.coordinator.renderer.updateRotate(angle: angle)
        }
    }
    class Coordinator {
        let mtkView: MTKView
        let renderer: MetalRenderer
        init() {
            print("📦 MetalRendererWrapper 初始化了")
            mtkView = MTKView()
            renderer = MetalRenderer(mtkView: mtkView)
        }
    }
}