Momentan verwendet meine App nur Direct3D9 für Grafiken, aber in der Zukunft plane ich, dies auf D3D10 und möglicherweise OpenGL zu erweitern. Die Frage ist, wie kann ich das sauber machen?C++ mit mehreren Grafikoptionen
Derzeit gibt es verschiedene Render-Methoden in meinem Code
void Render(boost::function<void()> &Call)
{
D3dDevice->BeginScene();
Call();
D3dDevice->EndScene();
D3dDevice->Present(0,0,0,0);
}
Die Funktion dann über den genauen Zustand übergeben, hängt zB MainMenu-> Render, Belade-> Render usw. Diese werden dann die oftern nennen Methoden anderer Objekte.
void RenderGame()
{
for(entity::iterator it = entity::instances.begin();it != entity::instance.end(); ++it)
(*it)->Render();
UI->Render();
}
Und eine Beispielklasse von Unternehmen abgeleitet :: Base
class Sprite: public Base
{
IDirect3DTexture9 *Tex;
Point2 Pos;
Size2 Size;
public:
Sprite(IDirect3DTexture9 *Tex, const Point2 &Pos, const Size2 &Size);
virtual void Render();
};
Jede Methode kümmert sich dann um, wie am besten, die detailliertere Einstellungen gegeben zu machen (zB sind Pixel-Shader unterstützt oder nicht).
Das Problem ist, ich bin wirklich nicht sicher, wie diese in der Lage sein, verlängern eines zu verwenden, was etwas anders (D3D v OpenGL) sein kann Rendermodi ...
Da ich bereits das d3d9-Zeug für alles, was ich brauche, habe, möchte ich nur die Option auf andere APIs erweitern. Da ich bereits Klassen habe, die die meisten d3d-Sachen umhüllen (zB Textur, Sprite, Mesh), könnte ich diese einfach überladen und die actaul-Objekte mit API-unabhängigen Dingen belassen. –