September 14, 2006

[XNA] My Beta 1 Feedback

Well, after spending awhile with the XNA Framework, I can sum up my experiences pretty simply. The XNA Framework in its current state is a good start, but only a start. The people behind the XNA Framework made some hard decisions, and have made great strides towards filling in the gaps made by those decisions.

The decision to drop fixed-function support is a hard decision, but the addition of the SpriteBatch functionality for 2D games, and the BasicEffect class are great steps towards encouraging a move to a shader-driven architecture. I really like the BasicEffect class as a great example of how the low-level coders can wrap their shaders in such a way that the other coders don't have to worry about parameter names, etc. It just works.

The decision to drop DirectSound support is a hard decision, but the XACT audio engine and bindings (once the memory leaks are taken care of) are a great step in the right direction as far as making audio easy to use.

The application architecture is nifty as well. Nice, clearly defined "Update" and "Draw" phases, a decent component architecture...what could be wrong?

Well, I hate to nit-pick, because chances are that a lot of these things are going to be addressed before the v1 release, but for a framework that has a stated goal of "bringing game development to the masses," the XNA Framework is awfully hardcore.

How hardcore? No font class, no helper classes for resource management or reacquisition on device reset, no abilities to play loose sound files, no plans on shipping any of the "drag-and-drop" components that have been played up (at least, not according to the GameFest slide decks), a sample that is hacked to death because the content framework wasn't ready yet, no controller disconnection events, being expected to query the Game object's GameServices to get the GraphicsService just to get the GraphicsDevice to actually draw anything...stuff like that.

Of course, even the hardcore are getting screwed a little bit. No access to the headset on the 360 controller, no cache support in the Storage namespace, no support for effect fragments in the effects framework, limited intersection support in the framework primitives, etc. For example, if I have a triangle and I want to see if it intersects with a Plane, well, I'm shit out of luck.

Nowadays, programmers expect frameworks to not only include the basics necessary to actually do the work, but they also expect a framework to include functions to handle common tasks efficiently (like draw text on the screen) and also handle commonly coded tasks that are prone to error (like handling device resets, splitting a polygon using a plane, or checking to see if a ray intersects with a polygon).

Anyway, I look forward to getting my hands on the Content Framework. I just hope that when we get it, it isn't half-there like the current XNA Framework appears to be.

Now, I know that sounds harsh...very harsh. However, I feel I have to be blunt here because I am passionate about managed code. I've experienced the benefits of managed code. I know the strengths of managed code and how they outweigh the weaknesses. I love Managed DirectX. MDX and the .NET Framework go together like Thin Mints and a once-a-year drain on my pocketbook. I WANT XNA TO SUCCEED! And if that means I have to bitch-slap some people in order to ensure that the XNA Framework gets the love and attention that it deserves before they ship v1, so be it.

1 comment:

Sam Kalman said...

I appreciate your investment in the XNA framework, as there is a very high potential there. However, after reading your criticisms, I can't help but direct you and anyone else who just wants to easily make games toward Unity.