From 7b3ecfffc59d2d980d9f7628365b64c20fe015be Mon Sep 17 00:00:00 2001
From: Runt <qingingrunt2010@qq.com>
Date: Sun, 27 Jul 2025 09:42:03 +0000
Subject: [PATCH] 多个小窗缩放问题修复

---
 LiveProject/views/VideoRendererView.swift |   44 ++++++++++++++++++++++++++++++++------------
 1 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/LiveProject/views/VideoRendererView.swift b/LiveProject/views/VideoRendererView.swift
index 67fdc70..79a63a1 100644
--- a/LiveProject/views/VideoRendererView.swift
+++ b/LiveProject/views/VideoRendererView.swift
@@ -8,19 +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 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)
+        }
+        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)
+        }
+    }
 }
+

--
Gitblit v1.9.1