Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Directx 在D3DX函数中使用相同的输入和输出参数是否安全?_Directx_D3dx - Fatal编程技术网

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

Directx 在D3DX函数中使用相同的输入和输出参数是否安全?,directx,d3dx,Directx,D3dx,使用作为directX一部分的D3DX库,特别是在本例中的directx9,我想知道使用相同的矩阵(或向量等)进行输入和输出是否安全 D3DXMATRIX mat; D3DXMatrixInverse(&mat, NULL, &mat); 我一直在避免这样做,假设在计算结果时,当数组的某些部分被部分覆盖时,这会导致糟糕的事情发生,但我看到有很多代码正是这样做的 一个简短的测试表明它似乎工作正常,所以我假设D3DX函数在需要时复制输入数据,或者使用其他方法来确保它工作正常,但是我

使用作为directX一部分的D3DX库,特别是在本例中的directx9,我想知道使用相同的矩阵(或向量等)进行输入和输出是否安全

D3DXMATRIX mat;
D3DXMatrixInverse(&mat, NULL, &mat);
我一直在避免这样做,假设在计算结果时,当数组的某些部分被部分覆盖时,这会导致糟糕的事情发生,但我看到有很多代码正是这样做的

一个简短的测试表明它似乎工作正常,所以我假设D3DX函数在需要时复制输入数据,或者使用其他方法来确保它工作正常,但是我在任何地方都找不到它的文档,所以我不愿意依赖它工作


有没有关于使用这样的函数的官方声明?

我很肯定答案是肯定的。我找不到任何地方可以肯定地说,但是

编辑:快速浏览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;
}
您可以看到,它将叉积执行为临时,然后在最后一步中,将其复制到返回中。如果能在某个地方明确说明这一点,那就太好了。

是的,确实如此。发件人:

每个函数都可以采用与传递的[in]和返回的[out]参数相同的对象


接受这一点,因为它有明确的联系。另一个答案也很好,尽管如此,我甚至检查了链接。。。显然我读得不够好;)