By Kyle Wilson
Wednesday, June 12, 2002
Game Engine Design
Exceptions and Error Codes - As game developers, we are the heirs to common wisdom holding that exception handling overhead is too expensive for high-performance games. Is this true?
Managing Concurrency: Latent Futures, Parallel Lives - The future is multi-core architectures and, for anyone writing performance-critical applications, multi-threaded programming. And game developers have to deal with this sooner than most.
On Reflection and Serialization - If I could add just one feature to standard C++, it would be support for reflection. I'd like to use reflection to automatically serialize objects.
Data-Driven Design - I'm all about data-driven design. How much about data-driven design am I? I don't think a game engine should contain a single line of game-specific code. Not one.
A Streaming Bestiary - Some options for streaming data off disk, some of the tradeoffs involved, and how game design interacts with streaming systems.
Game Object Structure: Inheritance vs. Aggregation - I've been thinking lately about the right way to structure game objects.
Game Object Structure: Scene Graphs - In developing a 3D engine, one of the first decisions you'll have to make is whether or not to keep your game objects in a scene graph.
Game Object Structure: Scene Graphs Revisited - It's time to ponder, once again, what a scene graph represents.
The Registry - When I first started work at HeadSpin, one of the most mind-expanding concepts I encountered was the notion of an object registry.
Game Object Structure Roundtable - In 2003, I moderated the Game Object Structure roundtable at GDC. Here's my report.
Why C++? - The dominance of C++ in game development has been overwhelming. Why has it been so successful, and does the language deserve to see that success continue?
Useful Techniques and Idioms
Nothing's Ever Easy: Evolution Of A Flag Set Class - How I went about designing a type-safe flags class, step by step. By step. By step.
The Right Way To Do Message Type Resolution - Message passing is a useful feature of game engines. Capable programmers realize that a wide range of problems can be solved by adding another level of indirection, and message passing does just that on a grand scale. But how to resolve message types? With yet another level of indirection, of course!
Bug Hunt - We had an interesting bug in MechAssault 2 the other day.
Experiments With Includes - I did a few experiments with how one header file includes another.
Compiler Optimization of MechAssault 2 - By changing our compiler optimization settings, we also squeezed out a significant performance gain--nearly 10%--that was basically free.
Neverwinter Weeks - Thoughts on Bioware's Neverwinter Nights.
Trends - I've been thinking lately that the game industry is in the middle of a paradigm shift. Through the eighties and early nineties, good game engine development was about algorithmic innovation. Now, and increasingly over the coming years, good engine development is about structural innovation.
Interview Questions - This is an article on interview questions, but it isn't what you think.
GDC 2006 - GDC is bigger than ever.
SIGGRAPH 2004 - The hot new topic this year wasn't related to graphics theory at all.
GDC 2004 - GDC seems to be bouncing back.
Quick Plug: UML Pad - All I wanted was the UML equivalent of Notepad, a tool I could use to sketch diagrams quickly and save them as images to import into word.
Things That Always Suck - There are a lot of hard problems in game development. But most of the problems we game developers deal with are reasonably well-understood. Then there's the other kind of problem.The Flow of Intentional Gameplay - Taking a break from my day job to think about design.