그래픽스/DX 기록

COM (Component Obejct Model)

우대비 2022. 12. 7. 20:47
반응형

COM은 DX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술임

 

COM객체, COM 인터페이스라고 부르지만

C++의 클래스로 간주하고 사용해도 무방함

 

COM인터페이스를 new키워드로 직접 생성할 일은 없음

또한 delete로 삭제하는 것이 아닌 Release 메서드를 호출해줘야함 (자동이여서 신경쓸거 없음)

COM 객체는 참조 횟수가 0이 되면 메모리에서 해제됨 ( 마치 스마트 포인터 )

 

COM 객체의 수명 관리를 돕기 위해 Windows 런타임 라이브러리는 ComPtr이라는 클래스를 제공함

ComPtr은 COM객체를 위한 스마트 포인터라고 할 수 있음

 

COM객체의 주요 함수

1. Get

- COM  인터페이스를 가르키는 포인터를 돌려줌

ComPtr<ID3D12RootSignature> mRootSignature;
mCommandList->SetGraphicsRootSignature(mRootSignature.Get());

2. GetAddressOf

- COM 인터페이스를 가르키는 포인터의 주소를 돌려줌

ComPtr<ID3D12CommandAllocator> mDirectCmdListAlloc;

ThrowIfFailed(md3dDevice0>CreateCommandAllocator(
    D3D12_COMMAND_LIST_TYPE_DIRECT,
    mDirectCmdListAlloc.GetAddressOf());

3.Reset

- ComPtr 인스턴스를 nullptr로 설정하고 바탕 COM 인터페이스의 참조 횟수를 1 감소함

 

참고 - COM 인터페이스들은 이름이 대문자I로 시작함 

예를 들어 command list를 나타내는 COM 인터페이스의 이름은

ID3D12GraphicsCommandList이다

 

 

 

반응형
LIST

'그래픽스 > DX 기록' 카테고리의 다른 글

Cylinder  (0) 2023.08.15
Light (BlinnPhong)  (0) 2023.08.15
텍스쳐링  (0) 2023.08.14
DXGI (DirectX Graphics Infrastructure)  (0) 2022.12.12
교환 사슬과 페이지 전환  (0) 2022.12.08