在D3DX函数中使用相同的输入和输出参数是否安全?

时间:2010-03-24 10:23:56

标签: directx d3dx

使用作为directX的一部分的D3DX库,特别是在这种情况下的directx9,我想知道使用相同的矩阵(或矢量等)输入和输出是否安全

D3DXMATRIX mat;
D3DXMatrixInverse(&mat, NULL, &mat);

我一直在避免这样做,假设当计算结果时部分数据被部分覆盖会导致不好的事情发生,但我看到很多代码就是这样做的。

一个简短的测试表明它似乎工作正常,所以我假设D3DX函数需要输入数据的必要副本,或其他一些方法以确保这个工作正常,但我找不到它记录在任何地方,所以我不愿意依赖它工作。

是否有关于使用此类功能的官方声明?

2 个答案:

答案 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;
}

您可以看到它将交叉产品执行为临时产品,然后在最后一步中将其复制到返回中。如果在某处肯定地说明这一点会很好。