3

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

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

4

1 回答 1

3

(免责声明:我既不是 GameEngine 也不是 C++ 性能专家,所以对此持保留态度)

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

于 2013-10-21T13:56:21.147 回答