Flutter Android外接紋理實現(xiàn)圖片共享

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)原理

注冊紋理

  1. 創(chuàng)建一個對象,實現(xiàn)FlutterTexture協(xié)議,該對象用來管理具體的紋理數(shù)據(jù)
  2. 通過FlutterTextureRegistry來注冊第一步的FlutterTexture對象,獲取一個flutter紋理id
  3. 將該id通過channel機制傳遞給dart側(cè),dart側(cè)就能夠通過Texture這個widget來使用紋理了,參數(shù)就是id

紋理渲染

  1. dart側(cè)聲明一個Texture widget,表明該widget實際渲染的是native提供的紋理
  2. engine側(cè)拿到layerTree,layerTree的TextureLayer節(jié)點負責外接紋理的渲染
  3. 首先通過dart側(cè)傳遞的id,找到先注冊的FlutterTexture,該flutterTexture是我們自己用native代碼實現(xiàn)的,其核心是實現(xiàn)了copyPixelBuffer方法
  4. 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)載請注明出處。

https://github.com/woshishui1243/flutter_texture

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容