엔진 라이브러리에,
DxGraphicDevice 클래스를 만들고, 그 안의 함수들을 만들고 있다
(D3D12Hello 튜토리얼을 참조&분석,
튜토리얼에 포함된 폴더이름은 DirectX 12-Graphics-Samples-master)
먼저, 가장 먼저 해야될 작업인, 디바이스 생성을 따라가보자
m_pDevice 를 생성하기위해서는, 그 전에 몇가지 작업이 필요하다.
이 과정의 맨처음에는,
factory 라는 것을 생성해야 한다
이 factory 는 DX9 로 치자면, IDirect3D9 클래스에 해당한다
DXGI - DirectX Graphic Interface
//DXGI 팩터리를 사용하여
//어댑터를 열거하고,
//스왑 체인을 만들고,
//전체 화면 표시 모드로 전환하기 위한 alt+Enter 키 시퀀스와 창을 연결하는 개체를 생성합니다.
ComPtr<IDXGIFactory4> factory;
ComPtr 스마트 포인터를 사용하여, 해제 (release) 를 굳이 신경쓰지 않아도 된다
포인터를 가져오기 위해서는, factory.Get() 등의 정해진 인터페이스를 사용
나의 경우는, 좀더 직관적으로 사용하기 위해서
주요 인터페이스들은 모두 IDXGIFactory4* m_pfactory4;
이런식으로 사용하였다
이런 경우에는 프로그램이 끝날때,
명시적으로 m_pfactory4->Release() 가 필요해진다
몇몇의 함수는,
x64 에서는 문제가 없으나, x86 프로젝트에서는 링크에러를 뱉어낸다
주의하자!
공부하면서 하는 것이라, 찾아본 설명, 주석을 많이 달아놓았다
코드 분석에 도움이 될수있으니, 참고해보자
void
DxGraphicDevice::Step1_CreateDXGI_Factory( void )
{
UINT dxgiFactoryFlags = 0;
#if defined(_DEBUG)
//추가된 디버그 인터페이스, 좀 깊숙한 추적이 가능해 지려나?
//실행과는 상관없다
// Enable the debug layer (requires the Graphics Tools "optional feature").
// NOTE: Enabling the debug layer after device creation will invalidate the active device.
ComPtr<ID3D12Debug> debugController;
if( SUCCEEDED( D3D12GetDebugInterface( IID_PPV_ARGS(&debugController )) ) )
{
debugController->EnableDebugLayer();
// Enable additional debug layers.
dxgiFactoryFlags |= DXGI_CREATE_FACTORY_DEBUG;
//DXGI_CREATE_FACTORY_DEBUG
}
#endif
/*
//Engine 라이브러리 -> 일반 -> 추가종속성
dxgi.lib
d3d12.lib
d3dcompiler.lib
*/
//C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x86
//windows 의 dxgi.dll 필요한듯
//ComPtr<IDXGIFactory4> factory;
//checkhr( CreateDXGIFactory2( dxgiFactoryFlags, IID_PPV_ARGS(&factory) ) ); //dxgi1_3.h
//링크에러가 계속 뜬다, win32 프로젝트에서는 지원하지 않는 함수인듯
//x64 프로젝트에서만 사용가능한 함수
/*
다른 DXGI 객체를 생성하는 데 사용할 수 있는 DXGI 팩토리를 생성합니다.
Windows 8에서는 DXGIDebug.dll이 시스템에 있는 동안 생성된 모든 DXGI 팩터리가 로드되어 사용됩니다.
Windows 8.1부터 앱은 대신 DXGIDebug.dll을 로드하도록 명시적으로 요청합니다.
CreateDXGIFactory2를 사용하고 DXGI_CREATE_FACTORY_DEBUG 플래그를 지정하여 DXGIDebug.dll을
요청합니다.
DLL이 시스템에 있으면 로드됩니다.
*/
checkhr( CreateDXGIFactory1( IID_PPV_ARGS(&m_pFactory4) ) ); //x86
//checkhr( CreateDXGIFactory2( dxgiFactoryFlags, IID_PPV_ARGS(&m_pFactory4) ) ); //x64
//DXGI 팩터리를 사용하여
//어댑터를 열거하고,
//스왑 체인을 만들고, 전체 화면 표시 모드로 전환하기 위한 alt+Enter 키 시퀀스와 창을 연결하는 개체를 생성합니다.
/* ComPtr 스마트포인터 사용안해도 된다
IDXGIFactory4* factory4;
CreateDXGIFactory1( IID_PPV_ARGS(&factory4) );
*/
}
'프로그래밍' 카테고리의 다른 글
게임 초당 프레임 fps - 몇천에서 몇백으로 떨어질때 (0) | 2023.08.31 |
---|---|
비주얼 스튜디오 2022 :: ctrl + shift + t (0) | 2023.01.17 |
비주얼스튜디오 2010+ 에서, 비주얼스튜디오 2022 로 (0) | 2023.01.07 |
힙이 손상되어 또는 여기서 로드한 DLL에 버그가 있을 수도 있습니다 (0) | 2022.05.18 |
스팀(steam) -> 체크리스트 완료와 검토 요청 (0) | 2021.08.06 |