首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问XMMATRIX时Dx11崩溃

访问XMMATRIX时Dx11崩溃
EN

Stack Overflow用户
提问于 2014-03-03 05:29:40
回答 1查看 500关注 0票数 1

我在DirectX 11中创建了一个群集项目,在尝试创建指向对象的指针向量时出错,在推送的第三次迭代中,它将崩溃并跳转到以下位置:

代码语言:javascript
复制
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;
}

当我执行以下代码时,会发生崩溃:

代码语言:javascript
复制
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;

填充函数:

代码语言:javascript
复制
for (unsigned int i = 0; i < m_numOfPrey; i++)
{
    Prey* newPrey = new Prey();
    m_preyVec.push_back(newPrey);
}

编辑:猎物继承自一个车辆类(为我的猎物和捕食者使用的车辆建立缓冲区,FX和InputLayout。

这就是猎物LoadContent();

代码语言:javascript
复制
{
    Vehicle::LoadContent(dx, colour, yaw, pitch, roll, scale);
    return true;
}

这是Vehicle LoadContent();

代码语言:javascript
复制
{
    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;
}

任何帮助都将不胜感激,如果我需要提供更多的信息,我也可以做到,因为我已经被困在这个问题上好几天了,我确定它是我遗漏的或做错了的小东西。

EN

回答 1

Stack Overflow用户

发布于 2014-03-03 05:55:33

您需要确保来自DXMath的XMVECTORXMMATRIX类型与16字节(see the docs here)正确对齐,对于堆栈分配,这是自动的,但是对于堆分配,您需要使用_aligned_malloc来获得正确对齐的内存。或者,您可以使用XMFLOATnXMFLOATnxn来存储和使用未对齐的向量加载,当您实际使用它们时。

对于包含XM类型的类或结构,您可以通过重载new操作符来显式对齐分配来克服这一点;最简单的方法是从这样的模板派生(注意:这并不完整,下面是几种类型的operator new & delete):

代码语言:javascript
复制
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);
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22133742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档