So, my question boils down to: give a handle to a shader pass, how do you get the vertex and pixel shaders from it?
ID3DXBuffer * pBuffer = NULL;
V_RETURN( D3DXCreateEffectFromFile(pd3dDevice, strPath.c_str(), 0, 0, D3DXSHADER_DEBUG, 0, &_pEffect, &pBuffer) );
V_RETURN( pd3dDevice->CreateVertexDeclaration(particleVertexDeclarations, &_pVertexDeclaration) );
// Get the technique, pass, and shaders we need
D3DXHANDLE hTechnique = _pEffect->GetTechniqueByName("ExplosionTechnique");
if (!hTechnique)
return E_FAIL;
D3DXHANDLE hPass = _pEffect->GetPassByName(hTechnique, "Pass0");
if (!hPass)
return E_FAIL;
V_RETURN( _pEffect->GetVertexShader(hPass, &_pVertexShader) ); // FAILS!
V_RETURN( _pEffect->GetPixelShader(hPass, &_pPixelShader) );
technique ExplosionTechnique
{
pass Pass0
{
VertexShader = compile vs_3_0 ExplosionVertexShaderFunction( );
PixelShader = compile ps_3_0 ExplosionPixelShaderFunction( );
}
}