tho*_*asc 6 c++ design-patterns
我想让我的游戏与所使用的底层图形API无关(为了减少耦合,以防我想将它移植到另一个平台).
我目前正在使用SDL,最初我想将SDL_Renderer封装在GraphicAPI_SDL类中,实现我的通用GraphicAPI接口.此API将创建Image_SDL(封装SDL_Texture),它实现了我的通用Image接口.
我的问题是,当我想使用我的GraphicAPI实例渲染图像时,底层的GraphicAPI_SDL必须将Image转换为Image_SDL,以获得SDL_Texture.这样的演员是丑陋的.
处理这种情况的最佳方法是什么?我将把每个加载在一个向量中的SDL_Texture存储在我的GraphicAPI_SDL中,每个Image的实例只有一个对应于向量中纹理索引的整数,因此只有GraphicAPI_SDL类直接使用SDL,但是有一个更好的方法(例如,使用模式)?
请参阅Irrlicht,它有一个简单但良好的架构,可以满足您的可移植性标准。基本模式是适配器、中介者和工厂方法。这种可移植性的关键是良好的界面。GraphicsApi我们需要、MeshRenderer和的抽象类Texture,以及所有图形 API 的实现。
对于 DirectX9:
GraphicsApiDX9实施GraphicsApiMeshRendererDX9实施MeshRendererTextureDX9实施Texture对于 OpenGL:
GraphicsApiGL实施GraphicsApiMeshRendererGL实施MeshRendererTextureGL实施Texture等等。GraphicsApiDX9创建TextureDX9保留指向 的内部指针IDirect3DTexture9,以及IDirect3DDevice9创建纹理的 。您正在使用创建的单槽Texture接口,因此您不必关心它是如何创建的。