我有一个游戏引擎,目前使用继承来提供一个通用接口来进行渲染:
class renderable
{
public:
void render();
};
每个类本身调用gl_*
函数,这使得代码难以优化,并且难以实现诸如设置渲染质量之类的东西:
class sphere : public renderable
{
public:
void render()
{
glDrawElements(...);
}
};
我正在考虑实现一个系统,我将创建一个可以渲染我的对象的Renderer
类:
class sphere
{
void render( renderer* r )
{
r->renderme( *this );
}
};
class renderer
{
renderme( sphere& sphere )
{
// magically get render resources here
// magically render a sphere here
}
};
我的主要问题是我应该在哪里存储VBO以及在使用此方法时应该在哪里创建它们? 我是应该使用这种方法还是坚持使用这种方法,或许还有别的东西?
答案 0 :(得分:1)
(免责声明:我既不是GameEngine也不是C ++性能专家,所以请大家不要这么做)
有一些现有的游戏引擎使用访问者方法,例如GamePlay3D。出于性能原因,您可能应该从渲染例程中排除不可见的对象。