0

使用 Direct3D 11 和 SharpDX,给定在着色器中声明的纹理贴图的名称,我如何知道将我的 Sampler 和 TextureView 分配到哪个插槽?

文档表明我可以使用 ShaderReflection,但不清楚如何...

void SetTexture(MyShaderProgram shaderProgram, string name, MyTextureMap textureMap)
{
    byte[] byteCode = shaderProgram.ByteCode;
    var shaderReflection = new 
      SharpDX.D3DCompiler.ShaderReflection(byteCode);
    var slot = ?
    PixelShaderStage pixelShader = shaderProgram.PixelShader;
    pixelShader.SetSampler(slot, textureMap.Sampler);
    pixelShader.SetShaderResource(slot, textureMap.TextureView);
}
4

1 回答 1

0

似乎BindPoint着色器InputBindingDescription服务于这个目的。因此,这可能就足够了:

var slot = shaderReflection.GetResourceBindingDescription(name).BindPoint;

还可能值得注意的是,从技术上讲,似乎应该获得两个绑定点:一个用于样本,一个用于纹理视图。由于它们经常被并排声明,因此该解决方案可能就足够了。

于 2013-11-20T02:21:47.563 回答