我几乎没有要在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,因此如果由于某种原因它实际上并没有到达插槽0(例如,着色器源中之前有另一个纹理资源),则您不会将目标资源设置为正确的插槽。我发现最好将它们明确映射,例如:
Texture2D g_textures[3] : register(t0);
如果发生冲突,将在(着色器)编译时找到它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句