C++과 DirectX를 이용한
Windows Universal App
게임 프로그래밍
Visual C++ MVP 유영천
twitter:@dgtman
http:yuchi.net
http://blog.naver.com/shovelmaster
강연 목표
• Win32 + DirectX + C++이 이미 익숙한 프로그래머가
Windows Store App과 Windows Phone포팅을 쉽게 하도록 팁
을 제공한다.
• 자세한 프로그래밍 테크닉은 다루지 않습니다. 개요만…문서보
고 직접 해보세요.
• DirectX 개발경력 있음 ->
이렇게 저렇게 하면 내가 만든 게임을 Windows Store App과 Windows
Phone으로 포팅할 수 있겠군!
• DirectX 사용 경험 없음 ->
저렇게 개발하는 방법도 있구나. 참고지식 습득!
App개발 관점에서 본
Windows 플랫폼별 차이
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++
Photoshop CC Visual Studio 2013
Windows Desktop Applications
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 를 통해서 배포.
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)
XBOX Music Windows Store
Windows Store Apps
Windows Phone 8.1
• 흑역사였던 WinCE를 버리고 NT Kernel로 태어난 MS의 스마트
폰 OS.
• WinRT(Windows Runtime) API를 사용.
• 일부 Win32 API사용 가능.
• DirectX 사용 가능 (C++로만 가능).
• C#,C++,Java Script로 개발.
• Windows Phone Store로 배포.
Windows Phone Store Health App
Windows Phone Apps
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
개발방식에서의 차이
Windows Store App 개발의 간략소개
• Win32API는 대부분 사용하지 못한다.
• WinRT API는 C# , C++ , Java Script를 지원한다.
• DirectX는 C++로만 사용할 수 있다.
• UI체계 XAML UI라고 하는 XAML스크립트를 사용한다.
Windows Store App 개발의 간략소개
• XAML UI와 DirectX를 조합해서 사용하는 것이 가능하다.
• 웬만한 I/O처리는 죄다 비동기. Lambda함수를 적극 활용.
• C/C++ Runtime Library는 대체로 사용 가능하나 I/O함수는 제한
적, Process,Thread쪽 함수들 사용 불가.
• HTTP클라이언트 기반의 앱이라면 매우 쉽게 만들 수 있
다.(Youtube앱이 난립하는 이유)
• WinPRT를 사용.기본적으로는 WinRT용 코드를 거의 그대로 사용
할 수 있다.
• WinRT의 제약사항 + WinPRT의 제약사항을 가지고 있다.
• XAML UI는 C#만을 지원한다.C++ 사용 불가.
• XAML UI를 C#으로 작성하고 DirectX코드를 C++로 작성하는 방
법이 있는데 굉장히 꿀꿀하다. MS에서도 별로 권장하진 않는것
같다.
• 사실상 게임 개발은 C++, 일반앱은 C#으로 작성해야한다.
Windows Phone 8 개발의 간략소개
• WinPRT를 사용.기본적으로는 WinRT용 코드를 거의 그대로 사용
할 수 있다.
• WinRT의 제약사항 + WinPRT의 제약사항을 가지고 있다.
• XAML UI는 C#만을 지원한다.C++ 사용 불가.
• XAML UI를 C#으로 작성하고 DirectX코드를 C++로 작성하는 방
법이 있는데 굉장히 꿀꿀하다. MS에서도 별로 권장하진 않는것
같다.
• 사실상 게임 개발은 C++, 일반앱은 C#으로 작성해야한다.
Windows Phone 8 개발의 간략소개
이제 필요없음!!!
• 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
Universal App
OneDrivePlayer for Windows Phone OneDrivePlayer for Windows Store App
Universal App 의 허와 실
• Universal App이라도 XAML UI는 따로 만들어야 한다.
• 일반앱의 경우 XAML UI개발이 전체 작업량의 절반 이상인 경
우도 많다. -> 메리트 없다-_-;
• 게임은 UI를 게임 자체적으로 제공한다.
• XAML UI를 거의 사용하지 않는다. -> Universal App으로 개발
하는 것이 이득.
• New 프로젝트 에서 유니버셜앱을 선택하는것만으로 만사 OK!
Universal App 프로젝트 만들기
• 프로젝트 생성시 Universal App 을 선택하는것만으로 OK!
Windows Store App을 위한 소스 및
리소스 파일을 추가
Windows Phone App을 위한 소스 및
리소스 파일을 추가
공용으로 사용할 소스 및 리소스 파
일을 추가
WinRT + DirectX로 게임개발
• 자체 엔진 개발과 같은 얘기.
• 상용엔진 있는데 뭣하러? -> 오늘의 주제가 아닙니다.
• C++/CX로 개발. DirectX는 C++로만 제어 가능. C#으로 불가능.
• DirectX 11로 개발. DirectX 9랑 많이 다릅니다.
• OpenGL 사용 불가.
WinRT 개발의 장애물
• C++/CX ->들어는 보셨나…?
• 대부분의 Win32 API 사용불가.
• C/C++ Runtime Library의 반쪽 지원.
• API는 DX11이지만 HW는 DX11은 지원 못하는 경우가 대부분.
• 폴더별 억세스 제한.
C++/CX
• C++11의 일부기능을 추가한 MS의 C++확장
• COM기반. 그러나 AddRef(),Release()는 사용하지 않는다. 컴파일러가 알아
서 넣어줌.
• 처음엔 굉장히 부담스럽지만 익숙해지면 참을만함.
• 게임 코드 및 엔진 코드에선 사용할 일 없음.
• 패스워드 입력, 텍스트 표시 등 XAML UI와 게임화면의 상호작용을 위해서
사용
• 터치입력, 네트워크 처리 정도에 사용.
C++/CX example
DirectX on WinRT
• DirectX 11사용
• 대부분의 ARM 디바이스들은 Feature Level 9.x만 지원.
• 런타임에 Shader컴파일 불가. 컴파일된 바이너리만 사용가능.
• D3DX사용 불가. 대신 DirectXTex 사용
(http://directxtex.codeplex.com/)
• SwapChain생성부가 Desktop버전과 다름. 그 외에는 거의 동일.
• Xinput사용가능->XBOX360 Controller도 사용 가능.
DirectX on WinRT @ Windows Phone
• WinRT버전의 모든 제약사항을 포함
• Windows Phone 8에는 D2D와 DWRITE사용불가, 8.1에선 사용
가능!!!!
• Xinput사용 불가 -> Hardware Controller지원 안됨.
• 그 외에는 Windows 8.1과 동일
Shader
• HLSL사용
• 실시간 컴파일 불가. 컴파일된 바이너리만 사용가능.
• SM2.0을 사용해도 되지만 코드호환성을 위해 4.0 level 9 사용을 권
장.
• FXC로 컴파일시 vs_4_0_level_9옵션을 준다.
• Visual Studio에서 컴파일 가능하지만 다양한 옵션을 위해서는 옵션
조합에 따라 개별 바이너리들로 컴파일해서 사용하는게 좋다.
Windows Phone 에서 Shader사용 예
1. Windows Store App x86/x64 debug버전으로부터 런타임시
Shader컴파일 -> Shader 캐시파일 생성.
2. Shader 캐시파일 -> Windows Phone 프로젝트에 content로
추가.
3. Windows Phone 렌더러에서는 실시간 컴파일 하지 않고
shader cache파일로부터 shader생성.
Windows Phone 에서의 D3D성능
• 안드로이드만큼 파편화가 심하지는 않다. Qualcom의 AP사용.
• GPU는 대체로 adreno 225 - 330.
• 속도는 생각보다 빠른 편.
• .DDS파일 그대로 사용할 수 있다.
• 2048*2048 텍스쳐도 읽어들인다.
Network Programming on WinRT
• WinRT에서는 winsock사용 불가(-_-)
• Windows Phone 에서는 winsock사용 가능
• 어차피 WinRT로 개발할거니까 winsock안쓴다.-_-;
• Windows::Networking::Sockets::StreamSocket를 사용한다.
Network Programming on WinRT
• 모든 I/O는 비동기 처리
 SOCKET -> Windows::Networking::Sockets::StreamSocket
 Send -> Windows::Storage::Streams::DataWriter
 Recv -> Windows::Storage::Stremas::DataReader
소켓 생성
비동기 패킷 수신
비동기 패킷 전송
Asset추가
• Asset들은 프로젝트에 포함시키고 Property에서 Contents항목
을 true로 체크해준다.
Asset 폴더구조
• 계층구조는 가지지만 상위 폴더와 하위 폴더를 오가는건 불가
능.
• chgDir(), SetCurrentDirectory(), GetCurrentDirectory() 사용 불
가. -> 엄청나게 치명적이다.
Asset 폴더구조
저장공간
• 앱이 인스톨된 폴더에는 쓰기 불가.
• Windows Store App과 Windows Phone 모두 Local Storage라
고 하는 영역을 제공. 쓰기는 이 곳에.
-> C:usersAppDataLocalPackagesAppIDLocalState
• 지정된 폴더와 App폴더 바깥의 파일을 억세스하려면 FilePicker
를 사용해야함.(자막 자동으로 읽어주는 동영상 플레이어가 없
는 이유)
Debugging
Debugging
• Crt Heap함수들은 모두 정상 작동한다.
• App종료 개념이 없다. 따라서 Heap Corruption과 Memory
Leak 체크를 해야할 타이밍이 모호하다.
• 임의로 종료 시점을 정의하자.
• Debugger가 붙어있는 경우 Suspend 이벤트를 종료 이벤트로
간주하기로 하자.
• 여기서 Cleanup을 수행하고 Memory Leak체크 및 Heap
Corruption체크를 한다.
Suspend시점에 Cleanup
COM객체의 Reference Count확인
• DX 객체들처럼 IUnknown이면 아래처럼…(x86기준)
^타입 COM객체의 Reference Count확인
• ^타입은 내부적으로 Iinspectable : IUnknown객체이다.
• 아래처럼 IUnknown포인터를 얻을 수 있다
• IUnknown을 얻으면 Reference Count확인 가능
D3D Resource Leak체크
• D3DDevice11객체의 Reference Count가 0이 되는지 확인. 0이 아
니면 해제되지 않은 리소스가 존재함.
개발 TIP
• Windows Desktop 버전으로 먼저 개발한다. 그 다음 WinRT로
포팅
• WinRT는 Current Path라는 개념 자체가 없으므로 Relative Path
를 저장할 자료구조를 만드는게 좋다. (./ , ../ 등…)
• 지원되지 않는 Win32용함수와 데이터 타입의 경우 똑같은 이름
의 함수와 데이터타입을 정의해둔다.
Ex)
GetClientRect()함수와 HWND는 WinRT API에선 정
의되지 않는다.
포팅을 용이하게 하기 위해 비슷한 기능을 하도록
만들거나 껍데기만 만들어둔다.
점진적인 포팅
• Windows Desktop DX9 & DX11에서 시작
• Win32API는 대부분 걷어내야함.
• 굉장히 먼 길 같지만 Desktop DX9-> DX11로 포팅하는것만으
로도 절반은 완료. 절반 가는데 얼마 걸리려나…
• Window Desktop -> WinRT까지 도달했다면 iOS포팅도 어렵지
않음.
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
Windows Desktop -> Windows Store
App & Windows Phone
• 개발했던 PC용 MMORPG를 Desktop DX9 -> Desktop DX11 ->
Windows Store App & Windows Phone으로 포팅했음.
• 네트워크 연동한 플레이 가능.
• http://youtu.be/iZkxorgAxcg
시연 – (가칭)VOXEL HORIZON
Reference
• http://channel9.msdn.com/Series/Introduction-to-C-and-
DirectX-Game-Development
• Modern C++ and Windows Store Apps. Sridhar Poduri
• http://developer.windowsphone.com/

DirectX + C++을 이용한 WindowsStore App과 Windows Phone용 게임 개발

  • 1.
    C++과 DirectX를 이용한 WindowsUniversal App 게임 프로그래밍 Visual C++ MVP 유영천 twitter:@dgtman http:yuchi.net http://blog.naver.com/shovelmaster
  • 2.
    강연 목표 • Win32+ DirectX + C++이 이미 익숙한 프로그래머가 Windows Store App과 Windows Phone포팅을 쉽게 하도록 팁 을 제공한다. • 자세한 프로그래밍 테크닉은 다루지 않습니다. 개요만…문서보 고 직접 해보세요.
  • 3.
    • DirectX 개발경력있음 -> 이렇게 저렇게 하면 내가 만든 게임을 Windows Store App과 Windows Phone으로 포팅할 수 있겠군! • DirectX 사용 경험 없음 -> 저렇게 개발하는 방법도 있구나. 참고지식 습득!
  • 4.
  • 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++
  • 6.
    Photoshop CC VisualStudio 2013 Windows Desktop Applications
  • 7.
    Windows 8 orLater • 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 • Windows8/8.1의 ARM 버전. • Windows RT는 내부적으로 Win32(MFC포함)와 .NET을 완전히 지원하지만 정책적으로 외부에서의 개발을 차단. 컴파일만 다시 하면 기존 Windows Desktop App도 돌아감. • 공식적으로는 WinRT App앱만 개발가능 • C++ / Java Script/ C#으로 개발 가능. • Windows Store 를 통해서 배포. • 최근 사실상 사망선고가 내려짐.(100만원 주고 산 내 Surface RT는…T_T)
  • 9.
    XBOX Music WindowsStore Windows Store Apps
  • 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로 배포.
  • 11.
    Windows Phone StoreHealth App Windows Phone Apps
  • 12.
    Platform CPU OSAPI 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
  • 18.
    Universal App OneDrivePlayer forWindows Phone OneDrivePlayer for Windows Store App
  • 19.
    Universal App 의허와 실 • Universal App이라도 XAML UI는 따로 만들어야 한다. • 일반앱의 경우 XAML UI개발이 전체 작업량의 절반 이상인 경 우도 많다. -> 메리트 없다-_-; • 게임은 UI를 게임 자체적으로 제공한다. • XAML UI를 거의 사용하지 않는다. -> Universal App으로 개발 하는 것이 이득. • New 프로젝트 에서 유니버셜앱을 선택하는것만으로 만사 OK!
  • 20.
    Universal App 프로젝트만들기 • 프로젝트 생성시 Universal App 을 선택하는것만으로 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와 게임화면의 상호작용을 위해서 사용 • 터치입력, 네트워크 처리 정도에 사용.
  • 25.
  • 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 onWinRT • WinRT에서는 winsock사용 불가(-_-) • Windows Phone 에서는 winsock사용 가능 • 어차피 WinRT로 개발할거니까 winsock안쓴다.-_-; • Windows::Networking::Sockets::StreamSocket를 사용한다.
  • 32.
    Network Programming onWinRT • 모든 I/O는 비동기 처리  SOCKET -> Windows::Networking::Sockets::StreamSocket  Send -> Windows::Storage::Streams::DataWriter  Recv -> Windows::Storage::Stremas::DataReader
  • 33.
  • 34.
  • 35.
  • 36.
    Asset추가 • Asset들은 프로젝트에포함시키고 Property에서 Contents항목 을 true로 체크해준다.
  • 37.
    Asset 폴더구조 • 계층구조는가지지만 상위 폴더와 하위 폴더를 오가는건 불가 능. • chgDir(), SetCurrentDirectory(), GetCurrentDirectory() 사용 불 가. -> 엄청나게 치명적이다.
  • 38.
  • 39.
    저장공간 • 앱이 인스톨된폴더에는 쓰기 불가. • Windows Store App과 Windows Phone 모두 Local Storage라 고 하는 영역을 제공. 쓰기는 이 곳에. -> C:usersAppDataLocalPackagesAppIDLocalState • 지정된 폴더와 App폴더 바깥의 파일을 억세스하려면 FilePicker 를 사용해야함.(자막 자동으로 읽어주는 동영상 플레이어가 없 는 이유)
  • 40.
  • 41.
    Debugging • Crt Heap함수들은모두 정상 작동한다. • App종료 개념이 없다. 따라서 Heap Corruption과 Memory Leak 체크를 해야할 타이밍이 모호하다. • 임의로 종료 시점을 정의하자. • Debugger가 붙어있는 경우 Suspend 이벤트를 종료 이벤트로 간주하기로 하자. • 여기서 Cleanup을 수행하고 Memory Leak체크 및 Heap Corruption체크를 한다.
  • 42.
  • 43.
    COM객체의 Reference Count확인 •DX 객체들처럼 IUnknown이면 아래처럼…(x86기준)
  • 44.
    ^타입 COM객체의 ReferenceCount확인 • ^타입은 내부적으로 Iinspectable : IUnknown객체이다. • 아래처럼 IUnknown포인터를 얻을 수 있다 • IUnknown을 얻으면 Reference Count확인 가능
  • 45.
    D3D Resource Leak체크 •D3DDevice11객체의 Reference Count가 0이 되는지 확인. 0이 아 니면 해제되지 않은 리소스가 존재함.
  • 46.
    개발 TIP • WindowsDesktop 버전으로 먼저 개발한다. 그 다음 WinRT로 포팅 • WinRT는 Current Path라는 개념 자체가 없으므로 Relative Path 를 저장할 자료구조를 만드는게 좋다. (./ , ../ 등…) • 지원되지 않는 Win32용함수와 데이터 타입의 경우 똑같은 이름 의 함수와 데이터타입을 정의해둔다.
  • 47.
    Ex) GetClientRect()함수와 HWND는 WinRTAPI에선 정 의되지 않는다. 포팅을 용이하게 하기 위해 비슷한 기능을 하도록 만들거나 껍데기만 만들어둔다.
  • 48.
    점진적인 포팅 • WindowsDesktop DX9 & DX11에서 시작 • Win32API는 대부분 걷어내야함. • 굉장히 먼 길 같지만 Desktop DX9-> DX11로 포팅하는것만으 로도 절반은 완료. 절반 가는데 얼마 걸리려나… • Window Desktop -> WinRT까지 도달했다면 iOS포팅도 어렵지 않음.
  • 49.
    Windows Desktop DX9 Windows Desktop DX11 WinStore 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
  • 51.
  • 52.
    Reference • http://channel9.msdn.com/Series/Introduction-to-C-and- DirectX-Game-Development • ModernC++ and Windows Store Apps. Sridhar Poduri • http://developer.windowsphone.com/