[英]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,因此如果由于某种原因它实际上并没有到达插槽0(例如,着色器源中之前有另一个纹理资源),那么您将不会将目标资源设置为正确的插槽。 我发现最好明确地映射它们,例如:
Texture2D g_textures[3] : register(t0);
如果发生冲突,则会在(着色器)编译时找到它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.