一种渲染方法和装置的制作方法

文档序号:6401521阅读:173来源:国知局
专利名称:一种渲染方法和装置的制作方法
技术领域
本发明涉及一种渲染方法和装置。
背景技术
一般的画图模块(Surface Flinger)的渲染方法都是单缓存的,就是所有上层应用的视图(Surface)都被渲染到一个缓存中。在渲染时通常是某个上层应用向SurfaceFlinger发出渲染请求,Surface Flinger响应请求并获得该应用的Surface渲染至硬件缓存(Frame Buffer),最终显示给用户。单缓存的渲染在实际应用时,往往一个系统存在多个上层应用,一个上层应用发生变化,有可能导致其他上层应用的Surface都发生变化,比如多个上层应用相互覆盖的情况。这种渲染方法在某个上层应用频繁刷新的时,会大大影响整个系统效率。

发明内容
本发明主要解决的技术问题是提供一种渲染方法和装置,能够减少因为某个上层应用刷新而受到影响需要重新渲染的视图的个数,优化渲染性能,提高整个系统效率。为解决上述技术问题,本发明采用的一个技术方案是:提供一种渲染的方法,包括:初始化画图模块(Surface Flinger),创建至少两个缓存;确定所有可视视图(Surface)与所述至少两个缓存的对应关系,根据所述对应关系将所述所有可视视图一一渲染至对应的缓存,并将所有缓存进行合成后输出显示;判断是否有可视视图发生变化,若有可视视图发生变化,则找出变化的可视视图所在的缓存;对所述找出的缓存中需要进行渲染的可视视图重新进行渲染,并将所述重新进行渲染后的缓存与未重新进行渲染的缓存进行合成后输出显示。其中,所述确定所有可视视图与所述至少两个缓存的对应关系的步骤包括:获取所有可视视图,从所述所有可视视图中找出第一可视视图,所述第一可视视图为所有可视视图中刷新频率最高的可视视图;将所述第一可视视图及在所述第一可视视图之上的所有可视视图对应到所述至少两个缓存的其中一个缓存中;判断将可视视图对应到缓存中的次数是否到达阈值,所述阈值为所述至少两个缓存的个数与I之间的差值;若所述将可视视图对应到缓存中的次数未到达阈值,则继续获取剩下的所有所述可视视图,从剩下的所述所有可视视图中找出第二可视视图,所述第二可视视图为所述剩下的所有所述可视视图中刷新频率最高的可视视图,将所述第二可视视图及在所述第二可视视图之上的所有可视视图对应到所述至少两个缓存中的另外一个缓存中,然后返回所述判断将可视视图对应到缓存中的次数是否到达阈值的步骤 ;若所述将可视视图对应到缓存中的次数到达所述阈值,则将剩下的所有所述可视视图对应到所述至少两个缓存的剩余一个缓存中,直到确定所述所有可视视图与所述至少两个缓存的一一对应关系。其中,所述初始化画图模块,创建至少两个缓存的步骤包括为:初始化画图模块,创建显示硬设备(Display Hardware);使所述显示硬设备创建至少两个缓存,所述至少两个缓存的分辨率均与当前操作系统的分辨率相同。其中,所述对找出的缓存中需要进行渲染的可视视图进行渲染的步骤包括:从找出的缓存中找到所述变化的可视视图以及在所述变化的可视视图之上的所有可视视图作为需要进行渲染的可视视图;获取所述需要进行渲染的所有可视视图中最底层的可视视图;对当前的所述最底层的可视视图进行脏区域(Dirty Region)计算,根据脏区域计算结果将当前的所述最底层的可视视图渲染至当前的缓存;获取剩下的所述需要进行渲染的可视视图,重复以上步骤,直至完成将所有所述需要进行渲染的可视视图渲染到对应的缓存的步骤。其中,所述根据所述对应关系将所述所有可视视图一一渲染至对应的缓存的步骤包括:根据所述对应关系,从所述所有可视视图的最底层可视视图依次往上将所有可视视
图一一渲染至对应的缓存。为解决上述技术问题,本发明采用的另一个技术方案是:提供一种渲染的装置,包括:包括缓存创建模块、第一渲染模块、判断模块、第二渲染模块以及显示模块:所述缓存创建模块用于初始化画图模块,创建至少两个缓存;所述第一渲染模块用于确定所有可视视图与所述缓存创建模块创建的至少两个缓存的对应关系,根据所述对应关系将所述所有可视视图一一渲染至对应的缓存;所述判断模块用于判断是否有可视视图发生变化;所述第二渲染模块用于当有可视视图发生变化时,找出所述变化的可视视图所在的缓存,对所述找出的缓存中需要进行渲染的可视视图进行渲染;所述显示模块用于在所述第一渲染模块或所述第二渲染模块完成渲染后,将所有缓存进行合成后输出显示。其中,所述缓存创建模块包括第一创建单元和第二创建单元,其中:所述第一创建单元用于初始化画图模块,创建显示硬设备;所述第二创建单元用于利用所述第一创建单元创建的显示硬设备,创建至少两个缓存。其中,所述 第二渲染模块包括获取单元和渲染单元,其中:所述获取单元用于在其中一个所述可视视图发生变化时,找出所述变化的可视视图所在的缓存,从找出的缓存中找到所述变化的可视视图以及在所述变化的可视视图之上的所有可视视图作为需要进行渲染的可视视图;所述渲染单元用于对需要进行渲染的可视视图进行脏区域计算,根据脏区域计算结果将需要进行渲染的可视视图渲染到当前的缓存中。其中,所述第一渲染模块具体用于确定所有可视视图与所述缓存创建模块创建的至少两个缓存的对应关系,根据所述对应关系,从所述所有可视视图的最底层可视视图依次往上将所有可视视图一一渲染至对应的缓存。本发明的有益效果是:区别于现有技术的情况,本发明采用多个缓存渲染,每个缓存的渲染是独立的。这样当一个缓存中的Surface发生变化时,只需要考虑其所在的缓存中的Surface是否会受到其影响,极大的减少了因为某个上层应用需要渲染而受到影响的Surface个数,优化渲染性能,提高系统效率。


图1是本发明渲染方法一实施方式的流程图;图2是本发明渲染方法一实施方式中确定所有可视视图与至少两个缓存的对应关系的流程图3是本发明渲染方法一实施方式中对找出的缓存中需要进行渲染的可视视图进行渲染的流程图;图4是本发明渲染方法的具体应用一实施方式的流程图;图5是本发明渲染装置一实施方式的结构示意图;图6是本发明渲染装置一实施方式缓存创建模块的结构示意图;图7是本发明渲染装置一实施方式中第二渲染模块的结构示意图。
具体实施例方式参阅图1,本发明渲染方法一实施方式包括:步骤SlOl:初始化画图模块,创建至少两个缓存;在一般的操作系统中,每一个应用打开前都需要进行渲染才能得到最终显示给用户的显示效果。渲染是指将用户设置的数据综合计算,生成单帧图像或一系列动画图像,并以用户指定的方式输出。在本发明实施方式中,渲染是指将应用程序可视化的过程。比如安卓系统中,如果要打开某一个应用,会向安卓系统内部的画图模块(Surface Flinger)发送刷新请求,系统根据请求获得该应用的视图(Surface),将该视图渲染到帧缓冲区,最终显示给用户。画图模块是系统用于画图的一个工具,而缓存是画图模块本身产生的,应用的视图最终渲染到缓存中。在画图模块中,一个缓存相当一个帧缓冲区的本地窗口(FrameBuffer Native Window)。因此,巾贞缓冲简称巾贞缓存或显存,它是屏幕所显示画面的一个直接映象,又称为位映射图(Bit Map)或光栅。帧缓存的每一存储单元对应屏幕上的一个像素,整个帧缓存对应一帧图像。在初始化画图模块的时候会创建一个显示硬设备(Display Hardware),然后通过显示硬设备创建至少两个缓存。而且`,要求创建的缓存的分辨率均和当前操作系统的分辨率相同。步骤S102:确定所有可视视图与至少两个缓存的对应关系,将所有可视视图一一渲染至对应的缓存,并将所有缓存进行合成后输出显示;确定所有的可视视图与所创建的所有缓存的对应关系,根据对应关系将所有的可视视图分别一一渲染到其对应的缓存中。可视视图是应用程序本身的东西,在打开一个应用程序时,必须对应用程序的可视视图进行渲染,得到最终输出给用户的显示效果。在渲染的过程中,从所有叠置的可视视图的最底层往上依次渲染。通常采用Z轴深度值(Z-axis)来表示可视视图的位置关系,Z-axis大的可视视图在Z-axis小的可视视图之上,因此渲染的时候从Z-axis最小的可视视图开始渲染,按照Z-axis由小到大的顺序对相应的可视视图进行渲染。所有可视视图都渲染完成后,将所有的缓存进行混合合成后输出显示。混合合成是对已经完成渲染的视图进行进一步的加工处理,使其能够完美的达到需要的显示效果。混合合成包括收集最后场景所需的各种资料,然后将一段动画与另一段动画合成、相接,在视频中插入效果,制作转场等,使最后显示的画面更加生动。步骤S103:判断是否有可视视图发生变化;判断是否有可视视图发生变化,当有可视视图发生变化时,进行步骤S104,否则,不进行任何动作。步骤S104:找出变化的可视视图所在的缓存;
完成步骤SlOl和S102之后,如果其中一个可视视图发生变化,比如开机或者打开一个新的应用,这时需要对可视视图重新进行渲染。而且,如果该变化的可视视图及其渲染在一个缓存中的其他可视视图存在重叠关系(包括直接和间接的重叠关系),则该其他可视视图也需要进行重新渲染。因此,当一个可视视图A发生变化时,首先找到可视视图A所在的缓存。并且找出该缓存中与A存在重叠关系的其他可视视图,A以及所有与A存在重叠关系的可视视图都是需要重新渲染的可视视图。步骤S105:对找出的缓存中需要进行渲染的可视视图进行渲染,并将所有缓存进行合成后输出显示;对于找出的需要进行重新渲染的所有可视视图进行渲染。该渲染过程也是从需要重新渲染的所有可视视图的最底层往上依次渲染,直到所有需要渲染的可视视图都渲染到当前的缓存中。然后将当前缓存与其他缓存进行混合合成后输出显示。区别于现有技术,通过上述实施方式的描述,本发明采用多个缓存渲染,每个缓存的渲染是独立的。这样当一个缓存中的视图发生变化时,只需要考虑其所在的缓存中的视图是否会受到其影响,仅对需 要重新渲染的缓存进行操作,极大的减少了因为某个上层应用需要渲染而受到影响的视图个数,优化渲染性能,提高系统效率。其中,请参阅图2,在另一实施方式中,确定所有可视视图与至少两个缓存的对应关系包括以下子步骤:子步骤S201:从所有可视视图中找出刷新频率最闻的可视视图;获取所有的可视视图,从所有的可视视图中找出刷新频率最闻的可视视图,为了便于区分,本发明中定义所有可视视图中刷新频率最高的可视视图为第一可视视图。以该可视视图作为分界,获取在该可视视图之上的所有可视视图,则该可视视图与在该可视视图之上的所有视图作为一组,渲染到同一个缓存中。子步骤S202:将刷新频率最高的可视视图及其上的可视视图对应到至少两个缓存中的其中一个缓存中;将刷新频率最高的可视视图和在它之上的所有可视视图对应到创建的缓存中的其中一个缓存中。通常情况下,视图对应到哪个缓存由应用(Client)发送请求来指定,画图模块只要根据Client的请求找到对应的视图并设置渲染到Client指定的缓存即可。子步骤S203:判断将可视视图对应到缓存中的次数是否到达阈值;这里的阈值是指建立的缓存的个数与一的差值。也就是说如果建立十个缓存,那么阈值即为九。当完成子步骤S201和S202后,判断将可视视图对应到缓存中的次数是否到达阈值,如果到达阈值,则进行子步骤S205,如果没有到达阈值,则进行子步骤S204。子步骤S204:继续获取剩下的所有可视视图;如果将可视视图对应到缓存中的次数没有到达阈值,则获取完成子步骤S202之后剩下的可视视图,重新返回子步骤S201,按照同样的方法划分出另一组可视视图,并对应到除已经对应有可视视图的缓存之外的其他任意一个缓存中(也是根据Client的指定来设置)。以此类推,直到将所有可视视图对应到缓存中的次数到达阈值为止。为了区分,本发明实施方式中定义从完成子步骤S202之后剩下的所有可视视图中找出的刷新频率最高的可视视图为第二可视视图。也就是说,第二可视视图是为了跟所有可视视图中刷新频率最高的可视视图(即第一可视视图)区分而定义的,并不是具体的某一个可视视图。在很多情况下,第二可视视图可能是多个不同的可视视图。子步骤S205:将剩下的所有可视视图对应到至少两个缓存的剩余的一个缓存中;当将可视视图对应到缓存中的次数到达阈值时,则将剩下的所有可视视图对应到剩余的一个缓存中,进而确定所有可视视图与所有缓存的一一对应关系。以下通过举例具体说明可视视图与缓存确定对应关系的过程。比如有编号为0-100的101个可视视图,当前建立4个缓存(编号为A、B、C、D),编号0-100表示可视视图从下往上的位置关系,即编号为0的视图是最底层可视视图,编号为100的视图是最上层可视视图。首先找出100个可视视图中刷新频率最高的可视视图,比如说是编号为50的可视视图,那么将编号为50-100的所有可视视图对应到A、B、C、D中的任意一个缓存,假设对应到缓存B。这时将可视视图对应到缓存中的次数为1,没达到阈值3 (即缓存个数4-1=3),继续对可视视图进行分组;在剩下的编号为0-49的所有可视视图中,再次找出刷新频率最高的可视视图,比方说是编号为30的可视视图(即为上述的第二可视视图),那么将编号为30-49的所有可视视图对应到剩下的A、C、D中的任意一个缓存,比方说对应到缓存C。这时将可视视图对应到缓存中的次数为2,没达到阈值3,继续对可视视图进行分组,在剩下的编号为0-29的所有可视视图中,再次找出刷新频率最高的可视视图,比方说是编号为15的可视视图(这里即为另一个上述的第二可视视图),那么将编号为15-29的所有可视视图对应到剩下的A、D中的任意一个缓冲,比如说对应到D。这时将可视视图对应到缓存中的次数为3,达到阈值3,那么不需要再对剩下的可视视图进行分组;直接将其余剩下的编号为0-14的可视视图对应到缓存A中,完成所有可视视图与所有缓存的一一对应关系确定。依次类推,对于更多个缓存的实施方式以相同的方法确定所有可视视图与缓冲的对应关系。其中,请参阅图3,在另一实施方式中,本发明对找出的缓存中需要进行渲染的可视视图进行渲染包括以下子步骤:子步骤S301:从找出的缓存中找到变化的可视视图及其上的可视视图作为需要进行渲染的可视视图; 如果其中一个可视视图发生变化,会导致可视视图需要重新进行渲染。而且,如果该变化的可视视图及其渲染在一个缓存中的其他可视视图存在重叠关系(包括直接和间接的重叠关系),则该其他可视视图也需要进行重新渲染。因此,当一个可视视图A发生变化时,首先找到可视视图A所在的缓存。并且找出该缓存中与A存在重叠关系的其他可视视图,A以及所有与A存在重叠关系的可视视图都是需要重新渲染的可视视图。子步骤S302:获取需要进行渲染的可视视图中的最底层的可视视图;因为渲染过程是由最底层往上依次进行渲染,因此,从找出的需要重新进行渲染的可视视图中获取最底层的可视视图,作为最先开始渲染的可视视图。子步骤S303:对当前的最底层的可视视图进行脏区域计算,根据脏区域计算结果将当前的最底层的可视视图渲染至当前的缓存;对当前的最底层的可视视图进行脏区域计算,脏区域计算是为了确定可视视图需要渲染的区域。例如,假设一个可视视图的位置为(0,0),宽为100,高为200,将该可视视图移动到位置(0,50),则可视视图移动到位置(0,50)发生变化的区域为位置(0,0),宽为150,高为200的区域。这时如果可视视图与这个发生变化的区域有交集,则交集的部分即为脏区域。根据脏区域计算结果将当前的最底层的可视视图渲染至当前的缓存。通过脏区域计算再进行渲染可以减轻渲染的负担,比如一个视图与变化的区域只有一小部分交集,只需要对这一小部分交集的区域进行渲染,避免整个视图全部重新渲染的繁琐。子步骤S304:判断当前最底层的可视视图是否为需要进行渲染的可视视图中的最上层的可视视图;当完成子步骤S303时,判断当前最底层的可视视图(及子步骤S303完成渲染的可视视图)是否是需要进行渲染的可视视图中的最上层的可视视图,如果是,则判定需要进行渲染的可视视图已经全部完成渲染,进入子步骤S306 ;如果不是,则判定需要进行渲染的可视视图还没有渲染完,则进入子步骤S305。子步骤S305:获取剩下的需要进行渲染的可视视图;如果当前最底层的可视视图不是需要进行渲染的可视视图的最上层可视视图,则获取剩下的需要进行渲染的可视视图,重复进行子步骤S302及其后续的操作步骤,直到子步骤S304判定需要进行渲染的可视视图已经全部完成渲染为止。子步骤S306:将所有缓存合成并输出显示。当所有需要进行渲染的可视视图已经全部完成渲染,则将所有缓存合成并输出显
/Jn o为了更清楚的阐述本发明的渲染方法,以下以安卓系统为例,详细说明本发明渲染方法的应用过程。安卓系统支持建立两个缓存,因此,在初始化画图模块后,创建一个显示硬设备,由显示硬设备创建第一 缓存和第二缓存两个缓存,这两个缓存的分辨率跟安卓操作系统分辨率一样。某个Client向画图模块发出请求,指出自己的刷新频率最高,要求渲染到第一缓存中,这时画图模块收到请求后,找到该Client对应的视图,并将其设置为渲染到第一缓存中,然后画图模块再将该视图之上的视图都设置渲染到第一缓存中。那么剩下的在该视图之下的其他视图都设置渲染到第二缓存中。根据对应关系从最底层往上依次将可视视图渲染到对应的缓存中。对于确定所有可视视图与两个缓存的对应关系的步骤跟上述实施方式中的方法相同,在此不在赘述。对于安卓系统,通过将所有可视视图都渲染到两个缓存后,如果其中一个可视视图发生变化,对部分可视视图需要进行重新渲染,其中,重新进行渲染的过程可参阅图4,包括以下子步骤:子步骤S401:获取需要进行渲染的所有可视视图;当有其中一个可视视图发生变化时,首先找到发生变化的可视视图以及在发生变化的可视视图之上的所有可视视图,将发生变化的可视视图与其上的可视视图作为需要进行渲染的可视视图。子步骤S402:获取所有可视视图中的最底层视图;获取需要进行渲染的所有可视视图中的最底层的可视视图,以该最底层的可视视图作为最先开始渲染的视图。子步骤S403:计算当前视图的脏区域;计算最底层的可视视图的脏区域,根据脏区域计算结果来进行渲染。子步骤S404:判断当前视图是否渲染至第一缓存;判断当前的最底层的可视视图是否是渲染到第一缓存,即发生变化的可视视图在第一缓存还是第二缓存。如果是渲染到第一缓存则进行子步骤S405,如果不是渲染到第一缓存则进行子步骤S409。其中,子步骤S403和子步骤S404不严格区分先后顺序,也就是说,可以先计算当前视图的脏区域再判断将当前视图渲染到哪个缓存,也可以先判断将当前视图渲染到哪个缓存再对当前视图进行脏区域计算。子步骤S405:将当前视图渲染至第一缓存;根据脏区域计算结果将当前最底层的可视视图渲染到第一缓存。子步骤S406:判断当如视图是否为所有可视视图的最上层;判断当前视图是否为需要渲染的所有可视视图的最上层,如果是,则进行子步骤S407,如果不是则进行子步骤S408。子步骤S407:第一缓存和第二缓存进行合成并输出显示;如果当前视图为需要渲染的所有可视视图的最上层,则将第一缓存和第二缓存进行混合合成并输出显示。子步骤S408:获取当前视图之上的视图;如果当前视图不是需要渲染的所有可视视图的最上层,则获取当前视图之上的视图,返回子步骤S402,重复子步骤S402以及其后续的操作步骤。子步骤S409:将当前视图渲染至第二缓存;如果当前的最底层的可视视图不是渲染到第一缓存,则根据脏区域计算结果将当前最底层的可视视图渲染到第二缓存。完成子步骤S409后,转入子步骤S406以及该步骤后续的操作步骤。当然,在实际应用过程中,只要完成需要进行渲染的可视视图中的第一个最底层的可视视图的渲染,在后续对其他需要进行渲染的可视视图进行渲染时,可以直接将后续需要进行渲染的可视视图渲染到跟第一个最底层的可视视图相同的缓存中,省略判断视图渲染到第一缓存还是第二缓存的步骤。因为一个视图发生变化时,只是跟发生变化的视图在同一个缓存中的其他视图可能会需要重新渲染,别的缓存中的视图不会受到影响。请参阅图5,本发明渲染装置一实施方式包括缓存创建模块11、第一渲染模块12、判断模块15、第二渲染模块13以及显示模块14,其中:缓存创建模块11用于初始化画图模块,创建至少两个缓存;缓存创建模块11用于根据需要创建至少两个缓存,保证每个缓存的分辨率跟当前操作系统的分辨率相同。第一渲染模块12用于确定所有可视视图与缓存创建模块11创建的至少两个缓存的对应关系,根据对应 关系将所有可视视图一一渲染至对应的缓存;第一渲染模块12主要根据所有可视视图与至少两个缓存的对应关系将所有可视视图从最底层往上一一渲染到对应的缓存中。判断模块15用于判断是否有可视视图发生变化;判断模块15用户判断是否有可视视图发生变化,当有可视视图发生变化时,通知第二渲染模块13。第二渲染模块13用于当有可视视图发生变化时,找出变化的可视视图所在的缓存,对找出的缓存中需要进行渲染的可视视图进行渲染;
第二渲染模块13用于建立至少两个缓存将所有可视视图渲染后,如果其中一个可视视图发生变化,找到发生变化的视图所在的缓存,从该缓存中找到需要进行渲染的可视视图,从这些需要进行渲染的可视视图的最底层往上依次进行渲染。显不模块14用于在第一渲染模块12或第二渲染模块13完成渲染后,将所有缓存进行合成后输出显示。显示模块14可以用于第一渲染模块12完成所有的可视视图渲染后,将所有的缓存合成后输出显示。显示模块14还可以用于在一个可视视图发生变化时,第二渲染模块13完成所有需要进行渲染的可视视图的渲染后,将所有的缓存合成后输出显示。其中,请参阅图6,缓存创建模块还包括第一创建单元21和第二创建单元22,其中:第一创建单元21用于初始化画图模块,创建显示硬设备;第一创建单元21在初始化画图模块后创建显示硬设备。第二创建单元22用于利用所述第一创建单元21创建的显示硬设备,创建至少两个缓存。第二创建单元22可以利用显示硬设备创建至少两个缓存。其中,请参阅图7,本发明第二渲染模块包括获取单元31和渲染单元32,其中:获取单元31用于在其中一个可视视图发生变化时,找出变化的可视视图所在的缓存,从找出的缓存中找到变化的可视视图以及在变化的可视视图之上的所有可视视图作为需要进行渲染的可视视图;获取单元31在一·个视图发生变化时,找出变化的视图所在的缓存,从该缓存中找到需要重新渲染的可视视图。渲染单元32用于对需要进行渲染的可视视图进行脏区域计算,根据脏区域计算结果将需要进行渲染的可视视图渲染到当前的缓存中。渲染单元32用于对获取单元31获取的需要进行渲染的可视视图进行脏区域计算,根据脏区域计算结果,从所有需要进行渲染的可视视图的最底层往上依次将需要进行渲染的可视视图渲染到当前的缓存。区别于现有技术的情况,本发明的优点在于:采用多个缓存渲染,每个缓存的渲染是独立的。这样当一个缓存中的视图发生变化时,只需要考虑其所在的缓存中的视图是否会受到其影响,极大的减少了因为某个上层应用需要渲染而受到影响的视图个数。而且在一个缓存中的视图发生变化需要重新渲染时,通过计算脏区域再进行渲染,减少渲染负担,优化渲染性能,提高系统效率。在本发明所提供的几个实施方式中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的功能模块可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明方案的目的。另外,在本发明各个实施方式中的各功能模块可以集成在一个处理单元中,也可以是各个功能模块单独物理存在,也可以两个或两个以上功能模块集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。以上所述仅为本发明的实施方式,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结 构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
权利要求
1.一种渲染的方法,其特征在于,包括: 初始化画图模块,创建至少两个缓存; 确定所有可视视图与所述至少两个缓存的对应关系,根据所述对应关系将所有可视视图一一渲染至对应的缓存,并将所有缓存进行合成后输出显示; 判断是否有可视视图发生变化,若有可视视图发生变化,则找出变化的可视视图所在的缓存; 对所述找出的缓存中需要进行渲染的可视视图重新进行渲染,并将所述重新进行渲染后的缓存与未重新进行渲染的缓存进行合成后输出显示。
2.根据权利要求1所述的方法,其特征在于,所述确定所有可视视图与所述至少两个缓存的对应关系的步骤包括: 获取所有可视视图,从所述所有可视视图中找出第一可视视图,所述第一可视视图为所有可视视图中刷新频率最闻的可视视图; 将所述第一可视视图及在所述第一可视视图之上的所有可视视图对应到所述至少两个缓存的其中一个缓存中; 判断将可视视图对应到缓存中的次数是否到达阈值,所述阈值为所述至少两个缓存的个数与I之间的差值; 若所述将可视视图对应到缓存中的次数未到达阈值,则继续获取剩下的所有所述可视视图,从剩下的所述所有可视视图中找出第二可视视图,所述第二可视视图为所述剩下的所有可视视图中刷新频率最高的可视视图,将所述第二可视视图及在所述第二可视视图之上的所有可视视图对应到所述至少两个缓存中的另外一个缓存中,然后返回所述判断将可视视图对应到缓存中的次数是否到达阈值的步骤;若所述将可视视图对应到缓存中的次数到达所述阈值,则将剩下的所有所述可视视图对应到所述至少两个缓存的剩余一个缓存中,直到确定所述所有可视视图与所述至少两个缓存的一一对应关系。
3.根据权利要求1所述的方法,其特征在于,所述初始化画图模块,创建至少两个缓存的步骤包括为: 初始化画图模块,创建显示硬设备; 使所述显示硬设备创建至少两个缓存,所述至少两个缓存的分辨率均与当前操作系统的分辨率相同。
4.根据权利要求1所述的方法,其特征在于,所述对找出的缓存中需要进行渲染的可视视图进行渲染的步骤包括: 从找出的缓存中找到所述变化的可视视图以及在所述变化的可视视图之上的所有可视视图作为需要进行渲染的可视视图; 获取所述需要进行渲染的所有可视视图中最底层的可视视图; 对当前的所述最底层的可视视图进行脏区域计算,根据脏区域计算结果将当前的所述最底层的可视视图渲染至当前的缓存; 获取剩下的所述需要进行渲染的可视视图,重复以上步骤,直至完成将所有所述需要进行渲染的可视视图渲染到对应的缓存的步骤。
5.根据权利要求1所述的方法,其特征在于,所述根据所述对应关系将所述所有可视视图一一渲染 至对应的缓存的步骤包括:根据所述对应关系,从所述所有可视视图的最底层可视视图依次往上将所有可视视图——渲染至对应的缓存。
6.一种渲染装置,其特征在于,包括缓存创建模块、第一渲染模块、判断模块、第二渲染模块以及显示模块: 所述缓存创建模块用于初始化画图模块,创建至少两个缓存; 所述第一渲染模块用于确定所有可视视图与所述缓存创建模块创建的至少两个缓存的对应关系,根据所述对应关系将所述所有可视视图一一渲染至对应的缓存; 所述判断模块用于判断是否有可视视图发生变化; 所述第二渲染模块用于当有可视视图发生变化时,找出所述变化的可视视图所在的缓存,对所述找出的缓存中需要进行渲染的可视视图进行渲染; 所述显示模块用于在所述第一渲染模块或所述第二渲染模块完成渲染后,将所有缓存进行合成后输出显示。
7.根据权利要 求6所述的装置,其特征在于,所述缓存创建模块包括第一创建单元和第二创建单元,其中: 所述第一创建单元用于初始化画图模块,创建显示硬设备; 所述第二创建单元用于利用所述第一创建单元创建的显示硬设备,创建至少两个缓存。
8.根据权利要求6所述的装置,其特征在于,所述第二渲染模块包括获取单元、渲染单元,其中: 所述获取单元用于在其中一个所述可视视图发生变化时,找出所述变化的可视视图所在的缓存,从找出的缓存中找到所述变化的可视视图以及在所述变化的可视视图之上的所有可视视图作为需要进行渲染的可视视图; 所述渲染单元用于对所述需要进行渲染的可视视图进行脏区域计算,根据脏区域计算结果将所述需要进行渲染的可视视图渲染到当前的缓存中。
9.根据权利要求1所述的装置,其特征在于,所述第一渲染模块具体用于确定所有可视视图与所述缓存创建模块创建的至少两个缓存的对应关系,根据所述对应关系,从所述所有可视视图的最底层可视视图依次往上将所有可视视图一一渲染至对应的缓存。
全文摘要
本发明公开了一种渲染方法、装置和移动设备。渲染方法包括初始化画图模块,创建至少两个缓存;确定所有可视视图与至少两个缓存的对应关系,根据对应关系将所有可视视图一一渲染至对应的缓存,并将所有缓存进行合成后输出显示;判断是否有可视视图发生变化,若有可视视图发生变化,则找出变化的可视视图所在的缓存;对找出的缓存中需要进行渲染的可视视图重新进行渲染,并将重新进行渲染后的缓存与未重新进行渲染的缓存进行合成后输出显示。通过上述方式,本发明能够减少因为某个上层应用刷新而受到影响需要重新渲染的视图的个数,优化渲染性能,提高整个系统效率。
文档编号G06T15/00GK103247068SQ201310116978
公开日2013年8月14日 申请日期2013年4月3日 优先权日2013年4月3日
发明者邹健强 申请人:上海晨思电子科技有限公司, 晨星半导体股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1