現在、私のアプリはグラフィックスに Direct3D9 のみを使用していますが、将来的にはこれを D3D10 および場合によっては OpenGL に拡張する予定です。問題は、これをきちんとした方法で行うにはどうすればよいかということです。
現在、私のコードにはさまざまな Render メソッドがあります
void Render(boost::function<void()> &Call)
{
D3dDevice->BeginScene();
Call();
D3dDevice->EndScene();
D3dDevice->Present(0,0,0,0);
}
渡される関数は、MainMenu->Render、Loading->Render などの正確な状態に依存します。これらは、多くの場合、他のオブジェクトのメソッドを呼び出します。
void RenderGame()
{
for(entity::iterator it = entity::instances.begin();it != entity::instance.end(); ++it)
(*it)->Render();
UI->Render();
}
そして、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();
};
次に、各メソッドは、より詳細な設定 (ピクセル シェーダーがサポートされているかどうかなど) に応じて、最適なレンダリング方法を処理します。
問題は、これを拡張して、多少異なる(D3D v OpenGL)レンダリングモードのいずれかを使用できるようにする方法が本当にわからないことです...