공부중
[DirectX12]Hello Wolrd Sample - D3D12HelloWindow - 1 본문
본 코드는 모두 Microsoft의 DirectX-Graphics-Samples의 'Hello Wolrd Sample'를 분석? 번역? 암튼 공부해보려고 작성하는 문서입니다.
제 정리가 답이고 정의고 올바른것이고 진리이다 라고 읽지 마시고 틀린거 있으면좀 알려주세요. ㅠㅠ
코드는 모두 https://github.com/Microsoft/DirectX-Graphics-Samples 에서 다운로드가 가능합니다.
정리하는 모든 프로젝트들은 UWP가 아니고 Desktop 튜토리얼이다.
ProjectName : D3D12HelloWindow
ProjectFile : 하단 참조.
윈도우를 띄우고 D3D12를 Init까지 해보는 튜토리얼이다.
처음인만큼 코드가 굴러가는 순서대로 일단 정리해볼 예정.
//*********************************************************
//
//FileName : Main.cpp
//
//*********************************************************
#include "stdafx.h"
#include "D3D12HelloWindow.h"
_Use_decl_annotations_
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)
{
D3D12HelloWindow sample(1280, 720, L"D3D12 Hello Window");
return Win32Application::Run(&sample, hInstance, nCmdShow);
}
짧은 Main문을 보여주고 있다.
간단하게 D3D12HelloWindow class의 sample 객체를 생성해서 생성자에서 Init이 다 돌아가는것으로 보이고
Run돌리고 끝으로 추측....
D3D12HelloWindow class는 하단의 다이어그램과 같다
일단 D3DHelloWindow의 생성자부터 알아보자.
D3D12HelloWindow::D3D12HelloWindow(UINT width, UINT height, std::wstring name) :
DXSample(width, height, name),
m_frameIndex(0),
m_rtvDescriptorSize(0)
{
}
해상도의 가로 세로와 이름을 전달받고 DXSample생성자로 그대로 넘겨버린다.
멤버변수인 m_frameIndex 와 m_rtvDescriptorSize는 동기화 객체(Synchronization objects)에 필요한 변수들이고 모두 0으로 초기화.
동기화 객체는 일단 넘어가고 DXSample의 생성자를 살펴보자.
DXSample::DXSample(UINT width, UINT height, std::wstring name) :
m_width(width),
m_height(height),
m_title(name),
m_useWarpDevice(false)
{
WCHAR assetsPath[512];
GetAssetsPath(assetsPath, _countof(assetsPath));
m_assetsPath = assetsPath;
m_aspectRatio = static_cast(width) / static_cast(height);
}
전달받은 너비 높이 이름을 초기화 해주고
m_useWarpDevice멤버를 false로 해주었는데 m_useWarpDevice는 D3D 초기화를 할때
'하드웨어 그래픽 기능성을 흉내내는 소프트웨어 디스플레이어댑터'로 사용할것인지를 정해줄 flag이다.
결론은 d3d12를 지원하지 않는 하드웨어에서 개발 및 런타임(물론 엄청 느리다)을 사용하고자 할때 true로 해주면 될 것 같다.
생성자에서 WCHAR로 에셋경로를 저장할 변수를 지정해주고 GetAssetPath를 호출하는데.
GetAssetPath는 같은 프로젝트 내의 DXSampleHelper.h에 선언되어 있는 사용자 정의 함수이다.
내부를 간단하게 살펴보면
GetModuleFileName라는 매크로 함수를 호출하는데 이 매크로 함수는 WindowsKit에 포함된 매크로 함수이다. ( libloaderapi.h )
GetModuleFileName의 리턴값은 경로의 길이.
경로저장시 발생하는 예외상황은 여기서 설명하지 않을것.(오버플로우발생이나 경로길이가 없는경우 등등)
경로를 받아와 멤버변수로 저장을 하고.
가로 세로의 값으로 비율을 계산해 저장하고 있다. (가로 / 세로)
생성자에 따로 윈도우 생성 및 d3d생성은 없으니 Run으로 넘어가보자.
다음글로!
'Programing > DirectX' 카테고리의 다른 글
[DirectX12]Hello Wolrd Sample - D3D12HelloWindow - 5 (0) | 2018.04.11 |
---|---|
[DirectX12]Hello Wolrd Sample - D3D12HelloWindow - 4 (0) | 2018.04.08 |
[DirectX12]Hello Wolrd Sample - D3D12HelloWindow - 3 (0) | 2018.04.07 |
[DirectX12]Hello Wolrd Sample - D3D12HelloWindow - 2 (0) | 2018.04.07 |
[DirectX12] DirectX12 개발 준비물 (0) | 2015.07.30 |