2015-04-06 111 views
1

我想在我的HLSL着色器中设置几个纹理作为数组。 每个纹理都表示为ID3D11ShaderResourceView *。 每个纹理可能是不同的大小。将纹理数组发送到DirectX 11中的着色器中

现在,如果我在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]; 

它是否将正确映射?

+0

是否有理由不能尝试查看结果? – mins 2015-04-06 09:49:55

+0

我们正在重建我们的引擎,我们想知道我们的假设是否正确。 – DannyX 2015-04-06 09:59:54

回答

1

这通常是一种可用于将纹理数组从运行时映射到着色器执行的方法。数组中的纹理尺寸无关紧要,但是,您可能需要在着色器代码中对此进行说明,具体取决于您如何对纹理进行采样。

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

Texture2D g_textures[3] : register(t0); 

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