В настоящее время мое приложение использует только Direct3D9 для графики, однако в будущем я планирую расширить его до D3D10 и, возможно, OpenGL. Вопрос в том, как я могу сделать это аккуратно?C++ Наличие нескольких графических опций
В настоящее время существуют различные методы визуализации в моем коде
void Render(boost::function<void()> &Call)
{
D3dDevice->BeginScene();
Call();
D3dDevice->EndScene();
D3dDevice->Present(0,0,0,0);
}
функция передается затем зависит от конкретного состояния, например MainMenu-> Render, Loading-> Render и т.д. Они будут затем oftern называют методы других объектов.
void RenderGame()
{
for(entity::iterator it = entity::instances.begin();it != entity::instance.end(); ++it)
(*it)->Render();
UI->Render();
}
А класс образец, полученный от предприятия :: 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) режимах рендеринга ...
Поскольку у меня уже есть материал d3d9 для всего, что мне нужно, я просто хочу, чтобы этот вариант распространялся на другие API. Поскольку у меня уже есть классы, обертывающие большинство материалов d3d (например, Texture, Sprite, Mesh), я мог бы просто перегрузить их, оставив объекты actaul с API-интерфейсом. – 2008-09-13 22:50:15