一种图像渲染方法和图像渲染系统的制作方法_3

文档序号:9668224阅读:来源:国知局
ClearRes中,那么,系统在读取到当前需渲染的特效对象后,还可以根据该ClearRes中保存的当前帧以及下一帧的需要渲染的区域信息,确认当前帧以及下一帧需要渲染的局部区域。
[0079]步骤S302:通过预计算渲染器将所述局部区域在画布中擦除,并对所述中央处理器内存CpuRes中当前帧对应的第一类型显示数据进行预计算渲染,得到预计算图形;
[0080]具体地,可以参考图5示出的本发明实施例提供的代码逻辑预计算的原理示意图,结合图1的框架图,当渲染开始运作时,跑道模型线程即开始工作,该线程会在每次CPU空闲时开始下一帧的清染,每一帧的跑道都包括执行代码逻辑预计算(Code Execut1n)及执行双加速通道清染计算(Accelerated Renderding),在该代码逻辑预计算调用预计算清染器将当前帧以及下一帧需要渲染的局部区域在画布中擦除后,对CpuRes中当前帧对应的第一类型显示数据进行预计算渲染,得到预计算图形;
[0081]需要说明的是,在得到预计算图形后,该预计算渲染器还可以将硬件加速分片器的CpuRes中保存的下一帧对应的第一类型显示数据提前输给CPU进行计算。
[0082]步骤S304:通过预设的底层图形库渲染器对图形处理器内存GpuRes中当前帧对应的第二类型显示数据进行渲染,并与所述预计算图形进行合并渲染,得到当前帧完整的显示图像。
[0083]具体地,可以参考图6示出的本发明实施例提供的双加速通道渲染计算的原理示意图,执行双加速通道渲染计算时,可以先将当前画布加锁,确保用户不会看到闪屏的现象,然后将需要使用GPU渲染的三角形(以三角形切片为例)数据读取到跑道模型中,即将图形处理器内存GpuRes中当前帧对应的第二类型显示数据读取到跑道模型中,然后使用预设的底层图形库渲染器对该GpuRes中当前帧对应的第二类型显示数据进行渲染,同时可以将代码逻辑预计算输给CPU执行完成的CpuRes内存(即上述预计算图形)也输给该底层图形库渲染器进行合并渲染,然后再可以矩阵化图形信息,最终得到通过双通道(CPU&GPU)混合加速的当前帧完整的渲染图像,并解开这个画布的锁定,让用户可以看到这完整的帧图像。
[0084]通过实施本发明实施例,先通过预计算渲染器对所述中央处理器内存CpuRes中当前帧对应的第一类型显示数据进行预计算渲染,得到预计算图形,再通过预设的底层图形库渲染器对图形处理器内存GpuRes中当前帧对应的第二类型显示数据进行渲染,并与所述预计算图形进行合并渲染,得到当前帧完整的显示图像,实现了有效的混合渲染模式,解决了现有技术中繁杂的特效会降低CPU的运算压力,导致整个应用卡顿且耗电过快的技术问题,减少移动终端发热,并给用户带来了更加流畅的特效使用体验;该底层图形库可以为比原生APP更加底层的开放图形库(0penGL,0pen Graphics Library),并通过外观模式封装成对上层友好的特效图像库,降低了开发门槛,使得应用开发者可以轻松开发出高性能的原生应用特效,提高了开发效率,而且系统整体为轻量级架构,可大大降低开发成本。
[0085]再进一步地,如图7示出的本发明提供的图像渲染方法的另一实施例的流程示意图,包括:
[0086]步骤S700:读取当前需渲染的特效对象;
[0087]具体地,参考上述图3实施例中步骤S300读取当前需渲染的特效对象的实现方式,这里不再赘述。
[0088]步骤S702:预计算当前帧k清染所需的时间Τκ,以及所述当前帧往下第一帧k+1清染所需的时间Τκ+1;
[0089]具体地,由于通过跑道模型线程执行每一帧的渲染时间是不固定的(可能由于某一帧较为复杂而消耗更多时间),系统可以调用时间差渲染器根据本次渲染的内存大小及CPU频率预计算当前帧k渲染所需的时间Τκ,以及根据下一次渲染的内存大小及CPU频率预计算出当前帧往下第一帧k+Ι清染所需的时间Τκ+1。
[0090]步骤S704:当所述^大于所述Τ K+1时,预计算所述当前帧往下第二帧k+2渲染所需的时间TK+2;
[0091]具体地,当Τκ大于Τκ+1时,可以根据下一次渲染的内存大小及CPU频率预计算出当前帧往下第二帧k+2渲染所需的时间Τκ+2。
[0092]步骤S706:当所述IVJ、于所述Τ K+1时,将所述当前帧往下第一帧k+Ι作为所述下一帧;
[0093]步骤S708:当所述IVj、于所述Τ K+1与所述Τ κ+2之和时,将所述当前帧往下第二帧k+2作为所述下一帧;
[0094]步骤S7010:当所述^大于所述Τκ+1与Τκ+2之和时,预计算所述当前帧往下第三帧k+3渲染所需的时间Τκ+3,直到满足公STK〈TK+1+TK+2...+TK+n时,将所述当前帧往下第η帧k+n作为所述下一帧;
[0095]具体地,该Τκ+η为该当前帧往下第η帧k+n渲染所需的时间,其中该η为大于2的自然数。本发明实施例通过调用时间差渲染器,预计算帧图像渲染可能需要消耗的时间,若该帧图像渲染所需时间大于接下来几帧图像渲染所需等待的时间时,将把该接下来的这几帧图像直接丢弃,并让跑道模型线程执行更加后面的帧渲染,这样就可以在卡顿时节省很多不必要的帧计算,大幅提高渲染效率。
[0096]步骤S7012:根据预先注册所述特效对象时切片保存的显示数据,确定当前帧以及下一帧需要渲染的局部区域;
[0097]步骤S7014:通过预计算渲染器将所述局部区域在画布中擦除,并对所述中央处理器内存CpuRes中当前帧对应的第一类型显示数据进行预计算渲染,得到预计算图形;
[0098]步骤S7016:通过预设的底层图形库渲染器对图形处理器内存GpuRes中当前帧对应的第二类型显示数据进行渲染,并与所述预计算图形进行合并渲染,得到当前帧完整的显示图像。
[0099]具体地,步骤S7012至步骤S7016可以参考上述图3实施例中步骤S300至步骤S304的描述,这里不再赘述。
[0100]再进一步地,本发明图3实施例的步骤S304或者图7实施例的步骤S716之后还可以包括,将该下一帧作为当前帧并继续执行该根据预先注册所述特效对象时切片保存的显示数据,确定当前帧以及下一帧需要渲染的局部区域的步骤,从而完成该特效对象中所有帧图像的渲染;
[0101]另外,当对该特效对象渲染完成后,在特效队列中将该特效对象销毁,并从该特效队列中读取下一个需要渲染的特效对象;具体地,如图8示出的本发明实施例提供的特效队列管理器的原理示意图,特效队列在特效队列管理中遵循先进先出逻辑,例如一个ID1_特效被执行时加入队列,如果该ID队列不存在,则创建一个队列,当特效队列管理器中的该特效对象被通知执行的时候,命令解析器会把该特效对象中每帧的位移和形变转化成OpenGL渲染器可以识别的渲染脚本;当特效队列中的一个特效对象执行完成时(即该特效对象渲染完成后),可通过调用它的dispose方法,在特效队列中将所述特效对象销毁,并从所述特效队列中读取下一个需要渲染的特效对象,如果该特效队列中所有特效对象都被执行完成,则该队列也会被销毁,执行下一个特效队列。
[0102]通过实施本发明实施例,先通过预计算渲染器对所述中央处理器内存CpuRes中当前帧对应的第一类型显示数据进行预计算渲染,得到预计算图形,再通过预设的底层图形库渲染器对图形处理器内存GpuRes中当前帧对应的第二类型显示数据进行渲染,并与所述预计算图形进行合并渲染,得到当前帧完整的显示图像,实现了有效的混合渲染模式,解决了现有技术中繁杂的特效会降低CPU的运算压力,导致整个应用卡顿且耗电过快的技术问题,减少移动终端发热,并给用户带来了更加流畅的特效使用体验;该底层图形库可以为比原生APP更加底层的开放图形库(OpenGL,Open Graphics Library),并通过外观模式封装成对上层友好的特效图像库,降低了开发门槛,使得应用开发者可以轻松开发出高性能的原生应用特效,提高了开发效率,而且系统整体为轻量级架构,可大大降低开发成本。
[0103]为了便于更好地实施本发明实施例的上述方案,本发明还对应提供了一种图像渲染系统,如图9示出的本发明提供的图像渲染系统的结构示意图,图像渲染系统90可以包括:读取模块900、区域确定模块902、预计算渲染模块904和合并渲染模块906,其中,
[0104]读取模块900用于读取当前需渲染的特效对象;
[0105]区域确定模块902用于根据预先注册所述特效对象时切片保存的显示数据,确定当前帧以及下一帧需要渲染的局部区域;
[0106]预计算渲染模块904用于通过预计算渲染器将所述局部区域在画布中擦除,并对所述中央处理器内存CpuRes中当前帧对应的第一类型显示数据进行预计算渲染,得到预计算图形;
[0107]合并渲染模块906用于通过预设的底层图形库渲染器对图形处理器内存GpuRes中当前帧对应的第二类型显示数据进行渲染,并与所述预计算图形进行合并渲染,得到当如帧完整的显不图像;
[0108]其中,所述当前帧需要渲染的局部区域包括所述第一类型显示数据和所述第二类型显示数据,所述第一类型显示数据小于所述第二类型显示数据。
[0109]具体地,如图10示出的本发明提供的图像渲染系统的另一实施例的结构示意图,图像渲染系统90包括读取模块900、区域确定模块902、预计算渲染模块904和合
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1