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外接纹理
实现原理
注册纹理
- 创建一个对象,实现
FlutterTexture
协议,该对象用来管理具体的纹理数据 - 通过
FlutterTextureRegistry
来注册第一步的FlutterTexture
对象,获取一个flutter纹理id - 将该id通过channel机制传递给dart侧,dart侧就能够通过
Texture
这个widget来使用纹理了,参数就是id
纹理渲染
- dart侧声明一个
Texture
widget,表明该widget实际渲染的是native提供的纹理 - engine侧拿到layerTree,layerTree的
TextureLayer
节点负责外接纹理的渲染 - 首先通过dart侧传递的id,找到先注册的
FlutterTexture
,该flutterTexture是我们自己用native代码实现的,其核心是实现了copyPixelBuffer
方法 - flutter engine调用
copyPixelBuffer
拿到具体的纹理数据,然后交由底层进行gpu渲染
作者:luoyibu
链接:http://luoyibu.cn/posts/9703/?hmsr=codercto.com&utm_medium=codercto.com&utm_source=codercto.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论