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.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).