Partager via


Structure D3DXMATRIXA16 (D3DX10Math.h)

Notes

La bibliothèque utilitaire D3DX est déconseillée. Nous vous recommandons d’utiliser DirectXMath à la place.

Matrice alignée sur 16 octets 4x4 qui contient des méthodes et des surcharges d’opérateurs.

Syntaxe

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

Membres

_Ij

Type : FLOAT

Composant (i, j) de la matrice, où i est le numéro de ligne et j le numéro de colonne. Par exemple, _34 signifie le même que [a₃₄], le composant dans la troisième ligne et la quatrième colonne.

Notes

Une matrice alignée sur 16 octets, lorsqu’elle est utilisée par les fonctions mathématiques D3DX, a été optimisée pour améliorer les performances sur les processeurs Intel Pentium 4. Les matrices sont alignées indépendamment de l’endroit où elles sont créées : sur la pile du programme, dans le tas ou dans l’étendue globale. L’alignement est effectué à l’aide de __declspec(align(16)), qui fonctionne avec Visual C++ .NET et Visual C++ 6.0 uniquement lorsque le pack processeur est installé. Malheureusement, il n’existe aucun moyen de détecter le pack de processeurs. L’alignement des octets est donc activé par défaut uniquement avec Visual C++ .NET.

Les vecteurs et les quaternions ne sont pas alignés en octets dans D3DX. Lorsque vous utilisez des vecteurs et des quaternions avec des fonctions mathématiques D3DX, utilisez _declspec(align(16)) pour générer des vecteurs et des quaternions alignés sur les octets, car ils fonctionnent beaucoup mieux. La définition de _declspec est présentée ici.

#define D3DX_ALIGN16 __declspec(align(16))

D’autres compilateurs interprètent D3DXMATRIXA16 comme D3DXMATRIX. L’utilisation de cette structure sur un compilateur qui n’aligne pas réellement la matrice peut être problématique, car elle n’expose pas les bogues qui ignorent l’alignement. Par exemple, si un objet D3DXMATRIXA16 se trouve à l’intérieur d’une structure ou d’une classe, un memcpy peut être effectué avec un empaquetage serré (en ignorant les limites de 16 octets). Cela entraînerait des interruptions de génération si le compilateur devait parfois ajouter l’alignement de la matrice.

Extensions D3DXMATRIXA16

D3DXMATRIXA16 a les extensions C++ suivantes.

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;

Spécifications

Condition requise Valeur
En-tête
D3DX10Math.h

Voir aussi