Quote Originally Posted by Speedo View Post
On the broader topic of cross-platform game design....

Is your ultimate goal here to create a game, or a game engine? Unless you just want to create an engine for the fun of it, there's not a lot of point reinventing the wheel. There are tons of cross-platform libraries oriented towards game creation (OGRE for 3D rendering, OIS for input, Raknet for networking, OpenAL for sound, to name a few). If you actually want to make a game, you're much better off letting them worry about the platform specific details, while you just learn their API and make your game.
I agree on there being no need to reinvent the wheel. However it is generally a good idea to hide the engine, or the parts of the engine that you use behind a layer of abstraction. This will allow you to easily change implementation.

For example, a game I am working on atm has a 2d renderer behind it. The renderer class is abstract so I can easily make an implementation that renders it 3d in the future instead. (without having to change the way the game works)