Ogre 把包括 RenderSystem, SceneManager, CgProgramManager, ParticleSystem 在内的很多东西都设计成了 Plugin ,其好处不言而喻。
Plugin 中有 install(), uninstall(), initialize(), shutdown() 和 getName() 五个纯虚函数。其中子类对象(或者负责实例化对象的 Factory )的创建是通过 install() 完成的,而大部分子类的 install() 和 uninstall() 并没有做什么工作。
Root 初始化系统时有 4 个函数和 Plugin 有关:
在 Root 构造函数的最后调用了函数 4 ,并逐一用配置文件中的每个 PluginName 调用函数 3 。
Ogre 中函数 3 如下:
其中通过 DynLibManager 将相应的动态库加载进来。之后以 D3D9Plugin 为例看看
pFunc() 的调用:
上面调用了函数 2 ,而 2 中又有:
至此,完成相应 Plugin 的构建工作.
至于函数 1 ,是在:
中第一次窗口初始化之后进行的。
同样,在最后有 4 个与上述函数功能相反的函数。