好的,假设我在着色器的某处有如下声明(注意我启用了旧版支持以在 DX9 和 DX10 之间共享着色器):
Texture2D DiffuseMap;
我可以毫无问题地编译着色器,但我对如何将 ShaderResourceView 绑定到“DiffuseMap”有点茫然。当我“反射”着色器时,我宁愿假设它会出现在常量缓冲区的变量中。它没有。事实上,我似乎无法在任何地方识别它。那么我怎么知道我应该绑定 ShaderResourceView 的纹理“阶段”(使用 DX9 术语)呢?
编辑:我发现我可以使用“GetResourceBindingDesc”来识别采样器名称。我不确定这是否对我有帮助:(
Edit2:同样我没有注意到它在 DX9 下也是一样的......即我只能得到采样器。
Edit3:我的 Texture2D 和 Sampler 看起来像这样:
Texture2D DiffuseMap : DiffuseTexture;
sampler DiffuseSampler = sampler_state
{
Texture = (DiffuseMap);
MinFilter = Linear;
MaxFilter = Linear;
};
现在在效果框架中,我可以通过语义“DiffuseTexture”获得 Texture2D。然后我可以将 ResourceView(D3D10)/Texture(D3D9) 设置为 Texture2D。唉,似乎没有任何方法可以使用沼泽标准着色器来处理“语义”(很高兴知道 D3D 是如何做到的,但是研究 D3D11 效果框架让我到目前为止一无所获。它似乎正在阅读它从二进制文件中,即编译后的数据中,我自己只能在其中看到“DiffuseSampler”)。