libGLESv2_adreno.A6xContext::ValidateState 报错,显存爆了问题

 

我们在开发一款游戏的时候遇到了这样的一个报错,分析了下,从这里可以确定是在一个srp渲染信息收集完然后提交gpu后导致的问题。

然后我们可以再看下报错堆栈

 

这里可以看出是gles2在绘制时执行了gpuinstanced的方法最终绘制图像导致的,其实叶就是说会知道额图片数量太多了,在显存中超过了内存或手机限制导致出错(一般手机都时显存和内存时同一个物理内存分割出来的,所以会更容易爆)

上图是在只有一个角色时的内存消耗,可以看到gfxDriver非常高,已经360m了

 

那么既然是因为图片太多,我们就要分析下导致这个问题的原因:

1.我们游戏又穿衣逻辑,我们虽然又lod,但是采样的图片本身没有区分高中低模,那么我们可以考虑在游戏中使用低模,在游戏外用高模图片来区分

2.卸载逻辑:我们一般认为要加快运算效率,都是把大量的数据和图片放到内存中,需要的时候先从内存取。但是如果过分使用就会导致内存过大,被手机杀掉。那么我们就要做一些内存的管理,比如图片对象池,gameobject对象池等等。然后进游戏和出游戏都要做ab包的卸载和重新加载,这样可以减少不必要的内存存在

3.贴图合并:我们的脸部因为又装扮(比如眉毛,胡子,睫毛等)大概又10张装扮贴图,非常的多,这也时内存增长的元凶,每个角色进入视野都会加载角色,那么每个角色都这么多,就很快把内存挤爆。那么我们可以考虑进入游戏或角色进入视野时合并图片,只需要一张融合后的脸部贴图就够了。这样可以减少非常多内存

4.其他:比如场景的贴图大小,是否又不必要的mipmap,图片是否可以只读等等。

总的原则就是减少贴图的大小和多少。

最终我们的gfxdriver得到了控制,当然后续可以对他的大小做一个明显的显示,就是图片总大小和多少的控制。

 

 

总结:这个问题总的来说就是贴图过多或过大,总之就是图片导致内存爆了,需要减少内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值