一,cocos2dx 内存释放之如何优化内存使用

主题 : 请教大家一个cocos2dx占用内存的问题
级别: 新手上路
可可豆: 55 CB
威望: 56 点
在线时间: 86(时)
发自: Web Page
请教大家一个cocos2dx占用内存的问题&&&
本帖被 hanrea 从 CocoStudio中文社区 移动到本区()
自己用cocos2dx的工程创建,测试了一下opengl的纹理占用情况,发现不是简单的长*宽*bpp, 比如的RGBA8888的图片,理论上是占用4M的内存,我实际发现是6M多, 的占用了25M多,发现是正常情况的1.5倍我测试方法是断点到glTexImage2D(GL_TEXTURE_2D, i, info.internalFormat, (GLsizei)width, (GLsizei)height, 0, info.format, info.type, data);函数然后查看内存,执行完这句之后再查看内存大家有比较了解opengl的吗,不知道这个是什么原因,测试就是正常的cocos2dx生成的工程,自己在3.0beta和2.2版本都测试过,都是一样的结论,
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
hiopenGL纹理有mipmap,打个比方:一个的贴图,但是GL会给你生成512*512,256*256......1*1的贴图,所以占用不是原始的4M 。你可以找找mipmap相关的资料。
级别: 新手上路
可可豆: 55 CB
威望: 56 点
在线时间: 86(时)
发自: Web Page
谢谢版主的回复, 我自己测试的时候看了这个mipmap值是1呀 for (int i = 0; i & mipmapsN ++i) &&&&{ &&&&&&&&unsigned char *data = mipmaps. &&&&&&&&GLsizei datalen = mipmaps. &&&&&&&&if (info.compressed) &&&&&&&&{ &&&&&&&&&&&&glCompressedTexImage2D(GL_TEXTURE_2D, i, info.internalFormat, (GLsizei)width, (GLsizei)height, 0, datalen, data); &&&&&&&&} &&&&&&&&else &&&&&&&&{ &&&&&&&&&&&&glTexImage2D(GL_TEXTURE_2D, i, info.internalFormat, (GLsizei)width, (GLsizei)height, 0, info.format, info.type, data); &&&&&&&&} &&&&&&&&if (i & 0 && (width != height || ccNextPOT(width) != width )) &&&&&&&&{ &&&&&&&&&&&&CCLOG(&cocos2d: Texture2D. WARNING. Mipmap level %u is not squared. Texture won't render correctly. width=%ld != height=%ld&, i, width, height); &&&&&&&&} &&&&&&&&GLenum err = glGetError(); &&&&&&&&if (err != GL_NO_ERROR) &&&&&&&&{ &&&&&&&&&&&&CCLOG(&cocos2d: Texture2D: Error uploading compressed texture level: %u . glError: 0x%04X&, i, err); &&&&&&&&&&&& &&&&&&&&} &&&&&&&&width = MAX(width && 1, 1); &&&&&&&&height = MAX(height && 1, 1); &&&&} 能确认这个循环就执行了一次, 您的意思是glTexImage2D这个函数内部执行又会生成mipmap吗? 我理解您的意思应该是上述代码总循环占用的内存,我自己实测是的图, 仅有一个mipmap,也就是说不用mipmap的情况下, 一执行glTexImage2D就增长了6M, 另外自己试过用一个964*680的图RGBA8888的png,这个图加载就增长了4M。 谢谢您的解答 又看了一遍代码,应该是没有使用mipmap贴图方式,增长的内存是一次加载图片的开销,测试环境win7下 2.2和3.0alpha beta都测试过[ 此帖被oraclehan在 11:50重新编辑 ]
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
建议兄弟去了解一下mipmap的原理和openGL的实现,mipmap是可以自动生成的。
级别: 新手上路
可可豆: 55 CB
威望: 56 点
在线时间: 86(时)
发自: Web Page
谢谢版主了
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版cocos2dx内存泄露检测 - cocos2dx技术 - 泰课在线 - 国内专业的Unity在线学习平台|Unity3d培训|Unity教程|Unity教程 Unreal 虚幻 AR|移动开发|美术CG|UI平面设计|前端开发 - Powered By EduSohococos2dx性能优化的那些事-GAD腾讯游戏开发者平台cocos-2dx 如何释放内存_百度知道
cocos-2dx 如何释放内存
比如说如何将没用的精灵删除这一类的。
我有更好的答案
如果创建精灵是通过CCSprite::create(),那么只需要在删除时调用精灵的removeFromParent就可以了。如果create()之后对精灵调用了retain(),那么清理时在removeFromParent之后还需要对精灵调用release()。望采纳~。
采纳率:78%
来自团队:
为您推荐:
其他类似问题
内存的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。没有更多推荐了,
不良信息举报
举报内容:
cocos2dx之如何优化内存使用
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 cocos2dx 内存泄露 的文章

 

随机推荐