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 |
댓글