CPU 프로그램 실행하고 껏다 키고
이런범용 적인 부분에서 유용.
GPU는? 서로 연관성이 없는 독립적인 일감 떠넘길때 병렬로 처리할 때 유용함.
비트코인, 암호학 등등.
정해진 규칙에 따라 GPU에게 데이터를 줘야함.
이게 "렌더링 파이프 라인"이다.
Input Assembler
삼각형 좌표가 어떻게 있는지 정점 좌표 전달하는 부분.
vertex Shader
Input Assembler 넘겨준 데이터를 연산을 해주는 부분임. 즉, 정점 변환해주는 부분.
DX12 에 추가된 부분
정점을 추가를 하는 부분임
Resterizeer
이부분 좀 중요함
색상을 보간 하는 부분임. 정점데이터를 기준으로 픽셀데이터를 채워주고 보간하는 작업임.
Pixel Shader
색상을 강제로 조졸하는 부분
outPut-Merger
모든거 조합하는 단계
Device
GPU객체 맡는 부분임
CommandQueue
일감들을 몰아서 처리를 하는 부분
WiatForSync를 통해서 싱크 맞춤.
RenderBegin, RenderEnd가 있음. (실제로 그리는 부분)
이부분에서 SwapChain, DesciptorHeap을 다 사용함 RenderBegin()에서.
SwapChain
Buffer(종이) 두장 만드는 부분.
Double Buffering
DestriptorHeap
기안서, DX12에서 View->DestriptorHeap로 바뀜.
GPU에게 데이터 보낼때 기안서 작성해서 보내는 부분임.
SwapChain에서 만든 Resource를 바로 GPU에게 건내줄 수 없으니 DescriptorHeap에서 기안서를 만들어서 GPU에게 건내주는 방식이다.
Mesh
정점으로 이루어진 물체.
Shader
일감 기술서 : 외주 인력들이 뭐 해야할지 기술
CPU vs GPU 구조 차이.
CommandQueue의 RenderBegin에서 RootSignature서명을 해주고 CBV를 사용한다고 알려줌
그러면 공간은 임대를 한 상황인데 그 공간에 데이터를 넣는 부분은 Mesh의 Render부분에서 해주게 된다.
이렇게 CBV를 만들었는데
Rootsignature에서 정확히 만들어 주었다.
CBV를 무한정 만들 수 없기 때문에 table을 만들 것이다.
Register안에 table을 만들어서 그 table안에 무엇을 사용을 할지 b0~b4까지 정의를 해준다.
SetDescriptorHeap이 매우 느려서 큰 테이블을 만들어서 사용을 해야한다.
Vertext Buffer로 정점 데이터 넘기고 이 정점들이 어떻게 연결 되어있는지를 Index Buffer로 넘겨준다.
nv 좌표계를 사용해서 Texture입힐 것이다.
3D물체를 그리그 위한 준비
깊이를 통해서 그린다.