分布式渲染方法及装置与流程

文档序号:31878364发布日期:2022-10-21 22:27阅读:163来源:国知局
分布式渲染方法及装置与流程

1.本技术涉及图像处理技术领域,尤其涉及一种分布式渲染方法及装置。


背景技术:

2.随着通信技术的发展,云技术的实现也越来越得到支撑,例如云游戏,可以基于云计算技术,游戏在远程服务器上运行,终端客户不需要下载、安装、也不需要考虑终端配置,只要有网络就能玩大型游戏。同样的还有云手机等。云游戏和云手机等场景,都是重渲染场景,涉及到相应的渲染技术。
3.渲染是指由模型生成图像的过程。其中,模型是用语言或者数据结构进行严格定义的三维物体或虚拟场景的描述,它包括几何、视点、纹理、照明和阴影等信息。传统的渲染技术包括虚拟网络计算(virtual network computing,vnc)技术,即在云端完成所有渲染任务,并压缩,在端侧进行解压显示(视频压缩)。这种所有的渲染任务都在云端进行的模式,只会用到端侧设备的视频解码能力,而渲染能力并不会涉及。但是,现今的一些云场景的客户端,依然运行在通用的平台(如手机,个人电脑,平板电脑等),端侧设备依然有可观的渲染能力,对于这部分端侧算力的使用,可以降低云侧渲染算力的需求。为了达到这个目的,可以将渲染任务划分到两端执行,并最终合并,实现分布式渲染技术。
4.这种分布式渲染技术,通常按照时间序列,将渲染任务划分成多个时间段内的渲染任务,然后将每个时间段内的渲染任务分别分配给各个节点,实现分布式处理。但是这种分布式处理方式,对于每个时间段内的渲染任务,实际上仍然由单个云侧或端侧进行串行处理,实时性低,无法达成更高的分布式渲染效率。


技术实现要素:

5.本技术实施例提供了一种分布式渲染方法及装置,通过对每个图像的渲染指令集合进行拆分获得多个渲染指令子集,并将渲染指令子集发送到不同的设备进行处理,实现更高效率的分布式渲染,提升渲染实时性。
6.第一方面,提供一种分布式渲染方法,该方法包括:获取用于渲染第一图像的渲染指令集合,渲染指令集合中包括多个渲染指令,渲染指令包括执行渲染的指令和参数,或者还包括渲染准备指令;对渲染指令集合中部分或全部渲染指令执行空渲染,以获得部分或全部渲染指令对应的执行状态;其中,空渲染指的是只获取渲染指令的执行状态的变化,而不进行实际的渲染;将第二渲染指令子集的执行状态和第一渲染指令子集发送到第一设备;其中,渲染指令集合中包括第一渲染指令子集和第二渲染指令子集,第一渲染指令子集和第二渲染指令子集分别包括一个或多个渲染指令,第一渲染指令子集的执行依赖于第二渲染指令子集的执行状态;第一设备用于根据第二渲染指令子集的执行状态执行第一渲染指令子集中的一个或多个渲染指令;将第二渲染指令子集发送到第二设备,第二设备用于执行第二渲染指令子集。
7.在本技术实施例中,通过对第一图像的渲染指令集合进行划分,获得渲染指令子
集,并将渲染指令子集以及渲染指令子集依赖的其他渲染指令子集的执行状态发送到同一个设备执行,使得设备执行该渲染指令子集中的渲染指令,获得对应的渲染结果,这个过程中不同的渲染指令子集在不同的设备上执行,实现第一图像的分布式渲染,提升了图像渲染的效率和实时性。而将每个渲染指令子集依赖的其他渲染指令子集的执行状态分发到同一个设备,可以避免渲染指令执行过程中发生错误。
8.本技术中,“渲染指令”既可以指用于执行渲染的指令(指令有参数的话包括参数)。有的执行渲染的指令还包括用于准备渲染的渲染准备指令。上述“渲染第一图像的渲染指令集合”可以指单纯的执行渲染的指令,也可以指包含渲染准备指令的这种执行渲染的指令。本技术中,一个渲染指令的渲染结果可以被认为是所述第一图像的一个图层。
9.第一方面提供的方法执行主体可以是第一设备、也可以是第二设备,也可以是另一第三设备。当执行主体是第二设备的时候,将所述第二渲染指令子集发送到第二设备意味着执行该步骤的模块将该第二渲染指令子集发送给该第二设备的渲染模块(e.g.gpu)执行渲染。
10.在一个可能的示例中,对渲染指令集合中部分或全部渲染指令执行空渲染,以获得部分或全部渲染指令对应的执行状态,包括:通过将渲染指令集合中部分或全部渲染指令输入状态机,由状态机执行部分或全部渲染指令;确定一个渲染指令被状态机执行完成时,渲染指令的上下文中,全局参数值的集合作为渲染指令的执行状态。
11.在一个可能的示例中,当第二渲染指令子集包括一个渲染指令时,第二渲染指令子集的执行状态为渲染指令的执行状态;当第二渲染指令子集包括多个顺序执行的渲染指令时,第二渲染指令子集的执行状态为多个渲染指令中最后一个被执行的渲染指令的执行状态。
12.在一个可能的示例中,渲染指令子集根据设备的渲染能力划分,设备包括第一设备和第二设备,渲染指令子集包括第一渲染指令子集和第二渲染指令子集,渲染能力与设备执行渲染指令中的渲染任务的效率成正比。
13.在本技术实施例中,根据设备的渲染能力划分渲染指令子集,使得发送到不同设备的渲染指令子集能够以相近甚至相同的时间完成对渲染指令子集中的一个或多个渲染指令的执行,进一步保障了分布式渲染的效率。
14.在一个可能的示例中,在第一设备根据第二渲染指令子集的执行状态执行第一渲染指令子集中的一个或多个渲染指令,第二设备执行第二渲染指令子集之前,方法还包括:获取第一图像的资源创建指令和/或资源销毁指令,资源创建指令用于创建参数,资源销毁指令用于销毁资源创建指令创建的参数;将资源创建指令和/或资源销毁指令分发到第一设备和第二设备。
15.在一个可能的示例中,将资源创建指令和/或资源销毁指令分发到第一设备和第二设备之前,方法还包括:确定第一渲染指令和第二渲染指令的执行与资源创建指令创建的参数存在依赖关系。
16.在一个可能的示例中,方法还包括:从第一设备获取第一渲染结果,第一渲染结果为第一设备执行第一渲染指令子集后的结果;和/或从第二设备获取第二渲染结果,第二渲染结果为第二设备执行第二渲染指令子集后的结果;将第一渲染结果与第二渲染结果合成后获得第一图像的渲染结果。
17.在一个可能的示例中,方法还包括:指示第一设备获取第二设备的第二渲染结果,以及指示第一设备合成第一渲染结果和第二渲染结果;或指示第二设备获取第一设备的第一渲染结果,以及指示第二设备合成第一渲染结果和第二渲染结果,其中第一渲染结果为第一设备执行第一渲染指令子集后的结果;第二渲染结果为第二设备执行第二渲染指令子集后的结果。
18.在一个可能的示例中,合成第一渲染结果和第二渲染结果,包括:按照渲染指令集合以串行方式执行时第一渲染指令子集和第二渲染指令子集对应的执行顺序合成第一渲染结果和第二渲染结果。
19.在本技术实施例中,将第一图像的渲染指令集合划分成渲染指令子集,并将渲染指令子集发送到不同的设备进行分布式处理后,再对每个设备获得的渲染结果进行合成,在合成的过程中,按照渲染指令集合以串行方式执行时的顺序进行,可以保证合成的渲染结果的准确性。
20.第二方面,提供一种分布式渲染装置,该装置包括:
21.获取模块,用于获取用于渲染第一图像的渲染指令集合,渲染指令集合中包括多个渲染指令,渲染指令包括执行渲染的指令和参数,或者还包括渲染准备指令;
22.渲染模块,用于对渲染指令集合中部分或全部渲染指令执行空渲染,以获得部分或全部渲染指令对应的执行状态;其中,空渲染指的是只获取渲染指令的执行状态的变化,而不进行实际的渲染;
23.发送模块,用于将第二渲染指令子集的执行状态和第一渲染指令子集发送到第一设备;其中,渲染指令集合中包括第一渲染指令子集和第二渲染指令子集,第一渲染指令子集和第二渲染指令子集分别包括一个或多个渲染指令,第一渲染指令子集的执行依赖于第二渲染指令子集的执行状态;第一设备用于根据第二渲染指令子集的执行状态执行第一渲染指令子集中的一个或多个渲染指令;
24.发送模块,还用于将第二渲染指令子集发送到第二设备,第二设备用于执行第二渲染指令子集。
25.在一个可能的示例中,渲染模块具体用于:通过将渲染指令集合中部分或全部渲染指令输入状态机,由状态机执行部分或全部渲染指令;确定一个渲染指令被状态机执行完成时,渲染指令的上下文中,全局参数值的集合作为渲染指令的执行状态。
26.在一个可能的示例中,当第二渲染指令子集包括一个渲染指令时,第二渲染指令子集的执行状态为渲染指令的执行状态;当第二渲染指令子集包括多个顺序执行的渲染指令时,第二渲染指令子集的执行状态为多个渲染指令中最后一个被执行的渲染指令的执行状态。
27.在一个可能的示例中,渲染指令子集根据设备的渲染能力划分,设备包括第一设备和第二设备,渲染指令子集包括第一渲染指令子集和第二渲染指令子集,渲染能力与设备执行渲染指令中的渲染任务的效率成正比。
28.在一个可能的示例中,获取模块还用于:获取第一图像的资源创建指令和/或资源销毁指令,资源创建指令用于创建参数,资源销毁指令用于销毁资源创建指令创建的参数;发送模块还用于:将资源创建指令和/或资源销毁指令分发到第一设备和第二设备。
29.在一个可能的示例中,将资源创建指令和/或资源销毁指令分发到第一设备和第
二设备之前,发送模块还用于:确定第一渲染指令和第二渲染指令的执行与资源创建指令创建的参数存在依赖关系。
30.在一个可能的示例中,该装置还包括合成模块,具体用于:从第一设备获取第一渲染结果,第一渲染结果为第一设备执行第一渲染指令子集后的结果;和/或从第二设备获取第二渲染结果,第二渲染结果为第二设备执行第二渲染指令子集后的结果;将第一渲染结果与第二渲染结果合成后获得第一图像的渲染结果。
31.在一个可能的示例中,该装置还包括指示模块,具体用于:指示第一设备获取第二设备的第二渲染结果,以及指示第一设备合成第一渲染结果和第二渲染结果;或指示第二设备获取第一设备的第一渲染结果,以及指示第二设备和成第一渲染结果和第二渲染结果,其中第一渲染结果为第一设备执行第一渲染指令子集后的结果;第二渲染结果为第二设备执行第二渲染指令子集后的结果。
32.在一个可能的示例中,合成第一渲染结果和第二渲染结果,包括:按照渲染指令集合以串行方式执行时第一渲染指令子集和第二渲染指令子集对应的执行顺序合成第一渲染结果和第二渲染结果。
33.第三方面,本技术实施例提供一种电子装置,该装置包括通信接口和处理器,该通信接口用于该装置与其它设备进行通信,例如将第二渲染指令的执行状态和第一渲染指令对分发到第一设备。示例性的,通信接口可以是收发器、电路、总线、模块或其它类型的通信接口,其它设备可以为网络设备。处理器用于调用一组程序、指令或数据,执行上述第一方面描述的方法。该装置还可以包括存储器,用于存储处理器调用的程序、指令或数据。存储器与处理器耦合,该处理器执行该存储器中存储的、指令或数据时,可以实现上述第一方面描述的方法。
34.第四方面,本技术实施例中还提供一种电子装置,其特征在于,该通信装置包括处理器、收发器、存储器以及存储在该存储器上并可在该处理器上运行的计算机执行指令,当计算机执行指令被运行时,使得该电子装置执行如第一方面或第一方面中任一种可能的实现方式中的方法。
35.第五方面,本技术实施例中还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机可读指令,当该计算机可读指令在计算机上运行时,使得计算机执行如第一方面或第一方面中任一种可能的实现方式中的方法。
36.第六方面,本技术实施例提供了一种芯片系统,该芯片系统包括处理器,还可以包括存储器,用于实现上述第一方面或第一方面中任一种可能的实现方式中的方法,该芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。
37.可选的,该芯片系统还包括收发器。
38.第七方面,本技术实施例中还提供一种计算机程序产品,包括指令,当其在计算机上运行时,使得计算机执行如第一方面或第一方面中任一种可能的实现方式中的方法。
附图说明
39.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍。
40.图1为本技术实施例提供的一种分布式渲染系统架构图;
41.图2a为本技术实施例提供的一种分布式渲染方法流程图;
42.图2b为本技术实施例提供的一种第一图像的渲染指令集合示意图;
43.图2c为本技术实施例提供的一种渲染指令展开示意图;
44.图2d为本技术实施例提供的一种获取渲染指令子集的执行状态的过程示意图;
45.图2e为本技术实施例提供的一种发送渲染指令子集的示意图;
46.图2f为本技术实施例提供的一种第一设备的渲染指令子集划分示意图;
47.图2g为本技术实施例提供的另一种发送渲染指令子集的示意图;
48.图2h为本技术实施例提供的一种合成第一图像渲染结果的流程图;
49.图3a为本技术实施例提供的一种分布式渲染装置结构框图;
50.图3b为本技术实施例提供的另一种分布式渲染装置结构框图;
51.图4为本技术实施例提供的一种电子装置的结构示意图。
具体实施方式
52.本技术的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或模块。
53.在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
[0054]“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
[0055]
首先对本技术实施例中可能涉及的术语和应用场景进行介绍。
[0056]
渲染是计算机动画(computer graphics,cg)制作中的最后一道工序,它是通过软件模型生成图像的过程。具体为:通过程序将需要绘制的图形的几何、顶点等信息进行运算,得到图像。
[0057]
在执行渲染任务时,计算机的硬件可以分为中央处理器(central processing unit,cpu)和图形处理器(graphics processing unit,gpu)。其中gpu启用渲染加速,能够有效提升渲染速度,因此gpu渲染能够胜任大量运算方面的应用。
[0058]
本技术实施例中提供一种分布式渲染系统架构,请参阅图1,该系统架构中包括云侧的服务器100,以及多个终端设备110组成的端侧,所有服务器和终端设备都可以为一个分布式设备,且服务器和终端设备都能够执行渲染任务。服务器100由软件模块和硬件模块组成,软件模块主要为分布式渲染库,具体包括指令分组引擎101,指令并行化模块102,本地渲染库103和远程渲染库104,其中指令分组引擎101用于对渲染指令按照一定的指令分组规则进行分组,指令并行化模块102用于对实现分组后的渲染指令的并行化,本地渲染库103用于在云侧服务器上执行渲染指令,对图像进行渲染,远程渲染库104用于将渲染指令
分发到端侧执行,还可以从端侧获取执行后的渲染结果。硬件模块可以包括物理显卡105和网卡106。其中物理显卡105也可用于处理图像渲染指令,网卡用于云侧服务器与端侧通信,包括分发渲染指令,获取渲染结果等。云侧的应用程序调用分布式渲染库,即可完成所有渲染工作。
[0059]
对于端侧的终端设备110,可以包括本地渲染库111和网卡112,当终端设备110通过网卡112接收到渲染指令时,完成渲染任务。终端设备110也可以包括物理显卡113,用于处理图像渲染指令。
[0060]
以下结合附图对本技术实施例进行具体说明。
[0061]
请参阅图2a,图2a为本技术实施例提供的一种分布式渲染方法流程图,如图2a所示,该方法包括如下步骤:
[0062]
201、获取用于渲染第一图像的渲染指令集合,渲染指令集合中包括多个渲染指令,渲染指令包括执行渲染的指令和参数,或者还包括渲染准备指令,一个渲染指令的渲染结果在本实施例中认为对应于该第一图像的多个图层中的一个图层。
[0063]
第一图像为模型或动画等对应的一帧图像,由于对一帧图像进行渲染时,往往需要多次渲染,因此第一图像对应一个渲染指令集合,该集合中包括多个渲染指令,例如第一图像对应的渲染指令集合为{渲染指令1,渲染指令2,
……
,渲染指令n}。每个渲染指令中包括一个执行渲染的指令,例如图形库opengles的gldraw指令,其会让图形处理器(graphics processing unit,gpu)进行实质上的渲染工作。执行渲染的指令在进行渲染工作时,往往是针对对应的参数的,因此每个渲染指令中还包括参数。另外,执行渲染的指令在进行渲染工作之前,往往需要进行渲染准备,这些进行渲染准备的指令被称为渲染准备指令。也即是说每个渲染指令中还可能包括渲染准备指令。
[0064]
具体地,第一图像的渲染指令集合可以参照图2b,图2b为本技术实施例提供的一种第一图像的渲染指令集合示意图,如图2b所示,该集合中包括的执行渲染的指令具体为gldrawarrays指令和gldrawelements指令,用于采用不同的模式进行图像的渲染。另外该集合中还包括销毁资源指令glclear,用于销毁之前执行图像的渲染过程中创建的资源,相对应的,该集合中还可以包括资源创建指令create,用于创建渲染指令执行过程中可能运用到的参数。另外图2b中还包括几何和顶点等信息,例如gldrawarrays 226187 4vertices,4unique indices,表示代码第226187行的执行渲染的指令,其对应处理的顶点个数为4,对应的唯一索引也为4。
[0065]
图2b中提供的是第一图像的执行渲染的指令的目录(省略号部分还包括若干个执行渲染的指令,未完全展示),而事实上,执行渲染的指令之前,还包括渲染准备指令,请参阅图2c,如图2c所示,两个相邻的执行渲染的指令之间,还包括渲染准备指令,例如图2b中的gldrawaarrays 226175和gldrawarrays 226187为两个相邻的执行渲染的指令,而代码第226176行~226186行之间还包括一些其他指令,例如gluniformmatrix4fv(),用于通过一致变量(uniform修饰的变量)引用将一致变量值传入渲染管线,glactivetexture(),用于设置激活的纹理单元,glbindtexture(),用于将纹理的名字绑定到目标纹理上等。这些指令都用来为gldrawarrays 226187这一执行渲染的指令做渲染准备,因此这些指令被称为渲染准备指令。
[0066]
另外,在执行渲染的指令被展开后,例如gldrawarrays 226187被展开后,如图2c
所示,为gldrawarrays(mode=gl_triangle_strip,first=0,count=4),表示绘图的类型为每三个顶点之间绘制三角形,从数组缓存中的第0位开始绘制,顶点的数量为4。括号中的都为执行渲染的指令gldrawarrays 226187对应的参数。
[0067]
因此,一个渲染指令中包括执行渲染的指令,还可能包括对应的参数,渲染准备指令等,对应到图2c中,代码第226176行~226187中的指令和参数为一个渲染指令。并且,这一个渲染指令对应渲染了一个图层,可以被称为第一图层。
[0068]
另外,第一图像的渲染指令集合中的渲染指令之后还可能包括eglswapbuffer指令,通常表示一帧图像渲染指令的结束。因此在划分第一图像的渲染指令集合时,可以根据eglswapbuffer指令进行划分。
[0069]
202、对渲染指令集合中部分或全部渲染指令执行空渲染,以获得部分或全部渲染指令对应的执行状态;其中,空渲染指的是只获取渲染指令的执行状态的变化,而不进行实际的渲染。
[0070]
针对第一图像的渲染指令集合中的全部渲染指令,通常按照串行方式执行,可以按照顺序得到第一图像的每个图层的渲染结果,并且每个图层的渲染结果都是在在前渲染结果的基础上叠加获得的,可以保证执行完全部渲染指令后,得到需要的渲染结果。但是按照串行方式执行,可能存在由于设备渲染能力限制,导致渲染效率低,实时性差的问题。而采用分布式方式执行第一图像的渲染指令集合中的多个渲染指令可以提升渲染效率。
[0071]
实现分布式方式执行第一图像的渲染指令集合中的多个渲染指令,即是将多个渲染指令划分成多个子集,例如前述渲染指令集合为{渲染指令1,渲染指令2,
……
,渲染指令n},划分为多个子集为第一渲染指令子集{渲染指令1}和第二渲染指令子集{渲染指令2,
……
,渲染指令n},其中每个子集中可以包括一个或多个渲染指令,然后将每个渲染指令子集发送到不同设备执行,再将不同设备执行渲染指令子集获得的渲染结果进行合成,即可获得第一图像的渲染结果。
[0072]
在上述过程中,由于第一图像的渲染指令集合中的渲染指令按照串行方式执行时,前后渲染指令之间有可能存在依赖关系,例如前一渲染指令的执行状态被用做下一渲染指令的环境准备。那么在将渲染指令集合中的渲染指令拆分成不同的渲染指令子集并发送到不同设备执行时,同时需要将每个渲染指令子集依赖的在先执行的渲染指令子集的执行状态一同发送到该渲染指令子集对应的设备,以使得该渲染指令子集能够正确地被执行。
[0073]
具体地,在本技术实施例中,对第一图像的渲染指令集合中的全部或部分渲染指令进行空渲染,即是说,对于一个渲染指令(执行渲染的指令,渲染准备指令,参数),将其输入状态机中,获取该渲染指令的状态机对应的状态(只处理渲染指令状态的变化,而不进行实际的渲染),作为该渲染指令的执行状态。实际上,在状态集中执行渲染准备指令,可以获得执行渲染的指令最终执行时需要的环境,因此渲染准备指令可以实际执行,而针对执行渲染的指令,例如gldraw指令,只采用opengl状态机确定针对参数执行渲染后对应的图层状态,而不实际调用gldraw指令。由于渲染准备指令的执行计算资源耗费少,而耗费计算资源多的执行渲染的指令并没有真正执行,因此空渲染过程在中央处理器(central processing unit,cpu)运行效率很高,耗费时间少。
[0074]
可选情况下,对渲染指令集合中部分或全部渲染指令执行空渲染,以获得部分或
全部渲染指令对应的执行状态,包括:通过将渲染指令集合中部分或全部渲染指令输入状态机,由状态机执行部分或全部渲染指令;确定一个渲染指令被状态机执行完成时,渲染指令的上下文中,全局参数值的集合作为渲染指令的执行状态。
[0075]
渲染指令的上下文是指执行该渲染指令的过程中,需要运用到的外部环境变量,在执行渲染指令的空渲染后,可以获得这些外部环境变量变化后的值。对于局部变量,由于只会在当前渲染指令执行范围内使用,因此可以不作为执行状态记录,而全局参数值可能在当前渲染指令执行范围内使用,也可以作为其他渲染指令的外部环境变量,因此可以记录全部参数值的集合作为渲染指令的执行状态。另外,输入状态机进行空渲染的,可能是第一图像的渲染指令集合中的全部渲染指令,也可能是部分渲染指令,对于前一种方式,可以获得全部渲染指令的执行状态,那么任意一个渲染指令的执行状态需要被其他渲染指令的执行过程依赖时,可以高效调用。或者可以只获得部分渲染指令的执行状态,这些执行状态确定会被其他渲染指令调用,因而可以减少对不被调用的执行状态的获取而增加的处理成本。
[0076]
可选地,当第二渲染指令子集包括一个渲染指令时,第二渲染指令子集的执行状态为渲染指令的执行状态;当第二渲染指令子集包括多个顺序执行的渲染指令时,第二渲染指令子集的执行状态为多个渲染指令中最后一个被执行的渲染指令的执行状态。
[0077]
即是说,如果渲染指令子集中包括一个渲染指令,那么可以该渲染指令输入状态机中获得该渲染指令的执行状态,作为该渲染指令子集对应的执行状态。如果渲染指令子集中包括多个渲染指令,那么可以将该多个渲染指令全部输入状态机,但是最后获得的是这多个渲染指令中最后一个被执行的渲染指令的执行状态,作为该渲染指令子集的执行状态,而中间被执行的渲染指令的执行状态则作为透明状态不被输出。这是因为渲染指令子集中的多个渲染指令是串行执行的,输出的最后一个被执行的渲染指令的执行状态,实际也是该渲染指令子集的全部渲染指令执行完成后的全局参数值的集合,因此可以不单独记录中间执行的其他渲染指令的执行状态。
[0078]
获取每个渲染指令子集的执行状态的具体过程可参阅图2d,图2d为本技术实施例提供的一种获取渲染指令子集的执行状态的过程示意图,如图2d所示,该过程包括如下步骤:
[0079]
220、将第一图像的渲染指令集合进行分组,获得若干个渲染指令子集;
[0080]
221、获取每个渲染指令子集中最后一个被执行的渲染指令,组成指令集合,该指令集合中的所有渲染指令均为关键节点;
[0081]
222、将第一图像的渲染指令集合中的全部渲染指令顺序输入空渲染opengl状态机执行;
[0082]
223、确定当前执行的渲染指令是否为关键节点;
[0083]
224、如果是,则记录该关键节点的状态机状态。
[0084]
上述过程即为获得每个渲染指令子集中的最后一个被执行的渲染指令的执行状态的过程。同样的,其中对渲染指令对进行分组获得若干渲染指令对组的过程也可以替换为对第一图像的全部渲染指令进行分组,获得若干个渲染指令组,然后记录每个渲染指令组中最后一个渲染指令的执行状态。
[0085]
可见,在本技术实施例中,通过对第一图像的渲染指令集合进行分组,获得多个渲
染指令子集,然后将每个渲染指令子集中最后一个被执行的渲染指令的执行状态作为该渲染指令集合的执行状态,这样使得其他依赖该渲染指令子集中的部分或全部渲染指令的执行状态的设备都能够得到需要的执行状态,提升获取依赖的执行状态的效率。
[0086]
203、将第二渲染指令子集的执行状态和第一渲染指令子集发送到第一设备;其中,渲染指令集合中包括第一渲染指令子集和第二渲染指令子集,第一渲染指令子集和第二渲染指令子集分别包括一个或多个渲染指令,第一渲染指令子集的执行依赖于第二渲染指令子集的执行状态;第一设备用于根据第二渲染指令子集的执行状态执行第一渲染指令子集中的一个或多个渲染指令;将第二渲染指令子集发送到第二设备,第二设备用于执行第二渲染指令子集。
[0087]
如前描述的,本技术实施例中采用分布式处理方法来处理第一图像的渲染指令集合中的多个渲染指令,具体为采用多个分布式设备来处理渲染指令集合划分成渲染指令子集后,每个子集中的渲染指令。另外每个渲染指令子集可能依赖于其他渲染指令子集的执行状态,因此需要将渲染指令子集及其依赖的其他渲染指令子集的执行状态发送到同一个设备执行。
[0088]
假设渲染指令子集中包括一个渲染指令,发送渲染指令子集到分布式设备具体可参阅图2e,图2e为本技术实施例提供的一种发送渲染指令子集的示意图,如图2e所示,渲染指令1~渲染指令3分别对应渲染指令子集1~渲染指令子集3(每个渲染指令子集中包括一个渲染指令),对渲染指令1~渲染指令3进行空渲染,获得每个渲染指令的执行状态。其中渲染指令2依赖渲染指令1的执行状态,渲染指令3同时依赖渲染指令1的执行状态和渲染指令2的执行状态。那么可以将渲染指令1的执行状态和渲染指令2发送到第一设备,将渲染指令1发送到第二设备,将渲染指令1的执行状态,渲染指令2的执行状态,以及渲染指令3发送到第x设备。
[0089]
可见,在本技术实施例中,通过对第一图像的渲染指令集合进行划分,获得每个渲染指令子集中的一个渲染指令,并将每个渲染指令以及其依赖的其他渲染指令的执行状态发送到对应的分布式设备,使得分布式设备执行该单个渲染指令,获得对应的渲染结果,这个过程中单个渲染指令在单独的设备上执行,实现第一图像的分布式渲染,提升了图像渲染的效率和实时性。而将每个渲染指令依赖的其他渲染指令的执行状态一起分发到同一个设备,可以避免渲染指令执行过程中发生错误。
[0090]
在一些情况下,渲染指令子集中包括多个渲染指令,以使得同一个分布式设备可以执行一个子集中的多个渲染指令。这样可以使得在分布式设备有限,单个渲染指令算力消耗少,或者单个设备渲染效率高等情况下实现更科学和高效的分布式渲染。
[0091]
对第一图像的渲染指令集合划分渲染指令子集的过程具体可参阅图2f,图2f为本技术实施例提供的一种第一设备的渲染指令子集划分示意图,如图2f所示,该方法包括:
[0092]
210、确定是否还有未被分配渲染任务的第一设备;
[0093]
211、如果有,则获取该第一设备能够接收的渲染指令的第一阈值,初始化该第一设备的渲染指令子集;
[0094]
212、确定是否还有未分配的渲染指令;
[0095]
213、如果有,则顺序处理每一个渲染指令,将排序最前的一个渲染指令添加到第一设备的渲染指令子集中;
[0096]
214、确定第一设备渲染指子集中的渲染指令个数是否超过第一阈值;
[0097]
215、如果超过第一阈值,确定该第一设备的渲染指令子集分配完成。如果全部分布式设备分配的渲染指令个数都达到其对应的第一阈值,则剩余渲染指令可以划分给本地服务器执行。
[0098]
根据上述描述可知,根据第一设备能够接收的渲染指令的第一阈值为第一设备划分渲染指令子集,第一阈值可以根据第一设备的渲染能力确定,也可以根据第一设备与其他分布式设备之间的渲染能力比较结果确定,例如k个分布式设备中,第i个分布式设备的渲染能力是第i+1个分布式设备的2倍,则第i个分布式设备的第一阈值为第i+1个分布式设备的第一阈值的2倍。
[0099]
其中,本技术实施例所说的渲染能力与设备执行渲染指令中的渲染任务的效率相关,且与效率成正比。具体来说,渲染指令中的渲染任务包括画三角形,每个渲染指令对应的渲染任务大小可能不同,如果渲染指令1对应的渲染任务是画100个三角形,而渲染指令2对应的渲染任务是画10个三角形,第一设备执行渲染指令1,第二设备执行渲染指令2,花费的时间相同,则说明第一设备执行渲染任务的效率更高,第一设备的渲染能力更强。
[0100]
在渲染指令子集中包括多个渲染指令的情况下,发送渲染指令子集到分布式设备的具体过程可以参阅图2g,图2g为本技术实施例提供的另一种发送渲染指令子集的示意图,如图2g所示,渲染指令1对应渲染指令子集1,渲染指令2,3对应渲染指令子集2,渲染指令4对应渲染指令子集3,对渲染指令子集1~渲染指令3进行空渲染,获得对应的执行状态。其中渲染指令2和渲染指令3被划分为同一个渲染指令子集,渲染指令3的执行过程中将用到渲染指令1的执行状态和渲染指令2的执行状态,但是由于渲染指令2的执行状态属于该指令子集的中间执行状态,因此服务器对该渲染指令子集执行空渲染时,不会记录渲染指令2的执行状态,只记录渲染指令3的执行状态,因此将渲染指令2和渲染指令3组成的渲染指令子集2发送到第二设备时,将它们依赖的渲染指令1的执行状态也分发到第二设备,而不需要发送渲染指令2的执行状态。
[0101]
可见,在本技术实施例中,通过将第一图像的渲染指令集合划分为渲染指令子集,且渲染指令子集中包括多个渲染指令,将每个渲染指令子集中最后一个被执行的渲染指令的执行状态作为该渲染指令子集的执行状态,然后将渲染指令子集及其依赖的执行状态发送到分布式设备,以便分布式设备执行渲染指令子集中的多个渲染指令。这个过程将多个渲染指令发送到同一个设备执行,可以减少设备占用个数,同时对渲染指令划分子集时,考虑到设备的渲染能力,能够保证分布式渲染的效率。
[0102]
需要说明的是,上述步骤203中,将第二渲染指令子集的执行状态和第一渲染指令子集发送到第一设备;将第二渲染指令子集发送到第二设备,第一设备和第二设备都为分布式设备中的一个,并且分布式设备还可能包括第三设备,第四设备
……
第x设备等。另外,本技术实施例的执行主体,可以为第一设备,也可以为第二设备,或者也可能为第一设备和第二设备之外的第三设备。第一设备,第二设备,第三设备
……
第x设备都可能为服务器,也可能为终端。如果本技术实施例的执行主体为第一设备(或第二设备),则第一设备在完成划分第一图像的渲染指令集合,以及向第二设备发送第二渲染指令子集后,还将第一渲染指令子集和第二渲染指令子集的执行状态发送到自身的渲染模块(处理器或本地渲染库),由自身的渲染模块执行渲染指令,获得渲染结果。
[0103]
可选情况下,在第一设备根据第二渲染指令子集的执行状态执行第一渲染指令子集中的一个或多个渲染指令,第二设备执行第二渲染指令子集之前,该方法还包括:获取第一图像的资源创建指令和/或资源销毁指令,资源创建指令用于创建参数,资源销毁指令用于销毁资源创建指令创建的参数;将资源创建指令和/或资源销毁指令分发到第一设备和第二设备。
[0104]
在渲染过程中,会创建一些资源,例如顶点集合,索引集合等,以便后续指令使用,另外这些创建的资源也可以进行销毁,以释放创建的资源占用的空间。例如图2b对应的描述中,资源创建指令包括create指令,资源销毁指令包括glclear指令。对于一个渲染指令覆盖范围内(上一个渲染指令完成执行后,到该渲染指令完成执行前)的资源创建指令或资源销毁指令,在划分渲染指令子集的时候,可以与该渲染指令划分到同一个子集中,该渲染指令执行时也可以获知创建或销毁了资源。但是在资源创建指令或资源销毁指令处于渲染指令覆盖范围外的情况,渲染指令被划分到其他分布式设备时,其实也需要获知创建或销毁的资源,也即是说,资源创建指令和/或资源销毁指令需要专门发送到分布式设备中与渲染指令一起执行。例如对于图2b中的gldrawelements 226199,资源销毁指令glclear 225797不在其覆盖范围内,在将gldrawelements 226199发送到对应的分布式设备,该渲染指令执行之前,也将glclear 225797发送到该分布式设备,以便gldrawelements 226199能够正常执行。或者可以直接将glclear 225797指令添加到gldrawelements 226199之前,然后一起发送到对应的分布式设备,分布式设备按照顺序执行指令即可。
[0105]
可选地,将资源创建指令和/或资源销毁指令分发到第一设备和第二设备之前,该方法还包括:确定第一渲染指令和第二渲染指令的执行与资源创建指令创建的参数存在依赖关系。
[0106]
也即是说,对于没有用到资源创建指令创建的参数的渲染指令,该参数对应的创建或销毁,该渲染指令执行过程中并不关注,因此也可以发送该类渲染指令的时候,不发送无关的资源创建指令和/或资源销毁指令。
[0107]
在将渲染指令子集发送到分布式设备之后,第一设备执行第一渲染指令子集中的渲染指令,第二设备执行第二渲染指令子集中的渲染指令,其他设备对应执行接收到的渲染指令,进而完成第一图像的渲染指令集合中所有渲染指令的执行。
[0108]
但是,每个分布式设备完成渲染指令子集的执行后,只能获得该渲染指令子集对应的渲染结果,例如第一设备获得第一渲染结果,第二设备获得第二渲染结果。最后还需要对各个分布式设备获取的渲染结果进行合成,获得第一图像对应的渲染结果。
[0109]
具体地,请参阅图2h,图2h为本技术实施例提供的一种合成第一图像渲染结果的流程图,如图2h所示,该过程包括如下步骤:
[0110]
230、将渲染指令子集发送到合成设备和其他设备,其中,合成设备可以是将渲染指令集合划分成渲染指令子集并进行渲染指令子集分发的设备,也可以是其他接收渲染指令子集的设备;
[0111]
231、合成设备对接收到的渲染指令子集中的渲染指令进行执行,获得对应的渲染结果,假设渲染指令子集中包括一个渲染指令,则该渲染结果为单个图层渲染结果,假设渲染指令子集中包括多个渲染指令,则该渲染结果为多个图层渲染结果;
[0112]
232、其他设备对接收到的渲染指令子集中的渲染指令进行执行,获得对应的渲染
结果;
[0113]
233、合成设备接收其他设备发送的渲染结果;
[0114]
234、合成设备将自身的渲染结果和接收到的渲染结果进行合成,获得第一图像的渲染结果。
[0115]
上述过程中,假设分发渲染指令子集的设备为第一设备或第二设备,第一设备或第二设备同时还执行多个渲染结果的合成过程(合成设备),那么第一设备或第二设备可以直接获取发送到其他设备的渲染指令的渲染结果,并与自身执行渲染指令获得的渲染结果进行合成。如上述步骤230~234所示。其中步骤231可以在步骤233前执行,也可以在步骤233后执行,本技术实施例中不做限制。
[0116]
假设分发渲染指令子集的设备为第三设备,且第三设备为不执行渲染指令子集中的渲染指令的设备,那么第三设备可以在第一设备,第二设备,以及其他分布式设备完成渲染指令的执行后,指示其中一个分布式设备作为合成设备,获取其他设备的渲染结果,并对从其他设备获取到的渲染结果,以及自身执行渲染指令得到的渲染结果进行合成,获得第一图像的渲染结果。
[0117]
或者假设第三设备分发渲染指令子集,不执行渲染指令子集中的渲染指令,并且由第三设备作为合成设备,从其他分布式设备中获取渲染指令子集对应的渲染结果,然后对多个渲染结果进行合成,获得第一图像的渲染结果。
[0118]
经过上述过程可以获得第一图像的渲染结果。另外,合成设备对渲染结果的合成需要按照一定的顺序,例如,针对第一图像的渲染,可以根据第一图像的渲染指令集合以串行方式执行时对应的顺序来合成每个渲染指令子集对应的渲染结果。例如渲染指令集合划分为第一渲染指令子集和第二渲染指令子集,而串行执行渲染指令集合时,第一渲染指令子集中的渲染指令在第二渲染指令子集中的渲染指令之前执行,那么按照先第一渲染指令子集的渲染结果,后第二渲染指令子集的渲染结果的顺序合成第一图像的渲染结果。
[0119]
上述过程中,分发渲染指令子集的为云侧服务器,服务器可以主动向端侧分发渲染任务,或者可以根据其他终端设备的请求分发渲染任务。假设合成设备为云端服务器,那么服务器从其他端侧设备中获取渲染指令子集的渲染结果,再将这些渲染结果与自身对应执行的渲染指令子集对应的渲染结果进行合成(或者自身也可以没有执行渲染指令,渲染指令子集的渲染结果全部从端侧获取),获得第一图像的渲染结果,再将完成渲染后的图像或视频发送给端侧,端侧可以是执行了分布式渲染的分布式设备中的一个,也可以是其他设备。假设合成设备为端侧设备中的目标设备,那么可以由服务器指示端侧终端设备中的目标设备对渲染指令子集的渲染结果进行合成,目标设备完成渲染结果的合成后,如果目标设备为获取完成渲染后的图像或视频的终端设备,则无需再进行图像或视频的传输。如果目标设备不为获取完成渲染后的图像或视频的终端设备,则目标设备根据服务器的指示将完成渲染后的图像或视频发送到指定终端设备。
[0120]
可见,在本技术实施例中,将第一图像的渲染指令集合划分为多个渲染指令子集,再将每个渲染指令子集发送到不同的分布式设备进行分布式处理,获得每个渲染指令子集对应的渲染结果,然后对这些渲染结果进行合成,在合成的过程中,按照第一图像的渲染指令集合中的渲染指令串行执行时对应的顺序进行,可以保证合成的渲染结果的准确性。另外,合成过程可以在服务器中执行,以便利用服务器的高效数据处理能力。合成过程也可以
在需要获取第一图像渲染结果的端侧执行,可以减少第一图像渲染结果的传输过程,提升客户端获取第一图像渲染结果的效率。
[0121]
图3a为本技术实施例提供的一种分布式渲染装置300,其可以用于执行上述图2a~图2g的分布式渲染装置和具体实施例。在一种可能的实现方式中,如图3a所示,该装置300包括获取模块301,渲染模块302和发送模块303。
[0122]
获取模块301,用于获取用于渲染第一图像的渲染指令集合,渲染指令集合中包括多个渲染指令,渲染指令包括执行渲染的指令和参数,或者还包括渲染准备指令,渲染指令用于渲染第一图像的多个图层中的第一图层;
[0123]
渲染模块302,用于对渲染指令集合中部分或全部渲染指令执行空渲染,以获得部分或全部渲染指令对应的执行状态;其中,空渲染指的是只获取渲染指令的执行状态的变化,而不进行实际的渲染;
[0124]
发送模块303,用于将第二渲染指令子集的执行状态和第一渲染指令子集发送到第一设备;其中,渲染指令集合中包括第一渲染指令子集和第二渲染指令子集,第一渲染指令子集和第二渲染指令子集分别包括一个或多个渲染指令,第一渲染指令子集的执行依赖于第二渲染指令子集的执行状态;第一设备用于根据第二渲染指令子集的执行状态执行第一渲染指令子集中的一个或多个渲染指令;
[0125]
发送模块303,还用于将第二渲染指令子集发送到第二设备,第二设备用于执行第二渲染指令子集。
[0126]
可选地,渲染模块302具体用于:通过将渲染指令集合中部分或全部渲染指令输入状态机,由状态机执行部分或全部渲染指令;确定一个渲染指令被状态机执行完成时,渲染指令的上下文中,全局参数值的集合作为渲染指令的执行状态。
[0127]
可选地,当第二渲染指令子集包括一个渲染指令时,第二渲染指令子集的执行状态为渲染指令的执行状态;当第二渲染指令子集包括多个顺序执行的渲染指令时,第二渲染指令子集的执行状态为多个渲染指令中最后一个被执行的渲染指令的执行状态。
[0128]
可选地,渲染指令子集根据设备的渲染能力划分,设备包括第一设备和第二设备,渲染指令子集包括第一渲染指令子集和第二渲染指令子集,渲染能力与设备执行渲染指令中的渲染任务的效率成正比。
[0129]
可选地,获取模块301还用于:获取第一图像的资源创建指令和/或资源销毁指令,资源创建指令用于创建参数,资源销毁指令用于销毁资源创建指令创建的参数;发送模块还用于:将资源创建指令和/或资源销毁指令分发到第一设备和第二设备。
[0130]
可选地,将资源创建指令和/或资源销毁指令分发到第一设备和第二设备之前,发送模块303还用于:确定第一渲染指令和第二渲染指令的执行与资源创建指令创建的参数存在依赖关系。
[0131]
可选地,如图3a所示,装置300还包括合成模块304,具体用于:从第一设备获取第一渲染结果,第一渲染结果为第一设备执行第一渲染指令子集后的结果;和/或从第二设备获取第二渲染结果,第二渲染结果为第二设备执行第二渲染指令子集后的结果;将第一渲染结果与第二渲染结果合成后获得第一图像的渲染结果。
[0132]
可选地,如图3b所示,装置300还包括指示模块305,具体用于:指示第一设备获取第二设备的第二渲染结果,以及指示第一设备合成第一渲染结果和第二渲染结果;或指示
第二设备获取第一设备的第一渲染结果,以及指示第二设备和成第一渲染结果和第二渲染结果,其中第一渲染结果为第一设备执行第一渲染指令子集后的结果;第二渲染结果为第二设备执行第二渲染指令子集后的结果。
[0133]
可选地,合成模块304具体用于:按照渲染指令集合以串行方式执行时第一渲染指令子集和第二渲染指令子集对应的执行顺序合成第一渲染结果和第二渲染结果。
[0134]
可选的,上述获取模块301,渲染模块302,发送模块303,其中渲染模块302可以是中央处理器(central processing unit,cpu),或者可以是图形处理器(graphics processing unit,gpu),也可以是cpu和gpu的结合,可用于进行图像渲染,本技术不做具体限制。
[0135]
可选的,分布式渲染装置300还可以包括接口电路或者收发器。用于从其他电子装置获取数据或接收指令,或者向其他电子装置发送数据或指令。例如上述分发渲染指令过程向第一设备发送第一渲染指令的执行状态和第二渲染指令。
[0136]
可选的,分布式渲染装置300还可以包括存储模块(图中未示出),该存储模块可以用于存储数据和/或信令,存储模块可以和获取模块301,渲染模块302,发送模块303耦合。例如,获取模块301可以用于读取存储模块中的数据和/或信令,使得前述方法实施例中的对渲染指令进行空渲染过程被执行。
[0137]
如图4所示,图4示出了本技术实施例中的一种电子装置的硬件结构示意图。分布式渲染装置300的结构可以参考图4所示的结构。电子装置800包括:存储器801、处理器802、通信接口803,总线804,以及显卡805。其中,存储器801、处理器802、通信接口803和显卡805通过总线804实现彼此之间的通信连接。
[0138]
存储器801可以是只读存储器(read only memory,rom),静态存储设备,动态存储设备或者随机存取存储器(random access memory,ram)。存储器801可以存储程序,当存储器801中存储的程序被处理器802执行时,处理器802和通信接口803用于执行本技术实施例的分布式渲染方法的各个步骤。
[0139]
处理器802可以采用通用的cpu,微处理器,应用专用集成电路(application specific integrated circuit,asic),gpu或者一个或多个集成电路,用于执行相关程序,以实现本技术实施例的分布式渲染装置300中的获取模块301,渲染模块302,发送模块303所需执行的功能,或者执行本技术方法实施例的分布式渲染方法。
[0140]
处理器802还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本技术的分布式渲染方法的各个步骤可以通过处理器802中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器802还可以是通用处理器、数字信号处理器(digital signal processing,dsp)、专用集成电路(asic)、现成可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器801,处理器802读取存储器801中的信息,结合其硬件完成本技术实施例的分布式渲染装置300中
包括的模块所需执行的功能,或者执行本技术方法实施例的分布式渲染方法。
[0141]
通信接口803使用例如但不限于收发器一类的收发装置,来实现电子装置800与其他设备或通信网络之间的通信。例如,可以通过通信接口803获取确定的分割目标和/或候选目标边界框。总线804可包括在电子装置800各个部件(例如,存储器801、处理器802、通信接口803)之间传送信息的通路。
[0142]
物理显卡805用于对渲染指令进行处理。
[0143]
应注意,尽管图4所示的电子装置800仅仅示出了存储器、处理器、通信接口,但是在具体实现过程中,本领域的技术人员应当理解,电子装置800还包括实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当理解,电子装置800还可包括实现其他附加功能的硬件器件。此外,本领域的技术人员应当理解,电子装置800也可仅仅包括实现本技术实施例所必须的器件,而不必包括图4中所示的全部器件。
[0144]
应理解,在本技术的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
[0145]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但这种实现不应认为超出本技术的范围。
[0146]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0147]
在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0148]
作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0149]
另外,在本技术各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。
[0150]
功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1