假设我有一个深度/模板纹理,其格式为MTLPixelFormatDepth32Float_Stencil8
,我将其用作渲染过程中的附件,然后在下一个渲染过程中从该纹理中采样模板值。
金属着色语言规范完全没有提及任何内容,只是深度纹理需要声明为depth2d<T, access a = access::sample>
,depth2d
和T sample(sampler s, float2 coord, int2 offset = int2(0)) const
都需要声明为T read(uint2 coord, uint lod = 0) const
返回T
,其中T
最有可能是float
。
所以,我的问题是,如何从该纹理读取或采样模板值?
答案 0 :(得分:2)
创建stencil texture view的深度/模板纹理,格式为MTLPixelFormatX32_Stencil8
。然后,将该纹理视图传递到要读取的着色器中。它可以作为R8Uint
纹理使用。
请注意,并非所有设备都支持模具纹理视图。支持等于或优于iOS_GPUFamily1_v3,iOS_GPUFamily2_v3,iOS_GPUFamily3_v2,tvOS_GPUFamily1_v2或OSX_GPUFamily1_v2的功能集。
如果不支持,则需要使用blit编码器将深度/模板纹理复制到缓冲区中,然后直接使用该缓冲区或将其复制到适当格式的纹理中。