장치 초기화 - Device

이승덱·2021년 7월 27일
0

Graphics&DirectX

목록 보기
2/37

Device

  • DirectX에서 Device Class는 각종 디스플레이 관련 객체를 생성한다.
  • 현실로 치면 인력사무소 느낌
class Device
{
public:
	void Init();

	ComPtr<IDXGIFactory> GetDXGI() { return _dxgi; }
	ComPtr<ID3D12Device> GetDevice() { return _device; }

private:
	// direct x 는 gpu를 제어하고 프로그래밍할 때 쓰이는 저수준 그래픽 API
	// -> 우리는 direct x에 집중하고 마쏘와 제조사가 알아서 만든다.

	// COM(Component Object Model)
	// - DX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술
	// - COM 객체(COM 인터페이스)를 사용. 세부사항은 우리한테 숨겨짐
	// - ComPtr 일종의 스마트 포인터
	// - GPU접근 시 ComPtr을 사용함
	ComPtr<ID3D12Debug>		_debugController;
	ComPtr<IDXGIFactory>	_dxgi; // 화면 관련 기능들 (출력..)
	ComPtr<ID3D12Device>	_device; // 각종 객체 생성
};


void Device::Init()
{
#ifdef _DEBUG
	::D3D12GetDebugInterface(IID_PPV_ARGS(&_debugController));
	_debugController->EnableDebugLayer();
#endif


	::CreateDXGIFactory(IID_PPV_ARGS(&_dxgi));

	::D3D12CreateDevice(nullptr, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&_device));

}




DXGI(DirectX Graphics Infrastructure)
ComPtr<IDXGIFactory>	_dxgi;
  • Device를 생성하기 위해서는 IDXGIFactory라는 COM객체가 필요하다.
  • DXGI란?
    • Direct3D와 함께 쓰이는 API이다
    • 전체 화면 모드 전환
    • 지원 되는 디스플레이 모드 열거
    • 스왑 체인 생성 등
    • 저 수준 작업들을 관리한다.
::CreateDXGIFactory(IID_PPV_ARGS(&_dxgi));
  • IDXGIFactory란?
    • 어댑터(비디오 카드), 출력장치(모니터), 디바이스(그래픽카드)를 포함하는 COM객체
  • IDXGIFactory를 생성하여 위 기능을 수행할 수 있도록 한다.
  • 첫번째 인자로 rrid(디바이스의 COM ID), 두번째 인자로 ppDevice(주소).
    • 위 코드는 IID_PPV_ARGS을 통해 확장하여 사용







Device
ComPtr<ID3D12Device>	_device;

::D3D12CreateDevice(nullptr, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&_device));
  • Device를 생성하는 함수이다.
  • device = 디스플레이 어댑터(그래픽 카드)를 나타내는 객체
  • pAdapter : nullptr 지정하면 시스템 기본 디스플레이 어댑터
  • MinimumFeatureLevel : 응용 프로그램이 요구하는 최소 기능 수준 (위 코드는 D3D_FEATURE_LEVEL_11_0를 지원하는 그래픽카드부터 가능하다고 제약을 걸고있다.)
  • riid : 디바이스의 COM ID
  • ppDevice : 생성된 장치가 매개변수에 설정
    • 위 코드는 IID_PPV_ARGS을 통해 확장하여 사용
profile
공부 기록용 블로그입니다

0개의 댓글