Tips and gotchas for Windows 8 apps: Fractal Photographer

Screen3SmallThis series features interviews with student Windows 8 app developers who share the lessons they learned building Windows 8 applications.

This week’s interview features Rudi Chen a student from University of Waterloo who built an application called Fractal Photographer

Could you briefly describe your application/game?

Fractal Photographer renders the Mandelbrot Set, a infinitely detailed shape with many different patterns hidden along its border. With the right combination of location and color, amazing pictures can be produced and serve very well as wallpapers. Exploring the Mandelbrot to find a good spot is an art in itself and this app is there to make the process as easy and fun as possible.

Did you use .NET and Silverlight, HTML and Java, or DirectX and C++

Though the nature of the app is computationally intensive, it does not involve calculations that would benefit unmanaged memory. Therefore, I used C#/XAML since it allows efficient development.

What was your banging your head against a wall moment?

The app involve running a number of rendering threads in the background, both to generate the Mandelbrot and the thumbnails to pick color schemes. That means that any event - touching the screen, rotating the display, snapping the app, etc - must require some sort of thread management (they must all be paused when the user navigates, for example). The threading APIs W8 work differently than the traditional C# ones because of asynchronous methods and it took a while to figure out how it behaved.

Did you ever solve that issue?

Overall I think I managed to get the package working, though there might still be a bit of jittering at certain points.

If you had to build this same app again from scratch, what would you do differently?

I would probably redesign the architecture of this app so that it is more modular and more extensible. If I really had a lot of time, then I would consider looking into the GPGPU capabilities of DirectX and make the app GPU-accelerated and emulate floating-point precision beyond 64-bit double while still retaining speed and the option of having varied color schemes to choose from.

Any nice surprises?

The emulator worked surprisingly well considering it contained not just a tablet OS, but a full desktop. It was interesting having two instances of skydrive working on the same machine.

Did you leverage the mobile platform?

Not really.

Did you leverage touch?

I made sure to make full use of touch by implementing a gesture that does pinch-zoom and rotate all at once which isn't something I've typically seen in other apps. That makes it quite fun to play with on a tablet.

Did you have a favourite Windows 8 feature?

The APIs in general come with animations which makes the experience feel very smooth. In particular, Gridview does the work of displaying my color scheme thumbnails very beautifully.

What is one thing you think you did really well in this application?

I'm using a set of alternating wallpapers on my computer generated with this app and I always think they look amazing when I look at them - I would expect other people to have similar impressions once they've taken their own "photographs".

Are you publishing your application/game?

I've published it as soon as the Store opened its doors and it is available here.

Where can I learn more about your app/game?

The app is fairly straightforward and doesn't require documentation, but it is described on my website I recommend people interested in the app to watch my tutorial on YouTube (see link): like every art, it takes a bit of training to get right.

Who developed this application?

I developed the app as an individual. I'm currently a first-year student at University of Waterloo and one of the Microsoft Student Partners there.


Don’t forget to create your account in the Windows 8 store, reserve your app name, and get your app out there. For information about how to create your account and resources on how to get coding check out our Windows 8 resources page

Skip to main content