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?
答案 0 :(得分:3)
这仍然是经过实验验证的猜测(没有找到参考文档),但我相信你可以这样做:
// HLSL shader
Texture2D tex : register( t0 );
Texture2D cubeTex : register( t1 );
SamplerState theSampler : register( s0 );
现在,从C ++代码开始,要在着色器中将D3D11Texture2D*
绑定到tex
,绑定是:
// C++
d3d11devicecontext->PSSetShaderResources( 0, 1, &texture2d ) ; // SETS TEX @ register( t0 )
d3d11devicecontext->PSSetShaderResources( 1, 1, &textureCUBE ) ;//SETS TEX @ register( t1 )