Question:
如何在Metal中捕获要修改的视图?
我的(可能是不完整的)理解是我需要将视图捕获为纹理,将其移动到设备内存中,使用着色器对其进行处理,然后将其渲染回视图中 . 我目前停留在捕获视图的第一步 . 这个问题的范围仅取决于将纹理捕获到Metal中,如果我遇到着色器的问题,我将为此打开一个单独的问题 .
如果有一种更简单的方法来做到这一点而不是下降到GPU级别,我愿意接受建议 .
Background:
出于学习的目的,我正在尝试使用Metal重新创建this short clip中的涟漪效果(不像视频中那样使用Qt和OpenGL) . 据我了解,我需要一个顶点着色器和片段着色器 . 我想我可以通过一些实验将the repo中的openGL着色器转换为Metal .
Apple提供与iOS非常相似的动画,因此它似乎是可能的,但它们使用的API是私有的,可能会让您的应用程序被应用商店拒绝 .
我也遇到了BCMeshTransformView,这似乎与我想做的非常相似,但我没有任何运气试图从源头收集它是如何工作的 .
我花了几个小时搜索文档,但我是一般的图形初学者,我可能没有用Google搜索正确的术语 .
1 回答
最简单的方法是使用CoreImage . CI提供了非常广泛的效果,可以非常轻松地应用于您的视图(这里是full list) .
如果这些都不适合您,您实际上可以使用GLSL(OpenGL着色语言)编写custom CIFilter,它将直接在GPU上运行 .
您可以通过抓取视图的
UIImage
将一个给定的CIFilter
应用于UIView
,将其转换为CIImage
,运行过滤器,然后在屏幕上显示CIImage
. 我相信这比使用Metal更容易做到这一点,Metal是一个低得多的API .对于执行此操作的CoreImage代码示例,请参阅How to apply CIFilter to UIView?