MTLTexture
与 CGImageRef
之间的主要区别是什么?我们什么时候需要使用 MTLTexture
而不是 CGImageRef
(反之亦然)?
我有一个应用程序(比如视频游戏),可以在专用表面上自行绘制所有内容。这包括 60fps 的动画(所以我需要每 16 毫秒重绘一次表面)。我不知道使用 Metal 开发应用程序的最有效方法
最佳答案
首先,MTLTexture
来自低级图形 API。 MTLTexture
指的是驻留在 GPU 可访问的内存中的“图像”(不一定在 GPU 本身上)。然后,您可以编写一个使用 Metal 的程序,特别是渲染 ( MTLRenderPipelineState
) 或计算 ( MTLComputePipelineState
) 管道状态,其中包含着色器(在 GPU 上运行的程序)来读取纹理、对它们进行采样、写入它们并将它们用作附件(将渲染结果输出给它们)。如果您想读回 CPU 上的纹理数据,也可以将纹理复制到缓冲区 ( MTLBuffer
) 和其他纹理。但是MTLTexture
主要供 GPU 使用,而不是 CPU 使用。另外,MTLTexture
不限于2D,还可以是立方体纹理,甚至3D纹理。
CGImage
另一方面,来自更高级别的 API(Core Graphics 或 Quartz 2D),旨在用于 2D 使用。您不需要着色器或 GPU 管道来创建或修改 CGImage
并且有许多函数可以“开箱即用”地处理这些图像。
我想说,如果您有 3D 视频游戏,您可以查看 Metal,但它是一个低级 API,例如,设置 Metal 的过程比设置 OpenGL 复杂得多。您不能按原样将 Core Graphics 用于 3D 游戏。如果 Metal 看起来太难,您可以查看 Apple 的更高级别 API,例如 SceneKit,它们也适用于游戏开发。
关于 2D 游戏开发我不能说太多,但你绝对可以使用 Metal,它可能只是有点“杀伤力”。
总之,您需要在复杂性和控制之间找到平衡,并选择最适合您的。
关于ios - MTLTexture 与 CGImageRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55801617/