Share via


Estrutura D3DXMATRIXA16 (D3DX10Math.h)

Observação

A biblioteca de utilitários D3DX foi preterida. Em vez disso, recomendamos que você use DirectXMath .

Uma matriz alinhada a 4x4 e 16 bytes que contém sobrecargas de métodos e operadores.

Sintaxe

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

Membros

_Ij

Tipo: FLOAT

O componente (i, j) da matriz, em que i é o número da linha e j é o número da coluna. Por exemplo, _34 significa o mesmo que [a₃₄], o componente na terceira linha e quarta coluna.

Comentários

Uma matriz alinhada de 16 bytes, quando usada por funções matemáticas D3DX, foi otimizada para melhorar o desempenho em processadores Intel Pentium 4. As matrizes são alinhadas independentemente de onde são criadas: na pilha do programa, no heap ou no escopo global. O alinhamento é feito usando __declspec(align(16)), que funciona com o .NET do Visual C++ e com o Visual C++ 6.0 somente quando o pacote de processadores é instalado. Infelizmente, não há como detectar o pacote de processador, portanto, o alinhamento de bytes é ativado por padrão apenas com o .NET do Visual C++.

Vetores e quatérnios não são alinhados por bytes no D3DX. Ao usar vetores e quatérnios com funções matemáticas D3DX, use _declspec(align(16)) para gerar vetores e quatérnios alinhados a bytes, pois eles terão um desempenho significativamente melhor. A definição de _declspec é mostrada aqui.

#define D3DX_ALIGN16 __declspec(align(16))

Outros compiladores interpretam D3DXMATRIXA16 como D3DXMATRIX. Usar essa estrutura em um compilador que realmente não alinha a matriz pode ser problemático porque não exporá bugs que ignoram o alinhamento. Por exemplo, se um objeto D3DXMATRIXA16 estiver dentro de uma estrutura ou classe, um memcpy poderá ser feito com empacotamento apertado (ignorando limites de 16 bytes). Isso causaria quebras de build se o compilador adicionasse algum tempo o alinhamento de matriz.

Extensões D3DXMATRIXA16

D3DXMATRIXA16 tem as seguintes extensões 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;

Requisitos

Requisito Valor
parâmetro
D3DX10Math.h

Confira também