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