C++ 将纹理数组发送到DirectX 11中的着色器
我有几个纹理,我想在我的HLSL着色器设置为数组。 每个纹理都表示为ID3D11ShaderResourceView*。 每个纹理的大小可能不同 现在,如果我在D3D中将它们设置为数组:C++ 将纹理数组发送到DirectX 11中的着色器,c++,directx,hlsl,C++,Directx,Hlsl,我有几个纹理,我想在我的HLSL着色器设置为数组。 每个纹理都表示为ID3D11ShaderResourceView*。 每个纹理的大小可能不同 现在,如果我在D3D中将它们设置为数组: ID3D11ShaderResourceView* m_array[3]; m_array[0] = ...; m_array[1] = ...; m_array[2] = ...; m_deviceContext->PSSetShaderResources(
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_纹理
数组已分配给插槽0,因此如果出于某种原因,它实际上没有分配给插槽0(例如,在着色器源中它前面有另一个纹理资源),那么您将无法将预期资源设置为正确的插槽。我发现最好明确地映射它们,例如:
Texture2D g_textures[3] : register(t0);
如果发生冲突,将在(着色器)编译时找到它。是否存在无法尝试查看结果的原因?我们正在重建引擎,希望知道我们的假设是否正确。