[DirectX12] 2) DirectX12 초기화
Direct X
응용 프로그램이 그래픽 가속 기능을 이용해 렌더링 할 수 있게 하는 저수준 API
COM
DirectX의 프로그래밍 언어 독립성과 하휘 호환성을 가능하게 하는 기술
COM 객체 (인터페이스)는 대부분의 세부사항은 프로그래머에게 드러나지 않음
ComPtr 사용
장치 초기화 순서
1. Device 생성
2. CommandQueue 생성
3. SwapChain 생성
4. FenchObject 생성
5. RenderTarget, DepthStencilBuffer 생성
CommandQueue
명령을 담고있는 queue, GPU가 명령큐를 가지고 있고, 큐의 GPU명령어 순서대로 실행
해야할 일을 하나씩 처리하기보단, 한번에 처리하기 위해 기록하여 한번에 요청하기 위한 개념
(Command Pattern과 유사)
SwapChain
애니메이션이 껌벅대는 현상을 방지하기위한 최선의 방법
Double Buffering, 즉 두개의 버퍼를 사용함
전면버퍼 : 모니터에 표시되는 이미지를 담음 , 그래픽 카그만 접근 가능함
후면버퍼 : 애니메이션의 한 프레임 전체를 화면 바깥의 텍스처, 그래픽 작업 영역
FenceObject
ID3D12Fence
CPU가 GPU 렌더링 작업이 모두 끝날 때 까지 동작하지 못하도록 함
DescriptorHeap
리소스를 Shader 또는 GPU가 사용하기 위한 연결체
리소스들은 가상 메모리에 만들어지는 메모리(포인터) 이기 때문에 CPU 또는 GPU에게 직접 맡기면 안됨
(물리적인 위치가 아니기 때문에 포인터를 직접 넘기면 안됨)
=> 이를 관리하기 위한 것이 Descriptor , 리소스 가상 메모리 포인터를 관리해주는 매개체
리소스를 설명하는 자료구조(Descriptor)를 만들려면 리소스 뷰 들을 저장하기 위한 배열이 필요로 함
Descriptor(DX12) = View(DX11)
=> Descriptor Heap 으로 RTV 생성 (RenderTargetView(RTV), DepthStencilView(DSV), ConstantBufferView(CBV), UnorderedAccessView(UAV)
RenderBegin -> Render -> RenderEnd 순으로 Render 진행
RenderBegin
- CommandQueue 초기화
- swapChain 설정 (현재 후면버퍼리소스를 이동시켜 GPU 작업 용도로 사용 요청)
- viewport와 scissor rect 재설정
- 후면버퍼를 GPU에게 알려줌
Render End
- 후면버퍼의 내용을 전면번퍼로 이동
- Command List 수행
- swapChain을 통해 화면 채움
- swapChain - SwapIndex
[참고 URL]
https://ssinyoung.tistory.com/35?category=810267