使用作为directX的一部分的D3DX库,特别是在这种情况下的directx9,我想知道使用相同的矩阵(或矢量等)输入和输出是否安全
D3DXMATRIX mat;
D3DXMatrixInverse(&mat, NULL, &mat);
我一直在避免这样做,假设当计算结果时部分数据被部分覆盖会导致不好的事情发生,但我看到很多代码就是这样做的。
一个简短的测试表明它似乎工作正常,所以我假设D3DX函数需要输入数据的必要副本,或其他一些方法以确保这个工作正常,但我找不到它记录在任何地方,所以我不愿意依赖它工作。
是否有关于使用此类功能的官方声明?
答案 0 :(得分:3)
是的,确实如此。来自msdn:
每个函数可以使用与传递的[in]和返回的[out]参数相同的对象
答案 1 :(得分:1)
我很确定答案是肯定的。我无法找到任何可以肯定说到的地方......
编辑:点击D3DX9Math.inl看起来好像已经采取行动以确保你可以。例如,如果我们查看D3DXVec3Cross的代码:
D3DXINLINE D3DXVECTOR3* D3DXVec3Cross
( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 )
{
D3DXVECTOR3 v;
#ifdef D3DX_DEBUG
if(!pOut || !pV1 || !pV2)
return NULL;
#endif
v.x = pV1->y * pV2->z - pV1->z * pV2->y;
v.y = pV1->z * pV2->x - pV1->x * pV2->z;
v.z = pV1->x * pV2->y - pV1->y * pV2->x;
*pOut = v;
return pOut;
}
您可以看到它将交叉产品执行为临时产品,然后在最后一步中将其复制到返回中。如果在某处肯定地说明这一点会很好。