XComponent使用OpenGl ES
XComponent使用OpenGl ES
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
opengl渲染矩形,如何实现opengl渲染,并用Xcomponent显示出来
447浏览 • 1回复 待解决
XComponent、openGL实现3D图形绘制
463浏览 • 1回复 待解决
Opengl/es HarmonyOS支持的咋样了,有人玩过木有?
4929浏览 • 2回复 待解决
Native C++层面是否支持OpenGL ES、Vulkan的标准接口
560浏览 • 1回复 待解决
SDK 3.1不包含Java API了,那之前java api中的opengl es,在SDK 3.1中如何搞呢?
915浏览 • 1回复 待解决
使用Native、XComponent和EGL绘制图形
467浏览 • 1回复 待解决
如何用openGL做解码后处理
510浏览 • 0回复 待解决
es6启动问题有了解的吗?
887浏览 • 1回复 待解决
Xcomponent绘图流程分析
455浏览 • 1回复 待解决
OpenSL ES音频录制示例调用崩溃
722浏览 • 1回复 待解决
XComponent 怎么设置为透明
757浏览 • 1回复 待解决
Xcomponent、NativeImage开发指导
438浏览 • 1回复 待解决
xComponent组件帧率怎么统计?
244浏览 • 1回复 待解决
XComponent组件如何设置背景颜色
847浏览 • 1回复 待解决
XComponent 怎么设置成透明
555浏览 • 1回复 待解决
使用XComponent组件显示相机的预览输出流时,如何获取相机的帧数据
1034浏览 • 1回复 待解决
XComponent、NativeDrawing实现2D图形绘制
419浏览 • 1回复 待解决
鸿蒙不支持OpenGL着色器相关的glCreateShader和glCreateProgram怎么破?
8661浏览 • 3回复 已解决
XComponent是怎么与native进行关联的?
926浏览 • 1回复 待解决
编写一个工程,进行Native XComponent开发
285浏览 • 1回复 待解决
XComponent的onLoad和C++层的onSurfaceCreated的时序关系
631浏览 • 0回复 待解决
动态缩放XComponent大小和视频播放时的性能对比
641浏览 • 1回复 待解决
Native XComponent、Drawing、手势实现上下滑动文本和图形拖移
337浏览 • 1回复 待解决
ijkplayer结合XComponent组件播放视频时根据视频尺寸和组件尺寸设置视频缩放模式
583浏览 • 0回复 待解决
Page里通过XComponent显示相机预览,应用切到后台再切到前台,相机预览画面变成黑色了
434浏览 • 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 环境。所有线程的处理依赖开发者自己实现。