如何正确地将 texture2d_array<float> 传递给片段着色器?
How do I properly pass a texture2d_array<float> to the fragment shader?
这是我的片段着色器。
constexpr sampler ColorSampler;
fragment half4 T(VertexOut Vertex [[stage_in]], texture2d_array<float> Texture [[texture(0)]]) {
return half4(Vertex.Color, 1)*half4(Texture.sample(ColorSampler, Vertex.TexCoord.xy/Vertex.TexCoord.z, 0));
}
编译通过。但是,如何从该着色器接受的 Swift 端传递 texture2d_array<float>
?我有一个名为 Textures
且类型为 [MTLTexture?]
的变量,但如何将其作为数组传递给纹理缓冲区 0?这行不通。
CommandEncoder.setFragmentTextures(Textures, range: 0..<Textures.count)
它不起作用,因为它将每个纹理放在其索引的纹理缓冲区中。如何正确地将纹理数组传递给片段函数?
我该怎么做?
我正在尝试的是个好主意吗?
如果几乎没有关于此的深入内容,我该如何研究?
setFragmentTextures 确实会单独绑定每个纹理。
如果你想在你的着色器中使用 texture2d_array 你必须创建一个 MTLTexture 与 MTLTextureType type2DArray.
这是我的片段着色器。
constexpr sampler ColorSampler;
fragment half4 T(VertexOut Vertex [[stage_in]], texture2d_array<float> Texture [[texture(0)]]) {
return half4(Vertex.Color, 1)*half4(Texture.sample(ColorSampler, Vertex.TexCoord.xy/Vertex.TexCoord.z, 0));
}
编译通过。但是,如何从该着色器接受的 Swift 端传递 texture2d_array<float>
?我有一个名为 Textures
且类型为 [MTLTexture?]
的变量,但如何将其作为数组传递给纹理缓冲区 0?这行不通。
CommandEncoder.setFragmentTextures(Textures, range: 0..<Textures.count)
它不起作用,因为它将每个纹理放在其索引的纹理缓冲区中。如何正确地将纹理数组传递给片段函数?
我该怎么做?
我正在尝试的是个好主意吗?
如果几乎没有关于此的深入内容,我该如何研究?
setFragmentTextures 确实会单独绑定每个纹理。 如果你想在你的着色器中使用 texture2d_array 你必须创建一个 MTLTexture 与 MTLTextureType type2DArray.