MTLTexture
与CGImageRef
之间的主要区别是什么?何时需要使用MTLTexture
代替CGImageRef
(反之亦然)?
我有一个应用程序(例如视频游戏),可以在专用表面上自行绘制所有内容。这包括60fps的动画(因此我需要每16ms重绘一次表面)。我不知道使用Metal制作我的应用程序的最有效方法
答案 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,这可能有点“过大”。
总而言之,您需要在复杂性和控制力之间找到平衡,并选择最适合您的东西。