mirror of https://github.com/axmolengine/axmol.git
fixed #564: upgrade textures to 1.0.0-rc3
This commit is contained in:
parent
0e6bf40e7c
commit
0d80326392
|
@ -49,10 +49,18 @@ typedef enum {
|
||||||
kCCTexture2DPixelFormat_RGB565,
|
kCCTexture2DPixelFormat_RGB565,
|
||||||
//! 8-bit textures used as masks
|
//! 8-bit textures used as masks
|
||||||
kCCTexture2DPixelFormat_A8,
|
kCCTexture2DPixelFormat_A8,
|
||||||
|
//! 8-bit intensity texture
|
||||||
|
kCCTexture2DPixelFormat_I8,
|
||||||
|
//! 16-bit textures used as masks
|
||||||
|
kCCTexture2DPixelFormat_AI88,
|
||||||
//! 16-bit textures: RGBA4444
|
//! 16-bit textures: RGBA4444
|
||||||
kCCTexture2DPixelFormat_RGBA4444,
|
kCCTexture2DPixelFormat_RGBA4444,
|
||||||
//! 16-bit textures: RGB5A1
|
//! 16-bit textures: RGB5A1
|
||||||
kCCTexture2DPixelFormat_RGB5A1,
|
kCCTexture2DPixelFormat_RGB5A1,
|
||||||
|
//! 4-bit PVRTC-compressed texture: PVRTC4
|
||||||
|
kCCTexture2DPixelFormat_PVRTC4,
|
||||||
|
//! 2-bit PVRTC-compressed texture: PVRTC2
|
||||||
|
kCCTexture2DPixelFormat_PVRTC2,
|
||||||
|
|
||||||
//! Default texture format: RGBA8888
|
//! Default texture format: RGBA8888
|
||||||
kCCTexture2DPixelFormat_Default = kCCTexture2DPixelFormat_RGBA8888,
|
kCCTexture2DPixelFormat_Default = kCCTexture2DPixelFormat_RGBA8888,
|
||||||
|
@ -189,6 +197,11 @@ public:
|
||||||
*/
|
*/
|
||||||
void generateMipmap();
|
void generateMipmap();
|
||||||
|
|
||||||
|
/** returns the bits-per-pixel of the in-memory OpenGL texture
|
||||||
|
@since v1.0
|
||||||
|
*/
|
||||||
|
int bitsPerPixelForFormat();
|
||||||
|
|
||||||
|
|
||||||
/** sets the default pixel format for UIImages that contains alpha channel.
|
/** sets the default pixel format for UIImages that contains alpha channel.
|
||||||
If the UIImage contains alpha channel, then the options are:
|
If the UIImage contains alpha channel, then the options are:
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
Copyright (c) 2010-2011 cocos2d-x.org
|
Copyright (c) 2010-2011 cocos2d-x.org
|
||||||
Copyright (c) 2008-2010 Ricardo Quesada
|
Copyright (c) 2008-2010 Ricardo Quesada
|
||||||
|
Copyright (c) 2011 Zynga Inc.
|
||||||
|
|
||||||
http://www.cocos2d-x.org
|
http://www.cocos2d-x.org
|
||||||
|
|
||||||
|
@ -52,6 +53,7 @@ protected:
|
||||||
GLushort *m_pIndices;
|
GLushort *m_pIndices;
|
||||||
#if CC_USES_VBO
|
#if CC_USES_VBO
|
||||||
GLuint m_pBuffersVBO[2]; //0: vertex 1: indices
|
GLuint m_pBuffersVBO[2]; //0: vertex 1: indices
|
||||||
|
bool m_bDirty; //indicates whether or not the array buffer of the VBO needs to be updated
|
||||||
#endif // CC_USES_VBO
|
#endif // CC_USES_VBO
|
||||||
|
|
||||||
/** quantity of quads that are going to be drawn */
|
/** quantity of quads that are going to be drawn */
|
||||||
|
@ -128,7 +130,7 @@ public:
|
||||||
void removeAllQuads();
|
void removeAllQuads();
|
||||||
|
|
||||||
|
|
||||||
/** resize the capacity of the Texture Atlas.
|
/** resize the capacity of the CCTextureAtlas.
|
||||||
* The new capacity can be lower or higher than the current one
|
* The new capacity can be lower or higher than the current one
|
||||||
* It returns YES if the resize was successful.
|
* It returns YES if the resize was successful.
|
||||||
* If it fails to resize the capacity it will return NO with a new capacity of 0.
|
* If it fails to resize the capacity it will return NO with a new capacity of 0.
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
Copyright (c) 2010-2011 cocos2d-x.org
|
Copyright (c) 2010-2011 cocos2d-x.org
|
||||||
Copyright (c) 2008-2010 Ricardo Quesada
|
Copyright (c) 2008-2010 Ricardo Quesada
|
||||||
|
Copyright (c) 2011 Zynga Inc.
|
||||||
|
|
||||||
http://www.cocos2d-x.org
|
http://www.cocos2d-x.org
|
||||||
|
|
||||||
|
@ -134,6 +135,13 @@ public:
|
||||||
*/
|
*/
|
||||||
void removeTextureForKey(const char *textureKeyName);
|
void removeTextureForKey(const char *textureKeyName);
|
||||||
|
|
||||||
|
/** Output to CCLOG the current contents of this CCTextureCache
|
||||||
|
* This will attempt to calculate the size of each texture, and the total texture memory in use
|
||||||
|
*
|
||||||
|
* @since v1.0
|
||||||
|
*/
|
||||||
|
void dumpCachedTextureInfo();
|
||||||
|
|
||||||
#if _POWERVR_SUPPORT_
|
#if _POWERVR_SUPPORT_
|
||||||
/** Returns a Texture2D object given an PVRTC RAW filename
|
/** Returns a Texture2D object given an PVRTC RAW filename
|
||||||
* If the file image was not previously loaded, it will create a new CCTexture2D
|
* If the file image was not previously loaded, it will create a new CCTexture2D
|
||||||
|
|
|
@ -167,22 +167,25 @@ bool CCTexture2D::initWithData(const void *data, CCTexture2DPixelFormat pixelFor
|
||||||
switch(pixelFormat)
|
switch(pixelFormat)
|
||||||
{
|
{
|
||||||
case kCCTexture2DPixelFormat_RGBA8888:
|
case kCCTexture2DPixelFormat_RGBA8888:
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pixelsWide, pixelsHigh, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)pixelsWide, (GLsizei)pixelsHigh, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
|
||||||
break;
|
break;
|
||||||
case kCCTexture2DPixelFormat_RGB888:
|
case kCCTexture2DPixelFormat_RGB888:
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, pixelsWide, pixelsHigh, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, (GLsizei)pixelsWide, (GLsizei)pixelsHigh, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
|
||||||
break;
|
break;
|
||||||
case kCCTexture2DPixelFormat_RGBA4444:
|
case kCCTexture2DPixelFormat_RGBA4444:
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pixelsWide, pixelsHigh, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, data);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)pixelsWide, (GLsizei)pixelsHigh, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, data);
|
||||||
break;
|
break;
|
||||||
case kCCTexture2DPixelFormat_RGB5A1:
|
case kCCTexture2DPixelFormat_RGB5A1:
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pixelsWide, pixelsHigh, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, data);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)pixelsWide, (GLsizei)pixelsHigh, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, data);
|
||||||
break;
|
break;
|
||||||
case kCCTexture2DPixelFormat_RGB565:
|
case kCCTexture2DPixelFormat_RGB565:
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, pixelsWide, pixelsHigh, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, data);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, (GLsizei)pixelsWide, (GLsizei)pixelsHigh, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, data);
|
||||||
|
break;
|
||||||
|
case kCCTexture2DPixelFormat_AI88:
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, (GLsizei)pixelsWide, (GLsizei)pixelsHigh, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, data);
|
||||||
break;
|
break;
|
||||||
case kCCTexture2DPixelFormat_A8:
|
case kCCTexture2DPixelFormat_A8:
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, pixelsWide, pixelsHigh, 0, GL_ALPHA, GL_UNSIGNED_BYTE, data);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, (GLsizei)pixelsWide, (GLsizei)pixelsHigh, 0, GL_ALPHA, GL_UNSIGNED_BYTE, data);
|
||||||
break;
|
break;
|
||||||
default:;
|
default:;
|
||||||
CCAssert(0, "NSInternalInconsistencyException");
|
CCAssert(0, "NSInternalInconsistencyException");
|
||||||
|
@ -629,4 +632,46 @@ CCTexture2DPixelFormat CCTexture2D::defaultAlphaPixelFormat()
|
||||||
return g_defaultAlphaPixelFormat;
|
return g_defaultAlphaPixelFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CCTexture2D::bitsPerPixelForFormat()
|
||||||
|
{
|
||||||
|
int ret= -1;
|
||||||
|
|
||||||
|
switch (m_ePixelFormat)
|
||||||
|
{
|
||||||
|
case kCCTexture2DPixelFormat_RGBA8888:
|
||||||
|
ret = 32;
|
||||||
|
break;
|
||||||
|
case kCCTexture2DPixelFormat_RGB565:
|
||||||
|
ret = 16;
|
||||||
|
break;
|
||||||
|
case kCCTexture2DPixelFormat_A8:
|
||||||
|
ret = 8;
|
||||||
|
break;
|
||||||
|
case kCCTexture2DPixelFormat_RGBA4444:
|
||||||
|
ret = 16;
|
||||||
|
break;
|
||||||
|
case kCCTexture2DPixelFormat_RGB5A1:
|
||||||
|
ret = 16;
|
||||||
|
break;
|
||||||
|
case kCCTexture2DPixelFormat_PVRTC4:
|
||||||
|
ret = 4;
|
||||||
|
break;
|
||||||
|
case kCCTexture2DPixelFormat_PVRTC2:
|
||||||
|
ret = 2;
|
||||||
|
break;
|
||||||
|
case kCCTexture2DPixelFormat_I8:
|
||||||
|
ret = 8;
|
||||||
|
break;
|
||||||
|
case kCCTexture2DPixelFormat_AI88:
|
||||||
|
ret = 16;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ret = -1;
|
||||||
|
assert(false);
|
||||||
|
CCLOG("bitsPerPixelForFormat: %d, cannot give useful result", m_ePixelFormat);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
}//namespace cocos2d
|
}//namespace cocos2d
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
Copyright (c) 2010-2011 cocos2d-x.org
|
Copyright (c) 2010-2011 cocos2d-x.org
|
||||||
Copyright (c) 2008-2010 Ricardo Quesada
|
Copyright (c) 2008-2010 Ricardo Quesada
|
||||||
|
Copyright (c) 2011 Zynga Inc.
|
||||||
|
|
||||||
http://www.cocos2d-x.org
|
http://www.cocos2d-x.org
|
||||||
|
|
||||||
|
@ -145,6 +146,9 @@ bool CCTextureAtlas::initWithTexture(CCTexture2D *texture, unsigned int capacity
|
||||||
this->m_pTexture = texture;
|
this->m_pTexture = texture;
|
||||||
CC_SAFE_RETAIN(m_pTexture);
|
CC_SAFE_RETAIN(m_pTexture);
|
||||||
|
|
||||||
|
// Re-initialization is not allowed
|
||||||
|
assert(m_pQuads == NULL && m_pIndices == NULL);
|
||||||
|
|
||||||
m_pQuads = (ccV3F_C4B_T2F_Quad*)calloc( sizeof(ccV3F_C4B_T2F_Quad) * m_uCapacity, 1 );
|
m_pQuads = (ccV3F_C4B_T2F_Quad*)calloc( sizeof(ccV3F_C4B_T2F_Quad) * m_uCapacity, 1 );
|
||||||
m_pIndices = (GLushort *)calloc( sizeof(GLushort) * m_uCapacity * 6, 1 );
|
m_pIndices = (GLushort *)calloc( sizeof(GLushort) * m_uCapacity * 6, 1 );
|
||||||
|
|
||||||
|
@ -162,6 +166,7 @@ bool CCTextureAtlas::initWithTexture(CCTexture2D *texture, unsigned int capacity
|
||||||
#if CC_USES_VBO
|
#if CC_USES_VBO
|
||||||
// initial binding
|
// initial binding
|
||||||
glGenBuffers(2, &m_pBuffersVBO[0]);
|
glGenBuffers(2, &m_pBuffersVBO[0]);
|
||||||
|
m_bDirty = true;
|
||||||
#endif // CC_USES_VBO
|
#endif // CC_USES_VBO
|
||||||
|
|
||||||
this->initIndices();
|
this->initIndices();
|
||||||
|
@ -222,6 +227,10 @@ void CCTextureAtlas::updateQuad(ccV3F_C4B_T2F_Quad *quad, unsigned int index)
|
||||||
m_uTotalQuads = max( index+1, m_uTotalQuads);
|
m_uTotalQuads = max( index+1, m_uTotalQuads);
|
||||||
|
|
||||||
m_pQuads[index] = *quad;
|
m_pQuads[index] = *quad;
|
||||||
|
|
||||||
|
#if CC_USES_VBO
|
||||||
|
m_bDirty = true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCTextureAtlas::insertQuad(ccV3F_C4B_T2F_Quad *quad, unsigned int index)
|
void CCTextureAtlas::insertQuad(ccV3F_C4B_T2F_Quad *quad, unsigned int index)
|
||||||
|
@ -241,6 +250,10 @@ void CCTextureAtlas::insertQuad(ccV3F_C4B_T2F_Quad *quad, unsigned int index)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_pQuads[index] = *quad;
|
m_pQuads[index] = *quad;
|
||||||
|
|
||||||
|
#if CC_USES_VBO
|
||||||
|
m_bDirty = true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCTextureAtlas::insertQuadFromIndex(unsigned int oldIndex, unsigned int newIndex)
|
void CCTextureAtlas::insertQuadFromIndex(unsigned int oldIndex, unsigned int newIndex)
|
||||||
|
@ -265,6 +278,10 @@ void CCTextureAtlas::insertQuadFromIndex(unsigned int oldIndex, unsigned int new
|
||||||
ccV3F_C4B_T2F_Quad quadsBackup = m_pQuads[oldIndex];
|
ccV3F_C4B_T2F_Quad quadsBackup = m_pQuads[oldIndex];
|
||||||
memmove( &m_pQuads[dst],&m_pQuads[src], sizeof(m_pQuads[0]) * howMany );
|
memmove( &m_pQuads[dst],&m_pQuads[src], sizeof(m_pQuads[0]) * howMany );
|
||||||
m_pQuads[newIndex] = quadsBackup;
|
m_pQuads[newIndex] = quadsBackup;
|
||||||
|
|
||||||
|
#if CC_USES_VBO
|
||||||
|
m_bDirty = true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCTextureAtlas::removeQuadAtIndex(unsigned int index)
|
void CCTextureAtlas::removeQuadAtIndex(unsigned int index)
|
||||||
|
@ -281,6 +298,10 @@ void CCTextureAtlas::removeQuadAtIndex(unsigned int index)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_uTotalQuads--;
|
m_uTotalQuads--;
|
||||||
|
|
||||||
|
#if CC_USES_VBO
|
||||||
|
m_bDirty = true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCTextureAtlas::removeAllQuads()
|
void CCTextureAtlas::removeAllQuads()
|
||||||
|
@ -324,6 +345,10 @@ bool CCTextureAtlas::resizeCapacity(unsigned int newCapacity)
|
||||||
|
|
||||||
this->initIndices();
|
this->initIndices();
|
||||||
|
|
||||||
|
#if CC_USES_VBO
|
||||||
|
m_bDirty = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,10 +356,15 @@ bool CCTextureAtlas::resizeCapacity(unsigned int newCapacity)
|
||||||
|
|
||||||
void CCTextureAtlas::drawQuads()
|
void CCTextureAtlas::drawQuads()
|
||||||
{
|
{
|
||||||
this->drawNumberOfQuads(m_uTotalQuads);
|
this->drawNumberOfQuads(m_uTotalQuads, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCTextureAtlas::drawNumberOfQuads(unsigned int n)
|
void CCTextureAtlas::drawNumberOfQuads(unsigned int n)
|
||||||
|
{
|
||||||
|
this->drawNumberOfQuads(m_uTotalQuads, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCTextureAtlas::drawNumberOfQuads(unsigned int n, unsigned int start)
|
||||||
{
|
{
|
||||||
// Default GL states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY
|
// Default GL states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY
|
||||||
// Needed states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY
|
// Needed states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY
|
||||||
|
@ -354,7 +384,12 @@ void CCTextureAtlas::drawNumberOfQuads(unsigned int n)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// XXX: update is done in draw... perhaps it should be done in a timer
|
// XXX: update is done in draw... perhaps it should be done in a timer
|
||||||
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(m_pQuads[0]) * n, m_pQuads);
|
if (m_bDirty)
|
||||||
|
{
|
||||||
|
glBufferSubData(GL_ARRAY_BUFFER, sizeof(m_pQuads[0]) * start, sizeof(m_pQuads[0]) * n, &m_pQuads[start]);
|
||||||
|
m_bDirty = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// vertices
|
// vertices
|
||||||
glVertexPointer(3, GL_FLOAT, kQuadSize, (GLvoid*) offsetof( ccV3F_C4B_T2F, vertices));
|
glVertexPointer(3, GL_FLOAT, kQuadSize, (GLvoid*) offsetof( ccV3F_C4B_T2F, vertices));
|
||||||
|
@ -372,9 +407,9 @@ void CCTextureAtlas::drawNumberOfQuads(unsigned int n)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CC_TEXTURE_ATLAS_USE_TRIANGLE_STRIP
|
#if CC_TEXTURE_ATLAS_USE_TRIANGLE_STRIP
|
||||||
glDrawElements(GL_TRIANGLE_STRIP, n*6, GL_UNSIGNED_SHORT, (GLvoid*)0);
|
glDrawElements(GL_TRIANGLE_STRIP, (GLsizei)n*6, GL_UNSIGNED_SHORT, (GLvoid*)(start * 6 * sizeof(m_pIndices[0])));
|
||||||
#else
|
#else
|
||||||
glDrawElements(GL_TRIANGLES, n*6, GL_UNSIGNED_SHORT, (GLvoid*)0);
|
glDrawElements(GL_TRIANGLES, (GLsizei)n*6, GL_UNSIGNED_SHORT, (GLvoid*)(start * 6 * sizeof(m_pIndices[0])));
|
||||||
#endif // CC_USES_VBO
|
#endif // CC_USES_VBO
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
@ -397,18 +432,13 @@ void CCTextureAtlas::drawNumberOfQuads(unsigned int n)
|
||||||
glTexCoordPointer(2, GL_FLOAT, kQuadSize, (GLvoid*)(offset + diff));
|
glTexCoordPointer(2, GL_FLOAT, kQuadSize, (GLvoid*)(offset + diff));
|
||||||
|
|
||||||
#if CC_TEXTURE_ATLAS_USE_TRIANGLE_STRIP
|
#if CC_TEXTURE_ATLAS_USE_TRIANGLE_STRIP
|
||||||
glDrawElements(GL_TRIANGLE_STRIP, n*6, GL_UNSIGNED_SHORT, m_pIndices);
|
glDrawElements(GL_TRIANGLE_STRIP, n*6, GL_UNSIGNED_SHORT, m_pIndices + start * 6);
|
||||||
#else
|
#else
|
||||||
glDrawElements(GL_TRIANGLES, n*6, GL_UNSIGNED_SHORT, m_pIndices);
|
glDrawElements(GL_TRIANGLES, n*6, GL_UNSIGNED_SHORT, m_pIndices + start * 6);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // CC_USES_VBO
|
#endif // CC_USES_VBO
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCTextureAtlas::drawNumberOfQuads(unsigned int n, unsigned int start)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}//namespace cocos2d
|
}//namespace cocos2d
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
Copyright (c) 2010-2011 cocos2d-x.org
|
Copyright (c) 2010-2011 cocos2d-x.org
|
||||||
Copyright (c) 2008-2010 Ricardo Quesada
|
Copyright (c) 2008-2010 Ricardo Quesada
|
||||||
|
Copyright (c) 2011 Zynga Inc.
|
||||||
|
|
||||||
http://www.cocos2d-x.org
|
http://www.cocos2d-x.org
|
||||||
|
|
||||||
|
@ -77,7 +78,7 @@ CCTextureCache::CCTextureCache()
|
||||||
|
|
||||||
CCTextureCache::~CCTextureCache()
|
CCTextureCache::~CCTextureCache()
|
||||||
{
|
{
|
||||||
CCLOG("cocos2d: deallocing CCTextureCache.");
|
CCLOGINFO("cocos2d: deallocing CCTextureCache.");
|
||||||
|
|
||||||
CC_SAFE_RELEASE(m_pTextures);
|
CC_SAFE_RELEASE(m_pTextures);
|
||||||
CC_SAFE_DELETE(m_pDictLock);
|
CC_SAFE_DELETE(m_pDictLock);
|
||||||
|
@ -225,7 +226,8 @@ CCTexture2D * CCTextureCache::addImage(const char * path)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_pTextures->setObject(texture, pathKey);
|
m_pTextures->setObject(texture, pathKey);
|
||||||
texture->release();
|
// autorelease prevents possible crash in multithreaded environments
|
||||||
|
texture->autorelease();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -252,7 +254,8 @@ CCTexture2D * CCTextureCache::addImage(const char * path)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_pTextures->setObject(texture, pathKey);
|
m_pTextures->setObject(texture, pathKey);
|
||||||
texture->release();
|
// autorelease prevents possible crash in multithreaded environments
|
||||||
|
texture->autorelease();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -447,6 +450,34 @@ void CCTextureCache::reloadAllTextures()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CCTextureCache::dumpCachedTextureInfo()
|
||||||
|
{
|
||||||
|
unsigned int count = 0;
|
||||||
|
unsigned int totalBytes = 0;
|
||||||
|
|
||||||
|
vector<string> keys = m_pTextures->allKeys();
|
||||||
|
vector<string>::iterator iter;
|
||||||
|
for (iter = keys.begin(); iter != keys.end(); iter++)
|
||||||
|
{
|
||||||
|
CCTexture2D *tex = m_pTextures->objectForKey(*iter);
|
||||||
|
unsigned int bpp = tex->bitsPerPixelForFormat();
|
||||||
|
// Each texture takes up width * height * bytesPerPixel bytes.
|
||||||
|
unsigned int bytes = tex->getPixelsWide() * tex->getPixelsHigh() * bpp / 8;
|
||||||
|
totalBytes += bytes;
|
||||||
|
count++;
|
||||||
|
CCLOG("cocos2d: \"%s\" rc=%lu id=%lu %lu x %lu @ %ld bpp => %lu KB",
|
||||||
|
(*iter).c_str(),
|
||||||
|
(long)tex->retainCount(),
|
||||||
|
(long)tex->getName(),
|
||||||
|
(long)tex->getPixelsWide(),
|
||||||
|
(long)tex->getPixelsHigh(),
|
||||||
|
(long)bpp,
|
||||||
|
(long)bytes / 1024);
|
||||||
|
}
|
||||||
|
|
||||||
|
CCLOG("cocos2d: CCTextureCache dumpDebugInfo: %ld textures, for %lu KB (%.2f MB)", (long)count, (long)totalBytes / 1024, totalBytes / (1024.0f*1024.0f));
|
||||||
|
}
|
||||||
|
|
||||||
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
||||||
|
|
||||||
std::list<VolatileTexture*> VolatileTexture::textures;
|
std::list<VolatileTexture*> VolatileTexture::textures;
|
||||||
|
|
Loading…
Reference in New Issue