介绍
XComponent 提供了应用在 native 侧调用 OpenGLES 图形接口的能力,本文主要介绍如何配合 Vsync 事件,完成自定义动画。在这种实现方式下,自定义动画的绘制不在 UI 主线程中完成,即使主线程卡顿,动画效果也不会受影响。
效果演示
实现思路
- CMakelists 增加 lib 依赖
find_library( # Sets the name of the path variable.
libvsync-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
native_vsync )
- 创建 vsync 实例
#include <native_vsync/native_vsync.h>
SyncParam *param = new SyncParam();
param->eglCore = this;
param->window = window;
mVsync = OH_NativeVSync_Create(GAME_SYNC_NAME, 3);
if (!mVsync) {
LOGE("EGLCore:: Create mVsync failed");
return;
}
- 创建 OH_NativeVSync_RequestFrame 回调,并在回调中使用 egl 接口进行绘制
OH_NativeVSync_RequestFrame(
mVsync,
[](long long timestamp, void *data) {
LOGI("EGLCore::OH_NativeVSync_RequestFrame timestamp = %{public}lld", timestamp);
SyncParam *syncParam = (SyncParam *)data;
if (syncParam == nullptr) {
return;
}
EGLCore *eglCore = syncParam->eglCore;
void *window = syncParam->window;
if (eglCore == nullptr || window == nullptr) {
return;
}
eglCore->mEglWindow = static_cast<EGLNativeWindowType>(window);
...
eglCore->DrawSquare();
eglCore->switchSpecular();
eglCore->switchAmbient();
},
param
);
此处需要注意,frame callback 回调的执行线程不是当前申请 OH_NativeVSync_RequestFrame 的线程,而是 vsync 实例中申请的 eventlooper 线程。所以,egl Window 的初始化也需要放到 callback 中创建。
高性能知识点
- 一个 Vsync 实例对应一个 EventRunner 创建的新线程,在这个线程中执行渲染处理,理论上这个线程的运算耗时,只会影响动画帧率,不会影响应用主线程的帧率。
- 其余 OpenGLES 的绘制方法,与社区的 OpenGLES 的用法一致
工程结构&模块类型
XcomponentVsync // har类型
|---cpp // native xcomponent配合vsync实现自定义动画
|---pages
| |---XcomponentVsync.ets // Xcomponent 组件加载自定义动画
模块依赖
utils
@ohos/routermodule(动态路由)
参考资料
XComponent
Vsync
EventRunner
为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
《鸿蒙开发学习手册》:
如何快速入门:https://qr21.cn/FV7h05
- 基本概念
- 构建第一个ArkTS应用
- ……
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开发:https://qr21.cn/FV7h05
- Ability开发
- UI开发
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 设备管理
- 设备使用信息统计
- DFX
- 国际化开发
- 折叠屏系列
- ……
鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH
鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向