图形内容渲染方法和装置的制造方法

文档序号:8431520阅读:226来源:国知局
图形内容渲染方法和装置的制造方法
【技术领域】
[0001]本发明涉及互联网技术,特别涉及一种图形内容渲染方法和装置。
【背景技术】
[0002]随着计算机技术的普及,人们对移动终端图形处理的要求越来越高。为了加快图形的处理,除CPU (central processing unit,中央处理器)外,专业的图形处理器GPU(Graphic Processing Unit,图形处理器)也越来越多的参与在移动终端的图形处理上。
[0003]虽然目前已有使用移动终端的GPU对图形进行加速渲染的先例,但是已有的技术没有依据移动终端GPU渲染管线的特点对渲染指令进行优化处理,从而造成了不必要的资源消耗,拖慢了渲染效率。

【发明内容】

[0004]本发明实施例提供一种图形渲染方法和装置,以加快渲染速度,改善用户体验。
[0005]—方面,本发明提供一种图形内容渲染方法,包括:构造渲染树,渲染树包括多个渲染目标;生成渲染节点列表,渲染节点包括对渲染目标的引用;对渲染节点列表中的渲染节点进行排序,排序包括:从渲染节点列表中选取多个对应于相同渲染目标的渲染节点;将多个对应于相同渲染目标的渲染节点中需要处理的渲染节点选取到不透明列表中,并将不需要处理的渲染节点选取到透明列表中;对透明列表和不透明列表进行整体排序;生成用于指示对渲染节点进行渲染的渲染指令,渲染指令包括渲染节点的渲染状态和网格数据。
[0006]在一个实施例中,图形内容渲染方法还包括:遍历渲染树,搜集被使用的多个渲染目标;将多个渲染目标拼接到一个或多个纹理集中,使得渲染节点包括对纹理集的引用。
[0007]在一个实施例中,排序还包括:对不透明列表中的渲染节点按照纹理、着色器和/或深度值进行排序。
[0008]在一个实施例中,图形内容渲染方法还包括:将渲染状态相同的渲染节点合并为一个渲染节点。
[0009]在一个实施例中,图形内容渲染方法还包括:选择排序后的两个或多个相邻的且渲染状态相同的渲染节点;将选出的渲染节点的网格数据中的缓存部分合并在同一缓存中。
[0010]另一方面,本发明还提供一种图形内容渲染装置,包括:树构造模块,用于构造渲染树,渲染树包括多个渲染目标;节点列表生成模块,用于生成渲染节点列表,渲染节点包括对渲染目标的引用;排序模块,用于对渲染节点列表中的渲染节点进行排序,排序模块包括:选取单元,用于从渲染节点列表中选取多个对应于相同渲染目标的渲染节点;分类单元,用于将多个对应于相同渲染目标的渲染节点中需要处理的渲染节点选取到不透明列表中,并将不需要处理的渲染节点选取到透明列表中;第一排序单元,用于对透明列表和不透明列表进行整体排序;指令生成模块,用于生成指示对渲染节点进行渲染的渲染指令,渲染指令包括渲染节点的渲染状态和网格数据。
[0011 ] 在一个实施例中,图形内容渲染装置还包括:遍历模块,用于遍历渲染树,搜集被使用的多个渲染目标;拼接模块,用于将多个渲染目标拼接到一个或多个纹理集中,使得渲染节点包括对纹理集的引用。
[0012]在一个实施例中,排序模块还包括:第二排序单元,用于对不透明列表中的渲染节点按照纹理、着色器和/或深度值进行排序。
[0013]在一个实施例中,图形内容渲染装置还包括:合并模块,用于将渲染状态相同的渲染节点合并为一个渲染节点。
[0014]在一个实施例中,合并模块包括:选择单元,用于选择排序后的两个或多个相邻的且渲染状态相同的渲染节点;合并单元,用于将选出的渲染节点的网格数据中的缓存部分合并在同一缓存中。
[0015]基于以上技术方案,通过在对渲染节点列表中的渲染节点进行排序,能够减少渲染状态的切换,从而优化了渲染指令,加快了系统运行的速度,改善了用户体验。
【附图说明】
[0016]此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:
[0017]图1是根据本发明实施例的图形内容渲染方法的流程图;
[0018]图2是根据本发明另一实施例的图形内容渲染方法的流程图;
[0019]图3是根据本发明实施例的渲染树的示例;
[0020]图4是根据本发明实施例的一个应用场景;
[0021]图5是根据本发明实施例的渲染节点的排序方法的流程图;
[0022]图6是根据本发明实施例的排序后的渲染节点示例;
[0023]图7是根据本发明实施例的图形内容渲染装置的结构示意图;
[0024]图8是根据本发明实施例的排序模块的结构示意图;
[0025]图9是根据本发明另一实施例的图形内容渲染装置的结构示意图;
[0026]图10是根据本发明实施例的合并模块的结构示意图。
【具体实施方式】
[0027]为使本发明的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例作进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
[0028]现在将参考附图进一步详细描述本发明。本发明可以许多不同的形式来实现,不应该被理解为仅限于此处所阐述的实施例。这些实施例只作为示例提供,以便为本领域技术人员提供对本发明的完全理解。
[0029]图1是根据本发明实施例的图形内容渲染方法100的流程图。
[0030]在步骤102中,构造渲染树,渲染树包括多个渲染目标(RT)。
[0031]在步骤104中,生成渲染节点列表,渲染节点包括对渲染目标的引用。
[0032]在步骤106中,对渲染节点列表中的渲染节点进行排序。具体的,在该步骤中可以包括:从渲染节点列表中选取多个对应于相同渲染目标的渲染节点;将该多个对应于相同渲染目标的渲染节点中需要处理的渲染节点选取到不透明列表中,并将不需要处理的渲染节点选取到透明表中;对上述透明列表和不透明列表进行整体排序。
[0033]在步骤108中,生成用于指示渲染渲染节点的渲染指令,渲染指令包括渲染节点的渲染状态和网格数据。
[0034]基于以上技术方案,通过在对渲染节点列表中的渲染节点进行排序,能够减少渲染状态的切换,从而优化了渲染指令,加快了系统运行的速度,改善了用户体验。
[0035]图2是根据本发明另一实施例的内容渲染方法200的流程图。
[0036]在步骤202中,构造渲染树,渲染树包括多个渲染目标。在一个实施例中,渲染树的形式可以如图3所示,是一个以屏幕RT (RTO)为根节点的树形结构。其中每一个RT可以包含任意多个原始绘图操作(Draw Primitive, DP)。RT相当于一个大小固定的画布,而对画布的每一次操作相当于一个DP。除了屏幕RT外,其他的RT可以作为纹理被DP引用。因此可以构造一个树形结构,以记录整个场景的绘制过程,为后续优化提供基础。
[0037]每个DP由两个逻辑部分组成:填充分量(Fill Component)和网格分量(MeshComponent)。填充分量可以包括:该操作的类型,即填充图片、颜色、文字或编辑蒙版或使用滤镜等;着色器;深度值;以及该类型操作所需的一些参数,比如引用的纹理、纹理的变换矩阵等。在渲染图形内容时,填充分量的类型相对固定,每种类型可以对应有限的一个或多个着色器。网格分量可以包括该操作所绘制的形状,即有可能是四边形、路径、三角形序列等其它Mesh类型。在一个实施例中,填充分量和网格分量是一一对应的,并且网格分量之间以及填充分量之间,不存在相互作用关系。
[0038]在步骤204中,遍历渲染树,搜集被使用的多个渲染目标。由于RT可以作为纹理被DP引用,因此,在遍历前一步产生的渲染树时,可以搜集到被用到的纹理。
[0039]在步骤206中,将多个渲染目标拼接到一个或多个纹理集中,使得渲染节点包括对纹理集的引用。可以将搜集到的纹理拼接到一个或多个比较大纹理中。可以将这一个或多个大的纹理叫做纹理集。而被拼接的纹理可以是一些较小的图片、文字等。某些数据通过CPU光栅化成图像之后也可以作为纹理。在有的实施例中,比较大图片可以不进行拼接。
[0040]可以将DP中引用的纹理更新为对纹理集的引用,以使其能够正确的引用到拼接之后的纹理。更新的操作涉及到对填充分量中引用的纹理和相应纹理坐标的修改。可以多次向纹理集中添加纹理,也可以将某个纹理从纹理集中删除,这样可以重复利用纹理集。
[0041]通过对纹理集的操作,可以减少纹理的切换带来的不必要开销,还可以将更多的DP合并,减少渲染指令的调用。为了在程序运行时动态的完成纹理拼接,可以使用一些已有的算法,如简单排列、KDTree或一些智能算法。可以根据纹理的特点选择适合的算法。
[0042]图4是应用本发明的一个场景。在如图5所示的场景中,需要显示Bitmapl,Bitmap2,Bitmap3这三张图片。如果直接利用GPU来实现,那么需要产生三张纹理,并且渲染时需要在这三张纹理之间进行切换。而如果这些图片被放置在一张大纹理(即纹理集)中,显然就可以减少纹理切换的次数,并且通过进一步的优化,可以做到仅使用一条渲染指令就能将三张图片同时渲染到屏幕上。
[0043]在步骤208中,生成渲染节点列表,渲染节点包括对渲染目标的引用。深度优先遍历上一步产生的渲染树,可以得到一个渲染节点列表。渲染节点中可以包含对RT和DP的弓丨用。在渲染节点列表中的渲染节点是以原始的渲染顺序排列的。
[0044]在步骤210中,对渲染节点列表中的渲染节点进行排序,以在不改变最终渲染结果的条件下,优化DP的顺序,使得GPU状态切换的次数减少。具体的排序方法如图5所示。
[0045]在步骤502中,从渲染节点列表中选取多个对应于相同渲染目标的渲染节点。在一个实施例中,这些对应于相同渲染目标的渲染节点可以是一串连续并对应于相同渲染目标的渲染节点。在步骤504中,将多个对应于相同渲染目标的渲染节点中需要处理的渲染节点选取到不透明列表中,并将不需要处理的渲染节点选取到透明列表中。在一个实施例中,对这些渲染节点的处理可为混合
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1