Используйте XMVECTOR в качестве члена класса

0

Я знаю, что XMVECTOR должен быть выровнен по 16 байт и поэтому не должен быть членом класса (если только я не обеспечиваю выравнивание). Однако могу ли я это сделать?

class A
{
    public:
    XMVECTOR vect;
};

void fun(void)
{
    A a;
    XMVECTOR localVect = a.vect;
    // can I now use localVect correctly?
}
Теги:
directxmath

1 ответ

0

Компилятор, скорее всего, будет использовать movaps для реализации назначения, которое потерпит неудачу из-за выравнивания на большинстве процессоров.

Способ сделать это не требует выравнивания - использовать:

class A { public: XMFLOAT4 vect; } ... XMVECTOR localVec = XMLoadFloat4( &a.vect );

Это скомпилируется с одним движением.

  • 0
    Я знаю о XMFLOAT4 , я прочитал документ, но мне было интересно, если это было необходимо.
  • 0
    Необходимо быть переносимым с ARM или x86 (32-битными) платформами. если вас интересуют только 64-битные (64-разрядные) платформы, вы можете безопасно использовать XMVECTOR и XMMATRIX напрямую в большинстве случаев напрямую - есть вещи, которые могут изменить выравнивание по умолчанию для класса, что может вызвать проблемы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню