一年半之前,在开发KlayGE 4.0的时候,郭鹏就已经设计了一个资源载入系统,可以解决异步载入和重复载入的问题。但我只是实现了一个很粗略的异步载入。随着场景复杂度的需求越来越高,一个完善的资源载入系统也就成为必需。顺着之前的设计思路,我最近终于完成了实现。
目标
KlayGE的资源载入系统有几个设计要求:
至少支持Texture、Model、Effect、Font和Post Processor这五种资源,并能快速扩展支持新的资源。
可以选择同步或异步载入。
不重复载入资源,以减少浪费。
自动化管理,不需要手动指定资源ID,尽量不需要显式删除。
资源不需要单根继承。
异步无阻塞载入。
之前的ResLoader能支持2,4和5,部分支持1,并以很 ...
经过前两次实验,大部分C++11里有的boost组件都被替换成了C++11中相应的。剩下的还有random库和bind/function/mem_fn/ref/smart_ptr这一组。看来,到了不得不改代码的时候了。
random
在第一次实验里提到过,random虽然在boost和C++11都有,但接口不相同,所以原先我用Boost.Random实现的代码,无法直接替换成C++11的。翻了一遍boost文档,发现现在的boost其实有实现了一套名字和C++11相同的组件,于是我重写了所有用到random的地方,用和C++11兼容的代码,就解决了这个问题。好在random用得不多,改几个地方就都好了。
bind/function/mem_fn/ref/smart_ptr
这几个组件相互依赖,要么全换,要么不换。再加上牵扯面非常广,修改起来几乎都 ...