2012-01-02 82 views
0

我使用的是cocos2d并且有一个1024x1024的spritesheet。Cocos2d纹理内存使用情况

予加载RGBA4444格式的质地和它消耗2MB标记为“gfxAllocateTextureLevel”。

然后,当我从spritesheet创建CCSprites它瞬间消耗标记为glsmLoadTextureLevelBuffer内存额外4MB。

所以6MB总,相对于我的应用程序相当多是。这是预期的吗?是否需要为每个spritesheet甚至CCSpriteBatchNode创建一个缓冲区?谢谢。

+0

你是如何创建CCSprites的?你使用initWithSpriteSheet? – rsaxvc 2012-01-02 23:18:45

+0

我创建一个子画面[CCSprite spriteWithSpriteFrameName @ “spr.png”]我加载spritesheet本身带有:[[CCTextureCache sharedTextureCache] addImageAsync:@ “x.png” 目标:自选择器:@selector(gameSpritesLoaded :)];然后在创建批处理节点之前将它们添加到缓存中:[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@“x.plist”]; – FBryant87 2012-01-02 23:24:40

回答

1

OpelGLES1.1 Spec状态:

“的GL将结果得到的质感与自己选择的内部组件的决议”

=>的GPU /驱动器可将您的像素高达大小根据需要通过GPU(GPU可能只能在某些像素格式上进行本地操作,所以任何不是这样的东西都会被合并为一个),所以我认为你有2MB的RGBA4444和4MB的同一精灵片的RGBA8888。

+0

谢谢,但我不确定我是否遵循。我可能会错误地使它以两种像素格式加载它? – FBryant87 2012-01-02 23:48:26

+0

gfxAllocateTextureLevel是RGBA4444。但是,在GPU可以使用它之前,必须为GPU使用做准备,其中包括转换RGBA8888(GPU本机格式)。 – rsaxvc 2012-01-02 23:57:31

+0

但是,以往使用RGBA4444格式的重点是什么? – FBryant87 2012-01-03 11:30:59

0

我有同样的问题! 我以RGBA8888格式加载纹理,它消耗4MB标记为'gfxAllocateTextureLevel'。

然后,当我从spritesheet创建CCSprites它瞬间消耗标记为glsmLoadTextureLevelBuffer内存额外4MB。