3

问题:

如何捕获要在 Metal 中修改的视图?

我(可能不完整)的理解是我需要将视图捕获为纹理,将其移动到设备内存中,使用着色器对其进行处理,然后将其渲染回视图中。我目前停留在捕获视图的第一步。这个问题的范围仅取决于捕获将其放入金属的纹理,如果我遇到着色器问题,我将为此打开一个单独的问题。

如果有比下降到 GPU 级别更简单的方法,我愿意接受建议。

背景:

出于学习的目的,我正在尝试使用 Metal 重新创建此短片中看到的涟漪效果(不使用视频中的 Qt 和 OpenGL)。据我了解,我需要一个顶点着色器和片段着色器。我想我可以通过一些实验将 repo中的 openGL 着色器转换为 Metal。

Apple 为 iOS 提供了一个非常相似的动画,即CATransition“rippleEffect”,因此这似乎是可能的,但他们使用的 API 是私有的,可能会导致您的应用被应用商店拒绝。

我也遇到过BCMeshTransformView,它似乎与我想要做的非常相似,但我没有任何运气试图从源头收集它的工作原理。

我花了几个小时搜索文档,但总的来说,我是图形学的初学者,所以我可能没有在谷歌上搜索正确的术语。

4

1 回答 1

1

最简单的方法是使用CoreImage。CI 提供了非常广泛的效果,可以很容易地应用于您的视图(这里是完整列表)。

如果这些都不适合您,您实际上可以使用 GLSL(OpenGL 着色语言)编写自定义 CIFilter,它将直接在 GPU 上运行。

您可以通过抓取视图的 a ,将其转换为 a ,运行您的过滤器,然后在屏幕上显示来将给定CIFilter的应用程序。我相信这比尝试使用 Metal 更容易,Metal 是一个低得多的 API。UIViewUIImageCIImageCIImage

有关执行此操作的 CoreImage 代码示例,请参阅如何将 CIFilter 应用于 UIView?

于 2018-06-26T17:37:52.677 回答