응애맘마조
230103 강의 본문
드디어 DirectX에 들어갔습니다. 시작부터 꽤나 어렵습니다.
기본적으로 렌더링 파이프라인부터 시작합니다.
렌더링 파이프라인은 출력을 위한 구조입니다. 화면으로 표현하기까지의 모든 과정을 나타내고 있습니다.여기서 파이프라인은 한 단계의 출력이 다음 단계의 입력으로 이어지는 구조가 됩니다.
순서는 DrawCall → IA → VS → RS → PS → OM입니다.(HS, TS, DS, GS 단계 과정은 부수적인 것이라서 없어도 상관은 없습니다. 하지만 위에 적은 5가지 단계는 반드시 있어야 됩니다. 하나라도 없으면 출력 자체가 불가능합니다.)
IA : Input Assembler (입력 조립기)
정점 정보를 긁어모으는 역할을 합니다.정점을 어떻게 그릴지 모양을 정하는 역할을 합니다.
여기에서 자원이 필요하게 됩니다.자원은 렌더링 파이프라인이 만들어지기 위한 재료가 필요합니다. ID3D11(D3D 11버전)이 자원이 되고 Direct3D11 클래스에 있습니다. 여기에 맨 앞에 있는 I는 인터페이스입니다.
클래스 안에 있는 구조체에는 반드시 포인터를 붙여야 합니다.
ID3D11Device* device;
ID3D11DeviceContext* deviceContext;
IDXGISwapChain* swapChain;
ID3D11Texture2D* backBuffer;
ID3D11RenderTargetView* renderTargetView;
ID3D11BlendState* blendState;
추상화를 하기 위해 이런 식으로 포인터가 붙게 됩니다.
또한 자원을 바로 다음으로 넘겨줄 수 없기 때문에 원하는 자료형으로 만들어줘야 됩니다.
Direct3D11 클래스에서는
new로 생성을 할 수 없습니다. 대신에 create 함수를 사용하는 것이 특징입니다.
device는 버퍼를 생성합니다. 메모리를 적재할 공간을 생성한다고 보면 됩니다.
device context는 렌더링 파이프라인을 바인딩합니다.여기서 바인딩(binding)은 묶는다는 의미를 갖고 있는데 자원을 파이프라인에 연결한다고 보면 됩니다.
VS : Vertex Shader (정점 셰이더)
여기에서는 셰이더의 역할이 됩니다. GPU를 사용하여 연산을 하게 됩니다.
셰이더 언어를 사용하게 되는데 hlsl을 사용하게 됩니다.
여기에서 공간 변환을 하게 됩니다. (SRT를 한다고 생각하면 됩니다.)
하지만 여기에서 중단점을 찍어서 실행 과정을 확인할 수 없습니다.
(물론 확인 못하는 방법이 없는 건 아니지만 나중에 알려주신다고 했습니다.)
RS : Rasterizer (래스터라이저)
여기에서 픽셀화 과정을 하게 됩니다.
PS : Pixel Shader (픽셀 셰이더)
픽셀의 색을 결정하는 단계입니다. (특히 이미지에서 많이 사용합니다.)
OM : Output Merger (출력 병합기)
실제로 모니터에서 화면을 보여주는 단계입니다.
사실 IA에서 설명만 3일에 걸쳐서 하게 된다고 합니다. 아마도 내일도 IA에 대한 이야기를 듣게 될 것 같습니다.
읽어주셔서 감사합니다.