Microsoft Blog Images
Email Blog Author
Subscribe via RSS
RSS for posts
RSS for comments
Search this blog
Search all blogs
Fluffy Tag Cloud
Dream Build Play
Windows Phone 7
Windows Phone 7 Series
Xbox LIVE Indie Games
xna game studio
xna game studio 3.1
XNA Game Studio 4.0
xna game studio connect
What is the XNA Framework
XNA Game Studio Team Blog
What is the XNA Framework
What is the XNA Framework
25 Aug 2006 6:40 PM
Last week we announced XNA Game Studio Express, which is a product that enables students and hobbyist game programmers to create games using C# that will run on both Windows and their Xbox 360. The XNA Framework is the set of .NET libraries that developers will code against to build their games. As we get closer to the beta, I wanted to take a few moments and explain three keys to understanding the XNA Framework—namely, the goals of the XNA Framework, what the XNA Framework is, and what it provides.
We set out to accomplish two primary goals when developing the XNA Framework:
Enable Cross-Platform Game Development
One of the key goals is to make it easy to develop games using the XNA Framework that will run on both Windows and the Xbox 360. We want to make it easy for you to develop your Windows game, for example, and then easily create an Xbox 360 version of it. Our goal is to provide a set of APIs that are about 95% normalized across the two platforms. There are some cases where we need to differentiate between the two because either the semantics are different enough that we shouldn’t hide it or there is specific functionality that is useful on one platform but not on the other. I imagine, though, that a high percentage of the games you create with the XNA Framework will in fact be 100% compatible across both platforms.
Simplify Game Development
Making games is hard. It’s hard for professional game developers and especially difficult for a student or hobbyist who is just getting into game development. It often takes a lot of code, time, and trial and error just to get to the point where you can start to draw something on the screen, or get input and make something move. One of the other primary goals of the XNA Framework is to make this much easier. As we’ve talked about this internally, we often talk about the “first 5 minutes” of the experience with XNA Game Studio Express and the XNA Framework. Our goal is for you to be able to start writing
within the first 5 minutes of starting a project. You won’t have to worry about creating a window. You won’t have to worry about a message pump or an Idle event. You won’t need to enumerate graphic adapters and display modes. You won’t have to create a Direct3D 9 device and manage it when the window is resized or the game is minimized. The XNA Framework takes care of all those things for you. The first thing you do is write code for
Another problem is content— specifically, getting content into your game and making it consumable at run time. A feature of the XNA Framework called the Content Pipeline will make getting content into your game extremely easy. Michael Klucher will be talking more about this feature in a future post, but think of it as being able to treat content just like you would your code, as a piece of your project. The Content Pipeline will take care of importing, compiling, and loading it for you.
Another aspect of the “first 5 minutes” is a set of Starter Kits that we will be providing. A Starter Kit is a complete, fully functional game that includes all the source code and media available as a project template. They are available in the
dialog box and create a new copy of the game for you to then modify. The aim is that if you are just getting into game programming, you can dive into a complete game and change or tweak a couple of things here or there and get instant feedback as soon as you hit F5. Each Starter Kit will come with complete documentation, including a set of tutorials that will walk you through modifying or adding features to the game.
Our efforts to simplify the game development process will continue to evolve through future releases. But our overall goal will continue to be lowering the bar for making games and opening up game development to an even broader set of would-be game developers.
When describing the XNA Framework and what it's made of, it’s useful to think of it as a series of layers.
The platform is the lowest layer and consists of the low-level native and managed APIs that the XNA Framework is built on top of. Some of the APIs included in this layer are Direct3D 9, XACT, XInput, and XContent.
The core framework is the “first” layer of the XNA Framework and provides the core functionality that the other layers extend. If you had to associate something with Managed DirectX, it would be this layer. Found here are areas of functionality grouped into Graphics, Audio, Input, Math, and Storage. As we move forward with the XNA Framework, we'll build out this layer to provide additional functionality.
The main focus of the extended framework layer is making game development easier. Currently, this layer has two main components: the Application Model and the Content Pipeline. As we move forward with the XNA Framework, we'll extend this layer to make it even easier for you to write games and expand the target audience.
Games are the highest layer (even though we're at the bottom of this list!). This layer consists of your game code and content. Also found here would be things like Starter Kits, templates, and game components.
So we’ve talked a lot about the goals of the XNA Framework and how it’s layered by functionality. But what is
the XNA Framework? Let’s take a look:
The purpose of the Application Model is to abstract away the platform your game is running on and let you focus on writing your game. You don’t have to worry about creating a window, handling the message pump, creating a timer or clock, or handling window messages. We provide all of that for you. We also provide a
that makes it extremely easy to create and manage a
, which you use for rendering. On the Xbox 360, you don’t need a window or a message pump to handle window messages, but you don’t need to worry about that either because the programming model is the exact same on both platforms. This is also where we provide our component model, which allows you to easily incorporate
written by others into your game. This is a great way to get up and running quickly or to build a library of reusable components. This is one area that I’m excited to watch grow as I think we’ll see some amazing things from the community and our partners.
Our Graphics APIs are based on the Direct3D 9 APIs. They started out as very similar to the MDX set of types but have gone through some pretty major refactoring and cleanup to make them even easier to use and more consistent with the .NET Design Guidelines. One big change from MDX is that we’ve decided to remove support for the fixed-function pipeline in favor of an all shader-driven programmable pipeline.
There are a few reasons why we made this decision. First, a programmable pipeline is the future of real-time computer graphics. Direct3D 10 does not offer support for fixed function. Neither does the Xbox 360. When we discussed this with some early adopters and customers, we were somewhat surprised when they stated that the cross-platform goal of the XNA Framework is more valuable than the fixed-function pipeline. The fear is that someone would start their game out on Windows and use the fixed-function APIs (perhaps without even knowing it) and get the game completed. Then they would decide to try and run it on the Xbox 360 and they would immediately get hit with dozens, if not hundreds, of compiler errors. It would be a better experience if you knew from the start that your code would work on both platforms from the start.
We realize that moving up to writing shaders and effects is a big step, so we’re trying to ease that by providing the
API Migration Guide: Managed DirectX 1.1 to XNA Framework (Beta 1)
, as well as a
type that is an
but exposes some easy to use properties such as lights and textures in a strongly typed manner so that the “first 5 minutes” experience is still in reach. You can, using the
, get something up on the screen very quickly and easily without having to actually write a shader. Then when you feel comfortable with writing shaders and effects, or you’ve outgrown what type of rendering the
offers, you can start writing your own shaders and effects and use those directly.
Our Audio APIs are built on top of XACT, which is the Microsoft cross-platform audio API for Windows and the Xbox 360. The idea behind XACT is somewhat similar to shaders in Direct3D. Sound authors use the XACT tool to create “packages” of sound effects and configure things like volume, looping, channel mixing (including 5.1), etc. The developer then takes the package, loads it, and can easily play sounds by name, not having to worry about initializing buffers, streaming data in, or other management. The sound author can create a “BigExplosion” sound that consists of a few different WAV files, has an LFE effect, and mixes between the other channels. The programmer doesn’t need to know any of these details; he just gets the cue for “BigExplosion” and calls
on it. Nice and simple!
The Input API is built on top of XInput, which is the cross-platform API that drives the common controller (Xbox 360 Controller). Input offers an immediate mode API that requires no initialization. No need to worry about acquiring or releasing a device, setting the sharing mode, etc. All you need to do is call
on the appropriate controller type and that’s it! We provide a
type that represents the Xbox 360 Controller for Windows and the Xbox 360, as well as
type for both platforms and a
type for Windows.
The Storage API provides the way you can read and write game data (such as save games, high scores, etc.) in a platform neutral manner. On Windows, this isn’t a big deal since you have
methods that allow you to the correct location for the current user. On the Xbox 360, you need to associate game state with a profile and a storage device, such as the hard drive or a memory unit. Storage makes it very easy to do so, and, in keeping with the cross-platform goal, we “emulate” this on Windows so you can use the exact same code on both platforms to read and write your data.
Our Math API provides the types often used for game programming such as
. We also include bounding volume types including
. Our bounding volume types include methods for doing intersection and containment tests. One thing to note is that our math libraries are right-handed
. What I mean by that is on our
, for example, we provide a
method, which provides a right-handed view matrix instead of offering a
. The reason we’ve decided on going with this is to ease integration in both content and middleware components. If everyone can agree on the coordinate system, then it makes it much easier to use content or APIs from outside of the XNA Framework. I say “by default” because there is nothing that
a right-handed system. So if you absolutely need to be left-handed (or something else) you can do so, you’ll just need to do some of the calculations yourself.
We are super focused on getting v1.0 of XNA Game Studio Express and the XNA Framework into your hands, but we are also looking at what our future releases look like. As I mentioned earlier, we will look at extending the core framework layer by adding additional functionality and we’ll look at building out the extended framework area to make it even easier to create games using XNA Game Studio Express. We will also introduce XNA Game Studio Professional, which will enable developers to create commercial games for the Xbox 360 by using the XNA Framework. Look for more details about what this means in the coming months.
I mentioned that one of the goals of the XNA Framework is to make it easier to write games; to allow you to focus on your game and not the platform. How simple is it? Well, the code below results in a working application and illustrates the basic skeleton of an XNA Framework game.
Thanks for taking the time to read this post. I hope it explained what the XNA Framework is and what it provides. The beta will be released in just a few days, so please download it and take it for a spin. Then tell us what you liked, what you disliked, or what wasn’t clear—we want to make this the best product for you that we can.
The team can’t wait to get XNA Game Studio Express into your hands and see what you do with it!
Leave a Comment
Please add 8 and 4 and type the answer here:
26 Aug 2006 5:28 PM
26 Aug 2006 8:36 PM
I can't wait for this to be released. I'm taking a introduction to game development class at Neumont University, here in Salt Lake City, UT. Working with Managed DirectX has been incredibly fun, but I look forward to seeing what I can do with XNA. As awesome as building a game engine is, there are a lot of annoyances (window behavior, resource management, etc) that it looks like XNA will be able to solve.
Is the XNA team interested in interns, by chance? Neumont has a program called Enterprise Projects; many students have worked with Microsoft on various projects through the program before. There are half a dozen or so of us about to hit Enterprise Projects this fall or next January that would be extremely interested in something like this.
26 Aug 2006 9:15 PM
This is nice and all, but I honestly think this will be a bit useless until we can get these on our 360s. Not many people have displays that can do 1920x1080, let alone the horsepower to match the 360.
I think the trying to keep it available for both platforms is a bit of a silly idea. When we're cranking out 360 games worth playing with XNA, there is no way many people will be able to play these games.
Hopefully the focus is mainly on the 360 end of things. People have already had many easy ways to make games on Windows for years already. Please dont let trying both platforms being compatable "hamper" XNA.
Most(?) of use are just interested in creating 360 games only. With little to no hope of even bothering to have them run on our Windows boxes.
27 Aug 2006 11:31 AM
"Most(?) of use are just interested in creating 360 games only. With little to no hope of even bothering to have them run on our Windows boxes."
I think if you took a poll you would find this if far from true!
27 Aug 2006 2:24 PM
Pipper the whole point is to have ONE development effort for BOTH platforms
The whole effort is to make it easier to develop for windows and xbox not to provide a console centric devleopment API
Development costs are spiraling upwards and especially as xbox live functionalty seems to be coming to vista aswell it makes sense
Ponder This » Blog Archive » Prepare Yourself and No Content Pipeline
28 Aug 2006 12:29 AM
Patrick Bes Blog
28 Aug 2006 3:26 AM
I see that the XNA team released an item on their blog with some more information on the XNA framework.
Sharky’s Blog » Blog Archive » Some juicy XNA info just out…
28 Aug 2006 4:40 AM
Ponder This » Blog Archive » The First Code Snippets
28 Aug 2006 5:13 AM
28 Aug 2006 11:09 AM
Mitch Walker via the XNA Team Blog - What is the XNA Framework?
Mitch Walker does a good job in this...
28 Aug 2006 12:02 PM
28 Aug 2006 2:55 PM
"Pipper the whole point is to have ONE development effort for BOTH platforms"
Actually, the whole point was to open us a console to homebrew. People have been able to have an easy way to program games on Windows for years already. But gaming has pretty much died out on the Windows platforms unless you're an MMORPG addict these days. It's not because of developement costs, it's because people have actually found that console gaming is where it is at, and has finally become powerful enough that they can play their once favorite PC games on their couch with their XBox360. People have been moving to OSX because gaming is less of a concern these days on the home computer. Gamers have migrated onto the consoles FINALLY.
This is why people are excited, now we can have a closed spec system to code on. We can write demos that push the hardware for the system to its limits, use all the cores, and all the interesting GPU functions that dont even exist on home PCs yet. The demos will be mind blowing, and show people the potential of the 360 so long as Microsoft doesn't keep the power from us so it can be "compatible" with Windows.
How many people do you know that have monitors that can output 1920x1080, and do insane 3D operations on their Windows box? The top 1% of gaming PC hardware owners most likely, this is who XNA will appeal to on the Windows side.
I'm sorry if this sounds like a rant, it's not. I appreciate what MS is trying to do. But i'm just pointing out he obvious here, people want to code on the console because it hasn't been available like this ever before. Windows, sure, no big deal, but a next gen console? Especially one that has hardware functions that can't even be replicated on a Windows PC yet? Sign me up!
A more accurate explanation of XNA // Troy Gilbert
28 Aug 2006 5:01 PM
28 Aug 2006 5:45 PM
So you've all probably heard by now what I've been working on.&nbsp; It's great to finally be able to...
handcircus » Blog Archive » More XNA Game Studio Express Details revealed
29 Aug 2006 4:37 AM
Page 2 of 4 (48 items)
© 2013 Microsoft Corporation.
Privacy & Cookies