AIREngine已經(jīng)支持插件式的開發(fā),即不需要開發(fā)人員在工程上連接某個(gè)DLL和lib,直接通過LoadLibrary的形式加載。
這種開發(fā)方式好處非常多:
直接通過配置文件可以用指定的動(dòng)態(tài)庫,例如渲染器可以使用DX9或者DX11的,不需要在工程中再指定;
如果用到一些第三方的項(xiàng)目,例如speedtree,這樣可以根本不同的版本開發(fā)不同的插件,例如我們是用speedtree4.2的,按以前的做法,要把speedtree集成到引擎中去,看似沒啥問題的,但如果以后要用到speedtree5.0以上呢?這個(gè)時(shí)候怎么辦?那又要把引擎代碼大改一次了?利用插件的好處在這里就顯得很明顯了。
但用插件也會(huì)有些問題,特別是第三方項(xiàng)目如speedtree這樣的。
有些功能,必須每一幀都要更新,這個(gè)還好辦,我繼續(xù)一下一個(gè)FrameListener就行了。但有些功能,必須要每個(gè)RenderTarget在渲染的時(shí)候也要更新,這個(gè)就不是FrameListener可以提供的了。其實(shí)這個(gè)也是一個(gè)引擎設(shè)計(jì)的問題,如何讓你自定義的東西在每個(gè)RenderTarget中更新一次,是一個(gè)值得思考的問題。
我現(xiàn)在初步想到的方案是:定義一個(gè)類叫EventListener代替FrameListener,這個(gè)類有多個(gè)事件,其中一個(gè)事件叫RenderTarget_Update,在RenderTarget中Update的時(shí)候就會(huì)調(diào)用這個(gè)listener的OnEvent函數(shù)。以后如果有更好的方案再代替。