将纹理数组发送到 DirectX 11 中的着色器

Sending texture array to shader in DirectX 11

我想在我的 HLSL 着色器中设置为数组的纹理很少。 每个纹理都表示为 ID3D11ShaderResourceView*。 每个纹理的大小可能不同。

现在,如果我在 D3D 中将它们设置为数组:

ID3D11ShaderResourceView* m_array[3];

    m_array[0] = ...;
    m_array[1] = ...;
    m_array[2] = ...;

    m_deviceContext->PSSetShaderResources(
        0,  // Start slot
        3,  // Nb of textures
        m_array); // Array

在我的 HLSL 着色器中我声明:

Texture2D       g_textures[3];

会映射正确吗?

这通常是一种可用于将纹理数组从运行时映射到着色器执行的方法。数组中的纹理尺寸匹配并不重要,但是,您可能需要在着色器代码中考虑这一点,具体取决于您对纹理进行采样的方式。

此外,在您的 HLSL 中,您假设 g_textures 数组分配给了插槽 0,因此如果由于某种原因它实际上并没有到达那里(例如,有另一个纹理资源在着色器源代码中位于它之前),那么您就不会将预期的资源设置到正确的插槽中。我发现最好明确地映射它们,例如:

Texture2D g_textures[3] : register(t0);

如果有碰撞,会在(着色器)编译时发现。