Runt
2025-07-04 acf8e83cbf106b4350536d54eb46379dd86a623c
LiveProject/views/VideoRendererView.swift
@@ -8,19 +8,33 @@
import MetalKit
struct VideoRendererView: UIViewRepresentable {
    let renderer: MetalRenderer  // 自定义 Metal 渲染器,支持传入 RGBA/YUV 数据帧
    @Binding var pixelBuffer: CVPixelBuffer?
    func makeUIView(context: Context) -> MTKView {
        let view = MTKView()
        view.device = MTLCreateSystemDefaultDevice()
        view.colorPixelFormat = .bgra8Unorm
        view.clearColor = MTLClearColor(red: 0.2, green: 0.5, blue: 0.7, alpha: 1.0)
        view.delegate = renderer
        view.isPaused = false
        view.enableSetNeedsDisplay = false
        renderer.setup(view: view)
        return view
    //用 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)
        }
    }
    class Coordinator {
        let mtkView: MTKView
        let renderer: MetalRenderer
        init() {
            print("📦 MetalRendererWrapper 初始化了")
            mtkView = MTKView()
            renderer = MetalRenderer(mtkView: mtkView)
        }
    }
}