4

PSSetShaderResource()的第一个参数:

void PSSetShaderResources(
  [in]  UINT StartSlot,
  [in]  UINT NumViews,
  [in]  ID3D11ShaderResourceView *const *ppShaderResourceViews
);

StartSlot:“索引到设备的从零开始的数组以开始设置着色器资源”

那么整数索引和您的 .hlsl 变量之间的关系是什么?在 d3d9 中,一切都是基于字符串的名称。现在这些整数索引似乎缺少了一些东西......

假设你有一个着色器文件:

// shader_1.psh
Texture2D tex ;

还有一个..

// shader_2.psh
TextureCube cubeTex ;

如果您只使用shader_1.psh,那么当它们位于单独的文件中时,您如何区分它们?

// something like this..
d3d11devicecontext->PSSetShaderResources( 0, 1, &texture2d ) ;
// index 0 sets 0th texture..
// what index is the tex cube?
4

1 回答 1

3

这仍然是一个经过实验验证的猜测(没有找到参考文档),但我相信你可以这样做:

// HLSL shader
Texture2D tex : register( t0 );
Texture2D cubeTex : register( t1 );
SamplerState theSampler : register( s0 );

所以现在,从 C++ 代码中,将 a 绑定D3D11Texture2D*tex着色器中,绑定是:

// C++
d3d11devicecontext->PSSetShaderResources( 0, 1, &texture2d ) ; // SETS TEX @ register( t0 )
d3d11devicecontext->PSSetShaderResources( 1, 1, &textureCUBE ) ;//SETS TEX @ register( t1 )
于 2011-09-26T17:45:12.547 回答