图形引擎的跨平台移植方法和装置与流程

文档序号:13136329阅读:460来源:国知局
图形引擎的跨平台移植方法和装置与流程

本申请涉及图像技术领域,特别涉及一种图形引擎的跨平台移植方法和装置。



背景技术:

dali(dynamicanimationlibrary,动态动画库)引擎是泰泽(tizen)平台的ui(userinterface,用户界面)图形引擎,负责界面布局、控件以及特效等。dali引擎主要分四个模块(如图1所示,该图来源于dali官方pdf):core核心模块,adaptor适配模块,toolkit工具集,demo演示模块。其中,core模块主要实现了数学模型计算,图形绘制,动画渲染,核心元素定义等功能,由是一些底层且核心的模块组成。adaptor模块主要是进行事件处理,本地窗口适配,图片资源解析等,是和具体平台相关的模块。toolkit模块是用于实现按钮,图片视图,滑动条等一些控件的模块。demo模块主要是基于引擎实现的一些演示小例子,供开发者参考开发。

目前,dali引擎主要在tizen平台和ubuntu平台中运行使用,但是无法跨平台应用到目前使用较广泛的安卓(android)平台。



技术实现要素:

本申请旨在至少在一定程度上解决上述技术问题。

为此,本申请的第一个目的在于提出一种图形引擎的跨平台移植方法,实现了将图形引擎跨平台移植运行,便于图形界面展示的控制。

本申请的第二个目的在于提出一种图形引擎的跨平台移植装置。

为达上述目的,根据本申请第一方面实施例提出了一种图形引擎的跨平台移植方法,包括以下步骤:从适用于第一操作系统平台的图形引擎中提取与操作系统平台相关的功能模块;将所述与操作系统平台相关的功能模块转换为与第二操作系统平台相适配的功能模块;将进行转换后的图形引擎在所述第二操作系统平台中运行,以使所述第二操作系统平台通过所述转换后的图形引擎控制界面展示。

本申请实施例的图形引擎的跨平台移植方法,通过从适用于第一操作系统平台的图形引擎中提取与操作系统平台相关的功能模块,并将其转换为与第二操作系统平台相适配的功能模块,并将进行转换后的图形引擎在第二操作系统平台中运行,以使第二操作系统平台通过 转换后的图形引擎控制界面展示,实现了将图形引擎从一个平台到另一个平台的移植以及图形引擎跨平台运行,便于图形界面展示的控制,降低了图形引擎开发的工作量。

本申请第二方面实施例提供了一种图形引擎的跨平台移植装置,包括:提取模块,用于从适用于第一操作系统平台的图形引擎中提取与操作系统平台相关的功能模块;转换模块,用于将所述与操作系统平台相关的功能模块转换为与第二操作系统平台相适配的功能模块;运行模块,用于将进行转换后的图形引擎在所述第二操作系统平台中运行,以使所述第二操作系统平台通过所述转换后的图形引擎控制界面展示。

本申请实施例的图形引擎的跨平台移植装置,通过从适用于第一操作系统平台的图形引擎中提取与操作系统平台相关的功能模块,并将其转换为与第二操作系统平台相适配的功能模块,并将进行转换后的图形引擎在第二操作系统平台中运行,以使第二操作系统平台通过转换后的图形引擎控制界面展示,实现了将图形引擎从一个平台到另一个平台的移植以及图形引擎跨平台运行,便于图形界面展示的控制,降低了图形引擎开发的工作量。

本申请的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。

附图说明

本申请的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:

图1为dali引擎的结构示意图;

图2为根据本申请一个实施例的图形引擎的跨平台移植方法的流程图;

图3为根据本申请另一个实施例的图形引擎的跨平台移植方法的流程图

图4为根据本申请一个实施例的opengles接口与本地窗口链接示意图;

图5为根据本申请另一个实施例的图形引擎的跨平台移植方法的流程图;

图6为根据本申请另一个实施例的图形引擎的跨平台移植方法的流程图;

图7为根据本申请一个实施例的图形引擎的跨平台移植装置的结构示意图一;

图8为根据本申请一个实施例的图形引擎的跨平台移植装置的结构示意图一;

图9为根据本申请一个实施例的图形引擎的跨平台移植装置的结构示意图一。

具体实施方式

下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能理解为对本申请的限制。

下面参考附图描述根据本申请实施例的图形引擎的跨平台移植方法和装置。

图2为根据本申请一个实施例的图形引擎的跨平台移植方法的流程图。

如图2所示,根据本申请实施例的图形引擎的跨平台移植方法,包括:

s201,从适用于第一操作系统平台的图形引擎中提取与操作系统平台相关的功能模块。

图形引擎是负责界面的布局、控件及特效等的绘制。一般来说,由于各个操作系统平台的开发语言不同,可针对不同的操作系统平台分别开发相应的图形引擎。在本发明的一个实施例中,图形引擎可为动态动画库(dali,dynamicanimationlibrary,动态动画库)引擎,动态动画库引擎是一种tizen(一种由两大linux联盟limofoundation和linuxfoundation整合资源优势,携手英特尔和三星电子,共同开发的针对手机和其它设备的操作系统)平台的ui图形图像引擎。功能模块可为适配器模块,第一操作系统平台可为泰泽平台,第二操作系统平台可为安卓平台。

在本申请的实施例中,图形引擎的跨平台移植也即将适用于第一操作系统平台的图形引擎移植到第二操作系统平台,以使第二操作系统平台能够基于该图形引擎控制界面展示。以动态动画库引擎为例,并对将动态动画库引擎从tizen平台应用到android安卓平台的实现方案进行说明。

应当理解,对于其他图形引擎的跨平台移植,或者将动态动画库引擎应用到其他操作系统平台的实现方案不一一进行说明。

如图1所示,动态动画库引擎主要包括四个模块:核心core模块11、适配器adaptor模块12、工具集toolkit模块13、演示demo模块14(图中未示出)。其中,core模块11主要用于图像图像处理过程中的数学模型计算、图形绘制、动画渲染、核心元素定义等,是底层且核心的模块。adaptor模块12主要用于事件处理、本地窗口适配、图片资源解析等,是和具体操作系统平台相关的模块。toolkit模块13是按钮、图片视图、滑动条等一些控件的实现模块。demo模块14主要是图形引擎实现的一些演示小例子,供开发者参考开发。

因此,可以看出,在动态动画库引擎中与操作系统平台相关的功能模块为adaptor模块。因此,在将动态动画库引擎从tizen平台移植到android安卓平台时,可针对adaptor模块转换为与android本地显示部分相适配的功能模块即可。

s202,将所述与操作系统平台相关的功能模块转换为与第二操作系统平台相适配的功能模块。

在本申请的实施例中,在转换前,与操作系统平台相关的功能模块中功能文件是适用于第一操作系统平台的,因此,需要将与操作系统平台相关的功能模块中的功能文件替换为适用于第二操作系统平台的功能文件,然后使用第二操作系统平台的编译工具重新进行交叉编译以生成与第二操作系统平台相适配的功能模块。

仍以动态动画库引擎为例进行说明,与操作系统平台相关的adaptor模块,主要包括图片资源解析子模块、事件处理子模块以及本地窗口适配子模块三个子模块。因此,在进行转换时,主要集中在这三个子模块中。具体地,如图3所示,在本申请的一个实施例中,s202可包括以下步骤:

s301,将所述图片资源解析子模块中基于所述第一操作系统平台的图片解析工具转换为基于所述第二操作系统平台的图片解析工具。

在本申请的一个实施例中,可将所述基于所述第一操作系统平台的图片解析工具中的解析规则文件替换为基于所述第二操作系统平台的解析规则文件,然后,使用所述第二操作系统平台的编译工具对替换所述解析规则文件后的图片解析工具进行交叉编译,生成基于所述第二操作系统平台的图片解析工具。

其中,图片资源是用于动态动画库引擎的底层opengl(opengraphicslibrary,开放图形库,定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口)纹理贴图使用的。举例来说,图片资源的格式一般为jpg、png、jpeg、gif等压缩格式存储的,这些压缩格式的图片资源需要解析为非压缩格式的bitmap位图格式才能提供给底层的opengl使用。但基于tizen平台的动态动画库引擎图片资源解析是基于ubuntu(乌班图,一个以桌面应用为主的linux操作系统)平台的解析工具实现。因此,需要将基于ubuntu平台的图片解析工具替换成基于android平台的图片解析工具。

具体地,可首先确定linux平台的各个格式开源的图片解析工具,并将各个工具源码的makefile文件替换为android平台mk文件,然后使用android平台的ndk编译工具进行交叉编译,得到android平台native层可以使用的图片解析工具。android平台的ndk(nativedevelopmentkit,源生软件开发包)编译工具有很多种,本申请可选择其中一种进行举例说明,例如,图片解析工具可为:

libjpeg-turbo-android,libpng-android,platform_external_giflib.

相对应的,该图片解析工具所依赖的库为:

android-libdrm,boost-for-android-prebuilt,curl-android-ios,nodejs-android。

s302,根据所述第二操作系统平台的系统架构标准对所述事件处理子模块进行封装和映射,以将所述事件处理子模块中的事件处理模型映射至所述第二操作系统平台。

动态动画库引擎的事件响应和处理都是使用的标准linux的事件处理模型,而标准linux的事件处理模型是无法直接在android平台上使用的,因此需要将动态动画库引擎的事件处理模型映射转换为android平台的事件处理模型。android平台也同样是基于linux内核的,其事件响应和处理也是使用的基于linux事件响应机制的,只是android平台的上层java层通过java虚拟机对事件处理模型进行了封装和映射处理。因此,在本申请的实施例中,可 通过java虚拟机对所述事件处理子模块进行封装和映射,以将所述事件处理子模块中的事件处理模型映射至android平台。也就是说,可以按android平台的系统架构标准将linux的事件处理模型进行映射转换,即可映射到android平台。其中,在进行映射转换时所使用的映射规则与android平台的上层java层通过java虚拟机对事件处理模型进行封装和映射处理时所使用的规则相同。

s303,对所述本地窗口适配子模块的嵌入式图形库egl接口进行配置,以使所述egl接口适配所述第二操作系统平台。

图形引擎在不同平台之间的切换主要是要把渲染绘制内容对应到具体的硬件平台,才能正常的显示。动态动画库引擎负责图形渲染的部分使用的是opengles接口实现的,opengles(openglforembeddedsystems,嵌入式系统的开放图形库,是opengl三维图形应用程序接口的子集)本身是跨平台的接口,即是与平台无关的接口。android平台也是支持opengles接口的。具体地,如图4所示,在将渲染绘制的内容对应到具体硬件平台时,负责链接opengles接口和本地窗口(本地egl画布或屏幕缓存)的是egl(embeddedgraphicslibrary,嵌入式图形库)接口,因此在图形引擎的移植过程中,只需要适配android平台对应的egl接口配置即可。这也是动态动画库引擎移植的关键部分。

具体地,如图5所示,在本申请的一个实施例中,s303可包括以下步骤:

s501,在所述egl接口中创建所述第二操作系统平台的egl画布,以使所述第二操作系统平台在控制界面展示时通过所述egl画布进行本地窗口和画布操作。

以动态动画库引擎移植到android平台上为例,即创建android平台的eglsurface(egl画布)。

具体而言,举例来说,可首先用android平台的显示协议文件android-render-surface.h/android-render-surface.cpp对应替换原始动态动画库引擎中的显示协议文件ecore-wl-render-surface.h/ecore-wl-render-surface.cpp和ecore-x-render-surface.h/ecore-x-render-surface.h,其中wl代表wayland(一种linux平台下的显示协议)的显示,x代表x11(xwindows系统下的显示协议)。由此,通过上述替换,可将原本动态动画库引擎中的适用于tizen平台的显示协议文件替换为了适用于android平台的显示协议文件。

然后,通过以下操作实现android平台本地窗口以及surface操作。具体地,可通过surfacecreated()来创建android平台的本地窗口nativewindow:anativewindow。通过getwindow()来获取创建好的本地窗口anativewindow。通过createwindow()填充动态动画库引擎的mposition结构(位置结构)。

其中,结构中左上角的坐标xy分别赋值(0,0),宽和高(w,h)分别用 anativewindow_getwidth(mwindow)和anativewindow_getheight(mwindow)来获取。

进而,可将动态动画库引擎中的用来创建egl画布的函数createeglsurface(eglinterface&eglif)中egl.createsurfacewindow(mwindow,mcolordepth)的mwindow参数用android平台的本地窗口anativewindow来填充。由此,实现了动态动画库引擎中egl画布与本地窗口的关联。在后续界面控制过程中,android平台即可调用动态动画库引擎,并通过动态动画库引擎中对画布的操作映射到对本地窗口的相应操作。

s502,根据所述第二操作系统平台对所述egl接口的属性和接口进行定义。

具体地,以动态动画库引擎移植到android平台上为例,可创建基于android平台的egl接口配置文件egl-implementation-android.cpp,并用其对应替换动态动画库引擎中原有的配置文件egl-implementation-wl.cpp(对应于wayland显示协议)和egl-implementation-x.cpp(对应于x11显示协议)。

基于android平台的egl接口配置文件可实现android平台的egl初始化以及配置操作。在该文件中用android平台egl接口定义文件egl/egl.h替换掉动态动画库引擎中原有的wayland-egl.h,以对动态动画库引擎的egl接口进行定义,使定义后的动态动画库引擎egl接口适用于android平台。

在对egl接口的属性进行定义时,可将动态动画库引擎中原有的meglnativedisplay成员赋值为android平台anativewindow句柄,从而将动态动画库引擎中的显示窗口与android平台的本地窗口相关联。

在将动态动画库引擎中的显示窗口与android平台的本地窗口相关联之后,通过android平台可访问并获取动态动画库引擎中的属性数据。其中,属性数据可包括显示屏幕的尺寸、窗口的属性数据(如,支持的窗口宽高,颜色深度等),缓冲区的个数、类型等信息。

然后,可使用获取的动态动画库引擎的属性数据填充android平台中egl的接口,如initializegles()、createcontext()、makecontextcurrent()、swapbuffers()等接口。从而,可通过android平台中egl的接口将动态动画库引擎的属性数据,输入到android平台,实现动态动画库引擎与android平台链接起来。。

而egl接口是负责android平台显示的接口,因此,在根据所述第二操作系统平台对所述egl接口的属性和接口进行定义后,实现了动态动画库引擎与android平台的链接,可通过动态动画库引擎在android平台中进行图形绘制。

s503,在所述egl接口中构建引擎调用接口函数,以使所述第二操作系统平台在控制界面展示时将通过所述引擎调用接口函获取所述第二操作系统平台的显示信息。

具体地,以动态动画库引擎移植到android平台上为例,创建基于android平台的屏幕显示文件display-connection-impl-android.cpp,并用其对应替换动态动画库引擎中原有的屏幕 显示文件display-connection-impl-x.cpp(对应于x11显示协议)或display-connection-impl-wl.cpp(对应于wayland显示协议)文件。

然后,实现用于获取屏幕信息的getdpi()接口,动态动画库引擎是通过ecore_wl_dpi_get()和ecore_x_dpi_get()来获取屏幕信息的,在android平台需要替换为通过java层的displaymetricsdm=newdisplaymetrics()获取屏幕材质属性信息dm,在获取屏幕材质属性之后,可通过getwindowmanager().getdefaultdisplay().getmetrics(dm)来获取到屏幕的宽xdpi和高ydpi。也就是说,获取到屏幕的宽和高需要两步:第一步首先需要获取到屏幕的材质属性dm,第二步由这个屏幕材质属性dm来获取到屏幕支持的宽和高。

s203,将进行转换后的图形引擎在所述第二操作系统平台中运行,以使所述第二操作系统平台通过所述转换后的图形引擎控制界面展示。

本申请实施例的图形引擎的跨平台移植方法,通过从适用于第一操作系统平台的图形引擎中提取与操作系统平台相关的功能模块,并将其转换为与第二操作系统平台相适配的功能模块,并将进行转换后的图形引擎在第二操作系统平台中运行,以使第二操作系统平台通过转换后的图形引擎控制界面展示,实现了将图形引擎从一个平台到另一个平台的移植以及图形引擎跨平台运行,便于图形界面展示的控制,降低了图形引擎开发的工作量。

在本申请的一个实施例中,所述功能模块还包括示例演示子模块,所述将所述与操作系统平台相关的功能模块转换为与第二操作系统平台相适配的功能模块,还包括:

s601,构建示例演示函数。

在本申请的实施例中,可针对示例库中的一个演示示例进行演示,以使转换后的图形引擎能够适配第二操作系统平台。以demo示例:mesh-morph-example为例,可测试构建该示例的演示函数:demo_main(),并用其替换动态动画库引擎中原有的main()函数,以实现相同的功能。

然后,通过android_main()进行初始化操作,在初始化的过程中,可填充structandroid_app*state的结构,具体地,可分别用state->userdata=&engine,state->onappcmd=engine_handle_cmd,state->oninputevent=engine_handle_input。

s602,设置所述示例演示函数的调用接口。

举例来说,调用demo_main()的接口可为:androidcore_init(&demo_main),其中,这个接口中实现shutdownrequested=false,init_func=demo_main,以定义示例演示关闭时不显示提示消息,并定义标准接口为系统示例演示函数demo_main。

s603,基于所述第二操作系统平台的接口标准对所述调用接口进行配置,以使在所述第二操作系统平台能成功调用所述示例演示函数。

在本发明的一个实施例中,可通过标准jni接口(javanativeinterface,java源生接口) 和上层javaactivity执行示例演示,即可使本地窗口适配子模块能够适配demo。

由此可以使转换后的图形引擎中的本地窗口适配子模块能够适配demo,便于在第二操作系统平台进行demo演示。

与上述实施例提供的图形引擎的跨平台移植方法相对应,本申请还提出一种图形引擎的跨平台移植装置。

图7为根据本申请一个实施例的图形引擎的跨平台移植装置的结构示意图一。

如图7所示,根据本申请实施例的图形引擎的跨平台移植装置,包括:提取模块10、转换模块20和运行模块30。

具体地,提取模块10用于从适用于第一操作系统平台的图形引擎中提取与操作系统平台相关的功能模块。

图形引擎是负责界面的布局、控件及特效等的绘制。一般来说,由于各个操作系统平台的开发语言不同,可针对不同的操作系统平台分别开发相应的图形引擎。在本发明的一个实施例中,图形引擎可为动态动画库(dali,dynamicanimationlibrary,动态动画库)引擎,动态动画库引擎是一种tizen(一种由两大linux联盟limofoundation和linuxfoundation整合资源优势,携手英特尔和三星电子,共同开发的针对手机和其它设备的操作系统)平台的ui图形图像引擎。功能模块可为适配器模块,第一操作系统平台可为泰泽平台,第二操作系统平台可为安卓平台。

在本申请的实施例中,图形引擎的跨平台移植也即将适用于第一操作系统平台的图形引擎移植到第二操作系统平台,以使第二操作系统平台能够基于该图形引擎控制界面展示。以动态动画库引擎为例,并对将动态动画库引擎从tizen平台应用到android安卓平台的实现方案进行说明。

应当理解,对于其他图形引擎的跨平台移植,或者将动态动画库引擎应用到其他操作系统平台的实现方案不一一进行说明。

如图1所示,动态动画库引擎主要包括四个模块:核心core模块11、适配器adaptor模块12、工具集toolkit模块13、演示demo模块14(图中未示出)。其中,core模块11主要用于图像图像处理过程中的数学模型计算、图形绘制、动画渲染、核心元素定义等,是底层且核心的模块。adaptor模块12主要用于事件处理、本地窗口适配、图片资源解析等,是和具体操作系统平台相关的模块。toolkit模块13是按钮、图片视图、滑动条等一些控件的实现模块。demo模块14主要是图形引擎实现的一些演示小例子,供开发者参考开发。

因此,可以看出,在动态动画库引擎中与操作系统平台相关的功能模块为adaptor模块。因此,在将动态动画库引擎从tizen平台移植到android安卓平台时,可针对adaptor模块 转换为与android本地显示部分相适配的功能模块即可。

转换模块20用于将所述与操作系统平台相关的功能模块转换为与第二操作系统平台相适配的功能模块。

在本申请的实施例中,在转换前,与操作系统平台相关的功能模块中功能文件是适用于第一操作系统平台的,因此,需要将与操作系统平台相关的功能模块中的功能文件替换为适用于第二操作系统平台的功能文件,然后使用第二操作系统平台的编译工具重新进行交叉编译以生成与第二操作系统平台相适配的功能模块。

仍以动态动画库引擎为例进行说明,与操作系统平台相关的adaptor模块,主要包括图片资源解析子模块、事件处理子模块以及本地窗口适配子模块三个子模块。因此,在进行转换时,主要集中在这三个子模块中。具体地,如图8所示,转换模块20可包括:转换单元21、映射单元22和第一配置单元23。

转换单元21用于将所述图片资源解析子模块中基于所述第一操作系统平台的图片解析工具转换为基于所述第二操作系统平台的图片解析工具。

在本申请的一个实施例中,转换单元21可用于:将所述基于所述第一操作系统平台的图片解析工具中的解析规则文件替换为基于所述第二操作系统平台的解析规则文件;使用所述第二操作系统平台的编译工具对替换所述解析规则文件后的图片解析工具进行交叉编译,生成基于所述第二操作系统平台的图片解析工具,并替换所述基于所述第一操作系统平台的图片解析工具。

其中,图片资源是用于动态动画库引擎的底层opengl纹理贴图使用的。举例来说,图片资源的格式一般为jpg、png、jpeg、gif等压缩格式存储的,这些压缩格式的图片资源需要解析为非压缩格式的bitmap位图格式才能提供给底层的opengl使用。但基于tizen平台的动态动画库引擎图片资源解析是基于ubuntu(乌班图,一个以桌面应用为主的linux操作系统)平台的解析工具实现。因此,需要将基于ubuntu平台的图片解析工具替换成基于android平台的图片解析工具。

具体地,转换单元21可首先确定linux平台的各个格式开源的图片解析工具,并将各个工具源码的makefile文件替换为android平台mk文件,然后使用android平台的ndk编译工具进行交叉编译,得到android平台native层可以使用的图片解析工具。android平台的ndk编译工具有很多种,本申请可选择其中一种进行举例说明,例如,图片解析工具可为:

libjpeg-turbo-android,libpng-android,platform_external_giflib.

相对应的,该图片解析工具所依赖的库为:

android-libdrm,boost-for-android-prebuilt,curl-android-ios,nodejs-android。

映射单元22用于根据所述第二操作系统平台的系统架构标准对所述事件处理子模块进 行封装和映射,以将所述事件处理子模块中的事件处理模型映射至所述第二操作系统平台。

动态动画库引擎的事件响应和处理都是使用的标准linux的事件处理模型,而标准linux的事件处理模型是无法直接在android平台上使用的,因此需要将动态动画库引擎的事件处理模型映射转换为android平台的事件处理模型。android平台也同样是基于linux内核的,其事件响应和处理也是使用的基于linux事件响应机制的,只是android平台的上层java层通过java虚拟机对事件处理模型进行了封装和映射处理。因此,在本申请的实施例中,映射单元22可用于通过java虚拟机对所述事件处理子模块进行封装和映射,以将所述事件处理子模块中的事件处理模型映射至android平台。也就是说,可以按android平台的系统架构标准将linux的事件处理模型进行映射转换,即可映射到android平台。其中,在进行映射转换时所使用的映射规则与android平台的上层java层通过java虚拟机对事件处理模型进行封装和映射处理时所使用的规则相同。

第一配置单元23用于对所述本地窗口适配子模块的嵌入式图形库egl接口进行配置,以使所述egl接口适配所述第二操作系统平台。

图形引擎在不同平台之间的切换主要是要把渲染绘制内容对应到具体的硬件平台,才能正常的显示。动态动画库引擎负责图形渲染的部分使用的是opengles接口实现的,opengles本身是跨平台的接口,即是与平台无关的接口。android平台也是支持opengles接口的。具体地,如图4所示,在将渲染绘制的内容对应到具体硬件平台时,负责链接opengles接口和本地窗口的是egl(embeddedgraphicslibrary,嵌入式图形库)接口,因此在图形引擎的移植过程中,只需要适配android平台对应的egl接口配置即可。这也是动态动画库引擎移植的关键部分。

具体地,第一配置单元23可用于执行图5所示的步骤,详细说明请参照图5所示实施例。

在本申请的另一个实施例中,如图9所示,转换模块20还可包括构建单元24、设置单元25和第二配置单元26。

其中,构建单元24用于构建示例演示函数。

在本申请的实施例中,构建单元24可针对示例库中的一个演示示例进行演示,以使转换后的图形引擎能够适配第二操作系统平台。以demo示例:mesh-morph-example为例,可测试构建该示例的演示函数:demo_main(),并用其替换动态动画库引擎中原有的main()函数,以实现相同的功能。

然后,通过android_main()进行初始化操作,在初始化的过程中,可填充structandroid_app*state的结构,具体地,可分别用state->userdata=&engine,state->onappcmd=engine_handle_cmd,state->oninputevent=engine_handle_input。

设置单元25用于设置所述示例演示函数的调用接口。

举例来说,调用demo_main()的接口可为:androidcore_init(&demo_main),其中,这个接口中实现shutdownrequested=false,init_func=demo_main,以定义示例演示关闭时不显示提示消息,并定义标准接口为系统示例演示函数demo_main。

第二配置单元26用于基于所述第二操作系统平台的接口标准对所述调用接口进行配置,以使在所述第二操作系统平台能成功调用所述示例演示函数。

在本发明的一个实施例中,第二配置单元26可通过标准jni接口(javanativeinterface,java本地接口)和上层java事件javaactivity执行示例演示,即可使本地窗口适配子模块能够适配demo。

由此可以使转换后的图形引擎中的本地窗口适配子模块能够适配demo,便于在第二操作系统平台进行demo演示。

运行模块30用于将进行转换后的图形引擎在所述第二操作系统平台中运行,以使所述第二操作系统平台通过所述转换后的图形引擎控制界面展示。

本申请实施例的图形引擎的跨平台移植装置,通过从适用于第一操作系统平台的图形引擎中提取与操作系统平台相关的功能模块,并将其转换为与第二操作系统平台相适配的功能模块,并将进行转换后的图形引擎在第二操作系统平台中运行,以使第二操作系统平台通过转换后的图形引擎控制界面展示,实现了将图形引擎从一个平台到另一个平台的移植以及图形引擎跨平台运行,便于图形界面展示的控制,降低了图形引擎开发的工作量。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储 器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管已经示出和描述了本申请的实施例,本领域的普通技术人员可以理解:在不脱离本申请的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本申请的范围由权利要求及其等同限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1