4.3 Direct3D의 초기화
본 교재에서 Direct3D 를 사용하기 위해 필요한 초기화 순서는 다음과 같다.
Direct3D 12 장치(ID3D12Device) 생성
- Direct3D 12 장치란, 디스플레이 어댑터를 나타내는 객체
- 디스플레이 어댑터란, 일반적으로 물리적인 그래픽 하드웨어 장치(그래픽 카드)를 뜻하지만 가상 소프트웨어 그래픽 하드웨어 장치도 포함.
- 인터페이스: D3D12CreateDevice
울타리 생성과 서술자 크기 얻기
- 인터페이스: ID3D12Device::CreateFence
4X MSAA 품질 수준 지원 점검
- MSAA는 안티엘리어싱 기법 중 하나이며, 본 교재에서 MSAA를 사용하는 이유는 다음과 같음.
- 비용 대비 화질 개선효과가 큼
- Direct3D 11 이상 급의 장치는 4X MSAA를 지원
- 인터페이스: ID3D12Device::CheckFeatureSupport
명령 대기열과 명령 목록 생성
- 명령 대기열 생성 인터페이스: ID3D12Device::CreateCommandQueue
- 명령 할당자 생성 인터페이스: ID3D12Device::CreateCommandAllocator
- 명령 목록 생성 인터페이스: ID3D12Device::CreateCommandList
교환 사슬의 서술과 생성
- 인터페이스: IDXGIFactory::CreateSwapChain
응용 프로그램에 필요한 서술자와 서술자 힙 생성
- 서술자 힙 생성: ID3D12Device::CreateDescriptorHeap
- 서술자 힙으로 서술자 생성: ID3D12DescriptorHeap::GetCPUDescriptorHandleForHeapStart
렌더 대상 뷰(RTV) 생성
- 후면 버퍼에 랜더링 결과를 출력하려면 후면 버퍼에 대한 렌더 대상 뷰를 생성해야 함.
- 후면 버퍼 획득: IDXGISwapChain::GetBuffer
- 렌더 타겟 뷰 생성: ID3D12Device::CreateRenderTargetView
깊이•스텐실 버퍼와 뷰 생성
- 깊이•스텐실 버퍼를 생성 후 사용하기 위해서는 깊이•스텐실 뷰를 생성해서 파이프라인에 바인딩 필요.
- 깊이•스텐실 버퍼 생성: D3D12_RESOURCE_DESC 구조체를 깊이 버퍼에 맞게 채운 후 ID3D12Device::CreateCommittedResource 인터페이스로 생성
- 깊이•스텐실 버퍼 뷰 생성 인터페이스: ID3D12Device::CreateDepthStencilView
뷰포트 설정
- 뷰포트란 3차원 장면의 랜더링 결과를 그릴 직사각형 영역을 뜻함, 후면버퍼 전체에 그리거나 일부에 그릴 수 있음. 2인용 모드와 같이 하나의 후면 버퍼에 2개의 뷰포트를 가질 수도 있음.
- 뷰포트 설정 인터페이스: ID3D12GraphicsCommandList::RSSetViewports
가위 직사각형(scissor rectangle) 설정
- 가위 직사각형은 픽셀들을 컬링 하기 위한 용도. 후면 버퍼를 기준으로 가위 직사각형을 정의하고, 가위 직사각형 외부의 픽셀들은 후면 버퍼에 래스터화 되지 않는다.
- 가위 직사각형 설정 인터페이스: ID3D12GraphicsCommandList::RSSetScissorRects
출처:
한빛미디어 출판 <DirectX 12를 이용한 3D 게임 프로그래밍 입문>