5. Windows Desktop
• 모든 x86용 Windows버전
• Windows 2000/XP/2003 Server -> NT 5.x
• Windows Vista/7/8/8.1 -> NT 6.x
• Win32 API , .NET 사용
• DirectX, OpenGL 사용
• 흔히 말하는 PC게임은 모두 Windows Desktop용 게임.
• 게임 프로젝트라면 일반적으로 Win32 + DirectX + C++
7. Windows 8 or Later
• Windows 8/8.1 , Windows Server 2012/2012R2
• 기존 Windows API 그대로 지원 (Win32, WPF등)
• 통칭 WinRT(Windows Runtime)이라 부르는 API탑재.
• Windows 8/8.1/Windows RT용 앱은 공식적으로 Windows
Store App으로 칭함.
• C++ / Java Script/ C#으로 개발 가능.
• Windows Store 를 통해서 배포.
8. Windows RT
• Windows 8/8.1의 ARM 버전.
• Windows RT는 내부적으로 Win32(MFC포함)와 .NET을 완전히
지원하지만 정책적으로 외부에서의 개발을 차단. 컴파일만 다시
하면 기존 Windows Desktop App도 돌아감.
• 공식적으로는 WinRT App앱만 개발가능
• C++ / Java Script/ C#으로 개발 가능.
• Windows Store 를 통해서 배포.
• 최근 사실상 사망선고가 내려짐.(100만원 주고 산 내 Surface
RT는…T_T)
10. Windows Phone 8.1
• 흑역사였던 WinCE를 버리고 NT Kernel로 태어난 MS의 스마트
폰 OS.
• WinRT(Windows Runtime) API를 사용.
• 일부 Win32 API사용 가능.
• DirectX 사용 가능 (C++로만 가능).
• C#,C++,Java Script로 개발.
• Windows Phone Store로 배포.
12. Platform CPU OS API Tool Language Debugging Type
Windows Desktop x86,x64 Windows 95 ~ Win32,
.NET,
DirectX 9,
DirectX 11
Visual Studio(All) C/C++
C#
Local ,
Remote-LAN
Windows Store
App
x86,x64,
ARM
Windows RT,
Windows 8 ~
Windows Server
2012~
WinRT
DirectX 11
Visual Studio 2012/2013 C++/CX ,
C# ,
Java Script
Local ,
Hyper-V Simulator ,
Remote-LAN
Windows Phone
8.1
ARM Windows Phone 8.1 WinRT,
Winsock,
DirectX 11
Visual Studio 2012/2013 C++/CX ,
C#
Hyper-V Emulator ,
Remote-
USB Cable
iOS ARM iOS COCOA
Touch,
OpenGL ES
XCode Objective C ,
C/C++
Remote-
USB Cable
개발방식에서의 차이
13. Windows Store App 개발의 간략소개
• Win32API는 대부분 사용하지 못한다.
• WinRT API는 C# , C++ , Java Script를 지원한다.
• DirectX는 C++로만 사용할 수 있다.
• UI체계 XAML UI라고 하는 XAML스크립트를 사용한다.
14. Windows Store App 개발의 간략소개
• XAML UI와 DirectX를 조합해서 사용하는 것이 가능하다.
• 웬만한 I/O처리는 죄다 비동기. Lambda함수를 적극 활용.
• C/C++ Runtime Library는 대체로 사용 가능하나 I/O함수는 제한
적, Process,Thread쪽 함수들 사용 불가.
• HTTP클라이언트 기반의 앱이라면 매우 쉽게 만들 수 있
다.(Youtube앱이 난립하는 이유)
15. • WinPRT를 사용.기본적으로는 WinRT용 코드를 거의 그대로 사용
할 수 있다.
• WinRT의 제약사항 + WinPRT의 제약사항을 가지고 있다.
• XAML UI는 C#만을 지원한다.C++ 사용 불가.
• XAML UI를 C#으로 작성하고 DirectX코드를 C++로 작성하는 방
법이 있는데 굉장히 꿀꿀하다. MS에서도 별로 권장하진 않는것
같다.
• 사실상 게임 개발은 C++, 일반앱은 C#으로 작성해야한다.
Windows Phone 8 개발의 간략소개
16. • WinPRT를 사용.기본적으로는 WinRT용 코드를 거의 그대로 사용
할 수 있다.
• WinRT의 제약사항 + WinPRT의 제약사항을 가지고 있다.
• XAML UI는 C#만을 지원한다.C++ 사용 불가.
• XAML UI를 C#으로 작성하고 DirectX코드를 C++로 작성하는 방
법이 있는데 굉장히 꿀꿀하다. MS에서도 별로 권장하진 않는것
같다.
• 사실상 게임 개발은 C++, 일반앱은 C#으로 작성해야한다.
Windows Phone 8 개발의 간략소개
이제 필요없음!!!
17. • Windows 8.1과 Windows Phone 8.1은 API가 WinRT로 통합됨
• Windows Phone 8.1의 WinRT는 Windows 8.1의 WinRT를 95%이
상 지원함.
• 따라서 동일 코드로 Windows Store App과 Windows Phone을 함
께 지원하는것이 가능함.
• XAML UI를 제외하고 대부분의 코드를 공유할 수 있다.
• 정확히는….Windows Store앱 개발이 베이스가 되고 Windows
Phone으로의 포팅이 쉬워짐.
Universal App
19. Universal App 의 허와 실
• Universal App이라도 XAML UI는 따로 만들어야 한다.
• 일반앱의 경우 XAML UI개발이 전체 작업량의 절반 이상인 경
우도 많다. -> 메리트 없다-_-;
• 게임은 UI를 게임 자체적으로 제공한다.
• XAML UI를 거의 사용하지 않는다. -> Universal App으로 개발
하는 것이 이득.
• New 프로젝트 에서 유니버셜앱을 선택하는것만으로 만사 OK!
21. Windows Store App을 위한 소스 및
리소스 파일을 추가
Windows Phone App을 위한 소스 및
리소스 파일을 추가
공용으로 사용할 소스 및 리소스 파
일을 추가
22. WinRT + DirectX로 게임개발
• 자체 엔진 개발과 같은 얘기.
• 상용엔진 있는데 뭣하러? -> 오늘의 주제가 아닙니다.
• C++/CX로 개발. DirectX는 C++로만 제어 가능. C#으로 불가능.
• DirectX 11로 개발. DirectX 9랑 많이 다릅니다.
• OpenGL 사용 불가.
23. WinRT 개발의 장애물
• C++/CX ->들어는 보셨나…?
• 대부분의 Win32 API 사용불가.
• C/C++ Runtime Library의 반쪽 지원.
• API는 DX11이지만 HW는 DX11은 지원 못하는 경우가 대부분.
• 폴더별 억세스 제한.
24. C++/CX
• C++11의 일부기능을 추가한 MS의 C++확장
• COM기반. 그러나 AddRef(),Release()는 사용하지 않는다. 컴파일러가 알아
서 넣어줌.
• 처음엔 굉장히 부담스럽지만 익숙해지면 참을만함.
• 게임 코드 및 엔진 코드에선 사용할 일 없음.
• 패스워드 입력, 텍스트 표시 등 XAML UI와 게임화면의 상호작용을 위해서
사용
• 터치입력, 네트워크 처리 정도에 사용.
26. DirectX on WinRT
• DirectX 11사용
• 대부분의 ARM 디바이스들은 Feature Level 9.x만 지원.
• 런타임에 Shader컴파일 불가. 컴파일된 바이너리만 사용가능.
• D3DX사용 불가. 대신 DirectXTex 사용
(http://directxtex.codeplex.com/)
• SwapChain생성부가 Desktop버전과 다름. 그 외에는 거의 동일.
• Xinput사용가능->XBOX360 Controller도 사용 가능.
27. DirectX on WinRT @ Windows Phone
• WinRT버전의 모든 제약사항을 포함
• Windows Phone 8에는 D2D와 DWRITE사용불가, 8.1에선 사용
가능!!!!
• Xinput사용 불가 -> Hardware Controller지원 안됨.
• 그 외에는 Windows 8.1과 동일
28. Shader
• HLSL사용
• 실시간 컴파일 불가. 컴파일된 바이너리만 사용가능.
• SM2.0을 사용해도 되지만 코드호환성을 위해 4.0 level 9 사용을 권
장.
• FXC로 컴파일시 vs_4_0_level_9옵션을 준다.
• Visual Studio에서 컴파일 가능하지만 다양한 옵션을 위해서는 옵션
조합에 따라 개별 바이너리들로 컴파일해서 사용하는게 좋다.
29. Windows Phone 에서 Shader사용 예
1. Windows Store App x86/x64 debug버전으로부터 런타임시
Shader컴파일 -> Shader 캐시파일 생성.
2. Shader 캐시파일 -> Windows Phone 프로젝트에 content로
추가.
3. Windows Phone 렌더러에서는 실시간 컴파일 하지 않고
shader cache파일로부터 shader생성.
30. Windows Phone 에서의 D3D성능
• 안드로이드만큼 파편화가 심하지는 않다. Qualcom의 AP사용.
• GPU는 대체로 adreno 225 - 330.
• 속도는 생각보다 빠른 편.
• .DDS파일 그대로 사용할 수 있다.
• 2048*2048 텍스쳐도 읽어들인다.
31. Network Programming on WinRT
• WinRT에서는 winsock사용 불가(-_-)
• Windows Phone 에서는 winsock사용 가능
• 어차피 WinRT로 개발할거니까 winsock안쓴다.-_-;
• Windows::Networking::Sockets::StreamSocket를 사용한다.
32. Network Programming on WinRT
• 모든 I/O는 비동기 처리
SOCKET -> Windows::Networking::Sockets::StreamSocket
Send -> Windows::Storage::Streams::DataWriter
Recv -> Windows::Storage::Stremas::DataReader
39. 저장공간
• 앱이 인스톨된 폴더에는 쓰기 불가.
• Windows Store App과 Windows Phone 모두 Local Storage라
고 하는 영역을 제공. 쓰기는 이 곳에.
-> C:usersAppDataLocalPackagesAppIDLocalState
• 지정된 폴더와 App폴더 바깥의 파일을 억세스하려면 FilePicker
를 사용해야함.(자막 자동으로 읽어주는 동영상 플레이어가 없
는 이유)
41. Debugging
• Crt Heap함수들은 모두 정상 작동한다.
• App종료 개념이 없다. 따라서 Heap Corruption과 Memory
Leak 체크를 해야할 타이밍이 모호하다.
• 임의로 종료 시점을 정의하자.
• Debugger가 붙어있는 경우 Suspend 이벤트를 종료 이벤트로
간주하기로 하자.
• 여기서 Cleanup을 수행하고 Memory Leak체크 및 Heap
Corruption체크를 한다.
44. ^타입 COM객체의 Reference Count확인
• ^타입은 내부적으로 Iinspectable : IUnknown객체이다.
• 아래처럼 IUnknown포인터를 얻을 수 있다
• IUnknown을 얻으면 Reference Count확인 가능
45. D3D Resource Leak체크
• D3DDevice11객체의 Reference Count가 0이 되는지 확인. 0이 아
니면 해제되지 않은 리소스가 존재함.
46. 개발 TIP
• Windows Desktop 버전으로 먼저 개발한다. 그 다음 WinRT로
포팅
• WinRT는 Current Path라는 개념 자체가 없으므로 Relative Path
를 저장할 자료구조를 만드는게 좋다. (./ , ../ 등…)
• 지원되지 않는 Win32용함수와 데이터 타입의 경우 똑같은 이름
의 함수와 데이터타입을 정의해둔다.
48. 점진적인 포팅
• Windows Desktop DX9 & DX11에서 시작
• Win32API는 대부분 걷어내야함.
• 굉장히 먼 길 같지만 Desktop DX9-> DX11로 포팅하는것만으
로도 절반은 완료. 절반 가는데 얼마 걸리려나…
• Window Desktop -> WinRT까지 도달했다면 iOS포팅도 어렵지
않음.
49. Windows Desktop
DX9
Windows Desktop
DX11
Win Store App
DX11
Windows Phone
DX11
iOS & Android
• DX9 API -> DX11 API
• SM2.0 -> SM4.0/5.0
• SwapChain코드 수정
• Win32API제거
• Shader Pre-Compile
• Message처리 코드 수정
• 입력장치 맞춰서 코드 수정
• DirectX -> OpenGL ES
• Message처리 수정
• .DDS textures-> .PVR, .ETC textures
• DirectWrite Font -> COCOA UI Font
50. Windows Desktop -> Windows Store
App & Windows Phone
• 개발했던 PC용 MMORPG를 Desktop DX9 -> Desktop DX11 ->
Windows Store App & Windows Phone으로 포팅했음.
• 네트워크 연동한 플레이 가능.
• http://youtu.be/iZkxorgAxcg