다음을 통해 공유


D3DXMATRIXA16 구조체(D3dx9math.h)

참고

D3DX 유틸리티 라이브러리는 더 이상 사용되지 않습니다. 대신 DirectXMath 를 사용하는 것이 좋습니다.

메서드 및 연산자 오버로드를 포함하는 4x4, 16 바이트 정렬 행렬입니다.

구문

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

멤버

_Ij

형식: FLOAT

행렬의 (i, j) 구성 요소입니다. 여기서 i는 행 번호이고 j는 열 번호입니다. 예를 들어 _34는 세 번째 행과 네 번째 열의 구성 요소인 [a]와 동일합니다.

설명

D3DX 수학 함수에서 사용되는 16 바이트 정렬 매트릭스는 Intel 펜티엄 4 프로세서의 성능 향상을 위해 최적화되었습니다. 행렬은 만든 위치(프로그램 스택, 힙 또는 전역 scope)에 관계없이 정렬됩니다. 정렬은 프로세서 팩이 설치된 경우에만 Visual C++ .NET 및 Visual C++ 6.0에서 작동하는 __declspec(align(16))을 사용하여 수행됩니다. 아쉽게도 프로세서 팩을 검색할 수 있는 방법이 없으므로 기본적으로 바이트 맞춤은 Visual C++ .NET에서만 켜져 있습니다.

벡터 및 쿼터니언은 D3DX에서 바이트 정렬되지 않습니다. D3DX 수학 함수에서 벡터 및 쿼터니언을 사용하는 경우 _declspec(align(16))을 사용하여 바이트 정렬 벡터 및 쿼터니언을 생성합니다. 성능이 훨씬 향상되기 때문입니다. _declspec 정의는 여기에 표시됩니다.

#define D3DX_ALIGN16 __declspec(align(16))

다른 컴파일러에서 D3DXMATRIXA16을 D3DXMATRIX로 해석합니다. 실제로 행렬을 정렬하지 않는 컴파일러에서 이 구조를 사용하면 맞춤을 무시하는 버그가 노출되지 않으므로 문제가 될 수 있습니다. 예를 들어 D3DXMATRIXA16 개체가 구조체 또는 클래스 내에 있는 경우 16바이트 경계를 무시하고 꽉 압축하여 memcpy 를 수행할 수 있습니다. 이로 인해 컴파일러가 행렬 정렬을 추가하는 경우 빌드가 중단됩니다.

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;

요구 사항

요구 사항
헤더
D3dx9math.h

추가 정보

D3DX 구조체

D3DXMATRIX