Runt
2025-07-04 acf8e83cbf106b4350536d54eb46379dd86a623c
LiveProject/views/VideoRendererView.swift
@@ -8,18 +8,33 @@
import MetalKit
struct VideoRendererView: UIViewRepresentable {
    let renderer: MetalRenderer  // 自定义 Metal 渲染器,支持传入 RGBA/YUV 数据帧
    @Binding var pixelBuffer: CVPixelBuffer?
    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)
        }
    }
    class Coordinator {
        let mtkView: MTKView
        let renderer: MetalRenderer
        init() {
            print("📦 MetalRendererWrapper 初始化了")
            mtkView = MTKView()
            renderer = MetalRenderer(mtkView: mtkView)
        }
    }
}