我有一个游戏引擎,目前使用继承来提供通用接口来进行渲染:
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 以及在使用这种方法时我应该在哪里创建它们?我应该使用这种方法还是坚持当前的方法,也许还有别的方法?