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

时间:2015-04-06 09:45:18

标签: c++ directx hlsl

我想在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];

是否会正确映射?

1 个答案:

答案 0 :(得分:1)

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

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

Texture2D g_textures[3] : register(t0);

如果发生碰撞,则会在(着色器)编译时找到它。