哇,12M,这也太大了。
虽然不清楚etc1格式是什么样子,但是就算是YUV420sp,也不过6M,是不是哪里弄错了?
嗯, 我使用etcpack.exe png 转成 pkm, 载入内存12M
使用PVRTexTool.exc -f ETC 转pvr, cocos2dx 又不认,
D/CCFileUtilsAndroid.cpp(10423): relative path = luoli_skill_etc/luoli_skill.pvr
D/cocos2d-x debug info(10423): cocos2d: WARNING: Image is flipped. Regenerate it using PVRTexTool
D/cocos2d-x debug info(10423): cocos2d: WARNING: Unsupported PVR Pixel Format: 0x36. Re-encode it with a OpenGL pixel format variant
D/cocos2d-x debug info(10423): cocos2d: WARNING: pvr file version mismatch
觉得当成pvr格式处理了。
所以进入两难境地。
不知道怎么解决
纹理相关内容没有深入研究
Hi Jin,
我在本机上,一张2K的png使用Mali Texture Compression Tool 的etcpack压缩后pkm文件大小是2MB(2,097,168 bytes)
1. 载入内存12M,你指的是文件大小还是实际运行程序,载入显存后读出的占用显存大小?
2. 你用的是CC2DX引擎? 测试的设备是什么?
3. 能方便给出你的png,及相关使用Mali Texture Compression Tool 的版本以及参数么?
BR,
Zephyr
1. 每个内存占用12M,
2. 使用cocos2dx,测试设备 android 手机。
代码: 整个程序就这个资源。有4张图片2048 * 2048 。
auto node6=spine::SkeletonAnimation::createWithFile("luoli_skill_pkm/luoli_skill.json", "luoli_skill_pkm/luoli_skill.atlas",1.0f);
node6->setPosition(Vec2(500,100));
node6->setAnimation(0, "animation", true);
CCLOG("luoli_skill_pkm %s", Director::getInstance()->getTextureCache()->getCachedTextureInfo().c_str());
this->addChild(node6);
结果:TextureCache dumpDebugInfo: 4 textures, for 49257 KB (48.10 MB)
而同样的png文件转成PVR格式,ios 上只有 6M
3. png就是普通文件,这里上传半天,不上传了。
版本: C:\Program Files\ARM\Mali Developer Tools\Mali Texture Compression Tool v4.2.0 ,
首先,明确一个概念,ETC1的压缩比是固定的,
根据ETC1的官方文档:
https://www.khronos.org/registry/gles/extensions/OES/OES_compressed_ETC1_RGB8_texture.txt
4*4共16个texels,压缩后的空间是64bits也就是1个texel占用64/8/16 = 0.5 byte,
如果你的贴图尺寸正确是2048*2048,则etc1(GL_ETC1_RGB8_OES)压缩后的贴图大小应该是
2048*2048*0.5 = 2,097,152 bytes,再加上文件头大小为16 bytes,2,097,168 bytes,
这与我实际测得的结果是一致的。
所以,为了明确问题,在没有资源可以测试的情况下,还需要了解:
1,你压缩后得到的pkm文件大小是?或则,贴图文件你可以尝试使用网盘贡献的方式给我们。
2,你的测试设备是什么,iOS设备?CC2DX的版本是多少?
3,压缩的时候有没有使用"Enable mipmaps"?
4,根据你之前的log“D/cocos2d-x debug info(10423): cocos2d: WARNING: Image is flipped. Regenerate it using PVRTexTool”,pvr的贴图应该没有生效,
后续你测得的结果6M,pvr的贴图是有效的么?
5,鉴于你使用了atlas Sprite,是否有检查过CCSPriteFrameCache,或者你可以将 Director::getInstance()->getTextureCache()中的贴图遍历一遍,将尺寸等信息打印出来,确认贴图是否载入于其中。
附图为我本地测试的贴图: