mirror of https://github.com/axmolengine/axmol.git
Merge branch 'iss374' of https://github.com/natural-law/cocos2d-x into natural-law-iss374
This commit is contained in:
commit
4ffe24fc8e
|
@ -30,7 +30,7 @@ void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thi
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cocos2d::CCTexture2D::reloadAllTextures();
|
cocos2d::CCTextureCache::reloadAllTextures();
|
||||||
cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
|
cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -212,11 +212,6 @@ public:
|
||||||
*/
|
*/
|
||||||
static CCTexture2DPixelFormat defaultAlphaPixelFormat();
|
static CCTexture2DPixelFormat defaultAlphaPixelFormat();
|
||||||
|
|
||||||
/** Reload all textures
|
|
||||||
It's only useful when the value of CC_ENABLE_CACHE_TEXTTURE_DATA is 1
|
|
||||||
*/
|
|
||||||
static void reloadAllTextures();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool initPremultipliedATextureWithImage(CCImage * image, unsigned int pixelsWide, unsigned int pixelsHigh);
|
bool initPremultipliedATextureWithImage(CCImage * image, unsigned int pixelsWide, unsigned int pixelsHigh);
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,11 @@ THE SOFTWARE.
|
||||||
#include "CCObject.h"
|
#include "CCObject.h"
|
||||||
#include "CCMutableDictionary.h"
|
#include "CCMutableDictionary.h"
|
||||||
|
|
||||||
|
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
||||||
|
#include "CCImage.h"
|
||||||
|
#include <list>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace cocos2d {
|
namespace cocos2d {
|
||||||
class CCTexture2D;
|
class CCTexture2D;
|
||||||
class CCAsyncObject;
|
class CCAsyncObject;
|
||||||
|
@ -146,7 +151,48 @@ public:
|
||||||
*/
|
*/
|
||||||
CCTexture2D* addPVRTCImage(const char* fileimage);
|
CCTexture2D* addPVRTCImage(const char* fileimage);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/** Reload all textures
|
||||||
|
It's only useful when the value of CC_ENABLE_CACHE_TEXTTURE_DATA is 1
|
||||||
|
*/
|
||||||
|
static void reloadAllTextures();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
||||||
|
|
||||||
|
class VolatileTexture
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
VolatileTexture(CCTexture2D *t);
|
||||||
|
~VolatileTexture();
|
||||||
|
|
||||||
|
static void addImageTexture(CCTexture2D *tt, const char* imageFileName, CCImage::EImageFormat format);
|
||||||
|
static void addStringTexture(CCTexture2D *tt, const char* text, CCSize dimensions, CCTextAlignment alignment, const char *fontName, float fontSize);
|
||||||
|
|
||||||
|
static void removeTexture(CCTexture2D *t);
|
||||||
|
static void reloadAllTextures();
|
||||||
|
|
||||||
|
public:
|
||||||
|
static std::list<VolatileTexture*> textures;
|
||||||
|
static bool isReloading;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CCTexture2D *texture;
|
||||||
|
|
||||||
|
bool m_bIsString;
|
||||||
|
|
||||||
|
std::string m_strFileName;
|
||||||
|
CCImage::EImageFormat m_FmtImage;
|
||||||
|
|
||||||
|
CCSize m_size;
|
||||||
|
CCTextAlignment m_alignment;
|
||||||
|
std::string m_strFontName;
|
||||||
|
std::string m_strText;
|
||||||
|
float m_fFontSize;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
}//namespace cocos2d
|
}//namespace cocos2d
|
||||||
|
|
||||||
#endif //__CCTEXTURE_CACHE_H__
|
#endif //__CCTEXTURE_CACHE_H__
|
||||||
|
|
|
@ -34,7 +34,6 @@ THE SOFTWARE.
|
||||||
|
|
||||||
#include "ccConfig.h"
|
#include "ccConfig.h"
|
||||||
#include "ccMacros.h"
|
#include "ccMacros.h"
|
||||||
#include "CCTexture2D.h"
|
|
||||||
#include "CCConfiguration.h"
|
#include "CCConfiguration.h"
|
||||||
#include "platform/platform.h"
|
#include "platform/platform.h"
|
||||||
#include "CCImage.h"
|
#include "CCImage.h"
|
||||||
|
@ -47,7 +46,7 @@ THE SOFTWARE.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
||||||
#include <list>
|
#include "CCTextureCache.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace cocos2d {
|
namespace cocos2d {
|
||||||
|
@ -58,122 +57,6 @@ namespace cocos2d {
|
||||||
|
|
||||||
//CLASS IMPLEMENTATIONS:
|
//CLASS IMPLEMENTATIONS:
|
||||||
|
|
||||||
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
|
||||||
class VolatileTexture
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
CCTexture2D *texture;
|
|
||||||
unsigned char *data;
|
|
||||||
CCTexture2DPixelFormat pixelFormat;
|
|
||||||
unsigned int pixelsWide;
|
|
||||||
unsigned int pixelsHigh;
|
|
||||||
CCSize contentSize;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
static std::list<VolatileTexture*> textures;
|
|
||||||
static bool isReloading;
|
|
||||||
|
|
||||||
VolatileTexture(CCTexture2D *t) : texture(t), data(0)
|
|
||||||
{
|
|
||||||
textures.push_back(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
~VolatileTexture()
|
|
||||||
{
|
|
||||||
if (data)
|
|
||||||
delete [] data;
|
|
||||||
textures.remove(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void addTextureWithData(CCTexture2D *tt,
|
|
||||||
const void *d,
|
|
||||||
CCTexture2DPixelFormat f,
|
|
||||||
unsigned int w,
|
|
||||||
unsigned int h,
|
|
||||||
CCSize s)
|
|
||||||
{
|
|
||||||
if (isReloading)
|
|
||||||
return;
|
|
||||||
|
|
||||||
VolatileTexture *vt = 0;
|
|
||||||
std::list<VolatileTexture *>::iterator i = textures.begin();
|
|
||||||
while( i != textures.end() )
|
|
||||||
{
|
|
||||||
VolatileTexture *v = *i++;
|
|
||||||
if (v->texture == tt) {
|
|
||||||
vt = v;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!vt)
|
|
||||||
vt = new VolatileTexture(tt);
|
|
||||||
|
|
||||||
vt->pixelFormat = f;
|
|
||||||
vt->pixelsWide = w;
|
|
||||||
vt->pixelsHigh = h;
|
|
||||||
vt->contentSize = s;
|
|
||||||
|
|
||||||
//CCLOGINFO("added volatile %d", textures.size());
|
|
||||||
|
|
||||||
if (vt->data) {
|
|
||||||
delete [] vt->data;
|
|
||||||
vt->data = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(f) {
|
|
||||||
case kCCTexture2DPixelFormat_RGBA8888:
|
|
||||||
case kCCTexture2DPixelFormat_RGBA4444:
|
|
||||||
case kCCTexture2DPixelFormat_RGB5A1:
|
|
||||||
case kCCTexture2DPixelFormat_RGB565:
|
|
||||||
case kCCTexture2DPixelFormat_A8:
|
|
||||||
vt->data = new unsigned char[w * h * 4];
|
|
||||||
memcpy(vt->data, d, w * h * 4);
|
|
||||||
break;
|
|
||||||
case kCCTexture2DPixelFormat_RGB888:
|
|
||||||
vt->data = new unsigned char[w * h * 3];
|
|
||||||
memcpy(vt->data, d, w * h * 3);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void removeTexture(CCTexture2D *t) {
|
|
||||||
|
|
||||||
std::list<VolatileTexture *>::iterator i = textures.begin();
|
|
||||||
while( i != textures.end() )
|
|
||||||
{
|
|
||||||
VolatileTexture *vt = *i++;
|
|
||||||
if (vt->texture == t) {
|
|
||||||
delete vt;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void reloadAllTextures()
|
|
||||||
{
|
|
||||||
isReloading = true;
|
|
||||||
|
|
||||||
CCLOG("reload all texture");
|
|
||||||
std::list<VolatileTexture *>::iterator i = textures.begin();
|
|
||||||
|
|
||||||
while( i != textures.end() )
|
|
||||||
{
|
|
||||||
VolatileTexture *vt = *i++;
|
|
||||||
if (vt->data) {
|
|
||||||
vt->texture->initWithData((const void *)vt->data, vt->pixelFormat, vt->pixelsWide, vt->pixelsHigh, vt->contentSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
isReloading = false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
std::list<VolatileTexture*> VolatileTexture::textures;
|
|
||||||
bool VolatileTexture::isReloading = false;
|
|
||||||
#endif // CC_ENABLE_CACHE_TEXTTURE_DATA
|
|
||||||
|
|
||||||
// If the image has alpha, you can create RGBA8 (32-bit) or RGBA4 (16-bit) or RGB5A1 (16-bit)
|
// If the image has alpha, you can create RGBA8 (32-bit) or RGBA4 (16-bit) or RGB5A1 (16-bit)
|
||||||
// Default is: RGBA8888 (32-bit textures)
|
// Default is: RGBA8888 (32-bit textures)
|
||||||
static CCTexture2DPixelFormat g_defaultAlphaPixelFormat = kCCTexture2DPixelFormat_Default;
|
static CCTexture2DPixelFormat g_defaultAlphaPixelFormat = kCCTexture2DPixelFormat_Default;
|
||||||
|
@ -273,12 +156,6 @@ bool CCTexture2D::getHasPremultipliedAlpha()
|
||||||
|
|
||||||
bool CCTexture2D::initWithData(const void *data, CCTexture2DPixelFormat pixelFormat, unsigned int pixelsWide, unsigned int pixelsHigh, CCSize contentSize)
|
bool CCTexture2D::initWithData(const void *data, CCTexture2DPixelFormat pixelFormat, unsigned int pixelsWide, unsigned int pixelsHigh, CCSize contentSize)
|
||||||
{
|
{
|
||||||
|
|
||||||
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
|
||||||
// cache the texture data
|
|
||||||
VolatileTexture::addTextureWithData(this, data, pixelFormat, pixelsWide, pixelsHigh, contentSize);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
glGenTextures(1, &m_uName);
|
glGenTextures(1, &m_uName);
|
||||||
glBindTexture(GL_TEXTURE_2D, m_uName);
|
glBindTexture(GL_TEXTURE_2D, m_uName);
|
||||||
|
|
||||||
|
@ -559,6 +436,11 @@ bool CCTexture2D::initWithString(const char *text, const char *fontName, float f
|
||||||
}
|
}
|
||||||
bool CCTexture2D::initWithString(const char *text, CCSize dimensions, CCTextAlignment alignment, const char *fontName, float fontSize)
|
bool CCTexture2D::initWithString(const char *text, CCSize dimensions, CCTextAlignment alignment, const char *fontName, float fontSize)
|
||||||
{
|
{
|
||||||
|
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
||||||
|
// cache the texture data
|
||||||
|
VolatileTexture::addStringTexture(this, text, dimensions, alignment, fontName, fontSize);
|
||||||
|
#endif
|
||||||
|
|
||||||
CCImage image;
|
CCImage image;
|
||||||
CCImage::ETextAlign eAlign = (CCTextAlignmentCenter == alignment) ? CCImage::kAlignCenter
|
CCImage::ETextAlign eAlign = (CCTextAlignmentCenter == alignment) ? CCImage::kAlignCenter
|
||||||
: (CCTextAlignmentLeft == alignment) ? CCImage::kAlignLeft : CCImage::kAlignRight;
|
: (CCTextAlignmentLeft == alignment) ? CCImage::kAlignLeft : CCImage::kAlignRight;
|
||||||
|
@ -742,11 +624,4 @@ CCTexture2DPixelFormat CCTexture2D::defaultAlphaPixelFormat()
|
||||||
return g_defaultAlphaPixelFormat;
|
return g_defaultAlphaPixelFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCTexture2D::reloadAllTextures()
|
|
||||||
{
|
|
||||||
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
|
||||||
VolatileTexture::reloadAllTextures();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
}//namespace cocos2d
|
}//namespace cocos2d
|
||||||
|
|
|
@ -219,6 +219,11 @@ CCTexture2D * CCTextureCache::addImage(const char * path)
|
||||||
|
|
||||||
if( texture )
|
if( texture )
|
||||||
{
|
{
|
||||||
|
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
||||||
|
// cache the texture file name
|
||||||
|
VolatileTexture::addImageTexture(texture, fullpath.c_str(), CCImage::kFmtJpg);
|
||||||
|
#endif
|
||||||
|
|
||||||
m_pTextures->setObject(texture, pathKey);
|
m_pTextures->setObject(texture, pathKey);
|
||||||
texture->release();
|
texture->release();
|
||||||
}
|
}
|
||||||
|
@ -229,11 +234,6 @@ CCTexture2D * CCTextureCache::addImage(const char * path)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//# work around for issue #910
|
|
||||||
#if 0
|
|
||||||
UIImage *image = [UIImage imageNamed:path];
|
|
||||||
tex = [ [CCTexture2D alloc] initWithImage: image ];
|
|
||||||
#else
|
|
||||||
// prevents overloading the autorelease pool
|
// prevents overloading the autorelease pool
|
||||||
CCImage image;
|
CCImage image;
|
||||||
CCFileData data(fullpath.c_str(), "rb");
|
CCFileData data(fullpath.c_str(), "rb");
|
||||||
|
@ -243,9 +243,14 @@ CCTexture2D * CCTextureCache::addImage(const char * path)
|
||||||
|
|
||||||
texture = new CCTexture2D();
|
texture = new CCTexture2D();
|
||||||
texture->initWithImage(&image);
|
texture->initWithImage(&image);
|
||||||
#endif
|
|
||||||
if( texture )
|
if( texture )
|
||||||
{
|
{
|
||||||
|
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
||||||
|
// cache the texture file name
|
||||||
|
VolatileTexture::addImageTexture(texture, fullpath.c_str(), CCImage::kFmtPng);
|
||||||
|
#endif
|
||||||
|
|
||||||
m_pTextures->setObject(texture, pathKey);
|
m_pTextures->setObject(texture, pathKey);
|
||||||
texture->release();
|
texture->release();
|
||||||
}
|
}
|
||||||
|
@ -434,5 +439,137 @@ CCTexture2D* CCTextureCache::textureForKey(const char* key)
|
||||||
return m_pTextures->objectForKey(string(key));
|
return m_pTextures->objectForKey(string(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CCTextureCache::reloadAllTextures()
|
||||||
|
{
|
||||||
|
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
||||||
|
VolatileTexture::reloadAllTextures();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if CC_ENABLE_CACHE_TEXTTURE_DATA
|
||||||
|
|
||||||
|
std::list<VolatileTexture*> VolatileTexture::textures;
|
||||||
|
bool VolatileTexture::isReloading = false;
|
||||||
|
|
||||||
|
VolatileTexture::VolatileTexture(CCTexture2D *t)
|
||||||
|
: texture(t)
|
||||||
|
, m_bIsString(false)
|
||||||
|
, m_strFileName("")
|
||||||
|
, m_FmtImage(CCImage::kFmtPng)
|
||||||
|
, m_strFontName("")
|
||||||
|
, m_strText("")
|
||||||
|
, m_fFontSize(0.0f)
|
||||||
|
, m_alignment(CCTextAlignmentCenter)
|
||||||
|
{
|
||||||
|
m_size = CCSizeMake(0, 0);
|
||||||
|
textures.push_back(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
VolatileTexture::~VolatileTexture()
|
||||||
|
{
|
||||||
|
textures.remove(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolatileTexture::addImageTexture(CCTexture2D *tt, const char* imageFileName, CCImage::EImageFormat format)
|
||||||
|
{
|
||||||
|
if (isReloading)
|
||||||
|
return;
|
||||||
|
|
||||||
|
VolatileTexture *vt = 0;
|
||||||
|
std::list<VolatileTexture *>::iterator i = textures.begin();
|
||||||
|
while( i != textures.end() )
|
||||||
|
{
|
||||||
|
VolatileTexture *v = *i++;
|
||||||
|
if (v->texture == tt) {
|
||||||
|
vt = v;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!vt)
|
||||||
|
vt = new VolatileTexture(tt);
|
||||||
|
|
||||||
|
vt->m_bIsString = false;
|
||||||
|
vt->m_strFileName = imageFileName;
|
||||||
|
vt->m_FmtImage = format;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolatileTexture::addStringTexture(CCTexture2D *tt, const char* text, CCSize dimensions, CCTextAlignment alignment, const char *fontName, float fontSize)
|
||||||
|
{
|
||||||
|
if (isReloading)
|
||||||
|
return;
|
||||||
|
|
||||||
|
VolatileTexture *vt = 0;
|
||||||
|
std::list<VolatileTexture *>::iterator i = textures.begin();
|
||||||
|
while( i != textures.end() )
|
||||||
|
{
|
||||||
|
VolatileTexture *v = *i++;
|
||||||
|
if (v->texture == tt) {
|
||||||
|
vt = v;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!vt)
|
||||||
|
vt = new VolatileTexture(tt);
|
||||||
|
|
||||||
|
vt->m_bIsString = true;
|
||||||
|
vt->m_size = dimensions;
|
||||||
|
vt->m_strFontName = fontName;
|
||||||
|
vt->m_alignment = alignment;
|
||||||
|
vt->m_fFontSize = fontSize;
|
||||||
|
vt->m_strText = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolatileTexture::removeTexture(CCTexture2D *t) {
|
||||||
|
|
||||||
|
std::list<VolatileTexture *>::iterator i = textures.begin();
|
||||||
|
while( i != textures.end() )
|
||||||
|
{
|
||||||
|
VolatileTexture *vt = *i++;
|
||||||
|
if (vt->texture == t) {
|
||||||
|
delete vt;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolatileTexture::reloadAllTextures()
|
||||||
|
{
|
||||||
|
isReloading = true;
|
||||||
|
|
||||||
|
CCLOG("reload all texture");
|
||||||
|
std::list<VolatileTexture *>::iterator i = textures.begin();
|
||||||
|
|
||||||
|
while( i != textures.end() )
|
||||||
|
{
|
||||||
|
VolatileTexture *vt = *i++;
|
||||||
|
if (vt->m_bIsString)
|
||||||
|
{
|
||||||
|
vt->texture->initWithString(vt->m_strText.c_str(),
|
||||||
|
vt->m_size,
|
||||||
|
vt->m_alignment,
|
||||||
|
vt->m_strFontName.c_str(),
|
||||||
|
vt->m_fFontSize);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CCImage image;
|
||||||
|
CCFileData data(vt->m_strFileName.c_str(), "rb");
|
||||||
|
unsigned long nSize = data.getSize();
|
||||||
|
unsigned char* pBuffer = data.getBuffer();
|
||||||
|
|
||||||
|
if (image.initWithImageData((void*)pBuffer, nSize, vt->m_FmtImage))
|
||||||
|
{
|
||||||
|
vt->texture->initWithImage(&image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
isReloading = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // CC_ENABLE_CACHE_TEXTTURE_DATA
|
||||||
|
|
||||||
}//namespace cocos2d
|
}//namespace cocos2d
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thi
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cocos2d::CCTexture2D::reloadAllTextures();
|
cocos2d::CCTextureCache::reloadAllTextures();
|
||||||
cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
|
cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue