10
28

https://docs.microsoft.com/ko-kr/windows/uwp/graphics-concepts/graphics-pipeline

 

그래픽 파이프라인 - UWP applications

Direct3D 그래픽 파이프라인은 실시간 게임 애플리케이션용 그래픽을 생성하도록 설계되었습니다. 데이터는 각각의 구성 가능하거나 프로그래밍 가능한 각 단계를 통해 입력에서 출력으로 흐릅

docs.microsoft.com

윈도우

윈도우 시스템의 모든 애플리케이션은

메시지(또는 이벤트)를 기반으로 구동된다.

윈도우 프로그래밍은 애플리케이션에서 사용자가 발생시키는

메시지에 대한 처리 "루틴"을 만들어 주는 것이라고 할 수 있다.

윈도우는 WinMain() 함수의 원형을 쓰는데 전형적으로

1. 윈도우 클래스 생성

2. 윈도우 클래스 등록

3. 윈도우 생성

4. 윈도우 화면에 표시

5. 메시지 큐로 메시지 받아 윈도우 프로시저로 보냄

윈도우 창은 앞의 루틴으로 진행된다.

 

DirectX11

다이렉트X는 그래픽카드에 직접 명령하는 API로 빠른 처리가 가능하다.

아래는 다렉 파이프라인이다. 이 파이프라인을 타고 게임이 뿌려진다.

IA user-filled buffer로부터 원시 데이터를 읽어들여 그 후 파이프라인 단계에서 사용될 primitive types(line list, triangle strips 등등)데이터로 assemble하는 역할을 수행한다.
VS input assembler 단계를 통과한 vertices들을 처리하는 단계. transformation, skinning, morphing, and per-vertex lighting과 같은 작업을 수행.
vertex shader는 단일 input vertex을 받고 output으로 단일 vertex를 출력한다.
HS 다이렉트11은 테셀레이션(GPU에서 low-detail subdivision surface를 higher-detail primitves로 바꾸는)을 구현하기위한 3가지의 새로운 단계를 support합니다. Hull shader, tesselator, domain shader 단계가 그것입니다.
TS 도메인(quad, tri or line)을 더 많은 작은 오브젝트(triangles, points or lines)로 잘게 나누는 작업을 수행한다.
DS 잘게 나누어진 포인트의 vertex position를 계산하는 단계.
GS 정점을 input으로 받아 application-specified 쉐이더를 적용하고 생성된 정점들을 출력한다.
버텍스 쉐이더와는 다르게 기하쉐이더는 입력으로 full primitive의 정점을 받는다. 기하쉐이더는 edge 인접 원시 데이터들을 입력을 받을 수 있다.
SO 기하 쉐이더단계(또는 정점쉐이더 단계)에서 메모리에 있는 하나 이상의 버퍼로 정점 데이터를 연속적으로 출력하는 단계. 메모리에 출력된 데이터들은 pipeline에서 다시 읽어들일 수 있다.
RS vector 정보를 레스터 이미지(픽셀)로 변환하는 단계.
PS 픽셀 라이팅이나 post-processing과 같은 쉐이딩을 가능하게하는 단계.
OM 최종출력되는 픽셀의 색상을 생성한다. depth/stencil를 수행하여 실제로 렌더링여부를 결정하고 최종색상을 blend 한다.

윈도우를 생성하고 DirectX를 활용하기위해

스왑체인, 렌더타겟 뷰, 뷰포트세팅,

디바이스/디바이스컨텍스트 객체 생성 등의 작업이 필요하다.

 

 

COMMENT