Ich hatte vor es insofern API unabhängig zu gestalten, dass die Engine eine Top-Layer auf der API ist und der Programmierer garnicht merkt, welche benutzt wird.
Unter Windows kann man dann z.B. über eine abstrakte Factory Klasse einen Direct3D Renderer einbauen und unter Linux einen OpenGL Renderer.
Ebenso verhält es sich mit allem systemspezifischen Kram. Es muss so abstrakt gehalten werden, dass der Programmierer nicht merkt, für welches System er programmiert *g*