Derzeit verwendet meine App nur Direct3D9 für die Grafik, aber in Zukunft plane ich, dies auf D3D10 und möglicherweise OpenGL zu erweitern. Die Frage ist, wie kann ich das auf ordentliche Weise tun?
Derzeit gibt es verschiedene Render-Methoden in meinem Code
void Render(boost::function &Call)
{
D3dDevice->BeginScene();
Call();
D3dDevice->EndScene();
D3dDevice->Present(0,0,0,0);
}
Die übergebene Funktion hängt dann vom genauen Zustand ab, z. B. MainMenu->Render, Loading->Render usw. Diese rufen dann oft die Methoden anderer Objekte auf.
void RenderGame()
{
for(entity::iterator it = entity::instances.begin();it != entity::instance.end(); ++it)
(*it)->Render();
UI->Render();
}
Und eine Beispielsklasse abgeleitet von entity::Base
class Sprite: public Base
{
IDirect3DTexture9 *Tex;
Point2 Pos;
Size2 Size;
public:
Sprite(IDirect3DTexture9 *Tex, const Point2 &Pos, const Size2 &Size);
virtual void Render();
};
Dann kümmert sich jede Methode darum, wie am besten basierend auf den detaillierteren Einstellungen (zum Beispiel, ob Pixelshader unterstützt wird oder nicht) gerendert werden soll.
Das Problem ist, ich bin mir wirklich nicht sicher, wie ich das erweitern kann, um einen der möglicherweise unterschiedlichen (D3D v OpenGL) Rendermodi zu nutzen...