Поделиться через


Структура D3DXMATRIXA16 (D3DX10Math.h)

Примечание

Служебная библиотека D3DX устарела. Вместо этого рекомендуется использовать DirectXMath .

Матрица с выравниванием по 16 байтам 4x4, содержащая методы и перегрузки операторов.

Синтаксис

typedef struct D3DXMATRIXA16 {
  FLOAT _ij;
} D3DXMATRIXA16, *LPD3DXMATRIXA16;

Члены

_Ij

Тип: FLOAT

Компонент (i, j) матрицы, где i — номер строки, а j — номер столбца. Например, _34 означает то же, что и [a₃₄], компонент в третьей строке и четвертом столбце.

Комментарии

16-байтовая выровненная матрица, используемая математическими функциями D3DX, оптимизирована для повышения производительности процессоров Intel Pentium 4. Матрицы выравниваются независимо от того, где они создаются: в стеке программы, в куче или в глобальной области. Выравнивание выполняется с помощью __declspec(align(16)), которая работает с Visual C++ .NET и Visual C++ 6.0 только при установке пакета процессора. К сожалению, невозможно определить пакет процессора, поэтому выравнивание байтов включено по умолчанию только в Visual C++ .NET.

Векторы и кватернионы не выравниваются по байтам в D3DX. При использовании векторов и кватернионов с математическими функциями D3DX используйте _declspec(align(16)) для создания выровненных по байтам векторов и кватернионов, так как они будут работать значительно лучше. Здесь показано определение _declspec.

#define D3DX_ALIGN16 __declspec(align(16))

Другие компиляторы интерпретируют D3DXMATRIXA16 как D3DXMATRIX. Использование этой структуры в компиляторе, который фактически не выравнивает матрицу, может быть проблематично, так как она не будет содержать ошибок, которые игнорируют выравнивание. Например, если объект D3DXMATRIXA16 находится внутри структуры или класса, memcpy может выполняться с жесткой упаковкой (игнорируя 16-байтовые границы). Это приведет к прерыванию сборки, если компилятор когда-то добавит выравнивание матрицы.

Расширения D3DXMATRIXA16

D3DXMATRIXA16 имеет следующие расширения C++.

typedef struct _D3DXMATRIXA16 : public D3DXMATRIX
{
    _D3DXMATRIXA16();
    _D3DXMATRIXA16( CONST FLOAT * f);
    _D3DXMATRIXA16( CONST D3DMATRIX& m);
    _D3DXMATRIXA16( FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14,
                    FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24,
                    FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34,
                    FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 );
    void* operator new(size_t s);
    void* operator new[](size_t s);

    // The two operators below are not virtual operators. If you cast
    //   to D3DXMATRIX, do not delete using them
    void operator delete(void* p);
    void operator delete[](void* p);

    struct _D3DXMATRIXA16& operator=(CONST D3DXMATRIX& rhs);
} _D3DXMATRIXA16;

typedef D3DX_ALIGN16 _D3DXMATRIXA16 D3DXMATRIXA16, *LPD3DXMATRIXA16;

Требования

Требование Значение
Заголовок
D3DX10Math.h

См. также раздел