繁体   English   中英

在DirectX 11中将纹理数组发送到着色器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM