首页 > 编程知识 正文

鸿蒙系统开源意味着什么(鸿蒙开源社区)

时间:2023-05-03 07:55:21 阅读:101334 作者:1011

基于安卓平台的OpenGL(http://androidxref.com/9.0.0_r3/)实现了功能的鸿蒙系统迁移和重构,鸿蒙系统平台的OpenGL-ISRC全球首创。代码是开源的。欢迎下载使用,并给出宝贵意见!

开源代码:

https://gitee.com/iscas-ohos/OpenGL_ISRC/tree/main01背景

OpenGL(Open Graphics Library)是一种用于渲染2D和3D矢量图形的跨语言、跨平台的应用编程接口(API),可以将简单的图形绘制到复杂的3D场景中,并在GPU上运行,实现硬件加速渲染。

目前,微软、SGI、IBM、DEC、SUN、惠普等大公司都采用了OpenGL作为3D图形标准。

著名的动画软件Soft Image和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软件ARC/INFO等都是基于OpenGL的。

OpenGL是一个独立于硬件的软件接口,可以在不同平台之间移植。

OpenGLES是OpenGL的高性能版本,省略了低效率的操作模式。安卓是使用的标准,所以鸿蒙系统平台的OpenGL-ISRC也是使用的标准。

02鸿蒙系统OpenGL-ISRC结构

安卓的OpenGL库

和谐的OpenGL-ISRC库

和声的OpenGL库

根据图1和OpenGL库的对比,OpenGL-ISRC的整体结构与安卓OpenGL相似。

不同的是,OpenGL-ISRC由两个包组成,即android.opengl和ohos.opengl

Android.opengl是目前支持的opengl标准版本,而ohos.opengl是常用的图像处理类。而且类的数量比安卓的OpenGL少。

解释了以下几点:

为什么其中一个包叫android.opengl?

用c实现接口,通过so库的调用调用接口。对于OpenGLES标准中目前支持该版本的部分,Android已经打开了其生成的so库。

为了避免功能的重复开发,这里直接使用安卓的so库,所以包名必须是android.opengl

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

对于图像处理类的实现,如果继续使用Android so库调用方法,需要将图像处理类放在android.opengl包下。

此时在运行鸿蒙系统环境时,会出现重复方法声明的错误,如图2所示,说明图像处理类中的方法与鸿蒙系统底层存在的一些方法冲突,所以继续使用安卓so库调用已经不可行。

图android.opengl包中放置的图像处理类的错误报告

在OpenGL-ISRC中,在图像处理类的这一部分,接口仍然是用C实现的,接口由so库调用。

与android.opengl中的类不同,我们对鸿蒙系统图像处理类的接口进行了移植和重构,生成了一个全新的接口。

的 so 库进行调用,适配了鸿蒙底层的环境,也避免了此处对安卓的依赖。

③OpenGL-ISRC 为什么缺少 EGL 类?

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

④OpenGL-ISRC 中的 GLSuefaceprovider

OpenGL-ISRC 中的 GLSuefaceProvider 在功能上和 Android 的 GLSurfaceView 相同。

因为鸿蒙中的 SurfaceView 命名为 SuefaceProvider,根据命名一致原则,OpenGL-ISRC 中的 GLSurfaceView 命名为 GLSuefaceProvider。

03与鸿蒙 SDK OpenGL 的区别

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

①OpenGL-ISRC 采用 C++ 实现接口,通过 so 库调用实现接口调用的方式,而鸿蒙 SDK OpenGL 的接口采用 Java 实现的方式,二者的使用较为独立,不存在冲突。

②图1,(2)和(3)的对比中可以看出,OpenGL-ISRC 的所提供的功能是相对完善的,鸿蒙 SDK OpenGL 目前还缺少很多标准类,已存在的标准类内部功能也有不完整的现象。

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

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

04OpenGL-ISRC 的使用

①GlSurfaceProvider 的使用示例

此处创建了 GlSurfaceProvider 控件,add 到 layout 中进行显示,如图 3 所示。

为了增强 GlSurfaceProvider 的可视化效果,在 GlRenderer 里面设置了一个红色的三角图形。

图 3 :GlSurfaceProvider 的使用 demo

三角具体属性见开源代码:https://gitee.com/iscas-ohos/OpenGL_ISRC/tree/main,显示效果如图 4 所示。

图 4 :GlSurfaceProvider 显示效果

②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

原文链接:https://mp.weixin.qq.com/s/otCLR0n4d23lxDB0L0Il5A

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。