일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- engine
- Direct3D
- vertex
- 세팅
- 코딩
- DirectX
- RenderTargetView
- swapchain
- 다이렉트X 튜토리얼
- C++
- CPU
- c
- DirectX12
- 다이렉트X
- View
- UE4
- Direct Init
- 전처리문
- DirectXTK
- GPU
- 다중표본화
- C언어
- 게임수학
- Direct3D Init
- DESC
- CommandList
- Input Assembler
- 프로그래밍
- 다이렉트 초기화
- 동기화
- Today
- Total
목록DESC (4)
비타Cpp
깊이 버퍼는 그냥 가장 가까운 가시 물체들의 깊이 정보를(그리고 스텐실을 사용하는 경우에는 스텐실 정보도) 저장하는 2차원 텍스처이다. 텍스처는 GPU 자원의 하나이므로, 텍스처 자원을 서술하는 D3D12_RESOURCE_DESC 구조체를 채운 후 ID3D12Device::CreateCommittedResource를 호출하면 깊이·스텐실 버퍼를 생성할 수 있다. D3D12_RESOURCE_DESC구조체의 정의는 다음과 같다. typedef struct D3D12_RESOURCE_DESC { D3D12_RESOURCE_DIMENSION Dimension; UINT64 Alignment; UINT64 Width; UINT Height; UINT16 DepthOrArraySize; UINT16 MipLevel..
Direct3D는 자원 자체를 직접 파이프라인의 단계에 묶지 않는다. 대신 반드시 자원에 대한 뷰(서술자)를 생성해서 그 뷰를 파이프라인 단계에 묶어야 한다. 특히 후면 버퍼를 파이프라인의 출력 병합기(Output Merger) 단계에 묶으려면(그래야 Direct3D가 장면을 후면 버퍼에 렌더링 할 수 있다.) 후면 버퍼에 대한 렌더 대상 뷰를 생성해야 한다. 우선 할 일은 교환 사슬에 저장되어 있는 버퍼 자원을 얻는 것인데, 이를 위해 다음과 같은 메서드를 사용한다. HRESULT IDXGISwapChain::GetBuffer( UINT Buffer, REFIID riid, void **ppSurface ); 1. Buffer: 얻고자 하는 특정 후면 버퍼를 식별하는 색인(교환 사슬에 버퍼가 여러 개 ..
다음으로, 응용 프로그램에 필요한 서술자/뷰들을 담을 서술자 힙을 만들어야 한다. 서술자 힙(Descriptor Heap)은 ID3D12DescrptorHeap 인터페이스로 대표된다. 힙을 생성하는 메서드는 ID3D12Device::CreateDescriptorHeap이다. SwapChainBufferCount에 설정된 개수만큼의 렌더 대상 뷰(Render Target View, RTV)들과 하나의 깊이·스텐실 뷰(Depth/Stencil View, DSV)가 필요하다. 렌더 대상 뷰는 교환 사슬에서 렌더링의 대상이 되는 버퍼 자원을 서술하고, 깊이·스텐실 뷰는 깊이 판정을 위한 버퍼자원을 서술한다. 서술자 힙은 서술자 종류마다 따로 만들어야 한다. 다음은 이 힙들을 생성하는 코드이다. //D3DApp...
렌더링 과정에서 GPU는 자원들에 자료를 기록하거나 자원들에서 자료를 읽어 들인다. Draw() 명령을 호출하기 전에, 먼저 참조할 자원들을 렌더링 파이프라인에 묶어야(Bind) 한다. 이를 가리켜 자원을 파이프라인에 "연결한다(link)" 또는 "바인딩한다"라고 말한다. 하지만 GPU자원들이 파이프 라인에 직접 묶이는 것은 아니다. 실제로 파이프라인에 묶이는 것은 해당 자원을 참조하는 서술자(Descriptor) 객체이다. 서술자 객체는자원을 GPU에게 서술해주는 경량의 자료구조라고 할 수 있다. 이는 하나의 간접층(level of indirection)이다. 이처럼 간접층을 두는 이유는, GPU자원이라는 것이 사실상 범용적이므로, 같은 자원을 렌더링 파이프라인의 다른 단계(Stage) 에서 사용할수 ..