The XNA Framework runs on more platforms than people tend to realize. There is Xbox 360, and Zune, and Zune HD, and Windows with an NVidia DX9 GPU, and Windows with an AMD DX10 GPU, and Windows with an integrated Intel GPU, and...
I found it interesting but not surprising that the comments on my previous post focused on differences between Windows and Xbox, ignoring the possible variations from one Windows machine to another.
In the years we have been working on XNA Game Studio, we learned several things about making portable APIs:
- It is impossible to ever make things 100% identical across different platforms
- But there is still great value in making the attempt
- It is surprising how much benefit can be gained from even small increases in consistency
- This is an ongoing journey
Portability is important for several reasons:
- The obvious: "I want to make a game that runs on more than one platform". This is an interesting goal, but in some ways I think actually the least important reason for having a portable API. Thing is, only a handful of games really make sense to forcibly transplant in such a manner. When platforms have different form factors, screen sizes, and input mechanisms, most games need to be tuned somewhat differently per platform in order to provide a quality experience. Which brings us to...
- "I want to quickly and easily port my game from one platform to another."
- "I want to reuse code from my previous game, which was on a different platform from my current project". Related to this: reusing code from samples, tutorials, etc.
- "I want to learn skills on one platform, then apply that knowledge on different platforms". Related: it would be sweet if my hard-won 1337 skillz did not become obsolete every time a new platform shows up!
- "I'm making a Zune game, but want to iterate and test using a PC version of the same project". This is important for developer productivity. XNA Game Studio has great support for deploying and debugging on remote devices, but that is always going to be slower than just running locally on your development PC. The faster a programmer can iterate, the more productive they can be. Plus this lets you use Windows tools such as CLR Profiler and PIX.
- "I want to ship my game on Windows". Xbox LIVE Indie Game developers don't have to worry about this, but as anyone who has shipped a Windows game can tell you, testing the matrix of varying hardware capabilities is not exactly fun!
Some of these goals are easier to achieve than others, but I think they are all worth striving toward.