访客模式应该用于渲染吗?

时间:2013-10-21 12:48:15

标签: c++ design-patterns

我有一个游戏引擎,目前使用继承来提供一个通用接口来进行渲染:

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以及在使用此方法时应该在哪里创建它们? 我是应该使用这种方法还是坚持使用这种方法,或许还有别的东西?

1 个答案:

答案 0 :(得分:1)

(免责声明:我既不是GameEngine也不是C ++性能专家,所以请大家不要这么做)

有一些现有的游戏引擎使用访问者方法,例如GamePlay3D。出于性能原因,您可能应该从渲染例程中排除不可见的对象。