目前,我的应用程序仅使用 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)渲染模式......