首页> 中国专利> 一种图片渲染方法及图片渲染设备

一种图片渲染方法及图片渲染设备

摘要

本发明实施例提供一种图片渲染方法及图片渲染设备,该方法包括:确定当前界面对应的图片渲染对象;以所确定的各图片渲染对象为节点,生成场景树;遍历场景树中的各节点,并每在遍历到一个节点时,设置该节点的渲染指令,所述渲染指令至少包括渲染顺序及渲染属性;依据各节点的渲染顺序,将各节点的渲染指令排列在预定指令队列中;按照所述预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,以合并后的渲染指令进行图片渲染。本发明实施例可提高渲染效率。

著录项

  • 公开/公告号CN106296785A

    专利类型发明专利

  • 公开/公告日2017-01-04

    原文格式PDF

  • 申请/专利权人 腾讯科技(深圳)有限公司;

    申请/专利号CN201610646730.8

  • 发明设计人 段云飞;

    申请日2016-08-09

  • 分类号G06T15/00(20110101);

  • 代理机构44285 深圳市深佳知识产权代理事务所(普通合伙);

  • 代理人王仲凯

  • 地址 518000 广东省深圳市福田区振兴路赛格科技园2栋东403室

  • 入库时间 2023-06-19 01:17:24

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-12-15

    授权

    授权

  • 2017-02-01

    实质审查的生效 IPC(主分类):G06T15/00 申请日:20160809

    实质审查的生效

  • 2017-01-04

    公开

    公开

说明书

技术领域

本发明涉及数据处理技术领域,具体涉及一种图片渲染方法及图片渲染设备。

背景技术

图片渲染是程序可视图片生成的一个重要过程,在游戏等具有图片渲染需求的应用程序中应用广泛;图片渲染主要是对图片渲染对象执行图片渲染逻辑实现,图片渲染对象是图片渲染所针对的渲染对象,如按钮控件、美术字控件、背景图等需要渲染的图片对象。

目前的渲染方式主要是生成各图片渲染对象的渲染顺序,依照渲染顺序依序对各图片渲染对象进行渲染,这种渲染方式的渲染效率降低;而提升渲染效率是提升程序运行效率的一个重要途径,因此研究如何提升渲染效率,成为了本领域技术人员需要考虑的问题。

发明内容

有鉴于此,本发明实施例提供一种图片渲染方法及图片渲染设备,以提升渲染效率。

为实现上述目的,本发明实施例提供如下技术方案:

确定当前界面对应的图片渲染对象;

以所确定的各图片渲染对象为节点,生成场景树;

遍历场景树中的各节点,并每在遍历到一个节点时,设置该节点的渲染指令,所述渲染指令至少包括渲染顺序及渲染属性;

依据各节点的渲染顺序,将各节点的渲染指令排列在预定指令队列中;

按照所述预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,以合并后的渲染指令进行图片渲染。

一种图片渲染设备,其特征在于,包括:

渲染对象确定模块,用于确定当前界面对应的图片渲染对象;

场景树生成模块,用于以所确定的各图片渲染对象为节点,生成场景树;

渲染指令设置模块,用于遍历场景树中的各节点,并每在遍历到一个节点时,设置该节点的渲染指令,所述渲染指令至少包括渲染顺序及渲染属性;

队列排列模块,用于依据各节点的渲染顺序,将各节点的渲染指令排列在预定指令队列中;

合并渲染模块,用于按照所述预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,以合并后的渲染指令进行图片渲染。

基于上述技术方案,本发明实施例可以确定当前界面对应的图片渲染对象,以所确定的各图片渲染对象为节点,生成场景树,并遍历场景树中的各节点,每在遍历到一个节点时,设置该节点的渲染指令,所述渲染指令至少包括渲染顺序及渲染属性;从而依据各节点的渲染顺序,将各节点的渲染指令排列在预定指令队列中;进而按照所述预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,以合并后的渲染指令进行图片渲染。由于本发明实施例可将相同渲染属性的渲染指令合并在一起进行图片渲染,达到减少渲染批次的目的,而渲染批次的减少可减小CPU的占用,有利于图片渲染的统一处理,达到提高渲染效率的效果。本发明实施例提供的图片渲染方法,可提高渲染效率,提升程序运行效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的图片渲染方法的流程图;

图2为本发明实施例提供的图片渲染方法的另一流程图;

图3为设置节点的渲染顺序的示意图;

图4为节点层次设置的效果示意图;

图5为本发明实施例提供的图片渲染方法的再一流程图;

图6为本发明实施例提供的图片渲染方法的又一流程图;

图7为本发明实施例提供的执行图片渲染的方法流程图;

图8为渲染效果比对示意图;

图9为本发明实施例提供的图片渲染设备的结构框图;

图10为本发明实施例提供的场景树生成模块的结构框图;

图11为本发明实施例提供的渲染指令设置模块的结构框图;

图12为本发明实施例提供的渲染顺序确定单元的结构框图;

图13为本发明实施例提供的队列排列模块的结构框图;

图14为本发明实施例提供的队列排列模块的另一结构框图;

图15为本发明实施例提供的合并渲染模块的结构框图;

图16为本发明实施例提供的渲染对象确定模块的结构框图;

图17为本发明实施例提供的图片渲染设备的硬件结构框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的图片渲染方法的流程图,该方法可应用于图片渲染设备中,图片渲染设备可以是具有图片渲染能力的电子设备,该图片渲染设备可以具有CPU(中央处理器)和/或GPU(图形处理器);图片渲染设备可以如智能手机,平板电脑,笔记本电脑等;

参照图1,本发明实施例提供的图片渲染方法可以包括:

步骤S100、确定当前界面对应的图片渲染对象;

当前界面可以是应用程序当前需要进行图片渲染的界面;当前界面的类型可以是游戏应用程序的游戏界面,也可以是非游戏应用程序的具有图片渲染需求的UI(用户界面);当前界面可根据用户操作调整,如基于用户不同的游戏操作,图片渲染设备当前展现的游戏界面可以不同;

一般而言,应用程序的图片渲染对象可通过相应的图片纹理绘制生成,而图片纹理一般保存在应用程序的安装包中,因此本发明实施例可从图片渲染设备的硬盘中保存的应用程序的安装包中调取图片纹理,并对调取的图片纹理进行绘制,生成图片渲染对象。

步骤S110、以所确定的各图片渲染对象为节点,生成场景树;

场景树是用于管理场景中所有元素的数据结构,可以理解为是一个具有根节点,且以根节点为根挂载有多个节点的树形结构;对于每个节点来说,父节点是该节点挂载于的节点,子节点是挂载于该节点的节点;本发明实施例可从需渲染的图片渲染对象中生成根节点及以根节点为根所挂载的节点,从而构建出场景树;

通过场景树的节点来定义各图片渲染对象,可以使得所确定的各图片渲染对象更便于管理和渲染;如修改了一个节点的位置信息,则该节点的所有子节点的位置信息也将相应的变动。

步骤S120、遍历场景树中的各节点,并每在遍历到一个节点时,设置该节点的渲染指令,所述渲染指令至少包括渲染顺序及渲染属性;

可选的,本发明实施例可从场景树的根节点开始,遍历场景树中的每一节点,且在每遍历到一个节点时,本发明实施例并不立即对当前遍历的节点进行图片渲染,而是设置当前遍历的节点的渲染指令(如本发明实施例在遍历到一个节点时,并不是立即对该节点进行绘制,而是设置该节点的渲染指令);

节点的渲染指令是提交给GPU用于请求图片渲染的指令,在本发明实施例中,节点的渲染指令除具有提交给GPU用于请求图片渲染的功能外,还需至少记录两方面的信息:节点的渲染顺序及渲染属性;

在本发明实施例中,节点的渲染顺序主要基于节点的遍历顺序值和节点的层次值确定,节点的层次值表示的是节点在场景树中所位于的层次,节点的遍历顺序值是节点对应的遍历顺序的序数;

节点的渲染属性主要表示节点在渲染时使用的基础信息,如节点在渲染时所使用的着色器程序,着色器参数,节点的纹理ID等(节点在渲染可以理解为节点对应的图片渲染对象在渲染)。

步骤S130、依据各节点的渲染顺序,将各节点的渲染指令排列在预定指令队列中;

本发明实施例可设置有预定指令队列,该预定指令队列用于排列各图片渲染对象对应的渲染指令(即各节点对应的渲染指令);本发明实施例可依据对各节点所设置的渲染顺序,定义各节点的渲染指令在预定指令队列中的排列顺序;

可选的,本发明实施例可遵循节点的渲染顺序越大,渲染指令排序越靠后的原则,将各节点的渲染指令排列在预定指令队列中;

可选的,本发明实施例可在遍历到一个节点,并设置该节点的渲染指令后,即将该节点的渲染指令排列在预定指令队列中;也可是在遍历完所有节点,并设置完所有节点的渲染指令后,将各节点的渲染指令排列在预定指令队列中。

步骤S140、按照所述预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,以合并后的渲染指令进行图片渲染。

在本发明实施例中,具有相同渲染属性的渲染指令在进行渲染时所使用的基础信息是相同的,因此可将相同渲染属性的渲染指令相合并,以将相同渲染属性的渲染指令合批渲染;同时,为考虑各图片渲染对象的渲染顺序,本发明实施例可按照预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,从而实现合批渲染的目的;

本发明实施例可将相同渲染属性的渲染指令合并在一起提交给GPU来进行图片渲染,从而达到减少渲染批次的目的;渲染批次(draw call)指的是在进行图片渲染时,CPU每秒对图形API(如opengl/dx等)的调用次数,调用的次数越少,则CPU和GPU的数据传输就越少,CPU的占用就越低,越有利于GPU统一处理图片渲染,提高渲染效率,从而提升程序运行效率。

可选的,对于场景树,一般采取深度遍历方式遍历场景树中的各节点,这主要出于便捷和性能考虑;本发明的发明人在研究过程中发现,若以深度遍历方式遍历场景树中的各节点,将出现具有相同渲染属性而分属不同父节点下的渲染指令无法合并的情况,即渲染属性相同但父节点不同的渲染指令无法进行合批;为解决这一问题,本发明实施例在生成场景树时,可将渲染属性相同的图片渲染对象,设置在同一节点层次,从而生成至少一个节点层次,且使不同节点层次间的图片渲染对象的渲染属性不同;

进而在以深度遍历方式遍历场景树中的各节点时,基于节点的遍历顺序值和节点的层次值确定节点的渲染顺序,实现在以深度遍历方式遍历场景树的情况下,对于所遍历的各节点,生成广度遍历的渲染顺序;

图2示出了本发明实施例提供的图片渲染方法的另一流程图,参照图2,该方法可以包括:

步骤S200、确定当前界面对应的图片渲染对象;

步骤S210、以图片渲染对象为节点,生成场景树的至少一个节点层次,并将渲染属性相同的图片渲染对象,设置在同一节点层次,使不同节点层次间的图片渲染对象的渲染属性不同;

步骤S220、以深度遍历方式遍历场景树中的各节点,每在遍历到一个节点时,确定当前遍历顺序值及当前遍历节点的节点层次值,结合当前遍历顺序值及当前遍历节点的节点层次值,确定当前遍历节点的渲染顺序;以当前遍历节点的渲染顺序及渲染属性,设置当前遍历节点的渲染指令;

可选的,在设置当前遍历节点的渲染顺序时,本发明实施例可将当前遍历顺序值设置在渲染顺序的低位,将当前遍历节点的节点层次值设置在渲染顺序的高位,以得到当前遍历节点的渲染顺序;

为便于理解,图3示出了设置节点的渲染顺序的示意图,如图3所示,节点A、B、A1、A2、B1、B2为场景树中的节点,且节点A、B设置在第一层次,对应的节点层次值为1,节点A1、A2、B1、B2设置在第二层次,对应的节点层次为2;以深度遍历方式遍历场景树中的各节点,则遍历顺序可以是A、A1、A2、B、B1、B2;相应的,A的遍历顺序值是1,A1的遍历顺序值是2,A2的遍历顺序值是3,B的遍历顺序值是4,B1的遍历顺序值是5,B2的遍历顺序值是6,图中虚线表示遍历顺序;

则在遍历到A节点时,可确定A的当前遍历顺序值为1,节点层次值为1,将当前遍历顺序值设置在渲染顺序的低位,将节点层次值设置在渲染顺序的高位,如以高位为百位,低位为个位,则A的渲染顺序可以是101;下一个遍历到A1时,A1的当前遍历顺序值为2,节点层次值为2,将当前遍历顺序值设置在渲染顺序的低位,将节点层次值设置在渲染顺序的高位,则A1的渲染顺序为202;下一个遍历到A2时,A2的当前遍历顺序值为3,节点层次值为2,将当前遍历顺序值设置在渲染顺序的低位,将节点层次值设置在渲染顺序的高位,则A1的渲染顺序为203;同理,B的渲染顺序为104,B1的渲染顺序为205,B2的渲染顺序为206;由此,位于同一节点层次的节点的渲染顺序,其高位是一致的,从而在以深度遍历方式遍历场景树的情况下,生成广度遍历的渲染顺序;

可选的,高位为百位,低位为个位仅为可选示意,本发明实施例并不排除其他的高位形式和低位形式,只要渲染顺序中当前遍历顺序值所在单位,低于节点层次值所在单位。

步骤S230、依据各节点的渲染顺序,将各节点的渲染指令排列在预定指令队列中;

步骤S240、按照所述预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,以合并后的渲染指令进行图片渲染。

可选的,本发明实施例可对图片渲染对象的资源进行修改,以将渲染属性相同的图片渲染对象设置在同一节点层次;如图4所示,本发明实施例可将渲染属性相同(如纹理ID,着色器程序、着色器参数等相同)的背景图设置在第一节点层次,将按钮和美术字控件设置在第二节点层次,则不同列表元素(Cell)中的背景图(bg)节点,所得到的渲染顺序的高位始终是1,其必定小于其他层次的节点的渲染顺序,如图4中的button(按钮)和label(标签)等渲染顺序都是200以上的数值;由此,在依据各节点的渲染顺序,将各节点的渲染指令排列在预定指令队列中后,多个背景图(bg)节点得以聚合在一起,即相同渲染属性的渲染指令可聚合在一起,从而可提高将相同渲染属性的渲染指令合并的效率。

可选的,本发明实施例可在遍历到一节点,并设置该节点的渲染指令后,根据该节点的渲染顺序,依照节点的渲染顺序越大,渲染指令排序越靠后的原则,将该节点的渲染指令排列在预定指令队列中;

相应的,图5示出了本发明实施例提供的图片渲染方法的再一流程图,参照图5,该方法可以包括:

步骤S300、确定当前界面对应的图片渲染对象;

步骤S310、以图片渲染对象为节点,生成场景树的至少一个节点层次,并将渲染属性相同的图片渲染对象,设置在同一节点层次,使不同节点层次间的图片渲染对象的渲染属性不同;

步骤S320、以深度遍历方式遍历场景树中的节点;

步骤S330、遍历到一节点,确定当前遍历顺序值及当前遍历节点的节点层次值,结合当前遍历顺序值及当前遍历节点的节点层次值,确定当前遍历节点的渲染顺序;以当前遍历节点的渲染顺序及渲染属性,设置当前遍历节点的渲染指令;

可选的,本发明实施例可将当前遍历顺序值设置在渲染顺序的低位,将当前遍历节点的节点层次值设置在渲染顺序的高位,以得到当前遍历节点的渲染顺序。

步骤S340、根据当前遍历节点的渲染顺序,确定预定指令队列中排列的渲染顺序小于且最接近所述当前遍历节点的渲染顺序的渲染指令,将所述当前遍历节点的渲染顺序,排列在所确定的渲染指令之后;

在设置当前遍历节点的渲染指令后,预定指令队列中可能已排列有先于当前遍历节点遍历的节点的渲染指令,基于节点的渲染顺序越大,渲染指令排序越靠后的原则,本发明实施例可确定预定指令队列中排序的渲染顺序小于且最接近当前遍历节点的渲染顺序的渲染指令,从而将当前遍历节点的渲染指令设置在该渲染指令之后;

为便于理解,以当前遍历节点的渲染顺序为202,预定指令队列中已排列的渲染指令的渲染顺序为101,102,201为例,则预定指令队列中,渲染顺序小于且最接近202的为201,因此当前遍历节点的渲染指令可排列在渲染顺序为201的渲染指令之后。

步骤S350、判断是否存在下一可遍历到的节点,若是,返回步骤S330,若否,执行步骤S360;

步骤S360、按照所述预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,以合并后的渲染指令进行图片渲染。

可选的,本发明实施例也可在遍历完所有节点,并设置完所有节点的渲染指令后,根据渲染顺序越大,渲染指令排列越靠后的原则,将各节点的渲染指令排列在预定指令队列中;

相应的,图6示出了本发明实施例提供的图片渲染方法的又一流程图,参照图6,该方法可以包括:

步骤S400、确定当前界面对应的图片渲染对象;

步骤S410、以图片渲染对象为节点,生成场景树的至少一个节点层次,并将渲染属性相同的图片渲染对象,生成在同一节点层次,使不同节点层次间的图片渲染对象的渲染属性不同;

步骤S420、以深度遍历方式遍历场景树中的节点;

步骤S430、遍历到一节点,确定当前遍历顺序值及当前遍历节点的节点层次值,结合当前遍历顺序值及当前遍历节点的节点层次值,确定当前遍历节点的渲染顺序;以当前遍历节点的渲染顺序及渲染属性,设置当前遍历节点的渲染指令;

步骤S440、判断是否存在下一可遍历到的节点,若是,返回步骤S430,若否,执行步骤S450;

步骤S450、基于所设置的各节点的渲染顺序,根据渲染顺序越大,渲染指令排列越靠后的原则,将各节点的渲染指令排列在预定指令队列中;

步骤S460、按照所述预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,以合并后的渲染指令进行图片渲染。

在将各节点的渲染指令排列在预定指令队列中后,本发明实施例可按照预定指令队列中各渲染指令的排列顺序,逐个遍历渲染指令;如果判断到当前遍历的渲染指令的渲染属性与上一遍历的渲染指令的渲染属性相同,则可将当前遍历的渲染指令与已缓存的渲染指令相合并;如果判断到当前遍历的渲染指令的渲染属性与上一遍历的渲染指令的渲染属性不同,则可执行已缓存的渲染指令,对已缓存的渲染指令进行图片渲染,并缓存当前遍历的渲染指令;

可见,已缓存的渲染指令可能是上一遍历的渲染指令,对应上一遍历的渲染指令与上两次遍历的渲染指令的渲染属性不同的情况;已缓存的渲染指令可能是至少两个渲染指令相合并后的渲染指令,且该至少两个渲染指令的渲染属性与上一遍历的渲染指令的渲染属性相同,对应遍历到渲染属性相同的连续的渲染指令的情况;

可选的,图7示出了本发明实施例提供的对预定指令队列中的渲染指令执行图片渲染的方法流程图,参照图7,该方法可以包括:

步骤S500、按照预定指令队列中各渲染指令的排列顺序,逐个遍历各渲染指令;

步骤S510、遍历到一渲染指令,判断当前遍历的渲染指令的渲染属性与上一遍历的渲染指令的渲染属性是否相同,若是,执行步骤S520,若否,执行步骤S530;

步骤S520、将当前遍历的渲染指令与已缓存的渲染指令相合并;

可选的,已缓存的渲染指令可以是上一遍历的渲染指令,或者,至少两个渲染指令相合并后的渲染指令,且所述至少两个渲染指令的渲染属性与上一遍历的渲染指令的渲染属性相同。

步骤S530、对已缓存的渲染指令进行图片渲染,并缓存当前遍历的渲染指令;

步骤S540、判断是否存在下一可遍历到的渲染指令,若是,返回步骤S510,若否,结束流程。

本发明实施例提供的图片渲染方法,可将相同渲染属性的渲染指令合并在一起进行图片渲染,达到减少渲染批次的目的,以有利于GPU统一处理图片渲染,提高渲染效率;进一步,可在以深度遍历方式遍历场景树的情况下,对于所遍历的各节点,生成广度遍历的渲染顺序,使得相同渲染属性的渲染指令可聚合在一起,提高将相同渲染属性的渲染指令合并的效率。

本发明实施例提供的图片渲染方法可应用于游戏中,对游戏图片进行渲染;该游戏是指以计算机图形为基础制作的电子游戏,如以三维计算机图形为基础制作的立体电子游戏,二维电子游戏等;游戏类型包括但不限于多人在线联机的网络游戏,单人进行游戏的单人游戏,和基于游戏系统建立的虚拟现实游戏,并且对平台具有通用适用属性,游戏主机平台,手机游戏平台,PC(个人计算)端游戏平台内的游戏都包含在内;

相应的,本发明实施例在确定当前界面对应的图片渲染对象时,可确定当前游戏界面对应的游戏图片纹理,游戏图片纹理一般保存在游戏安装包中;而对于网络游戏而言,当前游戏界面需展示的游戏图片纹理一般由游戏服务器告知,并由游戏客户端从游戏安装包中相应调取;游戏客户端可以认为是图片渲染设备中安装的为游戏提供本地服务的程式;

因此当用户操作游戏客户端展示一个新的当前游戏界面时,游戏客户端可获取当前游戏界面对应的游戏图片纹理ID,从硬盘存储的游戏安装包的图片纹理中确定与所述游戏图片纹理ID对应的游戏图片纹理;进而将所确定的游戏图片纹理加载在内存中;通过预定的图片绘制接口(如OPENGL,OPENGL为一种图形程序接口,可用于图形的绘制)对内存中所加载的游戏图片纹理进行绘制处理,得到所述当前游戏界面对应的图片渲染对象;

一个游戏所拥有的游戏界面或场景一般在游戏设计时已预定义好,而图片渲染设备当前展示的游戏界面可根据用户的操作进行调整,即用户的不同操作将触使游戏客户端从预定义的游戏界面中选取当前游戏界面并加载;

而在加载当前游戏界面时,需要对游戏界面中的图片进行渲染,本发明实施例则可先从硬盘的游戏安装包中获取当前游戏界面对应的游戏图片纹理并加载在内存中(当前游戏界面可对应有游戏图片纹理ID,从而通过当前游戏界面对应的游戏图片纹理ID,可从游戏安装包中获取当前游戏界面对应的游戏图片纹理);进而通过预定的图片绘制接口对内存中的游戏图片纹理进行绘制处理,得到当前游戏界面对应的图片渲染对象;再以所确定的各图片渲染对象为节点,生成场景树;遍历场景树中的各节点,并每在遍历到一个节点时,设置该节点的渲染指令,所述渲染指令至少包括渲染顺序及渲染属性;依据各节点的渲染顺序,将各节点的渲染指令排列在预定指令队列中;按照所述预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,以合并后的渲染指令进行游戏图片的渲染,达到减少游戏图片的渲染批次,提高当前游戏界面的图片渲染效率的目的。

以卡牌类手机游戏为例,如果用户操作进入一个卡牌的展示界面,则游戏服务器基于用户操作可通知用户所使用的手游卡牌客户端当前的卡牌展示界面对应的卡牌纹理ID,手游卡牌客户端可基于该卡牌纹理ID从卡牌游戏的安装包中调取相应的卡牌纹理;手游卡牌客户端可以是图片渲染设备(相应的,图片渲染设备可以是手机等移动终端)中装载的为卡牌类手机游戏提供本地服务的程式;

进而,手游卡牌客户端可将所调取的卡牌纹理保存在内存中,并通过OPENGL接口对内存中保存的卡牌纹理进行绘制处理,得到相应的卡牌的按钮控件、美术字控件、背景图等卡牌渲染对象;

手游卡牌客户端可以各卡牌渲染对象为节点,生成场景树;在进行卡牌渲染时,遍历场景树中的各节点,并每在遍历到一个节点时,设置该节点的渲染指令,所述渲染指令至少包括渲染顺序及渲染属性;依据各节点的渲染顺序,将各节点的渲染指令排列在预定指令队列中;按照所述预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,以合并后的渲染指令进行卡牌的渲染,实现卡牌在游戏界面中的展示;本发明实施例可在卡牌类手机游戏进行卡牌展示时,减少卡牌的渲染批次,提高卡牌的渲染效率。

为体现本发明实施例提供的图片渲染方法的优势,图8示出了本发明实施例提供的图片渲染方法的渲染效果,与采用cocos2dx3.x技术的渲染效果的比对示意图,cocos2dx3.x技术为目前常用的图片渲染技术;通过图8可看出,采用cocos2dx3.x技术时,渲染批次(Draw Call)为162,而采用本发明实施例提供的图片渲染方法,同一图片的渲染批次降至116,本发明实施例较大的提升了渲染效率。

下面对本发明实施例提供的图片渲染设备进行介绍,下文描述的图片渲染设备可与上文描述的图片渲染方法相互对应参照。下文描述的图片渲染设备可以认为是,为实现本发明实施例提供的图片渲染功能,图片渲染设备需设置的功能模块结构。

图9为本发明实施例提供的图片渲染设备的结构框图,该图片渲染设备可以是具有图片渲染能力的电子设备,如智能手机,平板电脑,笔记本电脑等;参照图9,该图片渲染设备可以包括:

渲染对象确定模块100,用于确定当前界面对应的图片渲染对象;

场景树生成模块200,用于以所确定的各图片渲染对象为节点,生成场景树;

渲染指令设置模块300,用于遍历场景树中的各节点,并每在遍历到一个节点时,设置该节点的渲染指令,所述渲染指令至少包括渲染顺序及渲染属性;

队列排列模块400,用于依据各节点的渲染顺序,将各节点的渲染指令排列在预定指令队列中;

合并渲染模块500,用于按照所述预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,以合并后的渲染指令进行图片渲染。

可选的,图10示出了本发明实施例提供的场景树生成模块200的可选结构,参照图10,场景树生成模块200可以包括:

节点层次生成单元210,用于以图片渲染对象为节点,生成场景树的至少一个节点层次,并将渲染属性相同的图片渲染对象,设置在同一节点层次,使不同节点层次间的图片渲染对象的渲染属性不同。

可选的,图11示出了本发明实施例提供的渲染指令设置模块300的可选结构,参照图11,渲染指令设置模块300可以包括:

渲染顺序确定单元310,用于以深度遍历方式遍历场景树中的各节点,每在遍历到一个节点时,确定当前遍历顺序值及当前遍历节点的节点层次值,结合当前遍历顺序值及当前遍历节点的节点层次值,确定当前遍历节点的渲染顺序;

指令设置单元320,用于以当前遍历节点的渲染顺序及渲染属性,设置当前遍历节点的渲染指令。

可选的,图12示出了本发明实施例提供的渲染顺序确定单元310的可选结构,参照图12,渲染顺序确定单元310可以包括:

单位设置单元311,用于将当前遍历顺序值设置在渲染顺序的低位,当前遍历节点的节点层次值设置在所述渲染顺序的高位,以得到当前遍历节点的渲染顺序。

可选的,本发明实施例每在遍历到一个节点,并设置该节点的渲染指令后,队列排列模块400可将该节点的渲染指令排列在预定指令队列中;相应的,图13示出了本发明实施例提供的队列排列模块400的可选结构,参照图13,队列排列模块400可以包括:

第一排列执行单元410,用于根据当前遍历节点的渲染顺序,确定所述预定指令队列中排列的渲染顺序小于且最接近所述当前遍历节点的渲染顺序的渲染指令,将所述当前遍历节点的渲染顺序,排列在所确定的渲染指令之后。

可选的,本发明实施例在遍历完所有节点,并设置完所有节点的渲染指令后,队列排列模块400可将各节点的渲染指令排列在预定指令队列中;相应的,图14示出了本发明实施例提供的队列排列模块400的另一可选结构,参照图14,队列排列模块400可以包括:

第二排列执行单元420用于:在确定各节点的渲染顺序后,根据渲染顺序越大,渲染指令排列越靠后的原则,将各节点的渲染指令排列在所述预定指令队列中。

可选的,图15示出了本发明实施例提供的合并渲染模块500的可选结构,参照图15,合并渲染模块500可以包括:

指令逐个遍历单元510,用于按照所述预定指令队列中各渲染指令的排列顺序,逐个遍历各渲染指令;

指令合并单元520,用于若当前遍历的渲染指令的渲染属性与上一遍历的渲染指令的渲染属性相同,将当前遍历的渲染指令与已缓存的渲染指令相合并;所述已缓存的渲染指令为上一遍历的渲染指令,或,至少两个渲染指令相合并后的渲染指令,所述至少两个渲染指令的渲染属性与上一遍历的渲染指令的渲染属性相同;

渲染执行及指令缓存单元530,用于若当前遍历的渲染指令的渲染属性与上一遍历的渲染指令的渲染属性不同,对已缓存的渲染指令进行图片渲染,并缓存当前遍历的渲染指令。

可选的,图16示出了本发明实施例提供的渲染对象确定模块100的可选结构,参照图16,渲染对象确定模块100可以包括:

游戏图片纹理确定单元110,用于获取当前游戏界面对应的游戏图片纹理ID,从硬盘存储的游戏安装包的图片纹理中确定与所述游戏图片纹理ID对应的游戏图片纹理;

内存加载单元120,用于将所确定的游戏图片纹理加载在内存中;

纹理绘制处理单元130,用于通过预定的图片绘制接口对内存中所加载的游戏图片纹理进行绘制处理,得到所述当前游戏界面对应的图片渲染对象。

本发明实施例提供的图片渲染设备,可将相同渲染属性的渲染指令合并在一起进行图片渲染,达到减少渲染批次的目的,以有利于GPU统一处理图片渲染,提高渲染效率;进一步,可在以深度遍历方式遍历场景树的情况下,对于所遍历的各节点,生成广度遍历的渲染顺序,使得相同渲染属性的渲染指令可聚合在一起,提高将相同渲染属性的渲染指令合并的效率。

图17示出了本发明实施例提供的图片渲染设备的硬件结构框图,参照图17,该图片渲染设备可以包括:处理器1,通信接口2,存储器3,通信总线4和图形处理器5;

其中处理器1、通信接口2、存储器3、图形处理器5通过通信总线4完成相互间的通信;

可选的,通信接口2可以为通信模块的接口,如GSM模块的接口;

处理器1,用于执行程序;

存储器3,用于存放程序;

程序可以包括程序代码,所述程序代码包括计算机操作指令。

处理器1可能是一个中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。

存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。

其中,程序可具体用于:

确定当前界面对应的图片渲染对象;

以所确定的各图片渲染对象为节点,生成场景树;

遍历场景树中的各节点,并每在遍历到一个节点时,设置该节点的渲染指令,所述渲染指令至少包括渲染顺序及渲染属性;

依据各节点的渲染顺序,将各节点的渲染指令排列在预定指令队列中;

按照所述预定指令队列中各渲染指令的排列顺序,将相同渲染属性的渲染指令相合并,以合并后的渲染指令进行图片渲染。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所生成的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号