MTLTexture与CGImageRef

问题描述 投票:1回答:1

MTLTextureCGImageRef之间的主要区别是什么?我们什么时候需要使用MTLTexture而不是CGImageRef(反之亦然)?

我有一个应用程序(比如一个视频游戏),可以在专用的表面上自行绘制所有内容。这包括60fps的动画(所以我需要每16ms重绘一次表面)。我不知道使用Metal做我的应用程序的最有效方法

ios metal cgimage cgimageref
1个回答
2
投票

首先,MTLTexture来自低级图形API。 MTLTexture指的是驻留在GPU可访问的内存中的“图像”(不一定在GPU本身上)。然后,您可以编写一个使用Metal的程序,特别是渲染(MTLRenderPipelineState)或计算(MTLComputePipelineState)管道状态,其中包含着色器(在GPU上运行的程序)来读取纹理,对其进行采样,写入并将它们用作附件(输出渲染)结果给他们)。如果要在CPU上读回纹理数据,也可以将纹理复制到缓冲区(MTLBuffer)和其他纹理。但MTLTexture主要用于GPU而不是CPU。此外,MTLTexture不仅限于2D,它也可以是立方体纹理甚至是3D纹理。

另一方面,CGImage来自用于2D用途的更高级别的API(Core Graphics或Quartz 2D)。您不需要着色器或GPU管道来创建或修改CGImages,并且有许多功能可以“开箱即用”处理这些图像。

我想说,如果你有一个3D视频游戏,你可以查看Metal,但它是一个低级API,例如,设置Metal是一个比设置OpenGL更复杂的过程。您不能按原样使用Core Graphics进行3D游戏。如果Metal看起来太难了,你可以查看Apple的高级API,比如SceneKit,它们也适用于游戏开发。

我不能说2D游戏开发,但你绝对可以使用Metal,它可能只是有点“矫枉过正”。

总之,您需要在复杂性和控制之间找到平衡点,并选择最适合您的方案。

© www.soinside.com 2019 - 2024. All rights reserved.