Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Input Assembler
- c
- C언어
- 다이렉트X
- 게임수학
- DirectX12
- CPU
- Direct Init
- CommandList
- swapchain
- 프로그래밍
- DESC
- DirectX
- 동기화
- UE4
- View
- engine
- 전처리문
- Direct3D Init
- 코딩
- GPU
- vertex
- 다이렉트X 튜토리얼
- Direct3D
- 세팅
- 다이렉트 초기화
- DirectXTK
- RenderTargetView
- 다중표본화
- C++
Archives
- Today
- Total
비타Cpp
Direct3D의 초기화 - 6. 서술자 힙 생성 본문
다음으로, 응용 프로그램에 필요한 서술자/뷰들을 담을 서술자 힙을 만들어야 한다.
서술자 힙(Descriptor Heap)은 ID3D12DescrptorHeap 인터페이스로 대표된다. 힙을 생성하는 메서드는 ID3D12Device::CreateDescriptorHeap이다. SwapChainBufferCount에 설정된 개수만큼의 렌더 대상 뷰(Render Target View, RTV)들과 하나의 깊이·스텐실 뷰(Depth/Stencil View, DSV)가 필요하다. 렌더 대상 뷰는 교환 사슬에서 렌더링의 대상이 되는 버퍼 자원을 서술하고, 깊이·스텐실 뷰는 깊이 판정을 위한 버퍼자원을 서술한다. 서술자 힙은 서술자 종류마다 따로 만들어야 한다.
다음은 이 힙들을 생성하는 코드이다.
//D3DApp.h
Microsoft::WRL::ComPtr<ID3D12DescriptorHeap> mRtvHeap;
Microsoft::WRL::ComPtr<ID3D12DescriptorHeap> mDsvHeap;
//D3DApp.cpp
void D3DApp::CreateRtvAndDsvDescriptorHeaps()
{
D3D12_DESCRIPTOR_HEAP_DESC rtvHeapDesc;
rtvHeapDesc.NumDescriptors = SwapChainBufferCount;
rtvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV;
rtvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;
rtvHeapDesc.NodeMask = 0;
ThrowIfFailed(md3dDevice->CreateDescriptorHeap(
&rtvHeapDesc, IID_PPV_ARGS(mRtvHeap.GetAddressOf())));
D3D12_DESCRIPTOR_HEAP_DESC dsvHeapDesc;
dsvHeapDesc.NumDescriptors = 1;
dsvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_DSV;
dsvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;
dsvHeapDesc.NodeMask = 0;
ThrowIfFailed(md3dDevice->CreateDescriptorHeap(
&dsvHeapDesc, IID_PPV_ARGS(mDsvHeap.GetAddressOf())));
}
힙을 성공적으로 생성하고 나면 힙에 저장된 서술자들에 접근할 수 있다. 힙의 첫 서술자에 대한 핸들은 ID3D12DescriptorHeap::GetCPUDescriptorHandleForHeapStart 메서드로 얻는다. 다음은 각각 현재의 후면 버퍼 RTV와 DSV에 대한 핸들을 얻는 함수들이다.
D3D12_CPU_DESCRIPTOR_HANDLE D3DApp::CurrentBackBufferView()const
{
// 편의를 위해 CD3DX12_CPU_DESCRIPTOR_HNDLE의 생성자를 사용한다.
// 이 생성자는 주어진 오프셋에 해당하는 후면 버퍼 RTV의 핸들을 돌려준다.
return CD3DX12_CPU_DESCRIPTOR_HANDLE(
mRtvHeap->GetCPUDescriptorHandleForHeapStart(), //첫 핸들
mCurrBackBuffer, //오프셋 색인
mRtvDescriptorSize); //서술자의 바이트 크기
}
D3D12_CPU_DESCRIPTOR_HANDLE D3DApp::DepthStencilView()const
{
return mDsvHeap->GetCPUDescriptorHandleForHeapStart();
}
'DirectX12 > 튜토리얼' 카테고리의 다른 글
Direct3D의 초기화 - 8. 깊이·스텐실 버퍼와 뷰 생성 (0) | 2021.10.09 |
---|---|
Direct3D의 초기화 - 7.렌더 대상 뷰(RTV) 생성 (0) | 2021.10.08 |
Direct3D의 초기화 - 5. 교환 사슬(Swapchain)의 서술과 생성 (0) | 2021.10.02 |
Direct3D의 초기화 - 4. 명령 대기열과 명령 목록 생성 (0) | 2021.10.02 |
Direct3D의 초기화 - 3. 4X MSAA 품질 수준 지원 점검 (0) | 2021.10.01 |
Comments