일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 이진탐색
- 스토어드 프로시저
- two pointer
- MYSQL
- SQL
- DP
- Stored Procedure
- Dijkstra
- Trie
- Brute Force
- String
- 그래프
- Two Points
- binary search
- Hash
- 다익스트라
- union find
- Today
- Total
codingfarm
4. COM(Component Object Model) 본문
COM
$\bullet$ 정의 : 어떤 프로그램이나 시스템을 이루는 컴포넌트들이 상호 통신할 수 있도록 하는 메커니즘
$\bullet$ COM을 이용하면 DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 할 수 있다.
$\bullet$ COM 객체는 흔히 인터페이스라 부르지만, C++ 클래스로 간주해도 무방하므로 흔히 COM 객체라고 부른다.
$\bullet$ C++로 DirectX 응용프로그램을 프로그래밍 할 때 COM의 세부사하은 대부분 프로그래머에게 드러나지 않는다.
$\bullet$ 프로그래머가 알아야 할 것
-필요한 COM 인터페이스를 가리키는 포인터를 특별한 함수들을 이용해서, 또는 다른 COM 인터페이스의 메서드를 이용해서 얻는 방법 뿐이다.
$\bullet$ COM 인터페이스를 new나 delete를 이용해서 생성, 삭제할 수 없다.
- 반드시 생성을 위한 별도의 API 함수(Release 메서드)를 써야한다.
$\bullet$ 모든 COM 인터페이스는 IUnknow이라는 COM 인터페이스의 기능을 상속하는데, 그 인터페이스가 Release라는 메서드를 제공한다.
$\bullet$ COM 객체는 참조횟수가 0이 되면 메모리에서 해제된다.
$\bullet$ COM 객체의 수명 관리를 돕기 위해, Windows 런타임 라이브러리(WRL)은 Microsoft::WRL::Comptr 이라는 클래스를 제공한다(wrl.h 헤더파일을 인클루드 해야 사용가능하다.)
-ComPtr 클래스는 COM 객체를 위한 smart pointer라 할 수 있으며, 이 클래스를 쓰면 개발자가 직접 Release를 호출할 필요가 없다.
-ComPtr의 여러 메서드 중 이후 포스팅에서 사용하는 것은 다음 세가지이다.
1. Get : 바탕 COM 인터페이스를 가리키는 포인터를 돌려준다.
해당 COM 인터페이스 포인터 형식의 인수를 받는 함수를 호출할 때 쓰인다.
ComPtr<ID3D12RootSignature> mRootSignature;
...
// SetGraphicsRootSignature는 ID3D12RootSignature* 형식의 인수를 받는다.
mCommandList->SetGraphicsRootSignature(mRootSignature.Get());
2. GetAddressOf : 바탕 COM 인터페이스를 가리키는 포인터의 주소를 돌려준다. 함수 매개변수를 통해서 COM 인터페이스 포인터를 돌려받을 때 흔히 쓰인다.
ComPtr<ID3D12CommandAllocator> mDirectCmdListAlloc;
ThrowIfFailed(md3dDevice->CreateCommandAllocator
D3D12_Command_LIST_TYPE_DIRECT,
mDirectCmdListAlloc.GetAddressOf()));
3. Reset : Comptr 인스턴스를 nullptr로 설정하고 바탕 COM 인터페이스의 참조 횟수를 1 감소한다. 이 메서드를 사용하는 대신 ComPtr 인스턴스에 직접 nullptr를 배정해도 된다(역시 참조 횟수가 감소한다.)
COM은 이보다 훨씬 방대한 주제이지만, DirectX를 효과적으로 사용하는 데에는 이정도로 충분하다.
참고 : COM 인터페이스들은 이름이 대문자 I로 시작한다. 가령 명령 목록(command list)를 나타내는 COM 인터페이스의 이름은 ID3D12GraphicsCommandList이다.
'computer graphics > DX12 book' 카테고리의 다른 글
4. 교환 사슬(Swap Chain)과 더블 버퍼링(Double Buffering) (0) | 2021.01.11 |
---|---|
4. 텍스처 형식 (0) | 2021.01.11 |
4. Direct3D 초기화 - 개요 (0) | 2021.01.11 |
3. 변환 - DirectXMath 라이브러리의 변환 함수들 (0) | 2020.11.22 |
3. 변환 - 좌표 변경 변환(change of coordinate transformation) (0) | 2020.11.22 |