首先
MTLTexture
来自低级图形API。
MTLTexture
指驻留在GPU可访问的内存中的“映像”(不一定在GPU本身上)。然后可以编写一个使用金属的程序,特别是渲染(
MTLRenderPipelineState
)或者计算(
MTLComputePipelineState
)管道状态包含着色器(在GPU上运行的程序),用于读取纹理、采样、写入纹理并将其用作附件(向其输出渲染结果)。纹理也可以复制到缓冲区(
MTLBuffer
)和其他纹理,如果你想在CPU上读回纹理数据。但是
MTLTexture
主要用于GPU而不是CPU。而且
MTLTexture
它不仅限于2D,还可以是立方体纹理,甚至是3D纹理。
CGImage
另一方面,它来自一个更高级别的API(Core Graphics或Quartz 2D),用于2D。您不需要着色器或GPU管线来创建或修改
CGImage
还有许多功能可以“开箱即用”地处理这些图像。
我想说,如果你有一个3D视频游戏,你可以查看Metal,但它是一个低级API,设置Metal比设置OpenGL要复杂得多。你不能在3D游戏中使用核心图形。如果金属看起来太硬,你可以查看苹果的高级API,比如SceneKit,它们也用于游戏开发。
关于2D游戏开发,我不能说太多,但你肯定可以使用金属,这可能有点“过火”。
总之,你需要在复杂性和控制之间找到平衡,并选择最适合你的。