D3DXMATRIXA16-Struktur (D3dx9math.h)
Eine 4x4- und 16-Byte-ausgerichtete Matrix, die Methoden und Operatorüberladungen enthält.
Syntax
typedef struct D3DXMATRIXA16 {
FLOAT _ij;
} D3DXMATRIXA16, *LPD3DXMATRIXA16;
Members
-
_Ij
-
Typ: FLOAT
-
Die Komponente (i, j) der Matrix, wobei i die Zeilennummer und j die Spaltennummer ist. 34 bedeutet z. B. dasselbe wie a₃₄ , die Komponente in der _ dritten Zeile und vierten [ ] Spalte.
Bemerkungen
Eine 16-Byte-ausgerichtete Matrix wurde bei Verwendung durch mathematische D3DX-Funktionen für eine verbesserte Leistung auf Intel Pentium 4-Prozessoren optimiert. Matrizen werden unabhängig davon ausgerichtet, wo sie erstellt werden: im Programmstapel, im Heap oder im globalen Bereich. Die Ausrichtung erfolgt _ _ mithilfe von declspec(align(16)), das nur mit Visual C++ .NET und mit Visual C++ 6.0 funktioniert, wenn das Prozessorpaket installiert ist. Leider gibt es keine Möglichkeit, das Prozessorpaket zu erkennen, sodass die Byteausrichtung standardmäßig nur mit Visual C++ .NET aktiviert ist.
Vektoren und Quaternionen sind in D3DX nicht bytebündig ausgerichtet. Wenn Sie Vektoren und Quaternionen mit mathematischen D3DX-Funktionen verwenden, verwenden Sie _ declspec(align(16)), um bytebündige Vektoren und Quaternionen zu generieren, da sie eine deutlich bessere Leistung erzielen. Die Definition von _ declspec wird hier gezeigt.
#define D3DX_ALIGN16 __declspec(align(16))
Andere Compiler interpretieren D3DXMATRIXA16 als D3DXMATRIX. Die Verwendung dieser Struktur für einen Compiler, der die Matrix nicht tatsächlich ausrichtet, kann problematisch sein, da sie keine Fehler verfügbar macht, die die Ausrichtung ignorieren. Wenn sich ein D3DXMATRIXA16-Objekt beispielsweise in einer Struktur oder Klasse befindet, kann ein Memcpy mit einer engen Packung durchgeführt werden (16-Byte-Begrenzungen werden ignoriert). Dies würde zu Buildunterbrechungen führen, wenn der Compiler irgendwann eine Matrix-Ausrichtung hinzufügen würde.
D3DXMATRIXA16
D3DXMATRIXA16 verfügt über die folgenden C++-Erweiterungen.
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;
Requirements (Anforderungen)
| Anforderung | Wert |
|---|---|
| Header |
|