DirectX

장치 초기화

부레두 2024. 6. 7. 20:37

0. 초기화 과정 정리

  1. D3D11CreateDevice 함수로 장치, 인터페이스 등 ⇒ ID3D11DeviceContext 인터페이스 생성
  2. ID3D11Device::CheckMultisampleQualityLevels로 4XMSAA 품질 지원 여부 점검
  3. → 하드웨어가 다중표본화를 이용한 안티앨리어싱이 가능한지 묻는것
  4. 생성할 Swap Chain의 특성을 서술하는 DXGI_SWAP_CHAIN_DESC 구조체 생성
  5. IDXGIFactory 인터페이스를 통해 SwapChain 인터페이스 생성
  6. 후면 버퍼에 대한 렌더 타겟 뷰를 생성
  7. 깊이, 스텐실 버퍼와 그에 연결되는 뷰를 생성
  8. 생성된 뷰를 Direct3D가 사용할 수 있도록 파이프라인의 출력병합 단에 Bind
  9. 뷰포트 설정

1. 디바이스 / 디바이스 콘텍스트, 스왑 체인 생성

D3D의 주된 인터페이스

물리적 그래픽 장치 하드웨어에 대한 소프트웨어 제어기 생성

  • ID3D11Device
  • ID3D11DeviceContext
HRESULT hr = D3D11CreateDeviceAndSwapChain
(
	NULL                        // IDGIAdapter
	, D3D_DRIVER_TYPE_HARDWARE  // D3D_DRIVER_TYPE
	, NULL                      // HMODULE
	, creationFlags             // UINT FLAGs
	, featureLevels             // D3D_FEATURE_LEVEL
	, 1                         // UINT 
	, D3D11_SDK_VERSION         // SDK_VERSION
	, &swapChainDesc            // DXDI_SWAP_CHAIN_DESC
	, &swapChain                // IDXSWAPCHAIN
	, &device                   // ID3D11Device
	, NULL                      // D3D_FEATURE_LEVEL
	, &deviceContext            // ID3D11DeviceContext
);
  1. DXGIAdapter
    → 디스플레이 어댑터, NULL이나 0 지정 시 기본 디스플레이 어댑터가 사용됨
  2. DriverType
    → TYPE_REFERENCE : 표준 장치 생성, Direct3D의 소프트웨어 구현
    → TYPE_HARDWARE : 렌더링에 3차원 그래픽 가속이 적용
  3. HModule software
    → 소프웨어 구동기를 지정, 보통 하드웨어를 사용하기 때문에 NULL
  4. Flags
    → DEVICE_DEBUG : 디버그 모드 빌드에서 디버그 계층을 활성화하는데 필수
    → DEVICE_SINGLETHREADED : 여러 스레드에서 호출되지 않을 때, 성능 향
    → 추가적인 장치 생성 플래그들을 지정
  5. Feature_LEVEL
    → 원소들의 순서는 기능 수준들을 점검하는 순서
    → NULL을 지정하면 최고 기능 수준
    → D3D_FEATURE_LEVEL 형식의 배열
  6. SDKVersion
    → 항상 D3D11_SDK_VERSION을 지정
  7. DXDI_SWAP_CHAIN_DESC
    → 후면 버퍼 정의, 다중표본화를 위한 표본과 품질 수준 정의, 버퍼의 용도, 후면 버퍼의 갯수, 렌더링할 창의 핸들, 창 모드 여부, 추가적인 플래그 등을 정의한 구조체
  8. IDXSWAPCHAIN
    → 생성된 스왑체인 인터페이스를 리턴
  9. ID3D11Device
  10. D3D_FEATURE_LEVEL
  11. ID3D11DeviceContext