小编mig*_*tin的帖子

渲染引擎设计 - 抽象出资源的API特定代码

我的渲染代码中有一个非常大的设计绊脚石.基本上这是什么,不需要API特定代码(例如OpenGL代码或DirectX).现在我已经考虑了很多方法来解决这个问题,但是我不确定使用哪一个,或者我应该如何改进这些想法.

举一个简短的例子,我将以纹理为例.纹理是表示GPU存储器中的纹理的对象,实现方式它可以以任何特定方式类似,即实现是否使用GLuintLPDIRECT3DTEXTURE9类似于纹理.

现在,我已经想到了实际实现这一点的方法.我不确定是否有更好的方式,或者哪种方式比另一方更好.


方法1:继承

我可以使用继承,这似乎是这件事最明显的选择.但是,此方法需要虚函数,并且需要TextureFactory类才能创建Texture对象.这需要调用new每个Texture对象(例如renderer->getTextureFactory()->create()).

以下是我在这种情况下考虑使用继承的方法:

class Texture
{
public:

    virtual ~Texture() {}

    // Override-able Methods:
    virtual bool load(const Image&, const urect2& subRect);
    virtual bool reload(const Image&, const urect2& subRect);
    virtual Image getImage() const;

    // ... other texture-related methods, such as wrappers for
    // load/reload in order to load/reload the whole image

    unsigned int getWidth() const;
    unsigned int getHeight() const;
    unsigned int getDepth() const;

    bool is1D() …
Run Code Online (Sandbox Code Playgroud)

c++ opengl graphics rendering

14
推荐指数
3
解决办法
8921
查看次数

标签 统计

c++ ×1

graphics ×1

opengl ×1

rendering ×1