본문으로 바로가기

[DX12] 4.3 Direct3D의 초기화

category Computer Science/DirectX 2024. 4. 24. 23:49

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 게임 프로그래밍 입문>