CN106504185B - 一种渲染优化方法和装置 - Google Patents
一种渲染优化方法和装置 Download PDFInfo
- Publication number
- CN106504185B CN106504185B CN201610947632.8A CN201610947632A CN106504185B CN 106504185 B CN106504185 B CN 106504185B CN 201610947632 A CN201610947632 A CN 201610947632A CN 106504185 B CN106504185 B CN 106504185B
- Authority
- CN
- China
- Prior art keywords
- rendering
- vertex data
- type set
- commands
- memory
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/0007—Image acquisition
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种渲染优化方法和装置,用于在各种类型的移动终端上都开启绘制合并功能时保证图片显示的流畅,避免发生掉帧问题。本发明提供的方法中,对创建的多个渲染命令和每个渲染命令关联的顶点数据进行缓存,通过执行对顶点数据的数据量、显卡的GPU、当前使用的操作系统的判断分,若当前缓存下来的顶点数据的数据量小于或等于顶点数据阈值,和/或GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合,对多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,对合并后的所有渲染命令进行绘制;将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,将每个渲染命令关联的顶点数据从系统内存发送给图形渲染应用程序接口。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种渲染优化方法和装置。
背景技术
开放图形库(Open Graphics Library,OpenGL)可用于二维图像或者三维图像,是一个功能强大、调用方便的底层图形库。使用OpenGL进行图元的绘制时,若没用使用顶点缓冲对象(Vertex Buffer Object,VBO),要绘制的顶点数据是以顶点数组的形式保存在客户端的内存中,在每次调用绘制函数(例如:glDrawArrays或者glDrawElements)的时候,图形处理器(Graphic Processing Unit,GPU)访问系统内存拷贝顶点数组时,需要通过显卡总线到主板总线最后到系统内存,这个访问的过程其实是很低效的。而VBO的作用,就是把这份每次都要拷贝的顶点数组缓存在显卡内存中,通过VBO可以直接在显卡内存中分配并缓存顶点数据。这样就避免了每次调用绘制(draw)接口的时候的拷贝操作,从而提高了渲染性能同时降低了内存带宽和设备的电量消耗。索引缓冲对象(Indice Buffer Object,IBO)和VBO的原理类似,只不过IBO是缓存了VBO绘制时候的索引(Indice)。根据OpenGL ES(OpenGL for Embedded Systems)的建议,要想获得最好的性能,就要尽可能使用VBO和IBO来完成绘制任务。
Cocos2d是一个开源框架,用于构建游戏、应用程序和其他图形界面交互应用,Cocos2d是在OpenGL ES上面的一层封装,而且Cocos2d中还包含了:用户界面、网络通讯、跨平台数据持久化存储、音频播放、物理引擎等多种方便开发的模块,这样可以比直接使用OpenGL ES开发游戏,更加迅速、简单。Cocos2d让开发者将精力更加集中在游戏本身,而不是底层的图像绘制上。
Cocos2dx是Cocos2d的一种实现版本,Cocos2dx可以对绘制进行合并后再批量绘制,Cocos2dx中每个显示图片的绘制都需要生成一个绘制命令,绘制时会把所有绘制命令缓存下来,在批量绘制前进行排序,然后将排序后的绘制命令中所有顶点数据保存在一片连续的系统内存中。在绘制前会进行合并批次判断,根据材质标识(Material ID)来决定不同的顶点数据是否在同一个批次进行绘制,从而就可以减少图形渲染时的绘制调用,因此就能减少中央处理器(Central Processing Unit,CPU)消耗,使得系统更流畅,更省电。
现有技术中对于各种类型的移动终端,在特定机型上开启绘制合并后,会出现图片显示不流畅或者掉帧问题,而且合并策略是统一的策略,各种应用发布时只能选择开启绘制合并功能或关闭绘制合并功能,这样会导致为了规避问题机器出现不流畅或者掉帧问题,而对所有类型的移动终端上都会关闭渲染合并优化,但是关闭绘制合并功能又会占用较多的CPU消耗,这显然并不是最优的解决方案。
发明内容
本发明实施例提供了一种渲染优化方法和装置,用于在各种类型的移动终端上都开启绘制合并功能时保证图片显示的流畅,避免发生掉帧问题。
为解决上述技术问题,本发明实施例提供以下技术方案:
第一方面,本发明实施例提供一种渲染优化方法,包括:
根据多个绘制请求创建多个渲染命令,其中,每个渲染命令关联有对应的顶点数据,所述渲染命令包括:纹理贴图、显卡脚本数据、混合函数类型和材质标识;
对所述多个渲染命令和每个渲染命令关联的顶点数据进行缓存,然后执行如下两种判断方式中的至少一种判断方式:判断当前缓存下来的顶点数据的数据量是否大于顶点数据阈值,判断显卡的图形处理器GPU是否属于预置的逻辑类型集合且判断当前使用的操作系统是否属于预置的系统类型集合;
若当前缓存下来的顶点数据的数据量小于或等于所述顶点数据阈值,和/或所述GPU属于所述逻辑类型集合且所述当前使用的操作系统属于所述系统类型集合,对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;
将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将所述每个渲染命令关联的顶点数据从所述系统内存发送给图形渲染应用程序接口。
第二方面,本发明实施例还提供一种渲染优化装置,包括:
创建模块,用于根据多个绘制请求创建多个渲染命令,其中,每个渲染命令关联有对应的顶点数据,所述渲染命令包括:纹理贴图、显卡脚本数据、混合函数类型和材质标识;
判断模块,用于对所述多个渲染命令和每个渲染命令关联的顶点数据进行缓存,然后执行如下两种判断方式中的至少一种判断方式:判断当前缓存下来的顶点数据的数据量是否大于顶点数据阈值,判断显卡的图形处理器GPU是否属于预置的逻辑类型集合且判断当前使用的操作系统是否属于预置的系统类型集合;
绘制模块,用于若当前缓存下来的顶点数据的数据量小于或等于所述顶点数据阈值,和/或所述GPU属于所述逻辑类型集合且所述当前使用的操作系统属于所述系统类型集合,对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;
发送模块,用于将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将所述每个渲染命令关联的顶点数据从所述系统内存发送给图形渲染应用程序接口。
从以上技术方案可以看出,本发明实施例具有以下优点:
在本发明实施例中,在创建有多个渲染命令时,不立即进行绘制,而是分析当前缓存的顶点数据的数据量,以及分析显卡采用的GPU的逻辑类型和当前使用操作系统的系统版本,再结合预置的顶点数据阈值、逻辑类型集合、系统类型集合分别作出判断,若当前缓存下来的顶点数据的数据量小于或等于顶点数据阈值,和/或GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合,则说明当前正在使用的移动终端因缓存的顶点数据过小,或GPU、操作系统的版本或类型问题,会出现图片显示不流畅或者掉帧问题,本发明实施例中对于上述存在问题的移动终端,仍可以对多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制,因此绘制合并功能可以开启,从而减少对CPU的消耗。对于存在当前缓存下来的顶点数据的数据量小于或等于顶点数据阈值,和/或GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合的情况,本发明实施例中,将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将每个渲染命令关联的顶点数据从系统内存发送给图形渲染应用程序接口,因此每个渲染命令关联的顶点数据是从系统内存直接发送给图形渲染应用程序接口,而不再存储到显卡内存中,以避免图片显示不流畅或者掉帧问题。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种渲染优化方法的流程方框示意图;
图2为本发明实施例提供的图形渲染过程的实现场景示意图;
图3为本发明实施例提供的顶点数据在系统内存中的存储过程示意图;
图4为本发明实施例提供的顶点数据存储在VBO中的实现场景示意图;
图5为本发明实施例提供的渲染优化方法的一种应用场景示意图;
图6-a为本发明实施例提供的一种渲染优化装置的组成结构示意图;
图6-b为本发明实施例提供的另一种渲染优化装置的组成结构示意图;
图7为本发明实施例提供的渲染优化方法应用于终端的组成结构示意图。
具体实施方式
本发明实施例提供了一种渲染优化方法和装置,用于在各种类型的移动终端上都开启绘制合并功能时保证图片显示的流畅,避免发生掉帧问题。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
以下分别进行详细说明。
本发明渲染优化方法的一个实施例,具体可以应用于存在图像显示不流畅的移动终端中,使得这些机型的移动终端也可以开启绘制合并功能,并且可以解决图像显示出现的不流畅和掉帧问题,请参阅图1所示,本发明一个实施例提供的渲染优化方法,可以包括如下步骤:
101、根据多个绘制请求创建多个渲染命令,其中,每个渲染命令关联有对应的顶点数据,渲染命令包括:纹理贴图、显卡脚本数据、混合函数类型和材质标识。
在本发明实施例中,需要绘制图形时,可以由渲染器(Render)来触发绘制请求,对于触发的每个绘制请求都可以创建一个渲染命令,例如可以使用渲染队列(RenderQueque)创建渲染命令(RenderCommand),渲染队列可以作为缓冲区,每次生成对应的RenderCommand缓存下来。在本发明实施例中对于每个渲染命令都对应有顶点数据,该顶点数据具体可以为渲染中的四边形数据Quad。在创建的每个渲染命令中都可以包括纹理贴图、显卡脚本数据、混合函数类型和材质标识,其中,纹理贴图是绘制时需要使用的纹理,例如纹理贴图可以是texture。显卡脚本数据是显卡识别的脚本语言,用于GPU的计算,例如显卡脚本数据可以是shader。混合函数类型是指渲染中经常用到的混合方式,比如alpha混合和叠加混合等等。当获取到纹理贴图、显卡脚本数据、混合函数类型之后,可以根据纹理贴图、显卡脚本数据、混合函数类型来生成材质标识(Material ID)。举例说明如下,渲染命令是一个类,例如RenderCommand,该类包含了很多属性:纹理_textureID,Program_shader,混合函数_blendType,顶点数据_Quad,还有一个材质属性_materialID,材质是一种抽象,当且仅当纹理、shader、混合函数类型都相等的时候,材质才相等。
102、对多个渲染命令和每个渲染命令关联的顶点数据进行缓存,然后执行如下两种判断方式中的至少一种判断方式:判断当前缓存下来的顶点数据的数据量是否大于顶点数据阈值,判断显卡的GPU是否属于预置的逻辑类型集合且判断当前使用的操作系统是否属于预置的系统类型集合。
在本发明实施例中,在创建有多个渲染命令时,不立即进行绘制,而是分析当前缓存的顶点数据的数据量,以及分析显卡采用的GPU的逻辑类型和当前使用操作系统的系统版本,再结合预置的顶点数据阈值、逻辑类型集合、系统类型集合分别作出判断,其中,顶点数据阈值、逻辑类型集合、系统类型集合可以针对图形渲染时出现渲染问题的移动终端来确定,顶点数据阈值、逻辑类型集合、系统类型集合的预配置可以是经过多次测试后确定下来的取值或者范围,并且可以针对测试问题机型的需要来灵活配置,具体此处不做限定。举例说明如下,顶点数据阈值的选择可以结合在缓存的顶点数据量的规模来确定,GPU对应的逻辑类型集合可以指出现图形显示不流畅或掉帧的移动终端采用的GPU类型来确定,例如可以是powervr SGX544系列显卡,移动终端当前使用的操作系统对应的系统类型集合名可以指出现图形显示不流畅或掉帧的移动终端安装的操作系统版本来确定,例如可以是Android版本为4.2.2及以下的操作系统。需要说明的是,顶点数据阈值、逻辑类型集合、系统类型集合的预先配置可以不局限于上述举例,此处仅作举例说明,不作为限定。
在本发明实施例中,对多个渲染命令和每个渲染命令关联的顶点数据进行缓存之后,需要执行如下两种判断方式中的至少一种判断方式:判断方式1、判断当前缓存下来的顶点数据的数据量是否大于顶点数据阈值,判断方式2、判断显卡的GPU是否属于预置的逻辑类型集合且判断当前使用的操作系统是否属于预置的系统类型集合。在不同的应用场景下,可以只执行判断方式1,也可以只执行判断方式2,也还可以同时执行判断方式1和判断方式2,具体结合具体的实现方式。举例说明如下,对于判断方式2,预先配置属于问题机型的移动终端采用的GPU,将其定义为逻辑类型集合,然后判断当前显示图片的移动终端采用的GPU类型以及型号是否属于该逻辑类型集合。又如,预先配置属于问题机型的移动终端采用的操作系统,将其定义为系统类型集合,然后判断当前显示图片的移动终端采用的操作系统的版本是否属于该系统类型集合。
在本发明的一些实施例中,步骤102中的判断当前使用的操作系统是否属于预置的系统类型集合,可以包括如下步骤:
A1、判断当前使用的操作系统的版本号是否小于或等于预置版本号,若当前使用的操作系统的版本号小于或等于预置版本号,则确定当前使用的操作系统属于系统类型集合,若当前使用的操作系统的版本号大于预置版本号,则确定当前使用的操作系统不属于系统类型集合。
其中,系统类型集合可以通过预置版本号来实现,例如小于或等于预置版本号的操作系统都属于该系统类型集合,则可以判断当前移动终端所采用的操作系统的版本号是否小于或等于预置版本号,例如预置版本号可以是Android版本4.2.2,或者低于Android版本4.2.2,通过对当前使用的操作系统的版本号进行判断从而可以快速确定出当前使用的操作系统是否属于预置的系统类型集合。
103、若当前缓存下来的顶点数据的数据量小于或等于顶点数据阈值,和/或GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合,对多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制。
在本发明实施例中,针对上述步骤102中可以采用的判断方式1和判断方式2,在每种判断方式下都可以输出各自对应的判断结果,对于判断方式1,若对应的判断结果为当前缓存下来的顶点数据的数据量小于或等于顶点数据阈值,则可以触发执行步骤103,对于判断方式2,若对应的判断结果为GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合,则可以触发执行步骤103。本发明实施例中,若当前缓存下来的顶点数据的数据量小于或等于顶点数据阈值,和/或GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合,则说明当前正在使用的移动终端因缓存的顶点数据过小,或GPU、操作系统的版本或类型问题,会出现图片显示不流畅或者掉帧问题,本发明实施例中对于上述存在问题的移动终端,仍可以对多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制,因此绘制合并功能可以开启,从而减少对CPU的消耗。
在本发明的一些实施例中,步骤102执行之后,对于步骤102中可以采用的判断方式1和判断方式2,在每种判断方式下都可以输出各自对应的判断结果,步骤102之后除了执行步骤103和步骤104,在本发明提供的渲染优化方法中还可以执行如下步骤:
B1、若GPU不属于逻辑类型集合,和/或当前使用的操作系统不属于系统类型集合,对多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;
B2、将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将每个渲染命令关联的顶点数据从系统内存同步到显卡内存中,再将显卡内存中的顶点数据发送给图形渲染应用程序接口。
其中,若GPU不属于逻辑类型集合,和/或当前使用的操作系统不属于系统类型集合,则说明当前正在使用的移动终端的GPU、操作系统符合正常机型的要求,对多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制,从而通过执行绘制合并功能,可以减少CPU消耗,节省终端电量。在步骤B1执行之后,还可以进一步的执行步骤B2,将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将每个渲染命令关联的顶点数据从系统内存同步到显卡内存中,再将显卡内存中的顶点数据发送给图形渲染应用程序接口,通过显卡内存来提交顶点数据到图形渲染应用程序接口,可以减少系统内存到GPU的开销。
进一步的,步骤B2中将每个渲染命令关联的顶点数据从系统内存同步到显卡内存中,再将显卡内存中的顶点数据发送给图形渲染应用程序接口,具体可以包括如下步骤:
B21、从系统内存中获取到每个渲染命令关联的顶点数据,将获取到的顶点数据同步到顶点缓冲对象VBO中,调用glDraw*接口将VBO中的顶点数据提交给OpenGL。
其中,显卡内存具体可以为显卡中配置的VBO,则每个渲染命令关联的顶点数据存储到系统内存,通过OpenGL接口将glBufferData从系统内存同步到VBO中,图形渲染应用程序接口具体可以为OpenGL,通过调用glDraw*接口可以将VBO内容提交给OpenGL。VBO可以在大容量情况下使用,减少系统内存到GPU的开销。
104、将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将每个渲染命令关联的顶点数据从系统内存发送给图形渲染应用程序接口。
在本发明实施例中,将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将每个渲染命令关联的顶点数据从系统内存发送给图形渲染应用程序接口,因此每个渲染命令关联的顶点数据是从系统内存直接发送给图形渲染应用程序接口,而不再存储到显卡内存中,以避免图片显示不流畅或者掉帧问题。其中,步骤104是在前述步骤103中满足“当前缓存下来的顶点数据的数据量小于或等于顶点数据阈值,和/或GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合”条件下进行的,因此对于问题机型的移动终端,本发明实施例中可以使用系统内存进行渲染绘制的优化方案,顶点数据不需要从系统内存同步到显卡内存中,也就不需要再将顶点数据从显卡内存提交给图形渲染应用程序接口,因此可以解决现有技术中通过显卡内存缓存顶点数据造成的图形显示不流畅或者掉帧问题,从而使得绘制合并功能不需要区分各种类型的移动终端,而是都可以适用于各种类型的移动终端。
在本发明的一些实施例中,步骤104中的将每个渲染命令关联的顶点数据从系统内存发送给图形渲染应用程序接口,具体可以包括如下步骤:
C1、从系统内存中获取到每个渲染命令关联的顶点数据,调用glDraw*接口将获取到的顶点数据提交给OpenGL。
其中,图形渲染应用程序接口具体可以为OpenGL,通过调用glDraw*接口可以将系统内存中的顶点数据提交给OpenGL,本发明实施例中可以使用系统内存进行渲染绘制的优化方案,顶点数据不需要从系统内存同步到显卡内存中,也就不需要再将顶点数据从显卡内存提交给图形渲染应用程序接口,因此可以解决现有技术中通过显卡内存缓存顶点数据造成的图形显示不流畅或者掉帧问题。
在本发明的一些实施例中,步骤102执行之后,对于步骤102中可以采用的判断方式1和判断方式2,在每种判断方式下都可以输出各自对应的判断结果,步骤102之后除了执行步骤103和步骤104,在本发明提供的渲染优化方法中还可以执行如下步骤:
D1、若当前缓存下来的顶点数据的数据量大于顶点数据阈值,和GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合,对多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;
D2、将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将每个渲染命令关联的顶点数据从系统内存发送给图形渲染应用程序接口。
其中,针对上述步骤102中可以采用的判断方式1和判断方式2,在每种判断方式下都可以输出各自对应的判断结果,对于判断方式1,若对应的判断结果为当前缓存下来的顶点数据的数据量大于顶点数据阈值,对于判断方式2,若对应的判断结果为GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合,结合这两种判断结果,移动终端不属于问题机型,并且当前缓存的顶点数据也大于顶点数据阈值,则可以按照步骤D1和步骤D2的方式进行顶点数据的提交,本发明实施例中可以使用系统内存进行渲染绘制的优化方案,顶点数据不需要从系统内存同步到显卡内存中,也就不需要再将顶点数据从显卡内存提交给图形渲染应用程序接口,因此可以解决现有技术中通过显卡内存缓存顶点数据造成的图形显示不流畅或者掉帧问题。
进一步的,在本发明的一些实施例中,上述步骤中对多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并之前,本发明实施例提供的渲染优化方法还包括:
E1、根据每个渲染命令对应的渲染顺序对多个渲染命令进行排序。
具体的,在进行批量绘制之前,还可以根据每个渲染命令对应的渲染顺序进行排序,例如该渲染顺序可以是z数据,其中,z数据是垂直屏幕方向的数据,用于层级排序。根据z数据对多个渲染命令进行一次排序,例如根据z数据大小从小到大排序。举例说明,比如渲染背景的z数据为1,渲染按钮的z数据为0,则排序后会先渲染背景再渲染按钮。需要说明的是,渲染顺序可以由游戏开发人员自己指定,也可以使用具体的工具生成,若渲染顺序默认都是0,则可以按渲染命令插入队列的先后顺序作为渲染顺序进行渲染。
通过以上实施例对本发明实施例的描述可知,在创建有多个渲染命令时,不立即进行绘制,而是分析当前缓存的顶点数据的数据量,以及分析显卡采用的GPU的逻辑类型和当前使用操作系统的系统版本,再结合预置的顶点数据阈值、逻辑类型集合、系统类型集合分别作出判断,若当前缓存下来的顶点数据的数据量小于或等于顶点数据阈值,和/或GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合,则说明当前正在使用的移动终端因缓存的顶点数据过小,或GPU、操作系统的版本或类型问题,会出现图片显示不流畅或者掉帧问题,本发明实施例中对于上述存在问题的移动终端,仍可以对多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制,因此绘制合并功能可以开启,从而减少对CPU的消耗。对于存在当前缓存下来的顶点数据的数据量小于或等于顶点数据阈值,和/或GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合的情况,本发明实施例中,将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将每个渲染命令关联的顶点数据从系统内存发送给图形渲染应用程序接口,因此每个渲染命令关联的顶点数据是从系统内存直接发送给图形渲染应用程序接口,而不再存储到显卡内存中,以避免图片显示不流畅或者掉帧问题。
为便于更好的理解和实施本发明实施例的上述方案,下面举例相应的应用场景来进行具体说明。
本发明实施例提供在特定的操作系统以及GPU下的优化渲染性能方法,接下来以移动终端采用的操作系统为Android系统为例,特定机型移动终端可以为GPU使用powervrSGX544系列,Android版本为4.2.2及以下系统。本发明实施例提供的渲染优化方法可以应用于多种机型的移动终端中显示游戏程序的图形界面,例如欢乐斗牛和欢乐斗地主中都采用实时渲染方式,每帧都会采用本发明的技术方案进行渲染优化,包括游戏的所有显示场景。
请参阅图2所示,图形渲染引擎的渲染流程示意图,下面详细说明实现流程:
1、Render发起绘制(Draw)请求。
2、RenderQueue会根据请求的绘制创建一个RenderCommand。
3、RenderCommand会根据使用到的纹理、shader以及渲染混合方式(例如Alpha混合、叠加混合等),生成唯一的materialID。
4、RenderQueue缓存生成的RenderCommand。
其中,步骤4之后的虚线代表相对应之前操作的返回或反馈。
5、Render发起绘制(Render)请求。
6、RenderQueue会计算所缓存的顶点数据的整体大小,也检测当前的GPU是否PVRSGX544系列GPU且Android系统是4.2.2及以下,设定条件A为缓存的顶点数据大小小于等于4K,或者当前GPU为PVR SGX544系列、Android系统为4.2.2及以下。
7、RenderQueue会根据z数据对缓存的所有RenderCommand进行排序。
其中,z数据可以表示一种渲染顺序,比如渲染背景的z数据为1,渲染按钮的z数据为0,则排序后会先渲染背景再渲染按钮。
8、如果符合条件A,对合并的多个RenderCommand进行绘制。
如图3所示,为本发明实施例提供的顶点数据在系统内存中的存储过程示意图。每个显示图片的绘制都需要生成一个绘制命令,绘制时会把所有绘制命令缓存下来,在批量绘制前进行排序,然后将排序后的绘制命令中所有顶点数据保存在一片连续的系统内存中。在绘制前会进行合并批次判断,根据材质标识(Material ID)来决定不同的顶点数据是否在同一个批次进行绘制,从而就可以减少图形渲染时的绘制调用,因此就能减少CPU消耗,使得系统更流畅,更省电。举例说明,共有8个渲染命令,每个渲染命令管理的顶点数据分别为:Quad0、Quad1、Quad2、Quad3、Quad4、Quad5、Quad6、Quad7,其中,Quad0、Quad1、Quad2、Quad3对应的材质标识为Material0,Quad4对应的材质标识为Material1,Quad5、Quad6、Quad7对应的材质标识为Material2,则Quad0、Quad1、Quad2、Quad3可以进行批量绘制,Quad5、Quad6、Quad7可以进行批量绘制。
9、RenderCommand会将自身相关的顶点数据(例如Quad四边形数据)拷贝到连续的系统内存中。
其中,Quad指的是渲染中代表一个四边形数据,有4个顶点。
10、不再同步到VBO中,直接使用系统内存数据调用glDraw*接口提交给OpenGL。
其中,步骤10之后的虚线代表相对应之前操作的返回或反馈。
11、如果不符合条件A,对合并的多个RenderCommand进行绘制。
12、RenderCommand会将自身相关的Quad四边形数据拷贝到连续的系统内存中。
13、拷贝完毕后通过OpenGL接口glBufferData将系统内存内容同步到VBO中。
14、通过glDraw*接口将VBO内容提交给OpenGL。
如图4所示,为本发明实施例提供的顶点数据存储在VBO中的实现场景示意图。VBO是OpenGL中一种内存方式,一般放置在显存中,用于保存顶点数据,IBO是OpenGL中一种内存方式,一般放置在显存中,用于保存索引数据,虚线框内的Mem_index和Mem_quad这两种数据都放在系统内存中,非虚线框的IBO和VBO一般放置在显卡内存中,Mem_quad中保存的顶点数据是vertex0、vertex1、vertex2、vertex3,Mem_index中保存的索引数据为0、1、2、3、2、1,则索引相同的对应于相同的顶点数据,glBufferData从系统内存同步到VBO中,VBO中保存的顶点数据是vertex0、vertex1、vertex2、vertex3,IBO中保存的索引数据为0、1、2、3、2、1,则索引相同的对应于相同的顶点数据。
请参阅图5所示,为本发明实施例提供的渲染优化方法的一种应用场景示意图。与前述图2所示实施例不同的是图3所示中判断顶点数据的大小以及GPU、操作系统的判断之间可以具有先后顺序,实现过程如下:首先发起绘制请求,然后缓存所有的绘制命令,接下来计算顶点数据的大小,然后判断顶点数据的大小是否小于4096字节,如果小于或等于4096字节,切换到Draw Mem方式进行绘制,即使用系统内存进行渲染绘制的优化方案,如果顶点数据的大小大于4096字节,则继续判断当前的GPU是否属于PVR SGX544,以及判断当前的操作系统的版本是否小于或等于Android4.2.2,如果是,则切换到Draw Mem方式进行绘制,即使用系统内存进行渲染绘制的优化方案,如果不满足PVR SGX544,以及小于或等于Android4.2.2的要求,则可以使用Draw VBO进行绘制,即可以执行前述步骤11至13的实现方式。
本发明实施例中,Render发起一次渲染调用,将当前渲染命令缓存下来不立即进行渲染,计算当前缓存的顶点数据大小,如果小于等于4K直接使用系统内存方式提交给OpenGL渲染,如果大于4K则检测GPU是否PVRSGX544系列且Android系统是4.2.2及以下,检测符合问题gpu和系统组合则直接使用系统内存方式提交给OpenGL渲染,否则使用vbo方式渲染。
通过前述举例说明可知,本发明实施例中新增使用系统内存缓存所有顶点和索引数据,直接提交给OpenGL进行绘制,计算缓存的所有顶点数据大小,如果小于4096字节,也会切换到mem方式进行绘制,否则使用vbo绘制方式,新增检测Android版本以及gpu类型逻辑,判断如果当前Android版本小于等于4.2.2且gpu型号为powervr SGX544系列,则直接使用mem方式进行绘制。解决了问题机型上显示不流畅掉帧问题,完善drawcall合并方案可以在所有Android机型上统一开启,Drawcall的合并能降低CPU占用,能够支撑更多业务要求。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。
请参阅图6-a所示,本发明实施例提供的一种渲染优化装置600,可以包括:创建模块601、判断模块602、绘制模块603、发送模块604,其中,
创建模块601,用于根据多个绘制请求创建多个渲染命令,其中,每个渲染命令关联有对应的顶点数据,所述渲染命令包括:纹理贴图、显卡脚本数据、混合函数类型和材质标识;
判断模块602,用于对所述多个渲染命令和每个渲染命令关联的顶点数据进行缓存,然后执行如下两种判断方式中的至少一种判断方式:判断当前缓存下来的顶点数据的数据量是否大于顶点数据阈值,判断显卡的图形处理器GPU是否属于预置的逻辑类型集合且判断当前使用的操作系统是否属于预置的系统类型集合;
绘制模块603,用于若当前缓存下来的顶点数据的数据量小于或等于所述顶点数据阈值,和/或所述GPU属于所述逻辑类型集合且所述当前使用的操作系统属于所述系统类型集合,对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;
发送模块604,用于将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将所述每个渲染命令关联的顶点数据从所述系统内存发送给图形渲染应用程序接口。
在本发明的一些实施例中,所述绘制模块603,还用于若所述GPU不属于所述逻辑类型集合,和/或所述当前使用的操作系统不属于所述系统类型集合,对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;
所述发送模块604,还用于将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将所述每个渲染命令关联的顶点数据从所述系统内存同步到显卡内存中,再将所述显卡内存中的顶点数据发送给图形渲染应用程序接口。
在本发明的一些实施例中,所述发送模块604,具体用于从所述系统内存中获取到所述每个渲染命令关联的顶点数据,将获取到的顶点数据同步到顶点缓冲对象VBO中,调用glDraw*接口将所述VBO中的顶点数据提交给OpenGL。
在本发明的一些实施例中,所述绘制模块603,还用于若当前缓存下来的顶点数据的数据量大于所述顶点数据阈值,和所述GPU属于所述逻辑类型集合且所述当前使用的操作系统属于所述系统类型集合,对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;
所述发送模块604,还用于将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将所述每个渲染命令关联的顶点数据从所述系统内存发送给图形渲染应用程序接口。
在本发明的一些实施例中,请参阅图6-b所示,所述渲染优化装置600,还包括:排序模块605,用于所述绘制模块603对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并之前,根据每个渲染命令对应的渲染顺序对所述多个渲染命令进行排序。
在本发明的一些实施例中,所述判断模块602,具体用于判断当前使用的操作系统的版本号是否小于或等于预置版本号,若当前使用的操作系统的版本号小于或等于所述预置版本号,则确定所述当前使用的操作系统属于所述系统类型集合,若当前使用的操作系统的版本号大于所述预置版本号,则确定所述当前使用的操作系统不属于所述系统类型集合。
在本发明的一些实施例中,所述发送模块604,具体用于从所述系统内存中获取到所述每个渲染命令关联的顶点数据,调用glDraw*接口将获取到的顶点数据提交给OpenGL。
通过以上对本发明实施例的描述可知,在创建有多个渲染命令时,不立即进行绘制,而是分析当前缓存的顶点数据的数据量,以及分析显卡采用的GPU的逻辑类型和当前使用操作系统的系统版本,再结合预置的顶点数据阈值、逻辑类型集合、系统类型集合分别作出判断,若当前缓存下来的顶点数据的数据量小于或等于顶点数据阈值,和/或GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合,则说明当前正在使用的移动终端因缓存的顶点数据过小,或GPU、操作系统的版本或类型问题,会出现图片显示不流畅或者掉帧问题,本发明实施例中对于上述存在问题的移动终端,仍可以对多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制,因此绘制合并功能可以开启,从而减少对CPU的消耗。对于存在当前缓存下来的顶点数据的数据量小于或等于顶点数据阈值,和/或GPU属于逻辑类型集合且当前使用的操作系统属于系统类型集合的情况,本发明实施例中,将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将每个渲染命令关联的顶点数据从系统内存发送给图形渲染应用程序接口,因此每个渲染命令关联的顶点数据是从系统内存直接发送给图形渲染应用程序接口,而不再存储到显卡内存中,以避免图片显示不流畅或者掉帧问题。
本发明实施例还提供了另一种终端,如图7所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该终端可以为包括手机、平板电脑、PDA(Personal Digital Assistant,个人数字助理)、POS(Point ofSales,销售终端)、车载电脑等任意终端设备,以终端为手机为例:
图7示出的是与本发明实施例提供的终端相关的手机的部分结构的框图。参考图7,手机包括:射频(Radio Frequency,RF)电路1010、存储器1020、输入单元1030、显示单元1040、传感器1050、音频电路1060、无线保真(wireless fidelity,WiFi)模块1070、处理器1080、以及电源1090等部件。本领域技术人员可以理解,图7中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图7对手机的各个构成部件进行具体的介绍:
RF电路1010可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器1080处理;另外,将设计上行的数据发送给基站。通常,RF电路1010包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(Low NoiseAmplifier,LNA)、双工器等。此外,RF电路1010还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(GlobalSystem of Mobile communication,GSM)、通用分组无线服务(General Packet RadioService,GPRS)、码分多址(Code Division Multiple Access,CDMA)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、长期演进(Long Term Evolution,LTE)、电子邮件、短消息服务(Short Messaging Service,SMS)等。
存储器1020可用于存储软件程序以及模块,处理器1080通过运行存储在存储器1020的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器1020可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1020可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元1030可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元1030可包括触控面板1031以及其他输入设备1032。触控面板1031,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板1031上或在触控面板1031附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板1031可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器1080,并能接收处理器1080发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板1031。除了触控面板1031,输入单元1030还可以包括其他输入设备1032。具体地,其他输入设备1032可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元1040可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元1040可包括显示面板1041,可选的,可以采用液晶显示器(LiquidCrystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板1041。进一步的,触控面板1031可覆盖显示面板1041,当触控面板1031检测到在其上或附近的触摸操作后,传送给处理器1080以确定触摸事件的类型,随后处理器1080根据触摸事件的类型在显示面板1041上提供相应的视觉输出。虽然在图7中,触控面板1031与显示面板1041是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板1031与显示面板1041集成而实现手机的输入和输出功能。
手机还可包括至少一种传感器1050,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1041的亮度,接近传感器可在手机移动到耳边时,关闭显示面板1041和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路1060、扬声器1061,传声器1062可提供用户与手机之间的音频接口。音频电路1060可将接收到的音频数据转换后的电信号,传输到扬声器1061,由扬声器1061转换为声音信号输出;另一方面,传声器1062将收集的声音信号转换为电信号,由音频电路1060接收后转换为音频数据,再将音频数据输出处理器1080处理后,经RF电路1010以发送给比如另一手机,或者将音频数据输出至存储器1020以便进一步处理。
WiFi属于短距离无线传输技术,手机通过WiFi模块1070可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图7示出了WiFi模块1070,但是可以理解的是,其并不属于手机的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器1080是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1020内的软件程序和/或模块,以及调用存储在存储器1020内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器1080可包括一个或多个处理单元;优选的,处理器1080可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1080中。
手机还包括给各个部件供电的电源1090(比如电池),优选的,电源可以通过电源管理系统与处理器1080逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,手机还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本发明实施例中,该终端所包括的处理器1080还具有控制执行以上由终端执行的渲染优化方法流程。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (16)
1.一种渲染优化方法,其特征在于,包括:
根据多个绘制请求创建多个渲染命令,其中,每个渲染命令关联有对应的顶点数据,所述渲染命令包括:纹理贴图、显卡脚本数据、混合函数类型和材质标识;
对所述多个渲染命令和每个渲染命令关联的顶点数据进行缓存,然后执行如下两种判断方式中的至少一种判断方式:判断当前缓存下来的顶点数据的数据量是否大于顶点数据阈值,判断显卡的图形处理器GPU是否属于预置的逻辑类型集合且判断当前使用的操作系统是否属于预置的系统类型集合;
若当前缓存下来的顶点数据的数据量小于或等于所述顶点数据阈值,和/或所述GPU属于所述逻辑类型集合且所述当前使用的操作系统属于所述系统类型集合,对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;其中,所述逻辑类型集合为问题机型的移动终端采用的GPU的集合,所述系统类型集合为问题机型的移动终端采用的操作系统的集合;
将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将所述每个渲染命令关联的顶点数据从所述系统内存发送给图形渲染应用程序接口。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在当前缓存下来的顶点数据的数据量大于所述顶点数据阈值时,若所述GPU不属于所述逻辑类型集合,和/或所述当前使用的操作系统不属于所述系统类型集合,对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;
将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将所述每个渲染命令关联的顶点数据从所述系统内存同步到显卡内存中,再将所述显卡内存中的顶点数据发送给图形渲染应用程序接口。
3.根据权利要求2所述的方法,其特征在于,所述将所述每个渲染命令关联的顶点数据从所述系统内存同步到显卡内存中,再将所述显卡内存中的顶点数据发送给图形渲染应用程序接口,包括:
从所述系统内存中获取到所述每个渲染命令关联的顶点数据,将获取到的顶点数据同步到顶点缓冲对象VBO中,调用glDraw*接口将所述VBO中的顶点数据提交给OpenGL。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若当前缓存下来的顶点数据的数据量大于所述顶点数据阈值,和所述GPU属于所述逻辑类型集合且所述当前使用的操作系统属于所述系统类型集合,对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;
将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将所述每个渲染命令关联的顶点数据从所述系统内存发送给图形渲染应用程序接口。
5.根据权利要求1所述的方法,其特征在于,所述对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并之前,所述方法还包括:
根据每个渲染命令对应的渲染顺序对所述多个渲染命令进行排序。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述判断当前使用的操作系统是否属于预置的系统类型集合,包括:
判断当前使用的操作系统的版本号是否小于或等于预置版本号,若当前使用的操作系统的版本号小于或等于所述预置版本号,则确定所述当前使用的操作系统属于所述系统类型集合,若当前使用的操作系统的版本号大于所述预置版本号,则确定所述当前使用的操作系统不属于所述系统类型集合。
7.根据权利要求1至5中任一项所述的方法,其特征在于,所述将所述每个渲染命令关联的顶点数据从所述系统内存发送给图形渲染应用程序接口,包括:
从所述系统内存中获取到所述每个渲染命令关联的顶点数据,调用glDraw*接口将获取到的顶点数据提交给OpenGL。
8.一种渲染优化装置,其特征在于,包括:
创建模块,用于根据多个绘制请求创建多个渲染命令,其中,每个渲染命令关联有对应的顶点数据,所述渲染命令包括:纹理贴图、显卡脚本数据、混合函数类型和材质标识;
判断模块,用于对所述多个渲染命令和每个渲染命令关联的顶点数据进行缓存,然后执行如下两种判断方式中的至少一种判断方式:判断当前缓存下来的顶点数据的数据量是否大于顶点数据阈值,判断显卡的图形处理器GPU是否属于预置的逻辑类型集合且判断当前使用的操作系统是否属于预置的系统类型集合;
绘制模块,用于若当前缓存下来的顶点数据的数据量小于或等于所述顶点数据阈值,和/或所述GPU属于所述逻辑类型集合且所述当前使用的操作系统属于所述系统类型集合,对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;其中,所述逻辑类型集合为问题机型的移动终端采用的GPU的集合,所述系统类型集合为问题机型的移动终端采用的操作系统的集合;
发送模块,用于将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将所述每个渲染命令关联的顶点数据从所述系统内存发送给图形渲染应用程序接口。
9.根据权利要求8所述的装置,其特征在于,
所述绘制模块,还用于在当前缓存下来的顶点数据的数据量大于所述顶点数据阈值时,若所述GPU不属于所述逻辑类型集合,和/或所述当前使用的操作系统不属于所述系统类型集合,对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;
所述发送模块,还用于将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将所述每个渲染命令关联的顶点数据从所述系统内存同步到显卡内存中,再将所述显卡内存中的顶点数据发送给图形渲染应用程序接口。
10.根据权利要求9所述的装置,其特征在于,所述发送模块,具体用于从所述系统内存中获取到所述每个渲染命令关联的顶点数据,将获取到的顶点数据同步到顶点缓冲对象VBO中,调用glDraw*接口将所述VBO中的顶点数据提交给OpenGL。
11.根据权利要求8所述的装置,其特征在于,
所述绘制模块,还用于若当前缓存下来的顶点数据的数据量大于所述顶点数据阈值,和所述GPU属于所述逻辑类型集合且所述当前使用的操作系统属于所述系统类型集合,对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并,然后对合并后的所有渲染命令进行绘制;
所述发送模块,还用于将每个渲染命令关联的顶点数据拷贝到连续的系统内存中,然后将所述每个渲染命令关联的顶点数据从所述系统内存发送给图形渲染应用程序接口。
12.根据权利要求8所述的装置,其特征在于,所述渲染优化装置,还包括:排序模块,用于所述绘制模块对所述多个渲染命令中具有相同材质标识的至少两个渲染命令进行合并之前,根据每个渲染命令对应的渲染顺序对所述多个渲染命令进行排序。
13.根据权利要求8至12中任一项所述的装置,其特征在于,所述判断模块,具体用于判断当前使用的操作系统的版本号是否小于或等于预置版本号,若当前使用的操作系统的版本号小于或等于所述预置版本号,则确定所述当前使用的操作系统属于所述系统类型集合,若当前使用的操作系统的版本号大于所述预置版本号,则确定所述当前使用的操作系统不属于所述系统类型集合。
14.根据权利要求8至12中任一项所述的装置,其特征在于,所述发送模块,具体用于从所述系统内存中获取到所述每个渲染命令关联的顶点数据,调用glDraw*接口将获取到的顶点数据提交给OpenGL。
15.一种终端,其特征在于,包括:存储器和处理器;
所述存储器用于存储计算机程序;
所述处理器用于执行所述存储器中存储的计算机程序;
所述计算机程序用于执行如权利要求1-7任一项所述的渲染优化方法。
16.一种计算机可读取存储介质,其特征在于,所述计算机可读取存储介质中存储有计算机程序,所述计算机程序用于执行权利要求1-7任一项所述的渲染优化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610947632.8A CN106504185B (zh) | 2016-10-26 | 2016-10-26 | 一种渲染优化方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610947632.8A CN106504185B (zh) | 2016-10-26 | 2016-10-26 | 一种渲染优化方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106504185A CN106504185A (zh) | 2017-03-15 |
CN106504185B true CN106504185B (zh) | 2020-04-07 |
Family
ID=58323001
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610947632.8A Active CN106504185B (zh) | 2016-10-26 | 2016-10-26 | 一种渲染优化方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106504185B (zh) |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107274397B (zh) * | 2017-06-13 | 2020-08-11 | 深圳市瑞云科技有限公司 | 一种卡帧的自动识别方法 |
CN107610063A (zh) * | 2017-09-04 | 2018-01-19 | 广州优视网络科技有限公司 | 一种安卓系统下对图片进行高斯模糊处理的方法和装置 |
CN109669739A (zh) * | 2017-10-16 | 2019-04-23 | 阿里巴巴集团控股有限公司 | 一种界面渲染方法、装置、终端设备和存储介质 |
CN108121566A (zh) * | 2017-12-06 | 2018-06-05 | 中国航空工业集团公司西安航空计算技术研究所 | 一种图形指令解析设计方法 |
CN108305208A (zh) * | 2017-12-12 | 2018-07-20 | 杭州品茗安控信息技术股份有限公司 | 一种模型动态分析优化及三维交互处理方法 |
CN108196835A (zh) * | 2018-01-29 | 2018-06-22 | 东北大学 | 一种游戏引擎中图元存储和渲染的方法 |
CN108492342B (zh) * | 2018-03-22 | 2022-05-03 | 网易(杭州)网络有限公司 | 合并碎图的方法、装置、处理器、存储介质和终端 |
CN110298780B (zh) * | 2018-03-23 | 2022-10-28 | 腾讯科技(深圳)有限公司 | 地图渲染方法、装置及计算机存储介质 |
CN108765534B (zh) * | 2018-05-24 | 2022-06-21 | 武汉斗鱼网络科技有限公司 | 一种图像渲染方法、装置、设备及存储介质 |
CN109045691B (zh) * | 2018-07-10 | 2022-02-08 | 网易(杭州)网络有限公司 | 一种特效对象的特效实现方法和装置 |
CN108961382B (zh) * | 2018-07-11 | 2019-11-26 | 腾讯科技(深圳)有限公司 | 一种图像渲染方法、装置和存储介质 |
CN110796587B (zh) * | 2018-08-01 | 2023-08-11 | Oppo广东移动通信有限公司 | Drawcall调用处理方法、装置、终端及存储介质 |
CN110825467B (zh) * | 2018-08-09 | 2023-10-24 | 北京微播视界科技有限公司 | 渲染方法、装置、硬件装置和计算机可读存储介质 |
CN109325899B (zh) * | 2018-09-07 | 2023-04-04 | 格兰菲智能科技有限公司 | 计算机系统、图形处理单元及其图形处理方法 |
CN109343837A (zh) | 2018-09-12 | 2019-02-15 | Oppo广东移动通信有限公司 | 游戏渲染方法及相关设备 |
CN109237999B (zh) * | 2018-09-19 | 2020-09-08 | 中国电子科技集团公司第二十八研究所 | 一种批量三维态势目标尾迹实时绘制方法和系统 |
CN109658487B (zh) * | 2018-11-01 | 2022-07-15 | 苏州蜗牛数字科技股份有限公司 | 一种实时渲染器优化方法及系统 |
CN109919827A (zh) * | 2019-02-22 | 2019-06-21 | 搜游网络科技(北京)有限公司 | 一种图形绘制方法、装置及计算机可读介质、设备 |
CN109978981B (zh) * | 2019-03-15 | 2023-04-25 | 广联达科技股份有限公司 | 一种提高建筑模型显示效率的批次渲染方法 |
CN110223215B (zh) * | 2019-06-10 | 2022-11-29 | 西安芯瞳半导体技术有限公司 | 一种图形渲染管线的控制方法、装置及计算机存储介质 |
CN110442389B (zh) * | 2019-08-07 | 2024-01-09 | 北京技德系统技术有限公司 | 一种多桌面环境共享使用gpu的方法 |
CN110570506B (zh) * | 2019-09-11 | 2023-09-22 | 珠海金山数字网络科技有限公司 | 一种地图资源管理方法、装置、计算设备及存储介质 |
CN110738720B (zh) * | 2019-10-08 | 2022-01-07 | 腾讯科技(深圳)有限公司 | 特效渲染方法、装置、终端及存储介质 |
CN112825197B (zh) * | 2019-11-20 | 2023-09-15 | 福建天晴数码有限公司 | Unity中群集动画快速渲染的方法、存储介质 |
CN110784773A (zh) * | 2019-11-26 | 2020-02-11 | 北京奇艺世纪科技有限公司 | 弹幕生成方法、装置、电子设备及存储介质 |
CN113052981A (zh) * | 2019-12-27 | 2021-06-29 | 北京国双科技有限公司 | 模型的编辑、构建方法及相关设备,计算机存储介质 |
CN111144057B (zh) * | 2019-12-30 | 2023-09-15 | 西安芯瞳半导体技术有限公司 | 图形渲染管线的性能分析方法、装置及计算机存储介质 |
CN111258474B (zh) * | 2020-01-15 | 2021-07-06 | 广东三维家信息科技有限公司 | 基于gui的交互方法、装置及电子设备 |
CN111476858B (zh) * | 2020-04-10 | 2023-03-14 | 浙江无端科技股份有限公司 | 一种基于WebGL的2d引擎渲染方法、装置及设备 |
CN111617473A (zh) * | 2020-05-28 | 2020-09-04 | 腾讯科技(深圳)有限公司 | 虚拟攻击道具的显示方法和装置、存储介质和电子设备 |
CN111815775A (zh) * | 2020-06-12 | 2020-10-23 | 中国船舶重工集团公司第七二四研究所 | 一种基于OpenGL的三维背景地图快速填充方法 |
CN112402958B (zh) * | 2020-10-27 | 2022-05-13 | 腾讯科技(深圳)有限公司 | 一种图像处理方法、装置和存储介质 |
CN112614210B (zh) * | 2020-12-23 | 2024-03-19 | 深圳市万翼数字技术有限公司 | 工程图纸显示方法、系统及相关装置 |
CN116703693A (zh) * | 2021-08-18 | 2023-09-05 | 荣耀终端有限公司 | 一种图像渲染方法及电子设备 |
CN115908683A (zh) * | 2021-09-30 | 2023-04-04 | 华为技术有限公司 | 一种图像渲染方法及其相关设备 |
CN115858125B (zh) * | 2022-12-16 | 2023-10-24 | 百度在线网络技术(北京)有限公司 | 一种渲染引擎的调用方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101123723A (zh) * | 2006-08-11 | 2008-02-13 | 北京大学 | 基于图形处理器的数字视频解码方法 |
US8988434B1 (en) * | 2012-04-12 | 2015-03-24 | Google Inc. | Text rendering for browsers and mobile based applications |
CN105072353A (zh) * | 2015-07-16 | 2015-11-18 | 成都新昱科技有限公司 | 一种基于多gpu的图像解码拼控算法 |
CN106131550A (zh) * | 2016-07-25 | 2016-11-16 | 合网络技术(北京)有限公司 | 播放多媒体文件的方法及装置 |
-
2016
- 2016-10-26 CN CN201610947632.8A patent/CN106504185B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101123723A (zh) * | 2006-08-11 | 2008-02-13 | 北京大学 | 基于图形处理器的数字视频解码方法 |
US8988434B1 (en) * | 2012-04-12 | 2015-03-24 | Google Inc. | Text rendering for browsers and mobile based applications |
CN105072353A (zh) * | 2015-07-16 | 2015-11-18 | 成都新昱科技有限公司 | 一种基于多gpu的图像解码拼控算法 |
CN106131550A (zh) * | 2016-07-25 | 2016-11-16 | 合网络技术(北京)有限公司 | 播放多媒体文件的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106504185A (zh) | 2017-03-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106504185B (zh) | 一种渲染优化方法和装置 | |
WO2016173427A1 (zh) | 一种残影效果的实现方法,装置以及计算机可读介质 | |
CN106547599B (zh) | 一种资源动态加载的方法及终端 | |
CN106775637B (zh) | 一种应用程序的页面显示方法和装置 | |
WO2018126956A1 (zh) | 一种信息处理方法、装置及服务器 | |
CN106598996B (zh) | 多媒体海报生成方法及装置 | |
CN110533755B (zh) | 一种场景渲染的方法以及相关装置 | |
US20190109767A1 (en) | Network bandwidth management method, terminal and computer storage medium | |
CN108513671B (zh) | 一种2d应用在vr设备中的显示方法及终端 | |
CN107480169B (zh) | 图片加载方法、终端和计算机可读存储介质 | |
CN110908784B (zh) | 图像标注方法、装置、设备及存储介质 | |
US20190275428A1 (en) | Control method of scene sound effect and related products | |
US11954787B2 (en) | Image rendering method in panoramic application and terminal device | |
US20150043312A1 (en) | Sound playing method and device thereof | |
CN105373534B (zh) | 列表展示方法、装置及列表展示端 | |
WO2023246516A1 (zh) | 一种临床研究项目的访视报告生成方法和装置 | |
CN107360317B (zh) | 应用程序资源泄露的检测方法及移动终端、存储介质 | |
CN109302523B (zh) | 一种手机端和服务器端手机性能评估方法 | |
CN109144723B (zh) | 一种分配存储空间的方法和终端 | |
CN108429805B (zh) | 一种文件下载处理方法、发送终端及接收终端 | |
CN110223221A (zh) | 一种动态图像播放的方法及终端设备 | |
CN111210496B (zh) | 一种图片解码方法、装置以及设备 | |
CN116594616A (zh) | 一种组件配置方法、装置及计算机可读存储介质 | |
CN111275607A (zh) | 界面显示方法、装置、计算机设备及存储介质 | |
CN106709856B (zh) | 一种图形渲染方法及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |