目录:

前言

背景

鸿蒙OpenGL-ISRC的结构

OpenGL-ISRC和鸿蒙SDK OpenGL的区别

OpenGL-ISRC的使用

前言

基于安卓平台的OpenGL(androidxref.com/9.0.0\_r3/)

实现功能的鸿蒙化迁移和重构,全球首发鸿蒙平台的OpenGL-ISRC,代码已经开源到(https://gitee.com/iscas-ohos/OpenGL_ISRC/tree/main)

欢迎各位下载使用并提出宝贵意见!

背景

OpenGL(Open Graphics Library)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API),可绘制从简单的图形到复杂的三维景象,操作在GPU之上,实现硬件加速渲染 。目前,Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做为三维图形标准,著名的动画制作软件Soft Image和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软ARC/INFO等等都是以OpenGL为基础制作完成的。OpenGL是个与硬件无关的软件接口,可以在不同的平台之间移植。

OpenGLES是OpenGL的高性能版本,删减了其中的低效能的操作方式,Android就是使用的这种标准,因此鸿蒙平台的OpenGL-ISRC也是使用的这种标准。

鸿蒙OpenGL-ISRC的结构

(1) Android的OpenGL库

(2) Harmony的OpenGL-ISRC库

(3)Harmony的OpenGL库

图1 :OpenGL库对比

由图1可知,OpenGL-ISRC整体的结构和Android OpenGL类似,不同之处在于OpenGL-ISRC由两个包组成,分别是android.opengl和ohos.opengl。android.opengl里放置的是目前支持版本的OpenGLES标准,ohos.opengl放置的是常用的图像处理类。且类的数量少于Android的OpenGL。下面对这几点给出解释。

(1)为什么其中一个包名是android.opengl?

采用C++实现接口的方式,通过so库的调用实现接口的调用。对于目前支持版本的OpenGLES标准这部分,Android已经开源了其生成的so库,为了避免功能重复开发,此处直接使用Android的so库,因此包名必须是android.opengl。

(2)OpenGL-ISRC为什么由两个包组成?

对于图像处理类的实现,若继续采用Android so库调用的方式,需要将图像处理类放置于android.opengl包下,此时运行鸿蒙环境,会出现方法声明重复的错误,见图2,表明图像处理类中的方法与鸿蒙底层存在的某些方法存在冲突,因此继续使用Android so库调用的方式不再可行。

图2:图像处理类放置于android.opengl包下的报错情况

在OpenGL-ISRC中,图像处理类这一部分,依旧采用C++实现接口,通过so库调用实现接口调用的方式。与android.opengl里的类不同的是,我们对图像处理的类的接口进行了鸿蒙化的移植重构,生成了全新的so库进行调用,适配了鸿蒙底层的环境,也避免了此处对安卓的依赖。

(3)OpenGL-ISRC为什么缺少EGL类?

鸿蒙SDK自带OpenGL库,见图1.(3),内部含有EGL类。OpenGL-ISRC是基于鸿蒙平台,所以直接使用了鸿蒙SDK自带OpenGL库的EGL类,避免了功能的重复开发。

(4)OpenGL-ISRC中的GLSuefaceprovider

OpenGL-ISRC中的GLSuefaceProvider在功能上和Android的GLSurfaceView相同。因为鸿蒙中的SurfaceView命名为SuefaceProvider,根据命名一致原则,OpenGL-ISRC中的GLSurfaceView命名为GLSuefaceProvider。

OpenGL-ISRC和鸿蒙SDK OpenGL的区别

OpenGL-ISRC是鸿蒙开源系统的功能相对完整的OpenGL ES库。从使用上来说,OpenGL-ISRC具有较大的独立性,与鸿蒙SDK OpenGL在实现方式、完善程度、功能提供等方面都存在较大不同。

(1) OpenGL-ISRC采用C++实现接口,通过so库调用实现接口调用的方式,而鸿蒙SDK OpenGL 的接口采用java实现的方式,二者的使用较为独立,不存在冲突; (2)图1.(2)和(3)的对比中可以看出,OpenGL-ISRC的所提供的功能是相对完善的,鸿蒙SDK OpenGL目前还缺少很多标准类,已存在的标准类内部功能也有不完整的现象。

(3)OpenGL-ISRC封装使用了鸿蒙SDK OpenGL的EGL类,避免功能重复开发,因此二者是互相完善的关系;

(4)由于鸿蒙SDK OpenGL的不完整性,OpenGL-ISRC支持的OpenGLES标准类的实现使用了安卓so库的调用,没有使用鸿蒙SDK OpenGL的OpenGLES标准。

OpenGL-ISRC的使用

(1)GlSurfaceProvider的使用示例

此处创建了GlSurfaceProvider控件,add到layout中进行显示,如图3所示。为了增强GlSurfaceProvider的可视化效果,在GlRenderer里面设置了一个红色的三角图形(三角具体属性见开源代码:https://gitee.com/iscas-ohos/OpenGL_ISRC/tree/main),显示效果如图4所示。

图3 GlSurfaceProvider的使用demo

图4 GlSurfaceProvider显示效果

(2)EGL和ETC1的使用示例

为了验证了EGL的显示效果,在initView()方法中给Viewport设置了紫色方块视图属性(见开源代码:https://gitee.com/iscas-ohos/OpenGL_ISRC/tree/main)。 为了验证ETC1的有效性,将ETC1.getEncodedDataSize()的结果输出到一个Text中进行显示。 当EGL显示紫色方块,Text上显示ETC1.getEncodedDataSize()的结果时,证明EGL和ETC1类可成功使用,二者的显示效果如图6所示。

图5 EGL和ETC1的使用demo

图6:EGL的显示效果、ETC1的输出效果

项目贡献人:戴研 郑森文 朱伟 陈美汝

作者:小雪糕123

想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com

全球首发—鸿蒙开源平台OpenGL的更多相关文章

  1. 【全网首发】鸿蒙开源三方组件--强大的弹窗库XPopup组件

    目录: 1.介绍 2.效果一览 3.依赖 4.如何使用 5.下载链接 6.<鸿蒙开源三方组件>文章合集 1. 介绍 ​ XPopup是一个弹窗库,可能是Harmony平台最好的弹窗库.它从 ...

  2. 全球第一免费开源ERP Odoo Ubuntu最佳开发环境独家首发分享

    起源 近年来随着国内的互联网经济的快速腾飞,诞生了很多开源软件创造的市场价值以及企业价值神话,特别是对于企业ERP领域,一直以来都是高昂的国内外产品充实,国内的中小成长型企业越来越需要一套好看又能打, ...

  3. !!!全球最流行开源硬件平台!不知道就OUT了!

    全球最流行的几个开源硬件平台!不知道就OUT了! 随着物联网的推广和普及,五年内全球会有200亿台智能设备的需求,而如今随着创客概念的兴起,开源硬件也越加的火热,让我们来看看现在都有哪些主流的开源硬件 ...

  4. 阿里巴巴Java开发规约插件全球首发!(转)

    https://mp.weixin.qq.com/s?__biz=MzI0NTE4NjA0OQ==&mid=2658355901&idx=1&sn=3169172bfc6819 ...

  5. 免费试用 | 多模 NoSQL 服务GeminiDB for Cassandra 全球首发

    PS:多模NoSQL服务GeminiDB重磅公测,免费体验,参与公测还有华为AI音响好礼相送~ 7月5日,华为云多模 NoSQL 服务GeminiDB for Cassandra正式对外定向邀测.华为 ...

  6. 为互联网业务而生:阿里云全球首发云Cassandra服务!

    引言:十年沉淀.全球宽表排名第一.阿里云首发云Cassandra服务 ApsaraDB for Cassandra是基于开源Apache Cassandra,融合阿里云数据库DBaaS能力的分布式No ...

  7. 鸿蒙开源第三方件组件——轮播组件Banner

    目录: 1.功能展示 2.Sample解析 3.Library解析 4.<鸿蒙开源第三方组件>系列文章合集 前言 基于安卓平台的轮播组件Banner(https://github.com/ ...

  8. 鸿蒙开源第三方组件——SlidingMenu_ohos侧滑菜单组件

    目录: 1.前言 2.背景 3.效果展示 4.Sample解析 5.Library解析 6.<鸿蒙开源第三方组件>文章合集 前言 基于安卓平台的SlidingMenu侧滑菜单组件(http ...

  9. R可视化lend_club 全球最大的P2P平台数据75W条

    lend_club 全球最大的P2P平台2007~2012年贷款数据百度云下载. 此文章基于R语言做简单分析. rm(list=ls()) #清除变量 gc() #释放内存 step1 考虑到后续分析 ...

随机推荐

  1. kafka架构,消息存储和生成消费模型,Kafka与其他队列对比,零拷贝,Kafka基本介绍

    kafka架构,消息存储和生成消费模型,Kafka与其他队列对比,零拷贝,Kafka基本介绍 一.初识kafka 1.1SparkStreaming+Kafka好处: 1.2Kafka的架构: 二.k ...

  2. shell(shell变量、条件表达式、流程控制)

    本章内容: 变量 运算 if语句 for语句 while语句 break.continue 实例 shell变量 1.shell变量简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数 ...

  3. 我们到底为什么要用 IoC 和 AOP

    作为一名 Java 开发,对 Spring 框架是再熟悉不过的了.Spring 支持的控制反转(Inversion of Control,缩写为IoC)和面向切面编程(Aspect-oriented ...

  4. Pytest(12)pytest缓存

    前言 pytest 运行完用例之后会生成一个 .pytest_cache 的缓存文件夹,用于记录用例的ids和上一次失败的用例. 方便我们在运行用例的时候加上--lf 和 --ff 参数,快速运行上一 ...

  5. EF6.2加载速度慢的解决方案

    最近的项目中一直有反馈,EF在第一次启动之后调用的话,加载速度很慢,在网上搜索了一下,基本就是三种解决方案. 在程序启动的时候将映射视图缓存下来. 使用Ngen生成EF的本地镜像. IIS8内置功能 ...

  6. CF - 392 C. Yet Another Number Sequence (矩阵快速幂)

    CF - 392 C. Yet Another Number Sequence 题目传送门 这个题看了十几分钟直接看题解了,然后恍然大悟,发现纸笔难于描述于是乎用Tex把初始矩阵以及转移矩阵都敲了出来 ...

  7. 2019 Multi-University Training Contest 1 Path(最短路+最小割)

    题意:给你n个点 m条边 现在你能够堵住一些路 问怎样能让花费最少且让1~n走的路比最短路的长度要长 思路:先跑一边最短路 建一个最短路图 然后我们跑一边最大流求一下最小割即可 #include &l ...

  8. 2019icpc徐州站 Cat 计蒜客 - 42540 && The Answer to the Ultimate Question of Life, The Universe, and Everything. 计蒜客 - 42545

    VJ链接:https://vjudge.net/contest/412095#problem/A Cat 计蒜客 - 42540 题意: 给你一个区间[L,R],给你现在拥有的钱S.你需要从[L,R] ...

  9. hdu1517 A Multiplication Game

    Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission ...

  10. hdu5247 找连续数

    Problem Description 小度熊拿到了一个无序的数组,对于这个数组,小度熊想知道是否能找到一个k 的区间,里面的 k 个数字排完序后是连续的. 现在小度熊增加题目难度,他不想知道是否有这 ...