Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Archives
Today
Total
관리 메뉴

codingfarm

7. COM 본문

computer graphics/DirectX12

7. COM

scarecrow1992 2021. 7. 4. 16:29
  •  정의 : 어떤 프로그램이나 시스템을 이루는 컴포넌트들이 상호 통신할 수 있도록 하는 메커니즘
  •  COM을 이용하면 DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 할 수 있다.
  • COM을 통해 개발자는 GPU에 종속적이지 않게 프로그래밍 가능

 

Comptr

  • Com객체를 담기 위한 일종의 스마트 포인터

 

ComPtr의 여러 메서드 중 이후 포스팅에서 사용하는 것은 다음 세가지이다.

 

1. Get : 바탕 COM 인터페이스를 가리키는 포인터를 돌려준다.

해당 COM 인터페이스 포인터 형식의 인수를 받는 함수를 호출할 때 쓰인다.

즉, read용으로 쓰인다

ComPtr<ID3D12RootSignature> mRootSignature;

...

// SetGraphicsRootSignature는 ID3D12RootSignature* 형식의 인수를 받는다.
mCommandList->SetGraphicsRootSignature(mRootSignature.Get());

 

2. GetAddressOf : 바탕 COM 인터페이스를 가리키는 포인터의 주소를 돌려준다. 함수 매개변수를 통해서 COM 인터페이스 포인터를 돌려받을 때 흔히 쓰인다.

즉, write용으로 쓰인다.

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 > DirectX12' 카테고리의 다른 글

12. 다중표본화(multisampling)  (0) 2021.07.04
8. 교환사슬과 더블버퍼링  (0) 2021.07.04
6. 자원, 서술자  (0) 2021.07.04
5. Fence  (0) 2021.07.04
2. COM  (0) 2021.07.04
Comments