SlideShare a Scribd company logo
1 of 52
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/

More Related Content

What's hot

나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
취미로 엔진 만들기
취미로 엔진 만들기취미로 엔진 만들기
취미로 엔진 만들기Jiho Choi
 
서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기YEONG-CHEON YOU
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9진현 조
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)Bongseok Cho
 
리얼타임 렌더링에 대해
리얼타임 렌더링에 대해리얼타임 렌더링에 대해
리얼타임 렌더링에 대해필성 권
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기YEONG-CHEON YOU
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유Hwan Min
 
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013devCAT Studio, NEXON
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법YEONG-CHEON YOU
 
Direct x 11 입문
Direct x 11 입문Direct x 11 입문
Direct x 11 입문Jin Woo Lee
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기Jaeseung Ha
 
[IGC 2017] 오토데스크 박준석 - 3ds Max 2018과 Shotgun을 이용한 게임 제작 Pipeline 소개
[IGC 2017] 오토데스크 박준석 - 3ds Max 2018과 Shotgun을 이용한 게임 제작 Pipeline 소개[IGC 2017] 오토데스크 박준석 - 3ds Max 2018과 Shotgun을 이용한 게임 제작 Pipeline 소개
[IGC 2017] 오토데스크 박준석 - 3ds Max 2018과 Shotgun을 이용한 게임 제작 Pipeline 소개강 민우
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012devCAT Studio, NEXON
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화Jongwon Kim
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Minsu Park
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드
[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드
[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드강 민우
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성noerror
 

What's hot (20)

나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
취미로 엔진 만들기
취미로 엔진 만들기취미로 엔진 만들기
취미로 엔진 만들기
 
서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
 
리얼타임 렌더링에 대해
리얼타임 렌더링에 대해리얼타임 렌더링에 대해
리얼타임 렌더링에 대해
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유
 
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
 
Direct x 11 입문
Direct x 11 입문Direct x 11 입문
Direct x 11 입문
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
 
[IGC 2017] 오토데스크 박준석 - 3ds Max 2018과 Shotgun을 이용한 게임 제작 Pipeline 소개
[IGC 2017] 오토데스크 박준석 - 3ds Max 2018과 Shotgun을 이용한 게임 제작 Pipeline 소개[IGC 2017] 오토데스크 박준석 - 3ds Max 2018과 Shotgun을 이용한 게임 제작 Pipeline 소개
[IGC 2017] 오토데스크 박준석 - 3ds Max 2018과 Shotgun을 이용한 게임 제작 Pipeline 소개
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드
[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드
[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성
 

Viewers also liked

게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법Chris Ohk
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 
Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayYEONG-CHEON YOU
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 
[UNITE2014] 개발과 출시 경험에 대한 이야기
[UNITE2014] 개발과 출시 경험에 대한 이야기[UNITE2014] 개발과 출시 경험에 대한 이야기
[UNITE2014] 개발과 출시 경험에 대한 이야기형석 서
 
C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부Gwangwhi Mah
 
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로Jaeseung Ha
 
[스마트스터디] 재택근무 잘 하고 있어요
[스마트스터디] 재택근무 잘 하고 있어요[스마트스터디] 재택근무 잘 하고 있어요
[스마트스터디] 재택근무 잘 하고 있어요Hyekyoung Yun
 
Python과 flask 입문(1)
Python과 flask 입문(1)Python과 flask 입문(1)
Python과 flask 입문(1)성천 이
 
스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기Hyun-woo Park
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵중선 곽
 
C#으로 게임 엔진 만들기(3)
C#으로 게임 엔진 만들기(3)C#으로 게임 엔진 만들기(3)
C#으로 게임 엔진 만들기(3)지환 김
 
Json for modern c++
Json for modern c++Json for modern c++
Json for modern c++지환 김
 
C#으로 게임 엔진 만들기(2)
C#으로 게임 엔진 만들기(2)C#으로 게임 엔진 만들기(2)
C#으로 게임 엔진 만들기(2)지환 김
 
C#으로 게임 엔진 만들기(1)
C#으로 게임 엔진 만들기(1)C#으로 게임 엔진 만들기(1)
C#으로 게임 엔진 만들기(1)지환 김
 

Viewers also liked (16)

게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture Array
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
[UNITE2014] 개발과 출시 경험에 대한 이야기
[UNITE2014] 개발과 출시 경험에 대한 이야기[UNITE2014] 개발과 출시 경험에 대한 이야기
[UNITE2014] 개발과 출시 경험에 대한 이야기
 
C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부
 
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
 
[스마트스터디] 재택근무 잘 하고 있어요
[스마트스터디] 재택근무 잘 하고 있어요[스마트스터디] 재택근무 잘 하고 있어요
[스마트스터디] 재택근무 잘 하고 있어요
 
Python과 flask 입문(1)
Python과 flask 입문(1)Python과 flask 입문(1)
Python과 flask 입문(1)
 
스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵
 
C#으로 게임 엔진 만들기(3)
C#으로 게임 엔진 만들기(3)C#으로 게임 엔진 만들기(3)
C#으로 게임 엔진 만들기(3)
 
Json for modern c++
Json for modern c++Json for modern c++
Json for modern c++
 
C#으로 게임 엔진 만들기(2)
C#으로 게임 엔진 만들기(2)C#으로 게임 엔진 만들기(2)
C#으로 게임 엔진 만들기(2)
 
C#으로 게임 엔진 만들기(1)
C#으로 게임 엔진 만들기(1)C#으로 게임 엔진 만들기(1)
C#으로 게임 엔진 만들기(1)
 
Easyloggingpp
EasyloggingppEasyloggingpp
Easyloggingpp
 

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

[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)Sang Don Kim
 
[NDC17] Protocol:hyperspace Diver 개발 포스트모템
[NDC17] Protocol:hyperspace Diver 개발 포스트모템[NDC17] Protocol:hyperspace Diver 개발 포스트모템
[NDC17] Protocol:hyperspace Diver 개발 포스트모템Young Soo Kim
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍NDOORS
 
[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)
[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)
[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)Sang Don Kim
 
Visual studio 사용 설명서(기초 과정)
Visual studio 사용 설명서(기초 과정)Visual studio 사용 설명서(기초 과정)
Visual studio 사용 설명서(기초 과정)Lusain Kim
 
01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기jaypi Ko
 
[Td 2015]70분에 보여준다. 웹표준을 지원하는 edge 브라우저부터 웹 앱 개발까지(김영욱)
[Td 2015]70분에 보여준다. 웹표준을 지원하는 edge 브라우저부터 웹 앱 개발까지(김영욱)[Td 2015]70분에 보여준다. 웹표준을 지원하는 edge 브라우저부터 웹 앱 개발까지(김영욱)
[Td 2015]70분에 보여준다. 웹표준을 지원하는 edge 브라우저부터 웹 앱 개발까지(김영욱)Sang Don Kim
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자Sewon Ann
 
Windows phone 7 part i
Windows phone 7 part iWindows phone 7 part i
Windows phone 7 part i권 태혁
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)Sang Don Kim
 
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템강 민우
 
RAD스튜디오 100% 활용하기
RAD스튜디오 100% 활용하기 RAD스튜디오 100% 활용하기
RAD스튜디오 100% 활용하기 Devgear
 
CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)DONGSU KIM
 
GDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteGDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteSeok-yong Kim
 
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)Sang Don Kim
 
웹:앱 기술 동향
웹:앱 기술 동향웹:앱 기술 동향
웹:앱 기술 동향ssuser0e53c8
 
Social game and windows azure platform (final)
Social game and windows azure platform (final)Social game and windows azure platform (final)
Social game and windows azure platform (final)정현 남
 
win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기YEONG-CHEON YOU
 
게임프로그래밍입문 2주차
게임프로그래밍입문 2주차게임프로그래밍입문 2주차
게임프로그래밍입문 2주차Yeonah Ki
 

Similar to DirectX + C++을 이용한 WindowsStore App과 Windows Phone용 게임 개발 (20)

[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
 
[NDC17] Protocol:hyperspace Diver 개발 포스트모템
[NDC17] Protocol:hyperspace Diver 개발 포스트모템[NDC17] Protocol:hyperspace Diver 개발 포스트모템
[NDC17] Protocol:hyperspace Diver 개발 포스트모템
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
 
[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)
[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)
[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)
 
Visual studio 사용 설명서(기초 과정)
Visual studio 사용 설명서(기초 과정)Visual studio 사용 설명서(기초 과정)
Visual studio 사용 설명서(기초 과정)
 
01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기
 
[Td 2015]70분에 보여준다. 웹표준을 지원하는 edge 브라우저부터 웹 앱 개발까지(김영욱)
[Td 2015]70분에 보여준다. 웹표준을 지원하는 edge 브라우저부터 웹 앱 개발까지(김영욱)[Td 2015]70분에 보여준다. 웹표준을 지원하는 edge 브라우저부터 웹 앱 개발까지(김영욱)
[Td 2015]70분에 보여준다. 웹표준을 지원하는 edge 브라우저부터 웹 앱 개발까지(김영욱)
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
Windows phone 7 part i
Windows phone 7 part iWindows phone 7 part i
Windows phone 7 part i
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
 
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
 
RAD스튜디오 100% 활용하기
RAD스튜디오 100% 활용하기 RAD스튜디오 100% 활용하기
RAD스튜디오 100% 활용하기
 
CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)
 
GDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteGDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's Note
 
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
 
웹:앱 기술 동향
웹:앱 기술 동향웹:앱 기술 동향
웹:앱 기술 동향
 
Social game and windows azure platform (final)
Social game and windows azure platform (final)Social game and windows azure platform (final)
Social game and windows azure platform (final)
 
Unity소개
Unity소개Unity소개
Unity소개
 
win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기
 
게임프로그래밍입문 2주차
게임프로그래밍입문 2주차게임프로그래밍입문 2주차
게임프로그래밍입문 2주차
 

More from YEONG-CHEON YOU

DirectStroage프로그래밍소개
DirectStroage프로그래밍소개DirectStroage프로그래밍소개
DirectStroage프로그래밍소개YEONG-CHEON YOU
 
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트YEONG-CHEON YOU
 
Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2YEONG-CHEON YOU
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1YEONG-CHEON YOU
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술YEONG-CHEON YOU
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략YEONG-CHEON YOU
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseYEONG-CHEON YOU
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기YEONG-CHEON YOU
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리YEONG-CHEON YOU
 

More from YEONG-CHEON YOU (12)

DirectStroage프로그래밍소개
DirectStroage프로그래밍소개DirectStroage프로그래밍소개
DirectStroage프로그래밍소개
 
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
 
Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
Voxelizaition with GPU
Voxelizaition with GPUVoxelizaition with GPU
Voxelizaition with GPU
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
 
Sw occlusion culling
Sw occlusion cullingSw occlusion culling
Sw occlusion culling
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
 

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

  • 1. C++과 DirectX를 이용한 Windows Universal 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 사용 경험 없음 -> 저렇게 개발하는 방법도 있구나. 참고지식 습득!
  • 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 Visual Studio 2013 Windows Desktop Applications
  • 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)
  • 9. XBOX Music Windows Store 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 Store Health App Windows Phone Apps
  • 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
  • 18. Universal App OneDrivePlayer for Windows 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와 게임화면의 상호작용을 위해서 사용 • 터치입력, 네트워크 처리 정도에 사용.
  • 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
  • 36. Asset추가 • Asset들은 프로젝트에 포함시키고 Property에서 Contents항목 을 true로 체크해준다.
  • 37. Asset 폴더구조 • 계층구조는 가지지만 상위 폴더와 하위 폴더를 오가는건 불가 능. • chgDir(), SetCurrentDirectory(), GetCurrentDirectory() 사용 불 가. -> 엄청나게 치명적이다.
  • 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체크를 한다.
  • 43. COM객체의 Reference Count확인 • DX 객체들처럼 IUnknown이면 아래처럼…(x86기준)
  • 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용함수와 데이터 타입의 경우 똑같은 이름 의 함수와 데이터타입을 정의해둔다.
  • 47. Ex) GetClientRect()함수와 HWND는 WinRT API에선 정 의되지 않는다. 포팅을 용이하게 하기 위해 비슷한 기능을 하도록 만들거나 껍데기만 만들어둔다.
  • 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
  • 52. 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/