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函數。以后如果有更好的方案再代替。