gpt4 book ai didi

macos - 我应该如何同步两个 NSView 的渲染内容?

转载 作者:行者123 更新时间:2023-12-03 17:48:32 25 4
gpt4 key购买 nike

我正在尝试展示另一个 NSView 的实时视觉效果

我的问题不是将 View 渲染为图像。 cocoa: how to render view to image?

<小时/>

我们将源 View 称为事件 View ,并将一对多目标 View 称为镜像 View 。

每个 View 都有一个导出和导入 CGLayer。

导出层将使其充当事件 View

导入层将使其充当镜像 View

这个想法是,事件 View 将转换ncdntReflection,并且其所有镜像 View 将在其mrrSurface上捕获该反射

  • ncdntReflection:事件 View 的导出 CGLayer。
  • mrrSurface:镜像 View 的导入CGLayer。
<小时/>

到目前为止我已经尝试了 3 种方法...

<强>1。 CGLayer 作为后备存储:

  1. 事件 View 及其 subview 的内容绘制到ncdntReflection中。
  2. ncdntReflection绘制到事件 View 的当前上下文中。
  3. 镜像 View mrrSurface设置为ncdntReflection

<强>2。将 CALayers 复合为 CGLayer

  1. 事件 View 及其 subview 的支持CALayers绘制到ncdntReflection中。
  2. 镜像 View mrrSurface设置为ncdntReflection

<强>3。 cacheDisplayInRect 或 CGWindowListCreateImage

  1. 使用任一方法捕获事件 View 的内容
  2. 将这些内容绘制到 ncdntReflection 中。
  3. 镜像 View mrrSurface设置为ncdntReflection

由于以下原因,我不喜欢这些方法。

折叠图层不是一个选项,因为我需要在每个图层上添加动画。这意味着选项 1 和 2 都必须递归才能获取所有 subview 。我担心这种绘图的性能会受到影响。

选项 3 需要很长时间才能成为有效的解决方案。

理想情况下,事件 View 镜像 View 都遵循相同的渲染指令 - 就像 WPF 视觉画笔一样。

有 Metal 溶液吗?

最佳答案

您可能正在寻找 NSView displayRectIgnoringOpacity:inContext:方法。它可能不是最有效的方法,因为它绘制 View 两次,但它似乎适用于您的情况。另一方面,我不确定缓存像素缓冲区是否会更快,无论如何,这肯定需要更多内存。

关于macos - 我应该如何同步两个 NSView 的渲染内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38663094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com