我的渲染代码中有一个非常大的设计绊脚石.基本上这是什么,不需要API特定代码(例如OpenGL代码或DirectX).现在我已经考虑了很多方法来解决这个问题,但是我不确定使用哪一个,或者我应该如何改进这些想法.
举一个简短的例子,我将以纹理为例.纹理是表示GPU存储器中的纹理的对象,实现方式它可以以任何特定方式类似,即实现是否使用GLuint
或LPDIRECT3DTEXTURE9
类似于纹理.
现在,我已经想到了实际实现这一点的方法.我不确定是否有更好的方式,或者哪种方式比另一方更好.
我可以使用继承,这似乎是这件事最明显的选择.但是,此方法需要虚函数,并且需要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)