Windows Phone 8 Native C/C++ Game Development - PowerPoint PPT Presentation

windows phone 8 native c c game development n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Windows Phone 8 Native C/C++ Game Development PowerPoint Presentation
Download Presentation
Windows Phone 8 Native C/C++ Game Development

play fullscreen
1 / 38
Windows Phone 8 Native C/C++ Game Development
715 Views
Download Presentation
Audrey
Download Presentation

Windows Phone 8 Native C/C++ Game Development

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Windows Phone 8 Native C/C++ Game Development Sam George Principal Group Program Manager Windows Phone 3-046

  2. Windows Phone 8 game platform goals • Support Existing Games (XNA) • Reduce the Cost to Target Windows Phone • Enable Cutting Edge Performance • Make it Easy to Make Money

  3. So, how did we do?

  4. Reduce the cost to target Windows Phone • C++ Code Portability Reuse your own C++ code Use open source C++ libraries Cocos2D, SharpDx • Competitive Middleware Support Used by over 50% of games Havok, Unity, FMOD, Scaleform, Wwise, Marmalade • Windows 8 Aligned Game Platform Direct3D app supported Windows 8 and Windows Phone 8 Large shared API set

  5. Enable cutting edge performance • New Expansive C++ API Surface • Graphics - Direct3D 11.1 • Audio - XAudio2 / WASAPI / IMFMediaEngine • Video - IMFMediaEngine • Networking • All critical subsystems games need File system, threading, input, sensors and more

  6. Make it easy to make money • In-app purchasing Consumables: gold coins, poker chips Durables: additional game levels 7.X Light Up • New global marketplace support 191 countries 50 languages MO billing, international credit cards, PayPal, local options

  7. Native games • Demo

  8. Ross O'Dwyer Head of Developer Support

  9. Havok-powered titles

  10. App models & APIs

  11. Windows Phone 8 App Models Direct3D App C++ XAML App C# / VB Direct3D Interop C++ Reuse Windows Phone 8 API Set Common .NET FX Graphics Audio Media CoreCLR Networking Input File System Commerce Base Types Sensors

  12. Direct3D App Model • C++ Only • Access to the new Windows Phone 8 API surface Windows Runtime APIs, COM and Win32 style APIs • Reuse your C++ code Statically linked or a dll • Supports activation and app lifecycle CoreApplication, CoreWindow, CoreDispatcher

  13. Direct3D app • Demo

  14. Windows Phone 8 app models Direct3D App C++ XAML App C# / VB Direct3D Interop C++ Reuse Windows Phone 8 API Set Common .NET FX Graphics Audio Media CoreCLR Networking Input File System Commerce Base Types Sensors

  15. XAML App Model • XAML App Model extended • C++ Code Reuse Your own or other C++ libraries Call COM / Win32 style APIs from within Windows Runtime Components • Full access to the new Windows 8 shared API surface Windows Phone Runtime APIs, COM and Win32 style APIs • Direct3D Composition Render into a XAML scene from C++/Direct3D New elements

  16. DrawingSurface • Place anywhere • Draw to it from C++/Direct3D • Composited automatically with other XAML elements • Uses a Direct3D Swap Chain • <StackPanel> • <Button Content="Start"/> • <DrawingSurface Height="200“ Width="200"/> • </StackPanel>

  17. DrawingSurfaceBackgroundGrid • Must be the root element of a page • You render to the backgroundfrom C++/Direct3D • Does not use a Direct3D Swap Chain • Performs better • Grid children are rendered on top • <DrawingSurfaceBackgroundGrid> • <StackPanelVerticalAlignment="Center"> • <ButtonContent="Start"/> • </StackPanel> • </DrawingSurfaceBackgroundGrid>

  18. XAML and Direct3D • Demo

  19. Choosing Between XAML & Direct3D App • XAML App You need access to Live Tiles, Notifications, Background Agents, XAML UI, etc • Direct3D App You need the absolute best performance You don’t need what the XAML App gives you • How hard is it to switch? It is very straightforward

  20. New Windows Phone 8 APIs

  21. Input & Sensors • Windows Runtime APIs • Input PointerPressed, PointerMoved, PointerReleased KeyDown, KeyUp, CharacterRecieved, Show/Hide Onscreen Keyboard • Windows.Devices.Sensors Accelerometer Gyrometer Orientation Compass Inclinometer Supports Polling and Events

  22. Input • Demo

  23. Graphics • API Direct3D 11.1 • Hardware capabilities Feature level 9.3 • Subset of Windows 8 No Windows Imaging Component (WIC) No Direct2D or DWrite • Removed legacy features No GDI No D3DX No fixed function No runtime shadercompilation Use DirectXTex (http://codeplex.com/directxtex) Use DirectX Tool Kit (http://codeplex.com/directxtk) Use Visual Studio

  24. Feature Level 9.3 Not Included Geometry shaders Hull/domain shaders DirectCompute Resource arrays BC4–BC7 compression Vertex texture fetch • Included • Shader model 4_0_level_9_3 • Similar to vs_2_a and ps_2_b (2.0 turned up to 11) • Long pixel shaders (512 instructions) • Dynamic flow control • Gradient instructions • Max texture size = 4096 • Conditional non-pow-2 textures • BC1-BC3 texture compression • Floating point textures • Multiple rendertargets • Hardware instancing • Occlusion queries • Separate alpha blend

  25. Shaders • Demo

  26. Audio Support Background music One at a time Compressed (MP3, WMA) Asynchronously streamed from the filesystem or URI Raw PCM streams Render & capture Low level API XAudio2 IMFMediaEngine WASAPI • Sound effects • Looping, 3D positioning, DSP effects, etc • Many at once • In-memory PCM or ADPCM data

  27. Audio in the Game World Enemies Alarm Explosion Weapon fire Teammates Player

  28. XAudio2 Audio Graph Architecture Nearby Alarm Obstruction submix Final mix to output stream Player’s Weapon Effect Chain Source Voice Memory Buffer(s) Enemies Behind Box Source Voice Memory Buffer(s) WASAPI Output Mastering Voice Effect Chain Effect Chain Source Voice Memory Buffer(s) Effect Chain Submix Voice Memory Buffer(s) Source Voice

  29. Background music: IMFMediaEngine • COM based • Initialize and set source Source can be URI or IMFByteStream • Control playback Play, Pause, Stop Loop, Seek

  30. Background Music • Demo

  31. Video Cut Scene Support - IMFMediaEngine • Initialize and set source • Control playback • Render video Game retrieves video frame and renders video frame on the texture of an object in the game Game uses OnVideoStreamTick to find out whether a new video frame is ready Game uses TransferVideoFrame to copy video frame to DXGI surface OS can render RGB / NV12 formats

  32. Networking • Covered extensively in Networking talk • StreamSocket/StreamSocketListener TCP Sockets with SSL Support • DatagramSocket UDP Sockets • PeerFinder Bluetooth & NFC Supports App->Device and App->App • XmlHttpWebRequest2 C++ HTTP Support • WinSock

  33. File System • Windows Runtime APIs StorageFile, StorageFolder, ApplicationData Supports “ms-appx” & “ms-appdata” loading URI • Win32 Style APIs CopyFile2, CreateDirectoryW, CreateFile2, DeleteFileW, FindClose, FindFirstFileExW, FindNextFileW, FlushFileBuffers, GetDiskFreeSpaceExW, GetFileAttributesExW, GetFileInformationByHandleEx, GetOverlappedResultEx, LockFileEx, MoveFileExW, ReadFile, RemoveDirectoryW, SetEndOfFile, SetFileAttributesW, SetFileInformationByHandle, SetFilePointerEx, UnlockFileEx, WriteFile

  34. Launchers and Choosers • Windows Runtime APIs Launch Marketplace Details Page Launch Application Review Page Launch Marketplace Search Launch Browser Launch Connection Settings Launch Email Compose Sharing: Social Networks, Email, SMS Choose Photo • Other Windows Phone L&C not supported… yet

  35. Visual Studio 2012

  36. Visual Studio 2012 • New Templates For C++ Apps & Components Direct3D App Direct3D with XAML App Windows Phone Runtime Components DLLs and Static Libraries • Command line tools Build/deploy/debug • CPU Profiling C++ or C# ETL based profiling • Tools for game assets Mesh viewer Texture editor HLSL editor

  37. Questions and Answers • Other Windows Phone 8 Development Talks • Tuesday 10/30 • 04:00 – 0:500 | How to Leverage your code across WP8 and Windows 8 | 92 Nexus/Normandy • 04:00 – 0:500 | WP8 XAML Application Development | 92 Magellan • 05:45 – 06:45 | WP8 In App Purchase & Developer Center | 92 Nexus/Normandy • Wednesday 10/31 • 11:15 – 12:15 | WP8 Critical Dev Practices | 92 Magellan • 01:45 – 02:45 | WP8 Networking, Bluetooth, NFC | 92 Nexus/Normandy • 03:30 – 04:30 | WP8 Making Money with your Application | 92 Magellan • 05:15 – 06:15 | WP8 HTML5/IE10 for Developers | 92 Magellan • Thursday 11/1 • 08:30 - 09:30 | WP8 Maps, Location & Background | 92 Magellan • 10:15 – 11:15 | WP8 Performance & Optimization | 92 Magellan • 12:00 – 01:00 | WP8 Photo & Lens Apps | 92 Magellan • 02:30 – 03:30 | How to Leverage your code across WP8 and Win 8 | 33 McKinley • 02:30 – 03:30 | WP8 Tiles, Lock and Notifications | 92 Magellan • 04:15 – 0:515 | WP8 Native C/C++ Game Development | 33 McKinley • 04:15 – 05:15 | WP8 Using C++ in your Applications | 92 Magellan • Friday 11/2 • 08:30 – 09:30 | WP8 Using C++ in your Applications | 33 McKinley • 08:30 – 09:30 | WP8 Using the Speech API | 92 Magellan • 10:15 – 11:15 | WP8 Wallet and Deals | 92 Magellan • 12:45 – 01:45 | WP8 App to App Communication | 92 Magellan • 02:30 – 03:30 | WP8 Enterprise Development | 92 Magellan