由于Directx的效果(ID3DXEffect)中已经封入了常量表,因此只要设置D3DXHANDLE就可以了。
不过偶然下看到不设置D3DXHANDLE,直接写变量名的做法居然也可以通过。
例:
标准做法:
mhWVP = mFX->GetParameterByName(0, "gWVP");
mFX->SetMatrix(mhWVP, &(mWorld*mView*mProj));
直接写HLSL侧全局变量做法:
g_pEffect->SetMatrix( "gWVP", &(mWorld*mView*mProj));
后来查了DXSDK文档,发现在工程里的预编译项如果没有D3DXFX_LARGEADDRESS_HANDLE
就可以使用传参数名/传HANDLE两种方法。
官方文档地址:
https://docs.microsoft.com/zh-cn/windows/desktop/direct3d9/d3dxfx
虽然初始化一堆D3DXHANDLE比较麻烦,不过官方也注明了不使用D3DXHANDLE会比较慢。
所以还是老老实实用D3DXHANDLE比较好。