Структура 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;
Требования
Требование | Значение |
---|---|
Заголовок |
|