슬슬 기본 기하도형 이외에 외부 리소스를 불러와서 메시와 머터리얼을 사용할 수 있도록 기능을 개발하고 있는데 텍스쳐를 불러오는 곳에서 문제가 발생했다.
기존에는 SRV를 만들어 줄 때 딱히 기본 텍스처 이외에 사용할 일이 없었다보니 Descriptor Heap을 작성하는 과정에서 힙의 크기를 1로 고정해 두었었다. 근데 기본 텍스처 이외의 리소스를 사용하다보니 힙의 크기가 1로 고정되있는 것이 아니라 동적으로 늘어나야되는 상황이 생겼고, 방법을 계속 찾게 되었다.
물론 동적으로 할당하는 법도 찾기는 했는데, 너무나도 어처구니 없지만서도 가장 간단한 해결법을 찾았다. 그냥 힙 크기를 넉넉하게 잡아 크게 만들어두면 된다는 것이다.
https://stackoverflow.com/questions/37277332/directx-12-descriptor-heaps
DirectX 12 - Descriptor heaps
I've just been starting to learn the new DirectX 12 API. I want to write sone kind of rendering engine on top of dx12 and during initialization I'm supposed to create descriptor heaps. The problem ...
stackoverflow.com
대충 요약하자면 메모리 관리측면에서 좋은 방법은 아니지만 미리 Descriptor Heap의 크기를 넉넉하게 잡아서 생성한다고 문제는 없다는 것이다. 그래서 필자는 지금 당장 개발에 영향이 없도록 20정도 넉넉히 잡고 힙을 생성해주었다.
void RenderManager::BuildSRVDescriptorHeap()
{
D3D12_DESCRIPTOR_HEAP_DESC srvHeapDesc = {};
srvHeapDesc.NumDescriptors = 20;
srvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
srvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
ThrowIfFailed(GRAPHIC->GetDevice()->CreateDescriptorHeap(&srvHeapDesc, IID_PPV_ARGS(&_srvHeap)));
}'공부 > DirectX12' 카테고리의 다른 글
| 툰 셰이딩에서 얼굴 명암 처리에 대해서 (0) | 2025.04.04 |
|---|---|
| 앞으로의 개발 목표 정리 (0) | 2025.03.29 |
| DirectX 인덱스 버퍼 버그 해결 (0) | 2025.03.23 |
| DirectX12 인덱스 버퍼 데이터 버그 디버깅 중.. (0) | 2025.03.23 |
| DirectX에서의 회전 작업(LookAt 메소드 구현)에 대해서 (0) | 2025.02.14 |