Flutter Android外接纹理实现图片共享

Android 利用surface实现Flutter外接纹理
https://gitee.com/woshishui1243/external_plugin

实现原理

①Java层FlutterRenderer创建SurfaceTexture和textureId。
②将surfaceTexture和textureId通过JNI向引擎层注册
③向引擎注册过程中通过层层方法最后在texture.cc的TextureRegistry由map以键值对形式缓存实例对象。
④将需要显示图片在SurfaceTexture上离屏渲染。
⑤Java层创建的textureId通过Channel传递到Dart层作为Texture组件入参。
⑥Dart的Texture组件接收textureId入参后向下层组件实例化。
⑦在SceneBuilder调用addTexture时执行引擎层创建TextureLayer。
⑧最终在texture.cc中TextureRegistry的map根据TextureId获取SurfaceTexture实例。

作者:JulyYu
链接:https://juejin.cn/post/6854573220054925320
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

使用Native(以Android为例)播放器构建Flutter播放插件
https://juejin.cn/post/6844903662649606157

iOS 实现Flutter外接纹理

实现原理

注册纹理

  1. 创建一个对象,实现FlutterTexture协议,该对象用来管理具体的纹理数据
  2. 通过FlutterTextureRegistry来注册第一步的FlutterTexture对象,获取一个flutter纹理id
  3. 将该id通过channel机制传递给dart侧,dart侧就能够通过Texture这个widget来使用纹理了,参数就是id

纹理渲染

  1. dart侧声明一个Texture widget,表明该widget实际渲染的是native提供的纹理
  2. engine侧拿到layerTree,layerTree的TextureLayer节点负责外接纹理的渲染
  3. 首先通过dart侧传递的id,找到先注册的FlutterTexture,该flutterTexture是我们自己用native代码实现的,其核心是实现了copyPixelBuffer方法
  4. flutter engine调用copyPixelBuffer拿到具体的纹理数据,然后交由底层进行gpu渲染

作者:luoyibu
链接:http://luoyibu.cn/posts/9703/?hmsr=codercto.com&utm_medium=codercto.com&utm_source=codercto.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

https://github.com/woshishui1243/flutter_texture

你可能感兴趣的:(Flutter Android外接纹理实现图片共享)