Weathr is a 3D weather app for Windows 8.1 using C++, DirectX, and XAML.

Why a weather app?

While working on the Hilo C++ project, I really wanted to further explore the intersection among C++, DirectX, and XAML in the context of a Windows Store app. A 3D weather app seemed novel (I've never seen one before) yet doable (arguably easier to implement than a game.) I'm publishing this sample as a way of sharing what I learned and getting your feedback.

Although you're free to use any of the code and patterns you see here in your own apps, remember this is a personal side project of mine -- there's surely room to improve the architecture and design patterns that are used. Please report any feedback you have on the code in the Issues or Discussions tab. If you find any parts to be particularly useful, or would like to see more discussion on, please let me know that as well!

Click the image below for a quick video tour of the app.

What's needed to run it?

I know it's a bit of a pain, but it's pretty straight-forward to register for the API keys. You can still run the app without the API keys; you simply won't be able to access weather data or search for locations.

What's it demonstrate?

Here are some of the features to look for in this sample. Also see the Documentation tab for technical info about various parts of this project.

How to use ISO C++ to implement the core logic and C++/CX along the "boundary" where you work Windows Runtime.

How to use DirectX to manage 3D content and XAML to manage 2D content.

Using PPL tasks to load assets asynchronously and to perform background work.

Rendering shared 3D content across pages.

Capturing 3D content for later use (such as on the live tile and location management page.)

Displaying current weather info on the live tile.

Using the secondary tile to bookmark to a specific experience.

Rendering cloud and star effects in a way that works on both Intel and ARM-based devices.

Using the C++ REST SDK to connect to the weather and Bing Maps services.

Throttling HTTP requests to limit the number of requests made per second.

Using app bars to browse the 5 day forecast and perform interesting commands.