DirectX
장치 초기화
부레두
2024. 6. 7. 20:37
0. 초기화 과정 정리
- D3D11CreateDevice 함수로 장치, 인터페이스 등 ⇒ ID3D11DeviceContext 인터페이스 생성
- ID3D11Device::CheckMultisampleQualityLevels로 4XMSAA 품질 지원 여부 점검
- → 하드웨어가 다중표본화를 이용한 안티앨리어싱이 가능한지 묻는것
- 생성할 Swap Chain의 특성을 서술하는 DXGI_SWAP_CHAIN_DESC 구조체 생성
- IDXGIFactory 인터페이스를 통해 SwapChain 인터페이스 생성
- 후면 버퍼에 대한 렌더 타겟 뷰를 생성
- 깊이, 스텐실 버퍼와 그에 연결되는 뷰를 생성
- 생성된 뷰를 Direct3D가 사용할 수 있도록 파이프라인의 출력병합 단에 Bind
- 뷰포트 설정
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
);
- DXGIAdapter
→ 디스플레이 어댑터, NULL이나 0 지정 시 기본 디스플레이 어댑터가 사용됨 - DriverType
→ TYPE_REFERENCE : 표준 장치 생성, Direct3D의 소프트웨어 구현
→ TYPE_HARDWARE : 렌더링에 3차원 그래픽 가속이 적용 - HModule software
→ 소프웨어 구동기를 지정, 보통 하드웨어를 사용하기 때문에 NULL - Flags
→ DEVICE_DEBUG : 디버그 모드 빌드에서 디버그 계층을 활성화하는데 필수
→ DEVICE_SINGLETHREADED : 여러 스레드에서 호출되지 않을 때, 성능 향
→ 추가적인 장치 생성 플래그들을 지정 - Feature_LEVEL
→ 원소들의 순서는 기능 수준들을 점검하는 순서
→ NULL을 지정하면 최고 기능 수준
→ D3D_FEATURE_LEVEL 형식의 배열 - SDKVersion
→ 항상 D3D11_SDK_VERSION을 지정 - DXDI_SWAP_CHAIN_DESC
→ 후면 버퍼 정의, 다중표본화를 위한 표본과 품질 수준 정의, 버퍼의 용도, 후면 버퍼의 갯수, 렌더링할 창의 핸들, 창 모드 여부, 추가적인 플래그 등을 정의한 구조체 - IDXSWAPCHAIN
→ 생성된 스왑체인 인터페이스를 리턴 - ID3D11Device
- D3D_FEATURE_LEVEL
- ID3D11DeviceContext