The State of the XNA Framework

I am tremendously proud of what we have achieved with XNA Game Studio over the last few years:

  • We opened up Xbox 360 game development. For the first time in history, anyone who cares to do so can create and sell games for a major console, including features such as multiplayer LIVE networking and full access to the powerful Xbox GPU.

  • We also enabled game development on Zune devices.

  • I think we did a good job balancing our API between being easy to learn and fun to use, while also powerful and expressive enough to make great looking 3D games.

  • The portability of our framework makes it easy to transfer skills, code, and even entire games between Windows, Xbox 360, and Zune.

  • Perhaps most importantly, we demonstrated that Microsoft is serious about managed code for game development, and learned many valuable things about building games with .NET.

But Game Studio is still far from perfect. To improve it, we must also consider our flaws:

  • Our API is portable, but not portable enough. There are still too many confusing and unnecessary differences between platforms.

  • Our API is easy to learn, but not easy enough. Hanging out on the forums, I see the same questions over and over again. The first few times something is asked, I just answer it and move on. The tenth time, I blog an article on that topic. But by the hundredth time, I have to ask myself, if so many people are running into the same problem, perhaps we could improve our design to remove the source of their confusion?

  • There are too many places where we expose details of underlying platform implementations, which makes porting our framework to new platforms harder than it should be.

(note: as a developer who works on the core framework APIs, I am concentrating on the technical side of things, as opposed to surrounding business policy and publishing aspects)

Shawn’s verdict: B+. I think Game Studio 3.1 is pretty darn good. But it could be better...

Comments (29)

  1. Orygin says:

    I just started working with XNA today, and I find it pretty easy and useful.

    The only downside i know is not supporting VS2010.

  2. wmfwlr says:

    Surely an A-, at a minimum

  3. An awesome API that is used with the best (and free too) IDE. Keep up the good work!

  4. Guillaume says:

    xna 3.1 deserves at least a B-

    The "4.0" will be far better … i hope a A+ 🙂

    with VS2K10 and WP7 😀

  5. Veikko Eeva says:

    Yep, Visual Studio 2010 would be good. Points for honesty. It’s always nice to notice when room for improvement is being recognised and communicated.

  6. Maximinus says:

    I love the XNA framework. Technically, it is very accessible : I had no graphics programming knowledge before using it.

    The business part of the creators club is working great, and this blog is very helpful with solutions of common problems. It is incredible how most of the problems I had are solved with this single url . Thanks Shawn for the help 🙂

    I used XNA to produce my first ever video game : Globe Clicker , a geographic quizz with satellite photos, and I’ve enjoyed using the framework along the way. It enables developers new to game programming to use many "automatic" features, and to concentrate on the added value. However, I should add that it is no magic game creator, and that it was hard work producing a full featured game.

    My second game : Missile Escape, featuring planes, missiles and explosions will be released soon!

  7. jhazucha says:

    Shawn take those posts on the forums with a grain of salt. Most will ask before even bothering to do a simple search to see if anyone has had and solved the same exact problem.

  8. vince says:

    I would argue that you aren’t exposing *enough* of the underlying hardware differences. The 360 comes across as a crippled PC under XNA, which is far from the truth. The lack of control of EDRAM or the use of formats such as 7e3 are debilitating to what you can do on the platform with XNA.

    Least-common denominator solutions just don’t work very well — I think this has been proved pretty well over the years. You’re never going to make all the target platforms (360, Zune, and PC) act alike, and honestly, I say stop trying.

    I think XNA should be changed to a model where things like EDRAM management are abstracted by default so it remains easy to use for novices, but for people who *want* to tinker under the hood with this stuff have the ability to replace the default EDRAM manager. Same with platform-specific formats, heck even D3D11 vs D3D9.

  9. Milkhouse says:

    XNA obviously is a breakthrough in every aspect. Brings game development to a hole new level, implementing your game to a console couldn’t be easier, networking is sweet, just to name a few. But i’d love to see some XNA on Windows Mobile, wich will be a greaat market for developers, now that windows phone 7 series was announced, and i’m waiting for what would you guys do to integrate XNA with Natal…. 😀 For now a B++ 😛

  10. MrHelmut says:

    To me, the biggest achievement is that the Xbox has been opened up. I really hope that XNA will move to the next Microsoft’s console.

    These two last blogpost sounds like "things are moving here". Can’t wait to see what’s up with XNA at the GDC.

    And yes, the API is very accessible. I wonder what public you are talking about. I don’t think you can state this as an actual flaw, it’s already great ;-).

  11. Mike Strobel says:

    I’m still waiting to see some XNA/WPF interop!  We were teased with some previews at PDC08, but I haven’t heard a peep since.  What’s the word on this, Shawn?

  12. Clayton Hughes says:

    I wouldn’t worry too much about your second point.  No matter how easy you make things, there are going to be people who want to do the absolute minimum amount of work and research and for whom it will always be easier to ask a question for the hundredth time rather than bother to read a document or even search for people who have asked the same question.

    I have plenty of experience with professionals who are like this; I wouldn’t even begin to hold out hope for a completely-public-open-to-anyone approach not having thousands of pairs of hands reaching out screaming to be spoon-fed.

  13. Jeff Weber says:

    I’d love to see a XAML parser and Expression Blend support. 🙂

  14. Rob 'bobvodka' Jones says:

    As much as I like XNA my one ‘issue’ with it (and .Net as a whole tbh) is the lack of access to the SSE/VMX side of things.

    As a 360 dev I know how much VMX power those cores have to throw around and it makes me sad we can’t get at it 🙁

  15. When I used XNA two weeks ago (after a break for 2 years) I was amazed how it was improved. We created our vision within ~24h of programming and never hit a barrier. You got rid of all the ugly stuff I had issues with 2 years ago (XACT etc).

    Things I would wish for: GPGPU (ok, that’s never gonna happen), VS2010, Natal, Avatar-goodness on Windows. Importers are still a little bit awkward to write (you did some posts on them already).

    I’m looking forward to anything you come up with. I’m sure with will be awesome!

  16. Ryan says:

    What about the 360’s CLR?  Unless things have changed, it’s so poor compared to its PC counterpart that it removes XNA on 360 from consideration as a serious platform.

  17. Mike Strobel says:

    @Jeff: The XAML infrastructure, including the parser and parser extensibility points, are being moved out of the WPF assemblies and into their own System.Xaml assembly in .NET 4.  You’ll be able to use this in your XNA games, at least on Windows.

  18. Beringela says:

    You’re being too harsh Shawn, an A- at the very worst!  

    No other console can even come close to what you folks have done for the Xbox.  I’m really looking forward to seeing where you take it next.

  19. Jonathan Vaughn says:

    All I think I could wish for really would be the following (more or less in order of personal importance):

    * Ability to read and write sound buffers, or at a minimum give us a software wavetable with as much control and flexibility as the Gravis Ultrasound hardware had back in the day (i.e. we should be able to either software implement multi-track  real-time mixed music such as .MOD/.XM/.IT/etc or use an API to do it for us, but this API should be flexible enough to handle at least all the basic effects such as tremolo and vibrato etc)

    * Access to SSE/VMX stuff (possibly through some generic abstraction?)

    * JIT or perhaps transfer-to-360-time compiling to native code for speedups

    * Avatars on Windows (not that I have a specific need, but it seems silly not to support it, and blocks a wide swath of potential games from being easily released on both platforms)

    I can see SSE/VMX being hard to abstract in a useful way in .Net, and JIT being a pain to implement (but once done it should be across the board improvements) and compiling potentially opens up a security risk to the system, which is why I am suggesting having it compiled on the way to the 360 so that the resulting code isn’t modifiable after the fact (possibly building a compiler on the 360 side, rather than a JIT, so the entire compile process is under lock and key).

    I know arguments have been made by some that access to audio data for such mixing purposes are security risks which is ridiculous (unless somebody has done a really bad job somewhere) or useless due to performance costs which is silly considering a 386 could easily mix many tracks of audio on the fly, even an interpreted .Net on stripped down PPC core should handle this, I’d think.

    Even if the pitch up/down range of the existing audio framework reached far enough for playing a sample across multiple octaves, it still wouldn’t work because there’s no way to guarantee even approximate timing of when samples start and stop playback on XNA currently (unless I’ve missed something). I looked at trying to abuse the sound system this way to see if it would be acceptably close enough but when I discovered that you can’t get more than half or double the sample rate playback, I gave up, since that’s nowhere near enough to use a sample across many octaves.

  20. Paul says:

    I’d give XNA an A-, it really is an excellent game development platform.  New things I’d like to see (not all directly related to XNA):

    Windows Mobile 7 support.

    Silverlight support (2D is fine).

    Runtime included with Windows Update.

    Windows game competitions too.

  21. Is there any plans for XNA on Windows Phone 7?

  22. Isaac Llopis says:


    I agree 100% with your post.

    I was working with the Mono.XNA team to develop a port of XNA runtime to Un*x machinery, so that managed code in games would open the way for multiplatform games, just as Mono opened the way for multiplatform applications on .Net, but it relies so much on platform-specific routines that the project has been more or less abandoned.

    If you manage to really make XNA managed-centric, Zune and XBox would not be the only non-Windows platforms that can play multiplatform XNA-based games.

  23. Andi says:

    It’s not quite true that anyone who cares can sell games on the 360. I am from switzerland and still it’s not possible to sell games from here…and given how small Switzerland is and up until now it’s still not possible, plus the list of countries that support selling has not really expanded big time, I really doubt that MS is going to make it happen here…can even understand a bit, I mean in Switzerland there are probably less than 500 developers for XNA.

    This leaves only windows open, and then there are loads of engines that you can use…I love XNA, but it has a bitter taste atthe same time for me.

  24. The only feature that I’d like to be improved in XNA is Networking. I would love to see some support for dedicated server implementations even on Xbox 360.

    I understand a need to control how XNA Live is used and limit over usage for no costs.

    But we could see some clever moves such as allowing us to use XNA Live for account auth, profile management and such but let us use some external servers outside of the Live environment even for Xbox: we would be able to create our own dedicated servers and for instance host them in Windows Azure?…

    That would open us for great multiplayer applications. 🙂

  25. I’m a big fan of XNA. I’m very interested to see how it evolves (with such a wide array of devices, phones through to DX11 level PCs).

    It’ll be a difficult balance between compromise and API diversion (personally, I’m in favor of the latter).

    One on one feedback with community members is very important. In my view, it’s what separates a good project from a great one. It’s bloody hard, especially with such a large set of users, but it’s still important 🙂 A questionnaire isn’t exactly very personal.

    I have my own XNA project on codeplex. Xen; it is a thin API that sits on top of XNA. It’s my outlet to experiment and fix what I see as XNA’s weak spots. I’ve tried to make an API that is hard to break, where the obvious way is also the fastest.

    I, like many members, would be more than happy to give my feedback on how XNA could be improved. Hell, steal some of my ideas! I’d be thrilled! 🙂

  26. Comment to the point on how easy it is to learn XNA:

    I started using XNA almost a year ago and have since then produced a full 3D arcade-adventure game with a team of 5 in only 3 months during a busy school term and am well on to my way in creating a full fledged non-standard multiplayer real time strategy game with another team of 4.

    I will also note that I had never touched C# or DirectX at all before using XNA — So I was learning not only a new API, but a completely new language and graphics interface at the same time.

    In fact, from my experience, the only elements that have really been confusing for me have been the "Set" methods that don’t /actually/ set values until sometime latter in execution.

    For example, Mouse.SetPosition(…), "Sets the position of the mouse cursor…", and Texture2D.SetData<…>(…), "Copies array data to the texture." To me, those descriptions infer that the new value is set immediately.

    I heavily rely on the meta data summaries that exist for these methods… If they had only read "…at a latter time" or "…on a different thread" or something to give me a clue that if I were to immediately access that data afterwards, it would not yet be available/updated.

    I feel that those brief and concise meta data descriptions have been a great tool in learning the API, but should be just a little more descriptive for those situations.

    Great job overall, though! I’m having a blast! 🙂

  27. Will Robinson says:

    Just to add my agreement with the person above who said that the XBox 360 support in XNA is currently not a serious platform.

    Honestly, guys. What genius came up with the idea of using a JIT-centred interpreted language as the lead homebrew platform on a console with an in-order processor? It seems like the most absurd idea imaginable.

  28. ShawnHargreaves says:

    > JIT-centred interpreted

    Uh… JIT compiled vs. interpreted are totally different things!

  29. Thomas says:

    So… this has changed, right. Too bad.

Skip to main content