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 |   71 +++++++++++++----------------------
 1 files changed, 27 insertions(+), 44 deletions(-)

diff --git a/LiveProject/views/VideoRendererView.swift b/LiveProject/views/VideoRendererView.swift
index 960aa78..79a63a1 100644
--- a/LiveProject/views/VideoRendererView.swift
+++ b/LiveProject/views/VideoRendererView.swift
@@ -7,57 +7,40 @@
 import SwiftUI
 import MetalKit
 
-struct MetalVideoRenderView: UIViewRepresentable {
-    // 统一接口,接收各种视频源的帧数据
-    var frameData: VideoFrameData?
-    
+struct VideoRendererView: UIViewRepresentable {
+    @Binding var pixelBuffer: CVPixelBuffer?
+    @Binding var rotate:Int?;
+
+    //用 Coordinator 缓存实例
     func makeCoordinator() -> Coordinator {
-        Coordinator(self)
+        return Coordinator()
     }
-    
+
     func makeUIView(context: Context) -> MTKView {
-        let mtkView = MTKView()
-        mtkView.device = context.coordinator.device
-        mtkView.delegate = context.coordinator
-        mtkView.framebufferOnly = false
-        mtkView.colorPixelFormat = .bgra8Unorm
-        mtkView.autoResizeDrawable = true
-        return mtkView
+        return context.coordinator.mtkView
     }
-    
+
     func updateUIView(_ uiView: MTKView, context: Context) {
-        // 更新帧数据
-        context.coordinator.updateFrame(frameData)
+        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: NSObject, MTKViewDelegate {
-        var parent: MetalVideoRenderView
-        var device: MTLDevice
-        var commandQueue: MTLCommandQueue
-        var pipelineState: MTLRenderPipelineState
-        var textureCache: CVMetalTextureCache?
-        
-        // YUV转RGB的着色器
-        var yuvConversionPipeline: MTLComputePipelineState?
-        
-        init(_ parent: MetalVideoRenderView) {
-            self.parent = parent
-            self.device = MTLCreateSystemDefaultDevice()!
-            self.commandQueue = device.makeCommandQueue()!
-            
-            // 初始化Metal资源
-            // (这里需要设置渲染管线和纹理缓存)
-        }
-        
-        func updateFrame(_ frameData: VideoFrameData?) {
-            // 根据不同的帧数据格式(YUV/RGBA)进行处理
-            // 将数据转换为Metal纹理
-        }
-        
-        func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) {}
-        
-        func draw(in view: MTKView) {
-            // 执行Metal绘制命令
+
+    class Coordinator {
+        let mtkView: MTKView
+        let renderer: MetalRenderer
+
+        init() {
+            print("📦 MetalRendererWrapper 初始化了")
+            mtkView = MTKView()
+            renderer = MetalRenderer(mtkView: mtkView)
         }
     }
 }
+

--
Gitblit v1.9.1