직전 글 winMain 초기 정리는 winApi에 관해 초기 설정을 다뤘다.

이번 글은 DirectX11 기준으로 초기 설정에 필요한 요소들을 정리 할 것이다.

이 역시 마찬가지로 너무 많은 정보가 한꺼번에 들어오기 때문에, 보기도 어렵고 이해하기도 어렵기 때문이다.

D3D11CreateDevice

먼저 DirectX11을 사용하기 위해 Device를 만들어야한다.

Device와 Context는 미리 스마트 포인터 ComPtr로 만들어 놓아야한다.

UINT flag = 0;						// 디바이스 생성 옵션 플래그
#ifdef _DEBUG
flag = D3D11_CREATE_DEVICE_DEBUG;	// 디버그 모드로 디바이스 생성
#endif


D3D_FEATURE_LEVEL level = D3D_FEATURE_LEVEL_11_0;	// 시용할 D3D 기능 레벨지정

if (FAILED(D3D11CreateDevice(
    nullptr,					// 기본 어댑터
    D3D_DRIVER_TYPE_HARDWARE,	// 하드웨어 가속
    nullptr,					// 소프트웨어 드라이버 사용 안함
    flag,						// 플래그(디버그)
    nullptr,					// 기능 레벨 배열 없음
    0,							// 배열 갯수
    D3D11_SDK_VERSION,			// SDK 버전
    Device.GetAddressOf(),		// 생성된 디바이스
    &level,						// 실제 생성된 기능 레벨
    Context.GetAddressOf())))	// 생성된 컨텍스트
{
    // 실패시 종료
    MessageBox(nullptr, L"Device 생성 실패", L"Device 생성 실패", MB_OK);
    return E_FAIL;
}
  • Device와 Context를 생성하며, 그 주소를 가져다 사용하는 형태이다.

Device

DirectX11에서 Device는 그래픽 하드웨어(GPU)와의 직접적인 연결을 담당하는 객체이다.

Device의 역할

  • GPU의 기능 및 하드웨어 상태를 관리.
  • 셰이더(Shader)렌더링 파이프라인 설정.
  • Direct3D 리소스(버퍼, 텍스처 등)를 생성하고, GPU가 이를 사용할 수 있도록 초기화.

Device가 필요한 이유

  • DirectX를 통해 GPU와 직접적으로 통신할 수 있는 객체가 필요하기 때문.
  • 다양한 그래픽 작업에서 리소스를 할당하고 설정하는 중요한 역할 수행.

Device Context

Device Context는 Device를 통해 생성된 리소스를 GPU에서 실행하고 조작하는 역할을 담당한다.

Device Context의 역할

  • GPU 명령을 실행하고, 렌더링 작업을 처리.
  • 셰이더, 뷰포트, 파이프라인 상태를 설정.
  • 버퍼나 텍스처 등의 그래픽 데이터를 GPU에 바인딩

Device Context가 필요한 이유

  • Device는 리소스를 생성하지만, 이를 실제로 GPU에서 렌더링하려면 명령을 실행할 컨텍스트가 필요.
  • 여러 개의 렌더링 컨텍스트를 만들어 다중 스레드에서 병렬로 렌더링 가능.

Device와 Context의 차이점

개념 역할 주요 기능
Device GPU와 직접 통신 - 리소스 생성
- 상태 관리
Context 렌더링 명령 실행 - 셰이더
- 뷰포트 설정
- 드로우 호출

Device와 Context의 상호 작용 과정

  1. Device를 통해 리소스(버퍼, 텍스처)를 생성.
  2. Device Context가 해당 리소스를 GPU에 바인딩.
  3. Device Context에서 Draw() 같은 명령을 호출하여 렌더링 실행.
  4. GPU가 명령을 수행하고 최종적으로 화면에 출력.

결론

  • DeviceGPU의 리소스를 생성하고 Direct3D의 상태를 관리하는 객체.
  • Device Context렌더링 명령을 실행하고, 셰이더와 데이터를 GPU에 바인딩하는 객체.
  • DirectX 11에서는 보통 하나의 Device와 하나의 Immediate Context를 사용하여 렌더링을 수행.
  • 멀티 스레드 렌더링을 위해 여러 개의 Context를 생성할 수도 있다.

태그: ,

카테고리:

업데이트:

댓글남기기