c++有する複数のグラフィックオプション
質問
現在、私のアプリを使っDirect3D9のためのグラフィックいたしました.しかし,将来のI'mの企画で拡大するD3D10がOpenGL.に質問する方法を教えてくださいこぱす。
現在、様々な描画方法に自分のコード
void Render(boost::function<void()> &Call)
{
D3dDevice->BeginScene();
Call();
D3dDevice->EndScene();
D3dDevice->Present(0,0,0,0);
}
の機能に渡された後の状態、例えばMainMenu->、描画した荷重->描画など。これらをofternの方法その他のオブジェクト。
void RenderGame()
{
for(entity::iterator it = entity::instances.begin();it != entity::instance.end(); ++it)
(*it)->Render();
UI->Render();
}
試料のクラスから派生体::ベース
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)の描画モード...
解決
を定義するインタフェースを行うのに十分なアプリケーションのグラフィック出力要求には応じない。そしてこのインタフェースを実装する毎にレンダリングしたいです。
class IRenderer {
public:
virtual ~IRenderer() {}
virtual void RenderModel(CModel* model) = 0;
virtual void DrawScreenQuad(int x1, int y1, int x2, int y2) = 0;
// ...etc...
};
class COpenGLRenderer : public IRenderer {
public:
virtual void RenderModel(CModel* model) {
// render model using OpenGL
}
virtual void DrawScreenQuad(int x1, int y1, int x2, int y2) {
// draw screen aligned quad using OpenGL
}
};
class CDirect3DRenderer : public IRenderer {
// similar, but render using Direct3D
};
適切に設計及び維持にこれらのインタフェースは非常に困難なものです。
場合あなたもの操作の描画するドライバー依存のオブジェのような質感をお使いいただけますので工場のパターンの分離レンダリング各自の実施例ITextureを用い場合は、ファクトリメソッドにIRenderer:
class IRenderer {
//...
virtual ITexture* CreateTexture(const char* filename) = 0;
//...
};
class COpenGLRenderer : public IRenderer {
//...
virtual ITexture* CreateTexture(const char* filename) {
// COpenGLTexture is the OpenGL specific ITexture implementation
return new COpenGLTexture(filename);
}
//...
};
なアイデアを見て、既存の(3)エンジンに連れて現れたからね(笑)。私の経験を設計するこのようなインタフェースかdistractsからだった:)
他のヒント
いと思うんだったの答えは、行のソースコード Ogre3D
.セクションに基づいて D3D
や OpenGL
裏は終了します。見る: http://www.ogre3d.org
基本的にはそのAPI力はどのようなものかす活動に従事するためにD3Dっぽう、バッファオブジェクトと詰めておけば、データ、その発行を描く話者のバッファ.このハードウェアが好きなのでとにかく、そのなかかるものと思われます。
そして一度にどのように見えるかを確認できなものを使ってみるべきではないだろうかだけでは見ていて気分が良いものを使用で、保存自分のトラブルの再実装を行う全てのことをします。:-)