Android 利用surface實現(xiàn)Flutter外接紋理
https://gitee.com/woshishui1243/external_plugin
實現(xiàn)原理
①Java層FlutterRenderer創(chuàng)建SurfaceTexture和textureId。
②將surfaceTexture和textureId通過JNI向引擎層注冊
③向引擎注冊過程中通過層層方法最后在texture.cc的TextureRegistry由map以鍵值對形式緩存實例對象。
④將需要顯示圖片在SurfaceTexture上離屏渲染。
⑤Java層創(chuàng)建的textureId通過Channel傳遞到Dart層作為Texture組件入?yún)ⅰ?br>
⑥D(zhuǎn)art的Texture組件接收textureId入?yún)⒑笙蛳聦咏M件實例化。
⑦在SceneBuilder調(diào)用addTexture時執(zhí)行引擎層創(chuàng)建TextureLayer。
⑧最終在texture.cc中TextureRegistry的map根據(jù)TextureId獲取SurfaceTexture實例。
作者:JulyYu
鏈接:https://juejin.cn/post/6854573220054925320
來源:掘金
著作權歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權,非商業(yè)轉(zhuǎn)載請注明出處。
使用Native(以Android為例)播放器構(gòu)建Flutter播放插件
https://juejin.cn/post/6844903662649606157
iOS 實現(xiàn)Flutter外接紋理
實現(xiàn)原理
注冊紋理
- 創(chuàng)建一個對象,實現(xiàn)
FlutterTexture協(xié)議,該對象用來管理具體的紋理數(shù)據(jù) - 通過
FlutterTextureRegistry來注冊第一步的FlutterTexture對象,獲取一個flutter紋理id - 將該id通過channel機制傳遞給dart側(cè),dart側(cè)就能夠通過
Texture這個widget來使用紋理了,參數(shù)就是id
紋理渲染
- dart側(cè)聲明一個
Texturewidget,表明該widget實際渲染的是native提供的紋理 - engine側(cè)拿到layerTree,layerTree的
TextureLayer節(jié)點負責外接紋理的渲染 - 首先通過dart側(cè)傳遞的id,找到先注冊的
FlutterTexture,該flutterTexture是我們自己用native代碼實現(xiàn)的,其核心是實現(xiàn)了copyPixelBuffer方法 - flutter engine調(diào)用
copyPixelBuffer拿到具體的紋理數(shù)據(jù),然后交由底層進行gpu渲染
作者:luoyibu
鏈接:http://luoyibu.cn/posts/9703/?hmsr=codercto.com&utm_medium=codercto.com&utm_source=codercto.com
著作權歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權,非商業(yè)轉(zhuǎn)載請注明出處。