본문 바로가기
DirectX/[Inflearn_rookiss] Part2: DirectX12

1. DirectX12 초기화

by 헛둘이 2023. 1. 15.

1. Devcie

1-1. IDXGIFactory

- SwapChain을 생성할 때 사용

1-2. ID3D12Device

- DescriptorHeap, CommandQueue 등을 생성할 때 사용

- DX12의 메인 바디 역할을 한다.

 

DescriptorHeap이란?

- GPU로 전달할 데이터를 관리하는 객체

- Descriptor는 GPU에서 사용할 데이터를 의미한다.

- DescriptorHeap을 사용하면 GPU에서 사용할 데이터를 효율적으로 관리할 수 있다.

 

CommandQueue란?

- 커맨드를 전달하는 객체

- 커맨드는 GPU에서 수행해야 할 작업을 의미하고 커맨드 큐에 의해 전달된다.

 

왜 큐에 담아서 전달하지?

- 작업을 순서에 맞게 실행할 수 있다.(순차적으로 실행하며, 이전 작업이 끝나면 다음 작업을 실행)

- CommandQueue를 사용하면 여러 작업을 병렬로 실행할 수 있다.

- 작업을 큐에 담아두고 필요할 때 실행할 수 있다 (작업 대기)

 

2. SwapChain

2-1. IDXGISwapChain

- 화면 버퍼를 관리하는 객체 (백버퍼 <-> 프론트 버퍼)

- 여러 프레임을 저장하는 형태로 이뤄져 있고 그 중 하나를 화면에 표시한다.

 

2-2. ID3D12Resource

- GPU 리소스(텍스쳐)를 의미한다.

- GPU에서 처리할 데이터를 나타내며, 텍스쳐 버퍼, 레이아웃 구성 등을 CPU와 GPU간에 쉽게 전달할 수 있게 해준다.

- SwapChain에서는 RenderTarget으로 쓰인다.

 

2-3. ID3D12DescriptorHeap

- D3D11에서 View를 의미하며, 정확히는 View를 모아서 관리하는 객체

- 여기서는 RenderTargetView의 역할을 한다.

 

 

3. CommandQueue

3-1. ID3D12GraphicsCommandList

- GPU에서 수행할 작업들을 저장하는 객체

- 이를 통해 GPU가 수행해야 할 작업들을 알 수 있다.

 

3-2. ID3D12CommandAllocator

- CommandList를 생성할 때 필요한 메모리를 관리하는 객체

- 메모리를 재사용할 수 있는 기능도 제공하기 때문에 메모리 누수도 방지할 수 있다.

 

3-3. ID3D12CommandQueue

- 앞서 설명했듯 커맨드는 GPU가 수행해야 할 작업을 의미한다.

- 커맨드는 이 커맨드 큐에 저장되며 GPU가 해야 하는 일들을 알 수 있게 한다.

 

* RenderBegin 함수

- CD3DX12_RESOURCE_BARRIER::Transition(..)

D3D12_RESOURCE_BARRIER barrier = CD3DX12_RESOURCE_BARRIER::Transition(
		_swapChain->GetBackRTVBuffer().Get(),
		D3D12_RESOURCE_STATE_PRESENT, // 화면 출력
		D3D12_RESOURCE_STATE_RENDER_TARGET); // 외주 결과물

: GPU 리소스의 상태를 변경하는 함수

: GPU는 여러 상태를 가질 수 있는데, 이미지를 생성할 때는 생성하는 상태,

: 렌더링할 때는 렌더링하는 상태, 이미지를 읽을 때는 읽는 상태로 변경하는 것과 같이 상태를 변경할 수 있다.

 

_cmdList->ResourceBarrier(1, &barrier);

: 리소스 상태를 변경하는 작업을 커맨드 큐에 넣는다.

 

_cmdList->RSSetViewports(1, vp);
_cmdList->RSSetScissorRects(1, rect);

- RSSetViewPorts 함수를 통해 ViewPort를 설정한다.

: ViewPort는3D씬을 2D화면에 어떻게 보여줄지를 설정하는 것

- RSSetScissorRects는 어떤 영역만 렌더링할 것인지 설정하는 것

: 특정 영역만 화면효과를 적용하거나 투명화 시키는 등 작업이 가능하다.

 

4. RootSignature

4-1. ID3D12RootSignature

- GPU에서 사용할 쉐이더 리소스를 관리하는 객체

- 쉐이더 리소스를 선언하고 관리할 수 있게 해준다.

- GPU에 메모리 공간을 임대해서 사용해야 하는데 

- 사용하기 위한 데이터 즉, 어떤 레지스터, 버퍼를 활용하겠다, 어떤 정책을 활용할 것이다 등을 전달

 

 

 

 

 

'DirectX > [Inflearn_rookiss] Part2: DirectX12' 카테고리의 다른 글

6. Material  (0) 2023.01.18
5. Depth Stencil Buffer/View  (0) 2023.01.17
4. Texture Mapping  (0) 2023.01.16
3. RootTable  (0) 2023.01.16
2. Constant Buffer & Root Signature  (0) 2023.01.15

댓글