본문 바로가기
그래픽스/DirectX

DirectX 기초

by 오늘의논리 2024. 5. 7.
728x90

 

Direct3D가 애플리케이션/프로그래머에게 공개하는 인터페이스와 함수들로 구성되어 있으며, 이들 인터페이스와 함수는 현재 버전의 Direct3D가 지원하는 모든 기능을 나타낸다. 여기서 주의해야 할 점은 Direct3D가 공개하고 있는 기능이라고 해도 그래픽 하드웨어에서 반드시 지원하리라는 보장은 없다는 것이다.

 

그림이 보여주는 처럼 Direct3D와 그래픽 장치 사이에 는 HAL(하드웨어

추상 충 Hardware Abstraction Layer) 이라 불리는 중간 단계가 존재한다.

 

장치 제 조 시-에서는 자신 들 의 장치가 지원하는 모든 기능을 사용하여 HAL을 구현한다. Direct3D가 정의하지만 장치에서 지원하지 않는 기능들은 HAL에 포함되지 않으며 , 소프트웨어 애율레이션이 가능한 버텍스 처리 작업을 제외하고 HAL에서 구현하지 않는 Direct3D 함수를 호출하면 오류가 발생한다. 따라서 특정한 장치 에서 만 지원되는 최신의 기능을 이 용하고자 할 때 는 먼저 내가  원 하는 기능을 장치가 제공하는지의 여부를 확인해야 한다.

 

  • Ref장치

여러분이 가진 장치에서는 지원하지 않지만 Direct3D에서 제공하는 기능을 이 용하는 프로그램을 작성하고자 하는 경우가 있다. 이 를 위해 Direct3D는 모든 Direct3D API를 소프트웨어로 애뮬레이트하는 레퍼런스 래스터라이저 (REF 장치라고 불린 다) 제공한다. 이를 통해 장치에서 지원하지 않는 Direct3D 기능을 이용하는 코드를 작성하고 테스트할 수 있다.

 

  • D3DDEVTYPE

HAL 장치는 D3DDEVTYPE 열거형의 멤버인 D3DDEVTYPE_HAL로 지정된다. 비슷하게 REF 장치 역시 D3DDEVTYPE 열거형의 멤버인 D3DDEVTYPE_REF로 지정된다. 우리의 장치를 만들 때 는 어떤 타입을 원하는지를 지정해야 하므로 이들 타입에 대해서 는 반드시 기억해야 한다.

 

  • COM

 

컴포넌트 객체 모델 (COM) DirectX를 프로그래밍 언어에 독립적으로 만들어주고 하위 호환성을 갖출 수 있게 하는 기술이다. 보통 우리는 COM 객체를 인터페이스로 부르며, C++ 클 래스와 비 슷하게 이용된다.C++를 이용해 DirectX를 프로그래밍하는 동안 COM의 세부적인 부분들은 거의 대부분 프로그래머의 간섭 없이 작동하는데,반드시 기억해두어야 할 한 가지는 다른 COM 인터페이스의 메서드나 특수한 함수를 통해 COM 인터페이스의 포인 터를 얻는다는 것이며, C++ new 키워드로 COM 인터페이 스를 만드는 것이 아니라는 점이다. 부가적으로, 인터페이스를 이용하는 작업이 모두 끝나면 우리가 직접 이 를 지우는 것이 아니라 인터페이스의 Release 메서드를 호출해야 한다(모든 COM 인터페이스는 IUnknown COM 인터페이스에서 기능을 상속받는다). COM 객체는 자신의 메모리 관리를 스스로 수행한다.

 

728x90

'그래픽스 > DirectX' 카테고리의 다른 글

깊이 버퍼(depth buffer)  (0) 2024.05.08
스왑 체인과 플리핑(SwapChain, Flipping)  (0) 2024.05.07
TexAssemble.exe 활용 큐브맵 dds 만드는 법  (0) 2024.05.06
구 변환행렬, 조명, 텍스쳐 적용  (0) 2024.05.06
DirectX  (0) 2024.05.05

댓글