IT 이모저모

DX 11 - Direct3D 초기화

exien 2018. 3. 5. 15:22

Direct3D를 초기화하기 위해서 다음 4단계가 필요하다.


1. 디바이스 타입과 feature level을 정의한다.

- Direct3D 11에서는 hardware device, WARP device, software driver device 또는 reference device를 선택할 수 있다.

하드웨어 디바이스는 그래픽스 하드웨어로 동작하면 모든 디바이스중에서 가장 빠르다. 이 타입은 사용하고자하는 feature level을 하드웨어에서 지원한다면 사용할 수 있는 타입이다.

레퍼런스 디바이스는 하드웨어 지원없이 CPU를 사용하여 렌더링 수행할때 사용한다. 이 방식은 매우 느리며, 비효율적이다. 그래서 이 방식은 개발용으로 밖에 사용할수가 없다. 하지만 새로운 DirectX가 relese됐는데 그 버전을 지원하는 하드웨어가 없을 경우 사용하면 유용하다.

WARP드라이버는 효율적으로 CPU를 사용하여 렌더링을 수행한다. WARP는 실행시간에 Win Vista나 Win7에서 윈도우 그래픽스를와 최적화된 명령어와 코드를 사용한다(레퍼런스 모드보다 나은 선택이다.) 이 디바이스는 하드웨어가 지원하지 않는다면 대체해서 사용할수 있다.


RECT dimensions;

GetClientRect(hwnd, &dimensions);


unsigned int width = dimensions.right - dimensions.left;

unsigned int height = dimensions.bottom - dimensions.top;

D3D_DRIVER_TYPE driverTypes[] = 

{

D3D_DRIVER_TYPE_HARDWARE, D3D_DRIVER_TYPE_WARP,D3D_DRIVER_TYPE_SOFTWARE

};

unsigned int totalDreverTypes = ARRAYSIZE(driverTypes);

D3D_FEATURE_LEVEL featureLevels[] = 

{

D3D_FEATURE_LEVEL_11_0,

D3D_FEATURE_LEVEL_10_1,

D3D_FEATURE_LEVEL_10_0

}

unsigned int totlaFeatureLevels = ARRAYSIZE(featureLevels);


2. Direct3D 디바이스, context, 스왑 체인(swap chain)을 생성한다.

- 다음은 스왑 체인을 생성하는 단계이다. Direct3D에서 스왑 체인은 렌더링할 곳을 모으는 것이다. 각각의 디바이스는 최소한 하나의 스왑 체인을 가져야한다. 렌더링할 곳은 스크린으로 출력될 color 버퍼, 뎁스 버퍼, 스텐실 버퍼등이다. 

일반적으로 게임에서는 front 와 back버퍼 두개의 color버퍼를 가진다. front 버퍼(primary 버퍼)는 스크린에 출력될 값을 가지고, back 버퍼(secondart 버퍼)는 다음 프레임에 그려질 값을 가진다.


DXGI_SWAP_CHAIN_DESC swapChainDesc;

ZeroMemory(&swapChainDesc, sizeof(swapChainDesc));

swapChainDesc.BufferCount = 1;

swapChainDesc.BufferDesc.Width = width;

swapChainDesc.BufferDesc.Height = height;

swapChainDesc.BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;

swapChainDesc.BufferDesc.RefreshRate.Numerator = 60;

swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;

swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;

swapChainDesc.OutputWindow = hwnd;

swapChainDesc.Windowed = true;

swapChainDesc.SampleDesc.Count = 1;

swapChainDesc.SampleDesc.Quality = 0;


sample desciption은 Direct3D의 멀티 샘플링 속성을 정의한다. 멀티 샘플링은 렌더된 픽셀들의 평균 샘플을 사용하여 최종 컬러를 좀더 부드럽게 하는 기술이다.

3. 랜더 타켓(render target)을 생성한다.

4. 뷰 포트를 세팅한다.

'IT 이모저모' 카테고리의 다른 글

DX 11의 Stages  (0) 2018.03.05
DirectX Tools  (0) 2018.03.05
Geometric Skinning with Approximate Dual Quaternion Blending  (0) 2018.03.05
Tiled Forward Shading - GPU Pro 4.1  (0) 2018.03.05
갤럭시 S9 자급제폰이란?  (0) 2018.03.03