cocos2d-x内存优化——iOS和android游戏纹理优化

1、2d游戏最占内存的无疑是图片资源。

2、cocos2d-x不同平台读取纹理的机制不同。ios下面使用CGImage,android和windows下是直接调用png库。我测试了下,使用png库直接读取png会比CGImage还要节约1mb左右内存(图片所占内存4mb)但是速度要比CGImage慢一倍。时间和空间如何取舍就看实际情况了。不过最佳的选择似乎是pvr(即使android版本,即使不使用pvrtc4)。

3、一般来说,我们可以直接使用 w * h * bpp得到一张纹理所占的内存,比如一张1024*1024格式为argb8888,那么他所占的内存就是1024*1024*4=4mb。之前看到有博客提到jpg会开辟3倍与此的内存(先转换为png,然后解析png),但是新的ios系统似乎没有这个问题。jpg与png所消耗的内存几乎相同,并且jpg解析速度更快(几乎都是4mb解析+4mb纹理数据,而jpg解析时间是png的一半),但是这样反而很怪异,因为jpg是没有透明色的,一个像素最多3字节,而png一个像素4字节,jpg纹理应该占用内存更小才对,后来看了下cocos2d的ios加载图片的代码,它把所有纹理转换成rgba8888格式,所以无论是jpg还是png,占用的都是4字节。正因cocos2d对其他纹理支持不够好,pvr才会显得那么高效。

4、pvr格式可以被显卡所认可,而不需要开辟临时内存来读取,所以即便同为argb8888格式的图片,pvr也会比png有效率,虽然不会节约程序稳定运行时的内存,但是会避免加载大量图片时的内存暴涨。 并且如果是ios设备的话,可以使用pvrtc4格式的图片,这个格式相当于windows下的dds图片,是可以被显卡直接支持的。它是有损压缩,一个像素只占4位,不过如果不是有渐变半透明色的话,一般效果可以接受,而其节约的内存和cpu时间非常非常显著。

5、pvr也不是万金油。android设备下虽然可以使用pvr格式,但是不能使用pvrtc4,希望通过pvr像ios设备上一样真正减少游戏内存是不太可行的。

6、pvr.ccz其实就是pvr图片zip打包下,程序读的时候还是先解压出pvr资源,然后再读取pvr。不过由于压缩下可以极大的减小图片体积,所以虽然多了解压过程也不会有特别多的cpu消耗。

7、一张jpg图片实际加载过程内存消耗,以一张1024*1024 argb8888 500k的jpg图片为例: a.读取图片文件(消耗图片大小内存,500k) b、解析jpg数据(cgimage, 4mb) c、释放500k的图片内存 d、opengl纹理数据(4mb) e、释放cgimage的4mb内存。 注意,这个过程不是必然的顺序执行,释放cgimage内存的实际是有系统决定的,会很快,但是不一定是立即执行。 所以内存会瞬间飙升9mb左右,然后减少5mb,稳定到4mb左右

png图片的加载过程与此相同

pvr图片可以节约解析图片数据到纹理这一步的消耗。也就是说读取pvr图片资源(等价于解压pvr.ccz到内存,如果是1024*1024 argb8888格式的话,那么图片大小就是4mb,ccz压缩后图片1mb左右)消耗4mb,将pvr图片数据提交给显卡消耗4mb。然后释放文件数据4mb。这么看似乎跟Png从内存占用上相比也不是非常有优势。(注意这里说的pvr是指pvr封装的argb8888,与pvrtc4的性能有天壤之别)

8、由于最终消耗内存的都是纹理数据,所以只要纹理数据格式是一定的,无论图片是什么格式消耗的内存都是一样的。比如使用Png8图片,体积会减少70%,但是内存占用与png24/png32是等价的(读取的时候会内部把调色板还原成真彩色,也就是说,虽然png8是一个像素只占8位,但是读取到内存中的时候会将调色板颜色还原,依然需要开辟1024*1024*4字节的空间存放纹理数据)。 当然有无透明色,cocos2d的处理还是有区别的。如果是无透明色,可以使用png24,那么所需开辟的纹理空间就是3mb。

这里还有一点需要说明,一般我们处理windows下的dds纹理的时候,都习惯将其按2的整次幂对其,虽然图片内容只有900*900,但是图片大小却是1024*1024。那我们读取这个图片所消耗的内存就是4mb,按2的整次幂对其是有助于提高运行效率的,但是不是非常必须的。ios和android的设备都支持非2的整次幂的纹理。所以如果是png图片,那么它该多大就多大。此时消耗的内存就只有900*900*4=3mb。

9、不要过于迷信所谓的去除alpha通道以节约内存。这个还要实际分析下具体结果。 我测试过(分别用cocos2d-x和鬼火3d引擎),rgba8888和rgb888格式的png图片显示所消耗的内存是一样的。24位图片虽然读取的时候开辟的内存只有3mb(1024*1024*3,注意如果是用CGImage读取的话,那这个值就是4mb),但是glTexImage2D提交给显卡后依然会增加4mb内存。可能跟显卡的数据对齐有关。

这里我测试还有一个诡异的地方,如果是用pvr的npot图片的话,rgb888要比rgba8888所消耗的内存要小,但是pot图片两者又是一样的(png图片两种情况都是一样的)。可能是powervr显卡有特殊处理。

10、rgb565和rgb5551的图片所消耗的内存是rgba8888的一半,如果没有透明渐变的话,视觉上也看不出什么区别。一些大的背景图可以优先选择这种格式。

用户喜欢...

Maxim 的 MAX-HEALTH-BAND 开发平台优化了设计周期,用于开发高精度小型高功效可穿戴健康和健身应用

Maxim的 MAX-HEALTH-BAND 是一个开发和评估平台,包括心率和活动监视器,使设计人员能够为他们的可穿戴设计提取生命体征和原始数据。该平台基于小型高能效 IC,包括经过优化的 MAX86140 光学脉搏...


【Cocos2d-x游戏开发】Cocos2d-x中的弱联网技术

在上一篇博客《【Cocos2d-x游戏开发】Cocos2d-x中的数据存储技术》中,我们一起学习了如何在Cocos2d-x中存储数据和读取信息,本篇博客我们将一起讨论和数据存储同样重要的联网技术。 一、弱...


【Cocos2d-x游戏开发】Cocos2d-x中的数据存储技术

一、引言 数据存储和网络功能可以说是一款游戏中必不可少的功能,如果一款游戏不能保存进度那么它的可玩性必然大打折扣(试想一下,玩家辛辛苦苦玩了一整天的游戏,结果退出时告诉...


视图渲染、CPU和GPU卡顿原因及其优化方案

视图渲染过程: 1、CPU 计算好显示内容提交到 GPU 2、GPU 渲染完成后将渲染结果放入帧缓冲区 3、视频控制器会按照 VSync 信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示...


瑞萨电子推出新型超低功耗微控制器,对带LED和LCD显示屏的电容式触摸按键应用进行优化

扩充16位MCU产品线,服务智能家居和工业市场 瑞萨电子株式会社的子公司瑞萨电子(中国)有限公司(以下简称“瑞萨电子”)宣布推出R7F0C205L、R7F0C206L、R7F0C206M、R7F0C207M和R7F0C208M等5款新产...


Android内存泄漏思考

Android内存泄漏是一个经常要遇到的问题,程序在内存泄漏的时候很容易导致OOM的发生。那么如何查找内存泄漏和避免内存泄漏就是需要知晓的一个问题,首先我们需要知道一些基础知识。...


概述系统设计人员在采用ADC的设计中优化功耗时应考虑到的几个重要因素和好处

随着医疗、消费电子和工业市场上的便携式手持仪器仪表日趋向尺寸更小、重量更轻、电池(或每次充电)续航时间更长、成本更低且通常功能更多方向发展,低功耗已经成为如今电池供电模数...


优化隔离传感器接口的功率转换

从光耦合器时代到最新的高速、低功耗、高集成度数字隔 离器,数据接口一直在稳步发展。本文将讨论隔离传感器 接口的一个本应得到更多关注的方面。如何在缩小接口尺 寸并提高性能的同时...


瑞萨电子推出新型超低功耗微控制器,对带LED和LCD显示屏的电容式触摸按键应用进行优化

全球领先的半导体解决方案供应商瑞萨电子株式会社的子公司瑞萨电子(中国)有限公司(以下简称“瑞萨电子”)...


Vivado HLS 设计优化

在使用高层次综合,创造高质量的RTL设计时,一个重要部分就是对C代码进行优化。Vivado Hls总是试图最小化loop和function的latency,为了实现这一点,它在loop和function上并行执行尽可能多的操作。...


优化图像传感器平台以应对汽车在最具挑战性拍摄场景的要求

在安全和便利性能特点的双重驱动下,对驾驶员辅助系统的需求增长,令车中具备成像功能的系统数量也在迅速攀升。这类先进驾驶员辅助系统可实现自适应巡航控制和自动紧急制动等功能。...


兆芯开先KX-5000系列国产x86处理器闪耀2017工博会

第19届中国国际工业博览会在上海国家会展中心正式开幕。继参展上届工博会取得强烈反响之后,上海兆芯集成电路有...


艾迈斯半导体新的PCap04智能电容式传感前端实现速度、分辨率及功率优化

全球领先的高性能传感器解决方案供应商艾迈斯半导体公司(ams AG)今日推出新品PCap04,一款可配置的电容式传感前端,...


优化的半导体噪声源的设计电路图

我们已经发布了使用齐纳击穿的晶体管结作为噪声源的设计。 任何对反向偏置晶体管进行实验的人都知道,以这种方式产生的噪声电压幅度强烈依赖于电源电压。 单个晶体管之间的差异也相当...


实现优化PAM4印刷电路板

随着物联网(IoT)和5G行动宽带应用的兴起,预计总体数据流量将会迅速增长,400G以太网络(400GbE)作为新一代有线通讯标准,能够有力支持这一趋势。在400GbE通讯的实施中,其电气接口在8信道上...


CA Technologies凭借领导力和创新性荣获技术服务行业协会(TSIA)明星奖

CA Technologies (NASDAQ: CA)今日宣布其凭借在支持服务转型中的创新和利用分析优化服务中的创新,获得技术服务行业协会...