2009-07-13 16 views
2

私はこのシェーダを使用しているすべてのユニフォームを取得したいと思いID3DXEffectからすべてのシェーダー定数(ユニフォーム)を取得するにはどうすればよいですか?

hr = D3DXCreateEffectFromFile(g_D3D_Device, 
     shaderPath.c_str(), 
     macros, 
     NULL, 
     0, 
     NULL, 
     &pEffect, 
     &pBufferErrors); 

を使用して効果を作成しています。 OpenGLでは、私はglGetActiveUniformとglGetUniformLocationを使って定数のサイズ、型、名前などを取得しました。D3DX9の同等の関数はありますか?また、次の操作を実行して、各パラメータを反復処理することができます

答えて

2
D3DXHANDLE handle = m_pEffect->GetParameterByName(NULL, "Uniform Name"); 
if (handle != NULL) 
{ 
    D3DXPARAMETER_DESC desc; 
    if (SUCCEEDED(m_pEffect->GetParameterDesc(handle, &desc))) 
    { 
     // You now have pretty much all the details about the parameter there are in "desc". 
    } 
} 

UINT index = 0; 
while(1) 
{ 
    D3DXHANDLE handle = m_pEffect->GetParameter(NULL, index); 
    if (handle == NULL) 
     break; 

    // Get parameter desc as above. 
    index++; 
} 
1

m_pEffect->のgetParameter(NULL、インデックス)を使用します。一方で

(1)サイクルは

D3DXをもたらすであろう。ID3DXEffect ::のgetParameter:無効なインデックス

警告。

したがって、D3DXEFFECT_DESC構造体を使用して、エフェクトが持ついくつのパラメータを見つけることができます。

このような何か:

D3DXEFFECT_DESC fx_desc; 
g_pEffect->GetDesc(&fx_desc); 

for (UINT index=0;index<=fx_desc.Parameters;index++) 
{ 
    D3DXHANDLE handle = g_pEffect->GetParameter(NULL, index); 
    if (handle == NULL) 
     break; 

    D3DXPARAMETER_DESC param_desc; 
    if (S_OK == (g_pEffect->GetParameterDesc(handle, &param_desc))) 
    { 
     //check the details about the parameter in param_desc 
    } 
} 
関連する問題