gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:45:12 25 4
gpt4 key购买 nike

我想在我的 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,因此如果由于某种原因它实际上并没有到达那里(例如,有另一个纹理资源在着色器源代码中出现在它之前),那么您就不会将预期的资源设置到正确的插槽中。我发现最好明确地映射它们,例如:

Texture2D g_textures[3] : register(t0);

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

关于c++ - 将纹理数组发送到 DirectX 11 中的着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29468798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com