繁体   English   中英

访问XMMATRIX时Dx11崩溃

[英]Dx11 Crash when accessing XMMATRIX

我一直在DirectX 11中创建一个植群项目,并且在尝试创建指向对象的指针的矢量时出错,并且在推回该对象的第三次迭代中,它会崩溃并跳至此:

XMFINLINE _XMMATRIX& _XMMATRIX::operator=
(
    CONST _XMMATRIX& M
)
{
    r[0] = M.r[0];
    r[1] = M.r[1];
    r[2] = M.r[2];
    r[3] = M.r[3];
    return *this;
}

执行此代码时发生崩溃:

Populate();

for (unsigned int i = 0; i < m_numOfPrey; i++)
{
    m_preyVec[i]->LoadContent(dx, colour, yaw, pitch, roll, scale);

    srand (time(NULL));
    XMFLOAT3 tempPos;

    tempPos.x = rand() % 40;
    tempPos.y = rand() % 40;
    tempPos.z = rand() % 40;

    m_preyVec[i]->SetPosition(tempPos);
}

return true;

填充功能:

for (unsigned int i = 0; i < m_numOfPrey; i++)
{
    Prey* newPrey = new Prey();
    m_preyVec.push_back(newPrey);
}

编辑:猎物从车辆类继承(它使用我的“猎物和捕食者”为车辆构建缓冲区,FX和InputLayout)。

所以这就是Prey LoadContent();

{
    Vehicle::LoadContent(dx, colour, yaw, pitch, roll, scale);
    return true;
}

这是Vehicle LoadContent();

{
    if(!GameObject::LoadContent(dx, m_position, colour, yaw, pitch, roll, scale))
    {
        return false;
    }

    if(!BuildBuffers(dx))
    {
        return false;
    }

    if(!BuildFX(dx))
    {
        return false;
    }

    if(!BuildInputLayout(dx))
    {
        return false;
    }

    return true;
}

任何帮助将不胜感激,如果我需要提供更多信息,我也可以做到这一点,因为我已经坚持了好几天,而且我确定这是我所缺少或做错的小事情。

您需要确保XMVECTOR中的XMVECTORXMMATRIX类型正确对齐到16个字节( 请参阅此处的文档 ),对于堆栈分配,这是自动的,但是对于堆分配,则需要使用_aligned_malloc来获得正确对齐的内存。 另外,您可以使用XMFLOATnXMFLOATnxn进行存储,并在实际使用它们时使用未对齐的矢量载荷。

对于包含XM类型的类或结构,可以通过重载new运算符以显式对齐分配来解决此问题。 最简单的方法是从这样的模板派生(注意:这还不完整,有几种类型的运算符newdelete ):

template <size_t align> class AlignedAllocPolicy
{
public:
    void* operator new(std::size_t size)
    {
        return _aligned_malloc(size,align);
    }

    void operator delete(void* mem)
    {
        _aligned_free(mem);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM