ios - MTLTexture 与 CGImageRef

标签 ios metal cgimage cgimageref

MTLTextureCGImageRef 之间的主要区别是什么?我们什么时候需要使用 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/

相关文章:

ios - Docker设置-无法运行世界

iphone - 带字典的iphone数组索引

iphone - 在一个 View Controller 中保存分数值并显示在另一个 View Controller 中

ios - 在 Metal Shader Vertex 函数中出错

swift - 视频图像生成中的内存消耗问题 - AVAsset

ios - 从 Adob​​eLabsUXMagicSelectionView (Adobe Creative SDK) 获取前景

iOS - 获取应用内订阅购买的到期时间

ios - Metal 质感不可过滤

objective-c - 32 位大端 float 据到 CGImage

ios - Metal iOS 给出编译错误