Compiling for Universal Windows Apps

This page documents the current state of the “winrt” platform, used to support “Windows Store Apps” for Windows 8.1, and Windows Phone 8.1 apps using Microsoft’s new “Universal” APIs.

Requirements

  • Windows 8
  • SCons (see Compiling for Windows for more details)
  • Visual Studio 2013 for Windows (but not “for Windows Desktop”). Tested on “Microsoft Visual Studio Express 2013 for Windows Version 12.0.31101.00 Update 4”.

Compiling

The platform can compile binaries for both Windows 8.1 and Windows Phone 8.1. The architecture is decided by the environment variable “PLATFORM”.

Windows 8.1

  • Open a “VS 2013 x64 Cross Tools Command Prompt”

  • The value of environment variable “PLATFORM” should be “x64”

  • Run scons with platform=winrt from the root of the source tree:

    C:\godot_source> scons platform=winrt
    
  • You should get an executable file inside bin/ named according to your build options, for the architecture “x64”, for example “godot.winrt.tools.x64.exe”.

Windows Phone 8.1

  • Open a “Visual Studio 2012 ARM Phone Tools Command Prompt”

  • The value of environment variable “PLATFORM” should be “arm”

  • Run scons with platform=winrt from the root of the source tree:

    C:\godot_source> scons platform=winrt
    
  • You should get an executable file inside bin/ named according to your build options, for the architecture “arm”, for example “godot.winrt.tools.arm.exe”.

Running

On Visual studio, create a new project using any of the “Universal App” templates found under Visual C++ -> Store Apps -> Universal Apps. “Blank App” should be fine.

On the “Solution Explorer” box, you should have 3 sections, “App.Windows (Windows 8.1)”, “App.WindowsPhone (Windows Phone 8.1)” and “App.Shared”. You need to add files to each section:

App.Shared

Add a folder named “game” containing your game content (can be individual files or your data.pck). Remember to set the “Content” property of each file to “True”, otherwise your files won’t get included in the package.

App.Windows

  • Add your windows executable, and all the .dll files found on platform/winrt/x64/bin on the godot source. Remember to also set the “Content” property.
  • Find the file “Package.appxmanifest”. Right click on it and select “Open with...” then “XML (Text) Editor” from the list.
  • Find the “Application” section, and add (or modify) the “Executable” property with the name of your .exe. Example:
<Application Id="App" Executable="godot.winrt.tools.x64.exe" EntryPoint="App_Windows.App">

App.WindowsPhone

Repeat all the steps from App.Windows, using your arm executable and the dlls found in platform/winrt/arm/bin. Remember to set the “Content” property for all the files.

Use the green “Play” button on the top to run. The drop down menu next to it should let you choose the project (App.Windows or App.WindowsPhone) and the device (“Local Machine”, “Device” for an attached phone, etc).

Angle

ANGLE precompiled binaries are provided on platform/winrt/x64 and platform/winrt/arm. They are built from MSOpenTech’s “future-dev” branch, found here: https://github.com/MSOpenTech/angle. The visual studio ‘solutions’ used are found on projects/winrt/windows/angle.sln and projects/winrt/windowsphone/angle.sln.

What’s missing

  • Audio
  • Semaphores
  • Keyboard input
  • Proper handling of screen rotation
  • Proper handling of other events such as focus lost, back button, etc.
  • Packaging and deploying to devices from the editor.
  • Adding Angle to our tree and compiling it from there. The same source could also be used to build for Windows (and use Angle instead of native GL, which will be more compatible with graphics hardware)

Packages

This is what we know:

  • App packages are documented here: http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh464929.aspx
  • There are 2 command line tools that might be useful, App Packager and SignTool.
  • There are a bunch of tools on “powershell” that deal with packages that might be relevant: http://technet.microsoft.com/library/dn448373.aspx
  • When running a Windows 8.1 app on “Local Machine” from Visual studio, the app seems to run from an uncompressed directory on the filesystem in an arbitrary location (ie. outside of the proper directory where Apps are installed), but there is some special registry entry made for it, so we know it’s possible to skip the packaging step to run locally (in the case of very big games this can be useful).