[DirectX12] #Part 2 - Direct 3D 기초
"DirectX12를 이용한 3D 게임 프로그래밍 입문" 서적의 Part 2, "Direct3D의 기초"에 해당하는 내용입니다.
현재, 게임 개발에 입문하여 기초지식을 습득하여 기록하기 위함이며, 개념 이해와 예제코드 작성을 진행.
2.1 - 기본 지식
D3D12(Direct 3D 12)는 Low-level에 사용되는 그래픽 API로, 응용 프로그램에서 GPU를 제어하고 프로그래밍하는데 사용됩니다.
COM(Component Object Model), COM 객체
DirectX의 프로그래밍 언어의 독립성과 하위호환성을 가능케하는 기술이다. 책에서 설명하는 COM은 우리가 아주 잘 알고있는 C++의 클래스로 취급해도 무방하다. C++의 동적 메모리 할당(new) 혹은 해제가 필요하지 않고, 수명관리를 돕는 "Microsoft::WRL::ComPtr" 클래스를 이용합니다. COM객체는 참조 횟수, 즉 자신을 참조하는 객체의 수가 0이 되면 해제됩니다. 이 클래스는 우리가 C++에서 사용했던 auto_ptr, 혹은 shared_ptr 과 기능이 유사한 Smart Pointer로 보여진다. ComPtr은 범위가 벗어난 ComPtr 인스턴스를 바탕으로 자동으로 Release method, 즉 자원 해제를 수행합니다. 다음으로, ComPtr의 메소드 입니다.
1. Get: 바탕 COM 인터페이스를 가리키는 포인터를 반환.
// ComPtr 선언,
ComPtr<ID3D12RootSignature> mRootSignature;
...
/*
SetGraphicsRootSignature는 mRootSignature* 형식을 인자로 받는다.
이때, mCommandList는 명령 목록으로 뒤에서 다룬다.
*/
mCommandList->SetGraphicsRootSignature(mRootSignature.Get());
2. GetAddressOf: 바탕 COM 인터페이스를 가리키는 포인터의 주소를 반환.
// 명령 목록 할당자 선언
ComPtr<ID3D12CommandAllocator> mDirectCmdListAlloc;
...
// GPU에서 명령할당을 실행하고, 2번째 매개변수는 메모리 영역을 할당할 명령목록 할당자의 주소
ThrowIfFailed(md3dDevice->CreateCommandAllocator(
D3D12_COMMNAD_LIST_TYPE_DIRECT,
mDirectCmdListAlloc.getAddressOf() // getAddressOf 메소드 호출
));
3. Reset: ComPtr의 인스턴스를 null 포인터로 설정, 바탕 COM 인터페이스의 참조횟수를 -1 합니다.
'게임개발 > DirectX12' 카테고리의 다른 글
[DirectX12]#Part2 - Direct3D의 기초_DXGI (0) | 2021.12.28 |
---|---|
[DirectX12]#Part2 - Direct3D의 기초_엘리어싱과 다중표본화 (0) | 2021.12.27 |
[DirectX12]#Part2 - Direct3D의 기초_자원과 서술자 (0) | 2021.12.27 |
[DirectX12]#Part2 - Direct3D의 기초_교환 사슬 & 깊이 버퍼링 (0) | 2021.12.24 |
[DirectX12]#Part2 - Direct3D의 기초_텍스처 (0) | 2021.12.23 |