蓝盟IT小贴士,来喽!
前言
基于Android平台的OPENGL (3358 Android Xref.com/9.0.0 _ R3/)实现了功能的鸿蒙化迁移和重构,全球首个鸿蒙平台OpenGL-ISRC的代码是,
背景
OpenGL (开放图形库)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API ),是简单的图形目前,微软、SGI、IBM、DEC、SUN、惠普等大型企业采用OpenGL作为三维图形标准,知名动画制作软件Soft Image和3D Studio MAX、仿真软件Open Inventor OpenGL是一种与硬件无关的软件接口,可以在不同的平台之间移植。
OpenGLES是OpenGL的高性能版本,削减了其中低性能的操作方式,安卓是使用的这个标准,因而鸿蒙平台的OpenGL-ISRC也是使用的这个标准。
OpenGL-ISRC的整体结构与Android OpenGL相似,但OpenGL-ISRC由android.opengl和ohos.opengl两个软件包组成。 android.opengl中放置了现在支持的版本的OpenGLES标准,ohos.opengl中放置了一般的图像处理类。 类的数量少于安卓的OpenGL。 就这一点进行说明。
(1)软件包名称之一为android.opengl的理由
采用c实现接口的方式,通过so库的调用实现接口的调用。 在当前支持的OpenGLES标准版本的这一部分中,Android开放生成的so库。 为了避免重新开发功能,此处直接使用安卓的so库,因此软件包名称必须为android.opengl。(2) OpenGL-ISRC为什么由两个包构成?
对于图像处理类的实现,如果继续调用Android so库的方法,则必须将图像处理类置于android.opengl包下。 在这种情况下,如果执行鸿蒙环境,将发生方法声明重复的错误。 如图2所示,由于图像处理类的方法和鸿蒙底层存在的方法发生冲突,因此无法继续安卓so库调用的方式。
在OpenGL-ISRC中,图像处理类的这一部分仍然采用c实现接口,通过so库调用实现接口调用的方式。 与android.opengl的类不同,我们对图像处理类的接口进行鸿蒙化移植重建,生成并调用新的so库,适应鸿蒙底层的环境,也避免了对Android的依赖。
(3) OpenGL-ISRC缺乏EGL等级的理由
鸿蒙SDK拥有OpenGL库。 请参见图1.(3)。 内部包含EGL类。 由于OpenGL-ISRC基于鸿蒙平台,因此直接使用鸿蒙SDK的带OpenGL库的EGL类,避免了功能的重复开发。
(4) OpenGL-ISRC的GLSuefaceprovider
OpenGL-ISRC的GLSuefaceProvider在功能上与安卓的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支持的OPES标准类的实现中使用了Androidso库的调用,没有使用鸿蒙SDK OPES标准。
文/上海蓝盟 IT外包专家