所以我正在为我的内部游戏引擎编写一个资源管理器,并且我遇到了什么。好吧,并没有真正陷入困境,但我觉得应该有更好的方法来做到这一点。问题是:我有一个资源管理器类,它包含一个LRU,一个哈希表(用于快速资源查找),另一个包含资源控制器的哈希表(指示各种文件如何加载以及如何销毁不同的资源)。
对于渲染部分,我将实际的IDirect3DDevice对象封装在一个位于SceneManager类中的渲染器类中。场景管理器通过使用OctTree确定哪些对象实际可见,然后使用渲染器对象渲染它们。
问题在于,要将.jpg文件的资源控制器作为纹理加载,需要访问该设备。这意味着我必须给控制器一个指向渲染器的指针,然后渲染器需要一个返回设备创建的纹理的函数。但是,这给渲染器提供了太多的功能,理论上它不应该关心除了绘制之外的任何东西。发生这种情况是因为,在创建纹理时,您必须调用设备成员函数或将设备传递到D3DX纹理函数之一。其他资源(如网格)也存在同样的问题,因为它们需要访问渲染器才能创建顶点和索引缓冲区。
此外,一旦资源控制器有权访问渲染器,它可能会调用任何绘制函数,如果这样倾向,这是完全没必要的。任何人都有任何解决这类问题的工作,或者只是微软为D3D9的设备对象提供了很多功能的固有特性?