移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (2) - 移植 nanovg

AWTK 使用 nanovg 作为显示的后端,能否将 nanovg 成功移植到 HarmonyOS 上是一个关键问题,所以我们先尝试移植 nanovg,不过实际情况比预想的要简单,整个过程没有遇到任何意外的问题。

1. 将 AWTK 的代码取到 entry/src/main/cpp 目录下。

entry/src/main/cpp
git clone https://gitee.com/zlgopen/awtk.git

2. 修改 CMakeLists.txt

主要下面的改动:

  • 添加头文件路径
  • 添加源文件
  • 设置编译选项。

完整 CMakeLists.txt 如下:


# the minimum version of CMake.
cmake_minimum_required(VERSION 3.4.1)# project
project(awtk_napi)set(NATIVE_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
set(AWTK_3RD_PATH ${NATIVE_ROOT_PATH}/awtk/3rd)
set(AWTK_SRC_PATH ${NATIVE_ROOT_PATH}/awtk/src)# include directory
include_directories(${NATIVE_ROOT_PATH}${AWTK_3RD_PATH}${AWTK_SRC_PATH}${AWTK_3RD_PATH}/nanovg/base${AWTK_3RD_PATH}/nanovg/gl${NATIVE_ROOT_PATH}/include${NATIVE_ROOT_PATH}/include/util)set(AWTK_FLAGS "-DNANOVG_GLES3=1 -DNANOVG_GL_IMPLEMENTATION=1 ")
set(CMAKE_C_FLAGS "${AWTK_FLAGS}")
set(CMAKE_CXX_FLAGS "${AWTK_FLAGS}")# build shared library
add_library(awtk_napi SHAREDawtk/3rd/nanovg/base/nanovg.cmodule.cppapp_napi.cpptetrahedron.cppnapi_manager.cppnapi_util.cpp)# link OpenHarmony native library (Use OpenGL)
target_link_libraries(awtk_napi PUBLIC EGL)
target_link_libraries(awtk_napi PUBLIC GLESv3)
target_link_libraries(awtk_napi PUBLIC hilog_ndk.z)
target_link_libraries(awtk_napi PUBLIC ace_ndk.z)
target_link_libraries(awtk_napi PUBLIC ace_napi.z)
target_link_libraries(awtk_napi PUBLIC libc++.a)
target_link_libraries(awtk_napi PUBLIC z)
target_link_libraries(awtk_napi PUBLIC uv)
target_link_libraries(awtk_napi PUBLIC libace_napi.z.so)

3. 修改 tetrahedron.cpp/tetrahedron.h 加入 nanovg 的绘制代码

  • 修改头文件
#include "nanovg.h"
#include "nanovg_gl.h"class Tetrahedron {
public:explicit Tetrahedron(std::string& id) : id(id) {}; int32_t Init(void* windowHandle, int windowWidth, int windowHeight);void Update(float angleXOffset, float angleYOffset);float GetAngleX(void);float GetAngleY(void);int32_t Quit(void);public:std::string id; NVGcontext* vg; 
private:GLuint LoadShader(GLenum type, const char *shaderSrc);GLuint CreateProgram(const char *vertexShader, const char *fragShader);EGLNativeWindowType mEglWindow;EGLDisplay mEGLDisplay = EGL_NO_DISPLAY;EGLConfig mEGLConfig = nullptr;EGLContext mEGLContext = EGL_NO_CONTEXT;EGLContext mSharedEGLContext = EGL_NO_CONTEXT;EGLSurface mEGLSurface = nullptr;GLuint mProgramHandle;float angleX = 30.0; /* default X angle */float angleY = 45.0; /* default Y angle */GLint mRotationLocation;GLint mTranslationLocation;GLint mMoveOriginLocation;int w;int h;
};
  • 初始化 nanovg

HardmonyOS NEXT 使用的是 OpenGL ES 3.0,所以我们使用 nvgCreateGLES3 函数。

    this->w = width;this->h = height;this->vg = nvgCreateGLES3(NVG_ANTIALIAS | NVG_STENCIL_STROKES);
  • 绘制代码

这里我们绘制一个红色的矩形。

  nvgBeginFrame(vg, w, h, 1, NVG_ORIENTATION_0);nvgBeginPath(vg);nvgFillColor(vg, nvgRGBA(255, 0, 0, 255));nvgRect(vg, w/4, h/4, w/2, h/2);nvgFill(vg);nvgEndFrame(vg);
  • 销毁 nanovg
    nvgDeleteGLES3(vg);

4. 编译并运行

可以看到一个 nanovg 绘制的矩形。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/462040.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

函数调用方法背后的原理

编译器实现函数调用时所遵循的一系列规则称为函数的“调用约定(Calling Convention)”,x86-64平台上的编译器随着操作系统的不同而有不同的约定。Windows上采用的是Wx64/Vector的标准,而类unix上采用systemV AMD64 ABI的调用标准。统一的调用…

Pinpoint(APM)进阶--插件开发

接上文 pinpoint支持编写插件来扩展监控的覆盖范围 这里重申下pinpoint一个trace的基本构成(最小单元为span) 插件结构 pinpoint插件由type-provider.yml 和实现组成 type-provider.yml 定义给插件使用的ServiceTypes和AnnotationKeys,并…

qt QPalette详解

1、概述 QPalette是Qt框架中用于管理颜色组和角色的一种机制。它允许开发者为应用程序中的不同组件(如窗口、按钮、文本框等)定义一套统一的颜色方案。QPalette通过定义颜色角色(如背景色、前景色、选择色等)和颜色组&#xff08…

什么是FUSE用户态文件系统

零. 文件系统 1. 为什么要有文件系统 文件系统是操作系统中管理文件和目录的一种机制。它提供了组织、存储、检索和更新文件的方法,主要如下: 数据组织:文件系统将数据组织成文件和目录,使用户能够更方便地管理和查找文件。每个…

<HarmonyOS第一课>应用/元服务上架的课后习题

善者,吾善之; 不善者,吾亦善之,德善。 信者,吾信之; 不信者,吾亦信之,德信。 圣人在天下,歙歙焉为天下浑其心,百姓皆注其耳目,圣人皆孩之。 通过&…

从源码到成品应用:互联网医院系统与在线问诊APP的开发全解析

今天将全面解析互联网医院系统和在线问诊APP的开发过程,从源码到成品应用,帮助您理解其中的关键技术和实施策略。 一、系统架构设计 互联网医院系统和在线问诊APP的开发首先需要一个合理的系统架构。通常,系统架构分为前端和后端两个部分。…

2024年【危险化学品生产单位安全生产管理人员】考试内容及危险化学品生产单位安全生产管理人员作业考试题库

题库来源:安全生产模拟考试一点通公众号小程序 危险化学品生产单位安全生产管理人员考试内容是安全生产模拟考试一点通生成的,危险化学品生产单位安全生产管理人员证模拟考试题库是根据危险化学品生产单位安全生产管理人员最新版教材汇编出危险化学品生…

企业出海网络:SD-WAN与专线混合组网方案

随着越来越多的国内企业进入海外市场,包括出海电商、游戏、社交网络和区块链等领域,它们通常需要使用海外服务器。同时,这些企业在国内也会拥有自己的机房、IDC或依赖其他云服务提供商的机房。在这种情况下,如何实现国内外之间的高…

vue 果蔬识别系统百度AI识别vue+springboot java开发、elementui+ echarts+ vant开发

编号:R03-果蔬识别系统 简介:vuespringboot百度AI实现的果蔬识别系统 版本:2025版 视频介绍: vuespringboot百度AI实现的果蔬识别系统前后端java开发,百度识别,带H5移动端,mysql数据库可视化 1 …

深度了解flink Flink 本地运行Standalone模式

环境准备 IDEA 必须git 必须maven 必须jdk 1.8 必须scala 2.12.7 源码下载 如果能访问github,下载github的源码(flink的代码托管网站) git clone https://github.com/apache/flink.git 如果不能访问github,可以通过码云下载(国内的代码托管平台) g…

【C语言】宏封装的实用总结

在C语言的广阔天地中,宏(Macro)犹如一门神秘的内功,掌握它,你将能够以不变应万变,以简洁驾驭复杂。今天,我们将深入探讨C语言宏封装的高级技巧,并通过一系列案例,让你领略…

Latex中Reference的卷号加粗的问题

找到模板中的.bst文件,查找volume,修改如下 添加bold,卷号会加粗,去掉则正常

parted 磁盘分区

目录 磁盘格式磁盘分区文件系统挂载使用扩展 - parted、fdisk、gdisk 区别 磁盘格式 parted /dev/vdcmklabel gpt # 设置磁盘格式为GPT p # 打印磁盘信息此时磁盘格式设置完成! 磁盘分区 开始分区: mkpart data_mysql # 分区名&…

基于Transformer的路径规划 - 第五篇 GPT生成策略_解码方法优化

上一篇:基于Transformer的路径规划 - 第四篇 GPT模型优化 在上一篇中,我尝试优化GPT路径生成模型,但没有成功。在随机生成的测试集上,路径规划成功率只有99%左右。而使用传统的路径规划算法,例如A*,路径规划…

【ROS的TF系统】

系列文章目录 TF系统简介 前面的章节实现了SLAM节点的建图功能: 激光雷达节点—> /scan话题 —>hector_mapping节点—> 地图数据话题/map 本期来实现SLAM节点的定位功能: TF(TransForm)主要描述的是两个坐标系的空间关…

Java中的线程安全问题(如果想知道Java中有关线程安全问题的基本知识,那么只看这一篇就足够了!)

前言:多线程编程已经广泛开始使用,其可以充分利用系统资源来提升效率,但是线程安全问题也随之出现,它直接影响了程序的正确性和稳定性,需要对其进行深入的理解与解决。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解…

奥数与C++小学四年级(第十八题 小球重量)

参考程序代码&#xff1a; #include <iostream> #include <vector>int main() {// 小球的重量std::vector<int> weights {1, 2, 3, 4, 5};// 用来存储可能的结果int a, b, c, d, e, x;// 穷举所有可能的 a, b, c, d, e 的组合for (int i 0; i < weight…

ESP32/ESP8266开发板单向一对多ESP-NOW无线通信

ESP32/ESP8266开发板单向一对多ESP-NOW无线通信 简介读取ESP32/ESP8266接收方Receiver的MAC地址ESP32/ESP8266发送方Sender程序ESP32/ESP8266接收方Receiver程序ESP-NOW通信验证总结 简介 本实验通过ESP-NOW无线通信协议实现多个ESP32/ESP 8266开发板向ESP32开发板发送数据。例…

Unity XR Interaction Toolkit 开发教程(2):导入 SDK【3.0 以上版本】

文章目录 &#x1f4d5;课程总结&#x1f4d5;安装 Unity 编辑器与打包模块&#x1f4d5;导入 OpenXR&#x1f4d5;导入 XR Interaction Toolkit&#x1f4d5;打包发布 获取完整课程以及答疑&#xff0c;工程文件下载&#xff1a; https://www.spatialxr.tech/ 视频试看链接&a…

直流电机在液压泵领域的应用

随着工业自动化的不断发展&#xff0c;液压技术已经成为现代工程中不可或缺的一部分。液压泵作为液压系统的核心部件&#xff0c;其性能直接关系到整个系统的效率和可靠性。近年来&#xff0c;直流电机因其独特的优势而逐渐应用于液压泵领域&#xff0c;为液压系统的提升与改进…