XComponent使用OpenGl ES
XComponent使用OpenGl ES
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS OPENGL ES外部纹理使用
151浏览 • 1回复 待解决
opengl渲染矩形,如何实现opengl渲染,并用Xcomponent显示出来
922浏览 • 1回复 待解决
XComponent、openGL实现3D图形绘制
1397浏览 • 1回复 待解决
Opengl/es HarmonyOS支持的咋样了,有人玩过木有?
6205浏览 • 2回复 待解决
Native C++层面是否支持OpenGL ES、Vulkan的标准接口
1653浏览 • 1回复 待解决
XComponent 使用demo,怎么动态创建、销毁 XComponent,及怎样将XComponent当做容器来使用
190浏览 • 1回复 待解决
HarmonyOS VideoDecoder使用OpenGL渲染
58浏览 • 1回复 待解决
SDK 3.1不包含Java API了,那之前java api中的opengl es,在SDK 3.1中如何搞呢?
1946浏览 • 1回复 待解决
HarmonyOS AVPlayer XComponent
270浏览 • 1回复 待解决
使用Native、XComponent和EGL绘制图形
872浏览 • 1回复 待解决
OpenGL相关术语的理解
229浏览 • 1回复 待解决
如何用openGL做解码后处理
1641浏览 • 0回复 待解决
Xcomponent绘图流程分析
1211浏览 • 1回复 待解决
HarmonyOS WebView默认使用GPU硬件渲染吗?使用的是OpenGL还是Vulkan? 是否支持软件渲染?
94浏览 • 1回复 待解决
OpenSL ES音频录制示例调用崩溃
1842浏览 • 1回复 待解决
HarmonyOS 使用OpenSL ES开发音频录制功能,如何开启voip通话录音?
109浏览 • 1回复 待解决
Xcomponent、NativeImage开发指导
1150浏览 • 1回复 待解决
XComponent 怎么设置为透明
2118浏览 • 1回复 待解决
设置XComponent组件为透明
419浏览 • 1回复 待解决
OpenGL同一个上下文在多线程中使用问题
339浏览 • 1回复 待解决
HarmonyOS 使用OPENSL ES播放音频发现bufQueueState.count一直为1没有变化
204浏览 • 1回复 待解决
es6启动问题有了解的吗?
2331浏览 • 1回复 待解决
XComponent组件如何设置背景颜色
2060浏览 • 1回复 待解决
HarmonyOS OpenSL ES 播放音频时获取当前position异常
108浏览 • 1回复 待解决
此场景开发可参考:
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-camera.md
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/video-recorder.md
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-xcomponent.md
Demo 参考:
相机预览:https://gitee.com/openharmony/app_samples/tree/master/media/MultiMedia
播放器:https://gitee.com/openharmony/app_samples/tree/master/media/VideoPlayer
提供C++层使用OpenGL做渲染的开发方式
XComponent组件通过提供NDK接口为开发者在C++层提供NativeWindow用来创建EGL/GLES环境,进而开发者可以使用标准OpenGL ES 开发渲染逻辑XComponent 官方NDK Demo请参考:https://gitee.com/openharmony/app_samples/tree/master/ETSUI/XComponent
XComponent的开发需要使用NDK,相关NDK头文件可参考:https://gitee.com/openharmony/arkui_ace_engine/blob/master/interfaces/native/native_interface_xcomponent.h
开发流程&原理解析
这里主要介绍基于XComponent的C++层OpenGL渲染的开发场景。
XComponent 主要为开发者提供:
TS/JS层:符合ArkUI 开发规范的UI组件
C++层:
组件TS描述
开发者在TS/JS层用如下代码即可使用XComponent组件
XComponent组件构建时参数含义:
这种方式可以实现JS层通过nativerender实例跨语言调用libnativerender.so中的native方法。
XComponent组件通过指定libraryname来加载动态库,本质上也是通过NAPI机制加载动态库的。与import方式的区别在于,加载动态库时会将XComponent的NativeXComponent实例暴露到应用的C++层,让开发者在C++层可使用XComponent开发渲染逻辑。
XComponent组件事件含义:
onDestroy
XComponent组件被销毁时触发,XComponent组件销毁的逻辑符合ArkUI 的UI组件生命周期。
Native层开发
C++代码开发关键点
NAPI机制对接
关键代码如下
NAPI入口函数
由上文可知,通过nm_register_func指定so加载时的注册函数,如下面函数init
该nm_register_func函数的调用时刻是so被import时或者被XComponent用libraryname加载时。
在该函数被调用中,开发者可对参数exports上挂载C方法
如官方Demo中在JS层跨语言调用的changeColor,changeShape等方法。
exports会通过JS 引擎绑定到JS层的一个JS对象,该JS对象是指中的
nativerender,也指XComponent onLoad事件的Context
解析XComponent UI组件的NativeXComponent实例
当so被XComponent加载时,会将NativeXComponent实例的指针绑定到nm_register_func注册函数的第二个入参上(即上文中Init(napi_env env, napi_value exports)函数的入参exports,下文都以exports为例)。
解析XComponent的NativeXComponent实例关键代码段如下:
其中使用OH_NATIVE_XCOMPONENT_OBJ来解析wrap了NativeXComponent指针的属性,然后通过napi_unwrap接口解析出NativeXComponent实例指针
XComponent NDK使用
XComponent NDK接口的使用都依赖于XComponent的NativeXComponent实例指针
开发者拿到NativeXComponent实例指针后要通过OH_NativeXComponent_RegisterCallback方法进行回调注册。这个过程必须在nm_register_func注册的函数中同步完成。
XComponent NDK接口的使用主要包括:
Touch事件:
1. XComponent为开发者提供Touch事件回调接口,支持多指事件。
线程模型
XComponent作为UI组件,所在线程为应用的主线程。XComponent的NDK接口回调都在主线程中,开发者可在拿到Nativewindow句柄后,在自己的线程中创建EGL/OpenGLES 环境。所有线程的处理依赖开发者自己实现。