一种游戏渲染方法和装置的制造方法_3

文档序号:9375309阅读:来源:国知局
行释放,无需对游戏原有框架进行改动,达到了良好的内存优化效果。
[0098]如图4所示,在具体实施当中所述步骤S18包括子步骤S181?S183:
[0099]S181,计算当前时刻和所述纹理的渲染时间戳的差值。
[0100]S182,当所述差值小于释放时间时,不释放所述纹理对应的内存空间。
[0101]S183,当所述差值大于释放时间时,释放所述纹理对应的内存空间。
[0102]应当说明的是,当所述差值等于释放时间时,既可以按小于的情况进行处理,不释放所述纹理对应的内存空间,也可以按大于的情况进行处理,释放所述纹理对应的内存空间,本发明对此不进行限定,本领域技术人员可根据实际需要进行选择。
[0103]所述释放时间为Twk,在一种优选的实施方式当中,Twk = Tnin0
[0104]其中,1~_为预先配置的允许纹理在内存中停留的至少时间,T _> O0
[0105]本实施方式中,当所述纹理的最近一次渲染距离当前时刻的时间间隔大于允许纹理在内存中停留的至少时间时,则对所述纹理进行释放。
[0106]在另一种优选的实施方式当中,T释放=U加人内存*τ延长。
[0107]其中,Τ_为预先配置的允许纹理在内存中停留的至少时间为在当前时刻之前的一段时间τ内所述纹理被加载到内存中的次数。所述纹理每加入一次内存而延长的释放时间。τ_>0。T > Oo T延长>0。
[0108]本实施方式与上一实施方式的区别在于,本实施方式中还对纹理加载到内存中的次数进行考虑,避免纹理资源被往复加载。以游戏中的图标为例,某场景中的一个图标只是闪2下之后就不闪了,那么如果超过预先配置的允许纹理在内存中停留的至少时间Τ_后,它的相关纹理就会从内存中释放。但同一场景中的另一个图标用的比较多,假设平均20秒左右闪烁一次,则该纹理资源就有可能在一分钟内被反复载入内存中数次,这说明该图标的相关纹理虽然不是一直在显示,但使用频率较高,已经引起了一分钟内的多次加载开销,可以根据上述公式对释放时间进行适当延长,以避免所述纹理往复加载到内存中。
[0109]在具体实施当中,通过封装一个计数器的类作为所述纹理的属性进行计算,每次将所述纹理加载到内存中时,记录一次加载完成的时间,而当所述加载完成的时间的记录距离当前时刻超过一段时间T,该记录将被清理掉,对剩余的记录进行统计即可获得所述Nji卩人内存。
[0110]应当说明的是,对于上述T_、T和的具体数值,本领域技术人员可根据实际需要进行设定,本发明对此不作限定。
[0111]本实施例提供的游戏渲染方法,通过在纹理渲染的过程中为所述纹理配置渲染时间戳,根据纹理最近一次被渲染的时间,当判定所述纹理达到释放时间时,从内存中对所述纹理进行释放,降低了游戏或软件运行时所占用的内存。尤其对于那些没搭建好资源管理器并且存在内存占用过大问题的游戏项目,本实施例对其作出的优化非常可观。
[0112]参照图5,是本发明提供的游戏渲染方法的又一个实施例的流程图。本实施例中步骤Sll?S18与图2所示实施例中一致,在此不再赘述,可参见图2所示实施例中的相关描述。本实施例与图2所示实施例的区别在于,本实施例在图2所示实施例的基础上进一步包括了步骤S19。
[0113]S19,当进行游戏场景切换后,在切换后的游戏场景的第一帧画面所用的纹理被加载完成之前显示黑屏。或者,当进行游戏场景切换后,在游戏场景切换后的一段时间Tiw内显示黑屏。其中,Ts屏> O。
[0114]本发明提供的游戏渲染方法中,纹理根据使用的需求而加载到内存中,虽然物体可能会延迟零点几秒才会被玩家看见,但只要游戏的资源标准的话,这个间隔基本感觉不出来,晚零点几秒物件才画出来,完全不会影响游戏的体验。而当场景刚切换时,由于大多数纹理都没有加载到内存中,前几帧画面可能会只有少数物体被渲染,可能会产生一瞬间花屏的感觉。因此,本发明在游戏场景切换时通过步骤S19进行特殊处理,在当前帧需要绘画的纹理图片没有被加载完全之前什么也不画显示黑屏,直到所需的纹理被加载完成为止。或者,在某些项目的渲染流程难以改动时,可以直接在游戏场景切换后的一段时间Tiw内显示黑屏。Tiw的具体数值可根据实际需要进行设定,本发明对此不作限定,在一种优选的实施当中Tiw为0.5秒。
[0115]参见图6,是本发明提供的游戏渲染装置的一个实施例的结构示意图。本实施例的基本原理与图1所示实施例的基本原理一致,本实施例中未详述之处可参见图1所示实施例中的相关描述。
[0116]所述游戏渲染装置,包括:
[0117]加载路径记录模块11,用于在游戏资源加载时,记录当前游戏场景所用纹理的加载路径。
[0118]待渲染网格获取模块12,用于获取当前游戏场景中待渲染的网格。
[0119]检测模块13,用于检测所述待渲染的网格所用的纹理是否被加载到内存中。
[0120]加载模块14,用于当所述纹理未被加载时,根据所述纹理的加载路径,通过后台线程对所述纹理进行异步加载以将所述纹理加载到内存中,并跳过对所述纹理在当前渲染批次的渲染。和,
[0121]渲染模块15,用于当所述纹理已被加载完成时,将所述纹理提交给渲染引擎进行渲染。
[0122]参见图7,是本发明提供的游戏渲染装置的另一个实施例的结构示意图。本实施例对应于图2所示方法实施例,本实施例中未详述之处可参见图2所示实施例中的相关描述。
[0123]本实施例提供的游戏渲染装置在图7所示实施例的基础上,进一步还包括时间戳更新模块16、时间戳获取模块17和内存释放模块18。
[0124]时间戳更新模块16,用于更新所述纹理的渲染时间戳。其中,所述渲染时间戳用于记录所述纹理最近一次被渲染的时间。
[0125]时间戳获取模块17,用于每隔预设的时间间隔,遍历内存中的所有纹理,获取所述纹理的渲染时间戳。
[0126]所述时间戳获取模块17具体包括纹理扫描单元171、第一空操作单元172和内存释放单元173。
[0127]纹理扫描单元171,用于每隔预设的时间间隔,逐一扫描内存中的纹理,判断所述纹理是否被加载完成。
[0128]第一空操作单元172,用于当所述纹理未被加载完成时,跳过所述纹理。
[0129]时间戳获取单元173,用于当所述纹理已被加载完成时,获取所述纹理的渲染时间戳。
[0130]内存释放模块18,用于根据所述纹理的渲染时间戳,判定所述纹理达到释放时间时,释放所述纹理对应的内存空间。
[0131]所述内存释放模块18具体包括差值计算单元181、第二空操作单元182和内存释放单元183:
[0132]差值计算单元181,用于计算当前时刻和所述纹理的渲染时间戳的差值。
[0133]第二空操作单元182,用于当所述差值小于释放时间时,不释放所述纹理对应的内存空间。
[0134]内存释放单元183,用于当所述差值大于释放时间时,释放所述纹理对应的内存空间。
[0135]在一种优选的实施方式当中,所述释放时间为Twk。
[0136]T 释放=Tmin。
[0137]其中,1~_为预先配置的允许纹理在内存中停留的至少时间,T_> O0
[0138]在另一种优选的实施方式当中,所述释放时间为Twk。
[0139]T释放=Tmin+N加人内存*T延长。
[0140]其中,Τ_为预先配置的允许纹理在内存中停留的至少时间为在当前时刻之前的一段时间τ内所述纹理被加载到内存中的次数。所述纹理每加入一次内存而延长的释放时间。τ_>0。T > Oo T延长>0。
[0141]图中虽未画出,但在具体实施当中,为解决本发明在游戏场景切换时的花屏问题,所述游戏渲染装置还可以进一步包括第一黑屏模块或者第二黑屏模块。
[0142]所述第一黑屏模块,用于当进行游戏场景切换后,在切换后的游戏场景的第一帧画面所用的纹理被加载完成之前显示黑屏。
[0143]所述第二黑屏模块,用于当进行游戏场景切换后,在游戏场景切换后的一段时间T
黑屏内显不黒屏。其中,T黑屏〉O。
[0144]综上所述,本发明实施例提供的游戏渲染方法和装置,在游戏资源加载时,跳过正常的纹理加载阶段,仅记录纹理的加载路径,在检测到待渲染网格所用的纹理未被加载时,才通过后台线程将所述
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1