什么是Metal中的colorAttachment [n]?

时间:2017-05-22 17:36:24

标签: graphics metal

一般来说非常陌生,从Metal开始直接需要,很快就会试用OpenGL。

想知道问题在外行人的意义上是什么意思。另外,'n'的范围是多少,我刚刚在我制作的2D三角形中将其用作0。

1 个答案:

答案 0 :(得分:6)

通常,颜色附件是渲染图像在渲染过程中(至少暂时)存储的位置。通常只在索引0处使用一个颜色附件,所以你正在做的很好。也可以同时渲染多个颜色附件,这就是为什么有一个数组。这是一种先进的技术,在您看到需要之前不必担心,此时应该如何直截了当。

有两个地方colorAttachments[n]出现在Metal中。首先是MTLRenderPipelineDescriptor。另一个在MTLRenderPassDescriptor

在这两种情况下,范围在Metal Implementation Limits表中的“渲染目标”部分的“标记为每个渲染过程描述符的最大渲染目标数”行中给出。

对于MTLRenderPipelineDescriptorcolorAttachments[n]是对MTLRenderPipelineColorAttachmentDescriptor的引用。在这里,您可以配置像素格式,写入掩码和颜色混合操作。

对于MTLRenderPassDescriptorcolorAttachments[n]是对MTLRenderPassColorAttachmentDescriptor的引用。这是MTLRenderPassAttachmentDescriptor的子类,它是定义大多数属性的地方。在这里,您可以配置要渲染到哪个纹理的哪个部分,渲染过程开始和结束时该纹理数据应该发生什么,如果要清除它,应该清除哪个颜色。

有关颜色附件的信息根据更改的成本分为两个对象。从管道描述符创建渲染管道状态对象相当昂贵。您通常会在运行中创建所有管道状态对象,并在应用程序的剩余生命周期内重复使用它们。

相比之下,您将经常使用渲染通道描述符创建渲染命令编码器;每帧至少一次。它们的创建成本相对较低,因此您可以更改描述符并创建一个新的描述符以在其他地方呈现。

渲染管道状态的颜色附件像素格式必须与渲染命令编码器的颜色附件纹理的纹理的像素格式匹配。