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;

また、技術的には、サンプル用とテクスチャ ビュー用の 2 つのバインド ポイントを取得する必要があるように思われることにも注意してください。これらは並べて宣言されることが多いため、このソリューションで十分な場合があります。

于 2013-11-20T02:21:47.563 に答える