CN103942823B - 一种游戏引擎渲染方法及装置 - Google Patents

一种游戏引擎渲染方法及装置 Download PDF

Info

Publication number
CN103942823B
CN103942823B CN201410069556.6A CN201410069556A CN103942823B CN 103942823 B CN103942823 B CN 103942823B CN 201410069556 A CN201410069556 A CN 201410069556A CN 103942823 B CN103942823 B CN 103942823B
Authority
CN
China
Prior art keywords
rendering
thread
frame
queue
order
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201410069556.6A
Other languages
English (en)
Other versions
CN103942823A (zh
Inventor
方任扬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba China Co Ltd
Original Assignee
Guangzhou I9Game Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou I9Game Information Technology Co Ltd filed Critical Guangzhou I9Game Information Technology Co Ltd
Priority to CN201410069556.6A priority Critical patent/CN103942823B/zh
Publication of CN103942823A publication Critical patent/CN103942823A/zh
Application granted granted Critical
Publication of CN103942823B publication Critical patent/CN103942823B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种游戏引擎渲染方法。所述游戏引擎渲染方法包括:执行线程执行JS代码生成渲染命令组;将所述渲染命令组写入预设队列的空闲帧中;渲染线程从所述预设队列按顺序读取已经写入渲染命令组的可用帧;根据读取的所述可用帧中的渲染命令组进行渲染。本发明还相应公开了一种游戏引擎渲染装置。本发明实施例所提供的游戏引擎渲染方法及装置,通过设置预设队列,使执行线程与渲染线程分别作为两个独立的执行线程,两部分执行线程的执行很少受对方执行进程的限制,因此,缩短了游戏引擎的程序的循环周期,提高了渲染速度,也提高了渲染效率。

Description

一种游戏引擎渲染方法及装置
技术领域
本发明涉及移动通信技术领域,更具体而言,涉及一种游戏引擎渲染方法及装置。
背景技术
作为一款第五代超文本标记语言(HyperText Markup Language5,HTML5)游戏引擎,X-Canvas广泛应用于移动终端的游戏开发中,其工作流程包括JS(JavaScript脚本语言)执行部分和图像渲染部分。当进入游戏后,X-Canvas引擎被激活,开始执行JS程序。如图1所示,步骤S001,执行JS代码。JS执行部分通过执行JS代码生成一组渲染命令,这组渲染命令可以包括图像绘制命令、图形绘制命令、文字绘制命令及绘图环境设置命令,也可以包括采集图像数据的命令;步骤S002,执行渲染。执行渲染命令组所指定的操作,在步骤S002执行,步骤S001进入等待,当步骤S002的渲染过程执行完成后,程序进入下一轮运行,步骤S001的JS执行部分进入下一组渲染命令的计算。
可以发现,X-Canvas采用单线程程序执行模式,所述单线程程序执行模式是指,程序的执行路径是以时间为顺序的串行结构。也就是说,在X-Canvas的程序执行过程中,图像渲染部分必须在JS执行部分执行完成后才能开始执行,而JS执行部分在完成一次计算后,需要等待图像渲染部分执行完成后,才能进行下一次计算。因此,导致游戏引擎的程序循环周期过长,渲染效率过低。
发明内容
有鉴于此,本发明实施例提供一种游戏引擎渲染方法及装置,能够缩短程序的循环周期,提高渲染效率。
第一方面,本发明实施例提供了一种游戏引擎渲染方法,所述方法包括:执行线程执行JS代码生成渲染命令组;将所述渲染命令组写入预设队列的空闲帧中;渲染线程从所述预设队列按顺序读取已经写入渲染命令组的可用帧;根据读取的所述可用帧中的渲染命令组进行渲染。
在第一方面的第一种可能的实现方式中,将所述渲染命令组写入预设队列的空闲帧中之前包括:判断所述预设队列是否有空闲帧;若是,一直执行将所述渲染命令组写入预设队列的空闲帧的步骤,若否,则等待。
结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,将所述渲染命令组写入预设队列的空闲帧中之后包括:执行线程通知渲染线程;渲染线程根据所述通知执行从所述预设队列按顺序读取已经写入渲染命令组的可用帧的步骤。
结合第一方面或第一方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述渲染线程从所述预设队列按顺序读取已经写入渲染命令组的可用帧包括:渲染线程从所述预设队列按先入先出的顺序读取已经写入渲染命令组的可用帧。
结合第一方面或第一方面的第一种或第二种或第三种可能的实现方式,在第四种可能的实现方式中,所述渲染线程从所述预设队列按顺序读取已经写入渲染命令组的可用帧时,若发现没有可用帧,则重复执行上一渲染操作。
结合第一方面或第一方面的第一种或第二种或第三种或第四种可能的实现方式,在第五种可能的实现方式中,所述根据读取的可用帧中的渲染命令组进行渲染后,所述渲染线程将所述被读取的可用帧标识为空闲帧,使得所述执行线程执行写入操作时将生成的渲染命令组按覆盖的方式写入。
第二方面,本发明实施例还提供了一种游戏引擎渲染装置,所述装置包括:生成单元,用于执行线程执行JS代码生成渲染命令组;写入单元,用于将所述渲染命令组写入预设队列的空闲帧中;读取单元,用于从所述预设队列按顺序读取已经写入渲染命令组的可用帧;渲染单元,用于根据所述读取单元读取的所述可用帧中的渲染命令组进行渲染。
在第二方面的第一种可能的实现方式中,所述装置还包括:判断单元,其中,所述判断单元,用于判断所述预设队列是否有空闲帧;所述写入单元在所述预设队列有空闲帧时,一直执行将所述渲染命令组写入预设队列的空闲帧的步骤;在所述预设队列无空闲帧时,执行等待。
结合第二方面及第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述装置还包括,通知单元,其中,所述通知单元,用于当所述写入单元将所述渲染命令组写入预设队列的空闲帧中后,通知渲染线程。
结合第二方面及第二方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述装置还包括标识单元,所述标识单元,用于在所述渲染单元完成渲染之后,将所述被读取的可用帧标识为空闲帧,以便于所述写入单元将生成的渲染命令组按覆盖的方式写入。
由以上技术方案可知,本发明实施例所提供的游戏引擎渲染方法及装置,首先,执行线程执行JS代码生成渲染命令组,将渲染命令组写入预设队列的空闲帧中,而渲染线程从预设队列按顺序读取已经写入渲染命令组的可用帧,根据读取的可用帧中的渲染命令组进行渲染。由此可见,本发明所提供的技术方案通过设置预设队列,使执行线程与渲染线程分别作为两个独立的执行线程,两部分执行线程的执行很少受对方执行进程的限制,因此,缩短了游戏引擎的程序的循环周期,提高了渲染速度,也提高了渲染效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。通过附图所示,本发明的上述及其它目的、特征和优势将更加清晰。在全部附图中相同的附图标记指示相同的部分。并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本发明的主旨。
图1为本发明实施例提供的现有的渲染方法流程图;
图2为本发明实施例提供的渲染方法的第一种实施方式方法流程图;
图3为本发明实施例提供的渲染方法的第二种实施方式方法流程图;
图4为本发明实施例提供的渲染方法的第三种实施方式方法流程图;
图5为本发明提供的双线程渲染方式的第一示例图;
图6为本发明提供的双线程渲染方式的第二示例图;
图7为本发明实施例提供的渲染装置的第一种实施方式结构示意图;
图8为本发明实施例提供的渲染装置的第二种实施方式结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图2,为本发明实施例提供的渲染方法的第一种实施方式方法流程图,本实施例中,执行线程的工作内容包括:执行JS代码生成渲染命令组;将所述渲染命令组写入预设队列的空闲帧,并执行下一次计算,重复上述步骤;渲染线程的工作内容包括:从所述预设队列按顺序读取已经写入渲染命令组的可用帧;根据读取的所述可用帧中的渲染命令组进行渲染,并重复执行下一次读取。其中,预设队列为执行线程与渲染所共用,使得执行线程与渲染线程形成两个独立的工作线程。
为了使本发明方案更加清楚,下面对本发明的方案按照步骤进行描述。参见图3,为本发明实施例提供的渲染方法的第二种实施方式方法流程图。所述方法包括:
步骤S101:执行线程执行JS代码生成渲染命令组。
用户进入游戏后,执行线程执行预先写入的程序,并生成渲染命令组。其中,根据游戏所处的运行状态的不同,渲染命令组可以包含一个渲染命令也可以包含多个渲染命令。例如,进入游戏时,执行线程根据用户的需求执行特定的程序段,所生成的渲染命令组包含一组渲染命令;当进入游戏后,游戏场景包含多个需要渲染的部分,每个需要渲染的部分对应一个渲染命令,此时,每个渲染命令组中包含多个渲染命令。渲染命令的数量根据游戏的不同而不同,本发明对此不做限制。
步骤S102:将渲染命令组写入预设队列的空闲帧中。
为了便于实现执行线程与渲染线程独立工作,X-Canvas引擎被激活后,创建一个可以容纳渲染命令组的队列,本发明中将其命名为预设队列。执行线程与渲染线程共用该预设队列。执行线程将所生成的渲染命令组写入该预设队列的空闲帧中,以便于渲染线程读取渲染命令组,并根据渲染命令组进行渲染。
需要指出的,由于执行线程和渲染线程的工作相对独立,为了提高渲染效率,执行线程将渲染命令组写入预设队列的空闲帧之后,向渲染线程发出通知,以便于渲染线程接收到通知后,进行下一步工作。此外,预设队列可以容纳至少一个帧,当预设队列容纳一个帧时,执行线程生成一个渲染命令组后,将渲染命令组写入该帧中,以便于渲染线程从该帧中读取渲染命令组;当预设队列可以容纳多个帧时,执行线程生成第一个渲染命令组并写入空闲帧后,执行线程继续执行程序生成第二个渲染命令组,按顺序写入预设队列的下一个空闲帧中,没有空闲帧,则等待。
步骤S103:渲染线程从所述预设队列按顺序读取已经写入渲染命令组的可用帧。
在执行线程将渲染命令组写入预设队列之后,渲染线程从预设队列中按顺序读取已经写入渲染命令组的可用帧。渲染线程从所述预设队列按顺序读取已经写入渲染命令组的可用帧时,若发现没有可用帧,则重复执行上一渲染操作,在重复上一次渲染操作完成后,回到循环的开始进入等待。
当预设队列容纳多个帧时,为了顺应游戏的运行过程,执行线程生成并向队列中写入渲染命令组时按照一定的顺序执行,因此,渲染线程读取已经写入渲染命令组的可用帧时也应当遵循该顺序,即读取已经写入渲染命令组的可用帧时遵循先入先出原则。
步骤S104:根据读取的所述可用帧中的渲染命令组进行渲染。
其中,本发明实施例中进行渲染包括根据图像绘制命令、图形绘制命令、文字绘制命令、绘图环境设置命令等进行渲染。例如,在进入游戏前,根据用户的选择对角色装饰的渲染及角色使用的工具的渲染;进入游戏后,随着游戏的进行,对游戏场景颜色的不断渲染,以及对角色所处的状态的渲染等。本发明中对游戏的渲染根据游戏不同而不同,本发明对此不做限制,同时,由于游戏渲染技术为本领域技术人员所熟知的技术,本发明在此不再赘述。
其中,在根据读取的可用帧中的渲染命令组进行渲染后,渲染线程将被读取的可用帧标识为空闲帧,这样使得执行线程执行写入操作时,判断出空闲帧(即原来被占用的帧变为空闲可写入),则将生成的渲染命令组按覆盖的方式写入。
由上述实施例可知,本发明实施例所提供的游戏引擎渲染方法,首先,执行线程执行JS代码生成渲染命令组,将所述渲染命令组写入预设队列的空闲帧中,将渲染命令组写入预设队列的空闲帧中,而渲染线程从预设队列按顺序读取已经写入渲染命令组的可用帧,根据读取的可用帧中的渲染命令组进行渲染。由此可见,本发明所提供的技术方案通过设置预设队列,使执行线程与渲染线程分别作为两个独立的执行线程,两部分执行线程的执行很少受对方执行进程的限制,因此,缩短了游戏引擎的程序的循环周期,提高了渲染效率。
在上述实施例的基础上,为了使本领域技术人员更加清楚的理解本方案,本发明更具体的描述了该渲染方法。参见图4,为本发明实施例提供的渲染方法的第三种实施方式方法流程图。该实施方式中,预设队列含有N个帧,N是一个可变量(N大于0)。本发明可以优选N为3。
所述方法包括:
步骤S201:执行线程执行JS代码生成渲染命令组。
其中,执行线程根据游戏所处的不同状态执行不同的程序段,所生成的渲染命令组也不相同,具体操作在上述实施例中已进行描述,本发明此处不再赘述。
步骤S202:判断所述预设队列是否有空闲帧,若是,执行步骤S203;若否,执行步骤S204。
由上述实施例可知,当预设队列容纳一个帧时,执行线程生成第一个渲染命令组后,将该渲染命令组写入该帧中,渲染线程从该帧读取渲染命令组,并根据所述渲染命令组进行图像渲染。由于预设队列为执行线程与渲染线程所共用,因此,当渲染线程完成渲染后,执行线程才能将所生成的第二个渲染命令组写入该帧中。为了提高渲染效率,当预设队列设置有多个帧时,执行线程生成第一个渲染命令组后,写入预设队列的第一个空闲帧,执行线程每生成一个渲染命令组,便顺次写入下一个空闲帧。
执行线程每生成一个新的渲染命令组,指针向下移动一个帧,以便于将新的渲染命令组写入该帧中。当预设队列的最后一个帧中写入渲染命令组后,前面的帧已经被渲染线程读取渲染命令组执行渲染后变成空闲帧,因此,指针再次指向前面的第一个空闲帧,并随着执行线程不断生成新的渲染命令组,重复执行上述过程。
步骤S203:将所述渲染命令组写入空闲帧中。
步骤S204:没有空闲帧,则执行线程等待(即停止写入操作)。
步骤S205:渲染线程判断所述预设队列是否有被写入渲染命令组的可用帧,若是,执行步骤S207;否则,执行步骤S206。
当预设队列仅能容纳一个帧时,直接对该帧进行判断。预设队列能容纳至少两个帧以上时,由上述描述可知,渲染命令组的写入和读取遵循先进先出的原则,因此,渲染线程读取第一个渲染命令组时,指针指向预设队列的第一个帧。
需要说明的是,如果一个帧,正被写入渲染命令组,属于正在被使用,此时不是可用帧;或者,如果一个帧,正在被渲染线程获取其中的渲染命令组,也属于正在被使用,此时也不是可用帧。即,本实施例说的可用帧,指渲染命令组已经被执行线程完成写入操作,并且没有正在被渲染线程调用。
步骤S206:没有被写入渲染命令组的可用帧,重复上一渲染操作,在重复上一次渲染操作完成后,回到循环的开始进入等待。
步骤S207:读取被写入渲染命令组的可用帧中的渲染命令组。
步骤S208:按照所述渲染命令组进行渲染。
步骤S206、步骤S207、步骤S208的实施方式与上述实施例相同,本发明在此不再赘述。
步骤S209:渲染线程将被读取的可用帧标识为空闲帧。
在根据读取的可用帧中的渲染命令组进行渲染后,渲染线程将被读取的可用帧标识为空闲帧,这样使得执行线程执行写入操作时,判断出空闲帧(即原来被占用的帧变为空闲可写入),则将生成的渲染命令组按覆盖的方式写入。
本实施例所述的方法,预设队列能够容纳至少两个帧,由于预设队列为执行线程与渲染线程所共用,当设置有多个帧时,执行线程与渲染线程能够同时工作,相互之间较少受到对方工作进程的牵制,提高了双线程渲染的工作效率。
需要指出的,在本发明中,执行线程可以生成两类命令:同步接口命令和异步接口命令。同步接口命令指根据用户的特定需求,需要渲染线程实时反馈数据的命令;异步接口命令指渲染线程无须实时执行的命令。同步接口命令包括获取图像数据命令,异步接口命令包括根据游戏进程对游戏画面进行渲染的一系列命令,如,图像渲染命令。与两种性质不同的命令相对应,渲染线程包括渲染模式和获取图像数据模式两种不同的执行模式,能够对应不同性质的命令进行切换。为了使本领域技术人员对本发明有更好的理解,下面通过两个具体示例分别对这两种命令进行详细描述。
如图5所示,为本发明提供的双线程渲染方式的第一示例图。在本实施例中,以获取图像数据命令为例进行描述。步骤一,执行线程根据用户的请求信息执行特定的JS程序段生成获取图像数据命令。由于执行线程不具备获取图像数据的执行平台,所以需要将获取图像数据命令传送给渲染线程。步骤二,将获取图像数据命令写入预设队列,并通知渲染线程,以便于渲染线程将执行模式切换为获取图像数据模式,然后执行线程进入休眠,等待结果。在本实施例中,预设队列可以为一个用于存储获取图像数据命令的位置变量,比如可以定义为“arg”。步骤三,渲染线程将执行模式切换后,读取“arg”中的获取图像数据命令,并执行该命令,生成一个结果数据,并将结果数据写入预设队列。本实施例中,可以将写入结果数据的位置定义为“result”。步骤四,执行线程从“result”中读取该结果数据,并将结果数据返回调用者,以便于调用者在终端上进行显示。
当然,上述仅以获取图像数据命令为例进行描述,同步接口命令还可以为其他命令,其渲染方法与上述描述相似,本发明在此不再赘述。
上述为本发明渲染方法中执行线程生成同步接口命令的方法,然而,当进入游戏后,随着游戏的运行,游戏场景不断变化,此时执行线程生成的是异步接口命令。
参见图6,为本发明提供的双线程渲染方式的第二示例图。进入游戏后,X-Canvas引擎激活,为了满足游戏场景的不断变化,进一步提高渲染效率,可以将预设队列创建为可以容纳N(N大于等于2)个帧的N重队列。N为多少可以根据不同游戏进行不同的设置,本发明对此不做限制。
本实施例中以3重队列为例对具体的渲染过程进行描述。随着游戏的运行,游戏场景不断变化,执行线程不断的生成渲染命令组。当执行线程生成一个渲染命令组后,指针从预设队列的上一个位置帧移动到当前帧。此处,上一个位置帧指该渲染命令组之前的渲染命令组所写入的帧。判断当前帧是否为空闲帧,若当前帧为空闲帧时,将渲染命令组写入该当前帧中;若当前帧不为空闲帧时,执行线程等待,直到当前帧为空闲帧时将渲染命令组写入当前帧。执行线程将渲染命令组写入当前帧后,指针顺次向后移动,指向当前帧的下一帧,执行线程进入下一次计算,生成新的渲染命令组,并重复执行上述过程。
与此同时,在执行线程写入第一个渲染命令组并通知渲染线程后,渲染线程开始执行读取渲染命令组,并根据所读取的渲染命令组进行渲染的步骤。渲染线程完成一次渲染后,指针从预设队列的上一个位置帧移动到当前位置帧,判断当前位置帧中是否是含有被写入渲染命令组的可用帧,若是,读取渲染命令组,并根据渲染命令组进行渲染,完成渲染后,将该可用帧标识为空闲帧,并指向下一个帧,重复执行上述过程;若否,重复执行上一渲染操作,在重复上一次渲染操作完成后,回到循环的开始进入等待。
其中,渲染命令组包括M个渲染命令,每个渲染命令对应游戏的一个部分,例如,渲染命令1对应游戏角色的服饰颜色,渲染命令2对应角色所在的位置,渲染命令M对应角色所处的环境的颜色。执行线程生成渲染命令组时,按照一定次序逐个生成渲染命令,并且每生成一个渲染命令便向预设队列相应的帧中写入一个渲染命令。渲染线程读取渲染命令的顺序与执行线程写入是的顺序相同,本发明此处不再赘述。
需要指出的,当上一个帧为预设队列的第三个帧时,指针移动到预设队列的第一个帧,并将第一个帧作为当前帧,当完成对当前帧的操作后,指针移动到当前帧的下一帧,即预设队列的第二个帧,并重复上述的执行过程,当完成对预设队列的第二帧的操作后,指针再次指向预设队列的最后一个帧。
X-Canvas引擎主要用于游戏中,在程序执行时,由于JS逻辑比较复杂,执行线程与渲染线程相比,执行耗时相对较长,执行线程的执行耗时是渲染线程执行耗时的4到5倍。假设执行线程的执行耗时为Lms,渲染线程的执行耗时为Gms,单线程执行模式的每秒传输帧数(Frames Per Second,FPS)的计算公式为:FPS_S=1000/(L+G),使用该发明所提供的双线程执行模式的FPS_M=1000/(L),提升的幅度为P=FPS_M-FPS_S)/FPS_S=G/L。
以在小米2S手机上正常流畅的运行的九游棋牌大厅3.0版主界面为例,得出如下比较结果:
由上述数据表明,本发明的双线程执行模式的运行效率比现有的单线程执行方法提高了(5400-4400)/4400=22%。
当然,上述仅仅为基于本发明方案的一个优选示例,对本发明不造成任何限制,如,所创建的队列可以根据不同需求进行不同设置,又如,针对其他游戏引擎,也可以进行与游戏引擎相适应的处理,本发明对此不做限制。
此外,X-Canvas不仅适用于Android平台,也适用于IOS及WP8运行平台,本发明在此不再赘述。
由以上描述可知,本发明实施例所提供的游戏引擎渲染方法,首先,执行线程执行JS代码生成渲染命令组,将渲染命令组写入预设队列的空闲帧中,而渲染线程从预设队列按顺序读取已经写入渲染命令组的可用帧,根据读取的可用帧中的渲染命令组进行渲染。由此可见,本发明所提供的技术方案通过设置预设队列,使执行线程与渲染线程分别作为两个独立的执行线程,两部分执行线程的执行很少受对方执行进程的限制,因此,缩短了游戏引擎的程序的循环周期,提高了渲染速度,也提高了渲染效率。
与上述实现方法相对应的,本发明实施例还提供了一种渲染装置,如图7所示,为本发明实施例提供的渲染装置的第一种实施方式结构示意图。
所述装置包括:生成单元11、写入单元12、读取单元13和渲染单元14。其中,所述生成单元11,用于执行线程执行JS代码生成渲染命令组;所述写入单元12,用于将所述渲染命令组写入预设队列的空闲帧中;所述读取单元13,用于从所述预设队列按顺序读取已经写入渲染命令组的可用帧;所述渲染单元14,用于根据所述读取单元13读取的所述可用帧中的渲染命令组进行渲染。
所述装置中各个单元的功能和作用的实现过程详见上述方法中对应的实现过程,在此不再赘述。
本发明实施例所提供的游戏引擎渲染装置,首先,执行线程执行JS代码生成渲染命令组,将渲染命令组写入预设队列的空闲帧中,而渲染线程从预设队列按顺序读取已经写入渲染命令组的可用帧,根据读取的可用帧中的渲染命令组进行渲染。由此可见,本发明所提供的技术方案通过设置预设队列,使执行线程与渲染线程分别作为两个独立的执行线程,两部分执行线程的执行很少受对方执行进程的限制,因此,缩短了游戏引擎的程序的循环周期,提高了渲染速度,也提高了渲染效率。
在上述实施例的基础上,参见图8,为本发明实施例提供的渲染装置的第二种实施方式结构示意图。
所述装置包括:生成单元21、判断单元22、写入单元24、通知单元25、读取单元26、渲染单元27和标识单元28,其中,所述生成单元21、所述写入单元24、所述读取单元26和所述渲染单元27的功能和作用与上述实施例相似,本发明在此不再赘述。
所述判断单元22,用于判断所述预设队列是否有空闲帧;所述写入单元24在所述预设队列有空闲帧时,一直执行将所述渲染命令组写入预设队列的空闲帧的步骤;在所述预设队列无空闲帧时,执行等待;所述通知单元25,用于当所述写入单元24将所述渲染命令组写入预设队列的空闲帧中后,通知渲染线程;所述标识单元28,用于在所述渲染单元完成渲染之后,将所述被读取的可用帧标识为空闲帧,以便于所述写入单元24将生成的渲染命令组按覆盖的方式写入。
在上述实施例的基础上,本实施例中,所述读取单元26,用于根据所述通知单元25的通知从所述预设队列按顺序读取已经写入渲染命令组的可用帧,具体是从所述预设队列按先入先出的顺序读取已经写入渲染命令组的可用帧。
所述装置中各个单元的功能和作用的实现过程详见上述方法中对应的实现过程,在此不再赘述。
本实施例所提供的装置,通过将预设队列设置为可以容纳多个帧的队列,进一步提高了渲染效率。
综上所述,本发明实施例所提供的游戏引擎渲染方法及装置,首先,执行线程执行JS代码生成渲染命令组,将渲染命令组写入预设队列的空闲帧中,而渲染线程从预设队列按顺序读取已经写入渲染命令组的可用帧,根据读取的可用帧中的渲染命令组进行渲染。由此可见,本发明所提供的技术方案通过设置预设队列,使执行线程与渲染线程分别作为两个独立的执行线程,两部分执行线程的执行很少受对方执行进程的限制,因此,缩短了游戏引擎的程序的循环周期,提高了渲染速度,也提高了渲染效率。
可以理解的是,本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (4)

1.一种游戏引擎渲染方法,其特征在于,所述方法包括:
创建一个由执行线程和渲染线程所共用的预设队列,所述预设队列容纳1个或多个帧;
执行线程执行JS代码生成获取图像数据命令或渲染命令组,与这两种性质不同的命令相对应,渲染线程包括两种不同的执行模式:获取图像数据模式和渲染模式;
执行线程将所述获取图像数据命令或所述渲染命令组写入预设队列的空闲帧中,然后通知渲染线程已有获取图像数据命令或渲染命令组写入预设队列;
当渲染线程接到所述已有获取图像数据命令写入预设队列的通知后将执行模式切换为获取图像数据模式,该渲染线程读取并执行所述获取图像数据命令,生成一个结果数据并将该结果数据写入预设队列中,所述执行线程从该预设队列中读取该结果数据并将其返回调用者;
当渲染线程接到所述已有渲染命令组写入预设队列的通知后将执行模式切换为渲染模式,从所述预设队列按先入先出的顺序读取已经写入渲染命令组的可用帧;
渲染线程根据读取的所述可用帧中的渲染命令组进行渲染;
在根据读取的可用帧中的渲染命令组进行渲染后,所述渲染线程将所述被读取的可用帧标识为空闲帧,使得所述执行线程执行写入操作时将生成的渲染命令组按覆盖的方式写入。
2.如权利要求1所述的方法,其特征在于,将所述渲染命令组写入预设队列的空闲帧中之前包括:
判断所述预设队列是否有空闲帧;
若是,一直执行将所述渲染命令组写入预设队列的空闲帧的步骤,若否,则等待。
3.如权利要求1所述的方法,其特征在于,所述渲染线程从所述预设队列按先入先出的顺序读取已经写入渲染命令组的可用帧时,若发现没有可用帧,则重复执行上一渲染操作。
4.如权利要求1所述的方法,其特征在于,还包括:执行线程在将所述获取图像数据命令写入预设队列的空闲帧中,然后通知渲染线程已有获取图像数据命令写入预设队列之后进入休眠状态,等待结果数据。
CN201410069556.6A 2014-02-27 2014-02-27 一种游戏引擎渲染方法及装置 Active CN103942823B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410069556.6A CN103942823B (zh) 2014-02-27 2014-02-27 一种游戏引擎渲染方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410069556.6A CN103942823B (zh) 2014-02-27 2014-02-27 一种游戏引擎渲染方法及装置

Publications (2)

Publication Number Publication Date
CN103942823A CN103942823A (zh) 2014-07-23
CN103942823B true CN103942823B (zh) 2018-07-24

Family

ID=51190474

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410069556.6A Active CN103942823B (zh) 2014-02-27 2014-02-27 一种游戏引擎渲染方法及装置

Country Status (1)

Country Link
CN (1) CN103942823B (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105118077B (zh) * 2015-09-02 2018-02-09 广东建设职业技术学院 一种提高文件拍摄流畅性的方法及系统
CN105741227A (zh) * 2016-01-26 2016-07-06 网易(杭州)网络有限公司 渲染方法和装置
CN109213607B (zh) * 2017-06-30 2021-07-23 武汉斗鱼网络科技有限公司 一种多线程渲染的方法和装置
CN108093293B (zh) * 2018-01-15 2021-01-22 北京奇艺世纪科技有限公司 一种视频渲染方法及系统
CN108305316A (zh) * 2018-03-08 2018-07-20 网易(杭州)网络有限公司 基于ar场景的渲染方法、装置、介质和计算设备
KR102455820B1 (ko) * 2018-05-31 2022-10-18 후아웨이 테크놀러지 컴퍼니 리미티드 커맨드 스트림 최적화 및 향상을 위한 장치 및 방법
CN109634707A (zh) * 2018-12-21 2019-04-16 深圳开立生物医疗科技股份有限公司 超声系统gui显示方法及装置
CN111402349B (zh) * 2019-01-03 2023-09-08 百度在线网络技术(北京)有限公司 渲染方法、渲染装置和渲染引擎
CN111400024B (zh) * 2019-01-03 2023-10-10 百度在线网络技术(北京)有限公司 渲染过程中的资源调用方法、装置和渲染引擎
CN109739505B (zh) 2019-01-08 2019-11-29 网易(杭州)网络有限公司 一种用户界面的处理方法和装置
CN110021058B (zh) * 2019-03-21 2023-09-26 深圳点猫科技有限公司 一种便于少儿操作的三维体素建模方法及系统
CN113485776B (zh) * 2021-08-02 2024-04-05 竞技世界(北京)网络技术有限公司 一种在多线程渲染中实体的处理方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101067827A (zh) * 2007-06-14 2007-11-07 上海创图网络科技发展有限公司 一种基于浏览器的三维网页实现方法
CN102520937A (zh) * 2011-11-29 2012-06-27 广东威创视讯科技股份有限公司 优化进程间图像渲染的方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8115774B2 (en) * 2006-07-28 2012-02-14 Sony Computer Entertainment America Llc Application of selective regions of a normal map based on joint position in a three-dimensional model
US7940261B2 (en) * 2007-01-10 2011-05-10 Qualcomm Incorporated Automatic load balancing of a 3D graphics pipeline
CN103399729B (zh) * 2013-06-28 2016-04-27 广州市动景计算机科技有限公司 一种HTML5 Canvas应用处理方法、装置及处理器

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101067827A (zh) * 2007-06-14 2007-11-07 上海创图网络科技发展有限公司 一种基于浏览器的三维网页实现方法
CN102520937A (zh) * 2011-11-29 2012-06-27 广东威创视讯科技股份有限公司 优化进程间图像渲染的方法

Also Published As

Publication number Publication date
CN103942823A (zh) 2014-07-23

Similar Documents

Publication Publication Date Title
CN103942823B (zh) 一种游戏引擎渲染方法及装置
KR101375166B1 (ko) 문자화장단말기 및 제어방법
CN104423789B (zh) 一种信息处理方法及电子设备
CN110523085A (zh) 虚拟对象的控制方法、装置、终端及存储介质
CN105867815A (zh) 一种分屏显示方法及装置
CN105580024B (zh) 一种截屏方法及装置
CN104866318B (zh) 一种多窗口中标签页的展示方法及装置
CN105930467A (zh) 一种信息处理方法及电子设备
CN105786417B (zh) 一种静态图片的动态显示方法、装置及设备
CN107783833A (zh) 一种终端后台应用程序的管理方法及装置
CN111596919B (zh) 图文绘制结果的展示方法、装置、计算机设备及存储介质
CN109213607A (zh) 一种多线程渲染的方法和装置
CN102799425A (zh) 一种网页图形动画实现方法及装置
CN105094553A (zh) 一种子菜单栏特效的实现方法
US20140331208A1 (en) Computer and method for debugging program
CN104834715A (zh) 一种基于部件和容器的网站生成方法及系统
CN112214416B (zh) 调试小程序的方法、装置、电子设备和存储介质
CN108279956B (zh) 进度指示方法及进度指示装置、存储介质、电子设备
EP2608004B1 (en) Method and device for movement of image object
CN113134234B (zh) 信息显示方法、装置、终端及存储介质
CN104615349A (zh) 一种信息处理的方法及电子设备
CN110162336B (zh) 一种串口指令发送方法、装置和计算机可读存储介质
CN111369641A (zh) 一种基于Vue.js框架的污水处理工艺图组态方法
CN102608953A (zh) 一种点胶的方法、系统、拨码选择器及点胶机
CN112346613A (zh) 图标显示效果的控制方法、终端及计算机可读存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20161011

Address after: 510627 Guangdong city of Guangzhou province Whampoa Tianhe District Road No. 163 Xiping Yun Lu Yun Ping radio square B tower 13 floor 02 unit self

Applicant after: GUANGZHOU I9GAME INFORMATION TECHNOLOGY CO., LTD.

Address before: 100080 Beijing City, Haidian District Suzhou Street No. 29 building 16 room 10-20 Scandinavia

Applicant before: Excelle View Technology Co., Ltd.

GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200417

Address after: 310052 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province

Patentee after: Alibaba (China) Co.,Ltd.

Address before: 510627 Guangdong city of Guangzhou province Whampoa Tianhe District Road No. 163 Xiping Yun Lu Yun Ping radio square B tower 13 floor 02 unit self

Patentee before: GUANGZHOU UCWEB COMPUTER TECHNOLOGY Co.,Ltd.