AIREngine已经支持插件式的开发,即不需要开发人员在工程上连接某个DLL和lib,直接通过LoadLibrary的形式加载。
这种开发方式好处非常多:
直接通过配置文件可以用指定的动态库,例如渲染器可以使用DX9或者DX11的,不需要在工程中再指定;
如果用到一些第三方的项目,例如speedtree,这样可以根本不同的版本开发不同的插件,例如我们是用speedtree4.2的,按以前的做法,要把speedtree集成到引擎中去,看似没啥问题的,但如果以后要用到speedtree5.0以上呢?这个时候怎么办?那又要把引擎代码大改一次了?利用插件的好处在这里就显得很明显了。
但用插件也会有些问题,特别是第三方项目如speedtree这样的。
有些功能,必须每一帧都要更新,这个还好办,我继续一下一个FrameListener就行了。但有些功能,必须要每个RenderTarget在渲染的时候也要更新,这个就不是FrameListener可以提供的了。其实这个也是一个引擎设计的问题,如何让你自定义的东西在每个RenderTarget中更新一次,是一个值得思考的问题。
我现在初步想到的方案是:定义一个类叫EventListener代替FrameListener,这个类有多个事件,其中一个事件叫RenderTarget_Update,在RenderTarget中Update的时候就会调用这个listener的OnEvent函数。以后如果有更好的方案再代替。