文档管理中心
您当前正在浏览新版开发者文档中心,目录分类和层级有所调整。点击左侧当前文档分类名称前的“☰”图标,可切换文档分类。 了解新版目录
指南与API参考指南图形ArkGraphics 2D(方舟2D图形服务)NativeVSync开发指导 (C/C++)

NativeVSync开发指导 (C/C++)

场景介绍

NativeVSync模块用于获取系统VSync信号,提供OH_NativeVSync实例的创建、销毁及设置VSync回调函数的功能。VSync信号触发时,将调用已设置的回调函数。

接口说明

展开
接口名 描述
OH_NativeVSync_Create(const char* name, unsigned int length) 创建一个OH_NativeVSync实例,每次调用都会产生一个新的实例并创建一个vsync线程接收处理回调。本接口需要与OH_NativeVSync_Destroy接口配合使用,否则会存在内存泄漏。
OH_NativeVSync_Destroy(OH_NativeVSync* nativeVsync) 销毁OH_NativeVSync实例。
OH_NativeVSync_FrameCallback(long long timestamp, void *data) 回调函数的形式,timestamp表示时间戳,data为回调函数入参。回调的处理在vsync初始化时创建的线程内。
OH_NativeVSync_RequestFrame(OH_NativeVSync* nativeVsync, OH_NativeVSync_FrameCallback callback, void* data) 请求下一次VSync信号,当信号到来时,调用回调函数callback。
OH_NativeVSync_GetPeriod(OH_NativeVSync* nativeVsync, long long* period) 获取当前Vsync信号周期。

详细的接口说明请参考NativeVsync。

开发步骤

以下步骤描述如何使用NativeVSync提供的Native API接口创建和销毁OH_NativeVSync实例,以及如何设置VSync回调函数。

添加动态链接库

CMakeLists.txt中添加以下库文件。

收起
自动换行
深色代码主题
复制
  1. libnative_vsync.so

头文件

收起
自动换行
深色代码主题
复制
  1. #include <native_vsync/native_vsync.h>
  1. 首先需要定义一个VSync回调函数。

    收起
    自动换行
    深色代码主题
    复制
    1. void RenderEngine::OnVsync(long long timestamp, void *data)
    2. {
    3. OH_LOG_Print(LOG_APP, LOG_DEBUG, LOG_PRINT_DOMAIN, "RenderEngine", "OnVsync %{public}lld.", timestamp);
    4. auto renderEngine = reinterpret_cast<RenderEngine *>(data);
    5. if (renderEngine == nullptr) {
    6. return;
    7. }
    8. renderEngine->vSyncCnt_++;
    9. renderEngine->wakeUpCond_.notify_one();
    10. }
  2. 创建OH_NativeVSync实例。

    收起
    自动换行
    深色代码主题
    复制
    1. const char* demoName = "NativeImageSample";
    2. nativeVsync_ = OH_NativeVSync_Create(demoName, strlen(demoName));
  3. 通过OH_NativeVSync实例设置VSync回调函数。

    收起
    自动换行
    深色代码主题
    复制
    1. wakeUpCond_.wait(lock, [this]() { return wakeUp_ || vSyncCnt_ > 0; });
    2. wakeUp_ = false;
    3. if (vSyncCnt_ > 0) {
    4. vSyncCnt_--;
    5. (void)OH_NativeVSync_RequestFrame(nativeVsync_, &RenderEngine::OnVsync, this);
    6. OH_NativeVSync_GetPeriod(nativeVsync_, &period);
    7. }
  4. 销毁OH_NativeVSync实例。

    收起
    自动换行
    深色代码主题
    复制
    1. OH_NativeVSync_Destroy(nativeVsync_);
    2. nativeVsync_ = nullptr;