代码之家  ›  专栏  ›  技术社区  ›  jcoder

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

  •  3
  • jcoder  · 技术社区  · 16 年前

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

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

    关于使用这样的函数有什么官方声明吗?

    2 回复  |  直到 16 年前
        1
  •  3
  •   Bahbar    16 年前

    是的,是的。从 msdn :

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

        2
  •  1
  •   Goz    16 年前

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

    您可以看到,它将交叉积执行为临时的,然后在最后一步中,将其复制到return中。如果这句话能在某个地方说清楚就好了。

    推荐文章