1. DirectX 11 Desktop Game
UWP App으로 포팅하기
MS Visual C++ MVP
유영천
@dgtman
http://megayuchi.wordpress.com
Channel 9 발표영상
https://channel9.msdn.com/Blogs/MVPKorea/win32DirectXUWP
2. Desktop Application -> Windows 10 UWP App
• Desktop Application(이하 win32 App)과 Windows Store App(이하 UWP App)은
상당히 많이 다름.
• UWP앱에서 일부 win32 API를 사용할 수 있지만 UI 프로그래밍에서의
공통점은 아예 없다고 봐야…
• win32 app의 UI 코드 비중이 높다면 UWP
app으로의 포팅이 어려움.
3. win32 Game -> UWP Game
• 게임의 코드는 대부분 C/C++.
• 대부분의 게임이 Graphics API로 DirectX 를 사용.
• DirectX API는 99%이상 동일.
• 게임에선 win32 API를 많이 사용하지만 GDI는
거의 사용하지 않음.
• Windows 8/8.1에 비해 Windows 10은 훨씬 많은
win32 API를 사용 가능.게임에서 필요한 win32
API는 대부분 사용 가능.
9. 사용 가능한 win32 API확인
• 사용하고자 하는 함수가 인텔리센스로 확인되지 않으면 Ex를 붙여볼것.
FindFirstFileEx(), WaitForSingleObjectEx()등…
• GDI함수 사용 불가.
• SetCurrentDirectory(), GetCurrentDirectory() 사용 가능
• 지원되지 않는 win32 함수는 내용이 없는 더미
함수를 만들어 일단 컴파일 가능하게 만들어
두면 편하다. MessageBox()등
10. Direct X Feature Level
• 디바이스(GPU)가 DirectX의 어느 버전의 기능을 지원하는지 Feature Level로
구분.
• PC의 경우 Intel HD Graphics 2000이상이면 Feature Level 11은 지원.
• 대부분의 Windows Phone 디바이스는 DirectX Feature Level 9.3까지만 지원.
• Feature Level 9.x의 의미는 실제로는 DirectX
9기기란 뜻.
• Shader 명령어 개수 제한 , 동시 샘플링
텍스쳐 개수 제한, 상수 버퍼 용량 제한, 사용
가능 Shader 명령 제한…모든 기능이 DirectX
9의 사양으로 제한됨.
• Lumia 950/950XL을 제외하고 폰을 지원하려면
DirectX 관련 코드를 2벌 작성해야함
11. Direct X Feature Level 11.x
DX11 Gen PC GPUs,
Mobile GPUs >= Adreno 405
Direct X Feature Level 9.x
DX9 Gen PC GPUs ,
Mobile GPUs < Adreno 405
Engine Common DLLs
Independent to Graphics API
• Graphics API 의존적인 레이어를 분리한다.
• Feature Level 9.x와 11.x 용 DLL을 따로
만든다.
12. Demo
DirectX 11 Game Engine for win32 and UWP(Window 10 ,Windows 10 Mobile)
https://youtu.be/VRRYi_G2zsc
Testing my game engine on Lumia 1520
https://youtu.be/93ObDDnM4Dg
Testing my game engine on Lumia 950
https://youtu.be/jhGya-2Jw6U