2016-06-20 19 views
2

私はDirectX 11を学習しており、基本的なHLSL部分に達しています。頂点シェーダで複数の定数バッファを使用したいので、の正しいStartSlotを見つける必要があります。私はGoogleで検索し、誰かがGetResourceBindingDescByNameを使って示唆していることがわかりました。DirectX 11のGetResourceBindingDescByNameは最初のcbufferしか取得できません

私はGetResourceBindingDescByNameを試しましたが、最初のcbufferに対して正しいStartSlotしか得られないことがわかりました。例えば、私の頂点シェーダに:

cbuffer Test1 
{ 
    float4 a; 
}; 

cbuffer Test2 
{ 
    float4 b; 
}; 

は今GetResourceBindingDescByName("Test1", &bind_desc)は正常に動作しますが、GetResourceBindingDescByName("Test2", &bind_desc)は(E_INVAILDARGを返す)は失敗します。

誰でもお手伝いできますか?

+0

シェーダでbを使用していますか?最適化によってストライピングされている可能性があります。 – galop1n

+0

ありがとうございます。私はちょうど私のシェイダーのを使用します。シェーダコードにbの参照を追加して問題を解決しました。あなたはこの質問に答えることができるので、私はそれをこの質問の答えとすることができますか? – delphifirst

答えて

0

リフレクションには、シェーダーが使用するシンボルしか含まれていません。コメントで確認されているように、bは使用されず、コード内でbが参照され、最適化によって取り除かれないと問題は解決されます。

関連する問題