我想在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];
是否会正确映射?
答案 0 :(得分:1)
这通常是一种可用于将纹理数组从运行时映射到着色器执行的方法。数组中的纹理尺寸匹配并不重要,但是,您可能需要在着色器代码中考虑这一点,具体取决于您对纹理进行采样的具体方式。
此外,在您的HLSL中,您假设g_textures
数组已分配给插槽0,因此如果由于某种原因它实际上不会去那里(例如,之前有另一个纹理资源)它在着色器源中),然后您将不会将预期的资源设置为正确的插槽。我发现最好明确地映射它们,例如:
Texture2D g_textures[3] : register(t0);
如果发生碰撞,则会在(着色器)编译时找到它。