MTLTexture与CGImageRef

时间:2019-04-22 21:54:41

标签: ios metal cgimage cgimageref

MTLTextureCGImageRef之间的主要区别是什么?何时需要使用MTLTexture代替CGImageRef(反之亦然)?

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

1 个答案:

答案 0 :(得分: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管道来创建或修改CGImage,并且有许多功能可以“即开即用”地使用这些图像。

我想说的是,如果您拥有3D视频游戏,则可以签出Metal,但这是一个低级的API,例如,设置Metal比设置OpenGL要复杂得多。您不能按原样将Core Graphics用于3D游戏。如果Metal看起来太难了,您可以从Apple那里查看更高级别的API,例如SceneKit,这些API也用于游戏开发。

关于2D游戏开发,我不能说太多,但您绝对可以使用Metal,这可能有点“过大”。

总而言之,您需要在复杂性和控制力之间找到平衡,并选择最适合您的东西。