我是 DirectX11 的新手,我正在尝试将使用 DirectX Legacy 编写的文件改编为新的 DirectX,但是我在使用模板 XMVectorPermute 时遇到了一些问题,该模板曾经是 Legacy 文件中的一个函数。
我试图让编译器识别模板DirectXMath.h
:
// General permute template
template<uint32_t PermuteX, uint32_t PermuteY, uint32_t PermuteZ, uint32_t PermuteW>
inline XMVECTOR XM_CALLCONV XMVectorPermute(FXMVECTOR V1, FXMVECTOR V2)
{
//...Definition
通过使用以下代码:
template DirectX::XMVECTOR DirectX::XMVectorPermute<PermuteXXY.i[0], PermuteXXY.i[1], PermuteXXY.i[2], PermuteXXY.i[3]>(FXMVECTOR V1, FXMVECTOR V2);
其中PermuteXXY
定义为:
static CONST DirectX::XMVECTORI32 PermuteXXY =
{
DirectX::XM_PERMUTE_0X, DirectX::XM_PERMUTE_0X, DirectX::XM_PERMUTE_0Y, DirectX::XM_PERMUTE_0W
};
但编译器或链接器无法匹配: 错误报告
XM_PERMUTE_...
被定义为const uint32_t
in DirectXMath.h
,并且XMVECTORI32
被定义为并集:
union
{
int32_t i[4];
XMVECTOR v;
};
我不太擅长 c++ 模板,所以请尽可能彻底地帮助我。非常感谢!