ID3D11DeviceContext::PSSetShaderResource() 有什么关系

发布于 2024-12-06 05:28:09 字数 807 浏览 0 评论 0原文

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?

PSSetShaderResource()'s first parameter:

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

StartSlot: "Index into the device's zero-based array to begin setting shader resources"

So what's the tie up between integer indices and your .hlsl variables? In d3d9, everything was by string-based name. Now these integer indices seem to have something missing......

Say you have one shader file:

// shader_1.psh
Texture2D tex ;

And another..

// shader_2.psh
TextureCube cubeTex ;

If you're only using shader_1.psh, how do you distinguish between them when they are in separate files?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天邊彩虹 2024-12-13 05:28:09

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

// 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 )

This is still an experimentally verified guess (didn't find reference documentation), but I believe you can do it like so:

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

So now, from the C++ code, to bind a D3D11Texture2D* to tex in the shader, the tie up is:

// C++
d3d11devicecontext->PSSetShaderResources( 0, 1, &texture2d ) ; // SETS TEX @ register( t0 )
d3d11devicecontext->PSSetShaderResources( 1, 1, &textureCUBE ) ;//SETS TEX @ register( t1 )
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文