代码之家  ›  专栏  ›  技术社区  ›  zeus

MTLTexture与CGImageRef

  •  0
  • zeus  · 技术社区  · 5 年前

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

    我有一个应用程序(比如一个电子游戏),可以在一个专用的界面上自动绘制所有东西。这包括60fps的动画(所以我需要每隔16ms重新绘制一次曲面)。我不知道用金属制作应用程序的最有效方法

    0 回复  |  直到 5 年前
        1
  •  3
  •   Spo1ler    5 年前

    首先 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游戏开发,我不能说太多,但你肯定可以使用金属,这可能有点“过火”。

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