【问题标题】:Sending texture array to shader in DirectX 11在 DirectX 11 中将纹理数组发送到着色器
【发布时间】:2015-04-06 22:08:40
【问题描述】:

我想在我的 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];

会正确映射吗?

【问题讨论】:

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

标签: c++ directx hlsl


【解决方案1】:

这通常是一种可用于将纹理数组从运行时映射到着色器执行的方法。数组中的纹理尺寸是否匹配并不重要,但是,您可能需要在着色器代码中考虑这一点,具体取决于您对纹理进行采样的确切方式。

此外,在您的 HLSL 中,您假设 g_textures 数组被分配到插槽 0,因此如果由于某种原因它实际上并没有到达那里(例如,在它之前还有另一个纹理资源着色器源),那么您将不会将预期的资源设置为正确的插槽。我发现最好明确地映射它们,例如:

Texture2D g_textures[3] : register(t0);

如果有冲突,会在(着色器)编译时发现。

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 2011-12-29
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多