Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将纹理数组发送到DirectX 11中的着色器_C++_Directx_Hlsl - Fatal编程技术网

C++ 将纹理数组发送到DirectX 11中的着色器

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(

我有几个纹理,我想在我的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_纹理
数组已分配给插槽0,因此如果出于某种原因,它实际上没有分配给插槽0(例如,在着色器源中它前面有另一个纹理资源),那么您将无法将预期资源设置为正确的插槽。我发现最好明确地映射它们,例如:

Texture2D g_textures[3] : register(t0);

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

是否存在无法尝试查看结果的原因?我们正在重建引擎,希望知道我们的假设是否正确。