mirror of https://github.com/axmolengine/axmol.git
fixed #1139: fix the bug that screen becomes black when backing to foreground on Android
This commit is contained in:
parent
1fe71210ed
commit
04c0d794af
|
@ -4,6 +4,8 @@
|
||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
#include <android/log.h>
|
#include <android/log.h>
|
||||||
|
|
||||||
|
#include "HelloWorldScene.h"
|
||||||
|
|
||||||
#define LOG_TAG "main"
|
#define LOG_TAG "main"
|
||||||
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
|
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
|
||||||
|
|
||||||
|
@ -34,8 +36,11 @@ void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thi
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cocos2d::CCTextureCache::reloadAllTextures();
|
ccDrawInit();
|
||||||
|
ccGLInvalidateStateCache();
|
||||||
cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
|
cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
|
||||||
|
CCShaderCache::sharedShaderCache()->reloadDefaultShaders();
|
||||||
|
cocos2d::CCTextureCache::reloadAllTextures();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,11 +57,18 @@ static void lazy_init( void )
|
||||||
shader_ = CCShaderCache::sharedShaderCache()->programForKey(kCCShader_Position_uColor);
|
shader_ = CCShaderCache::sharedShaderCache()->programForKey(kCCShader_Position_uColor);
|
||||||
|
|
||||||
colorLocation_ = glGetUniformLocation( shader_->getProgram(), "u_color");
|
colorLocation_ = glGetUniformLocation( shader_->getProgram(), "u_color");
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
pointSizeLocation_ = glGetUniformLocation( shader_->getProgram(), "u_pointSize");
|
pointSizeLocation_ = glGetUniformLocation( shader_->getProgram(), "u_pointSize");
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// When back to foreground on android, we want to it to inilialize again
|
||||||
|
void ccDrawInit()
|
||||||
|
{
|
||||||
|
initialized = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ccDrawPoint( const CCPoint& point )
|
void ccDrawPoint( const CCPoint& point )
|
||||||
|
@ -132,11 +139,16 @@ void ccDrawLine( const CCPoint& origin, const CCPoint& destination )
|
||||||
};
|
};
|
||||||
|
|
||||||
shader_->use();
|
shader_->use();
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
shader_->setUniformForModelViewProjectionMatrix();
|
shader_->setUniformForModelViewProjectionMatrix();
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
shader_->setUniformLocationWith4fv(colorLocation_, (GLfloat*) &color_.r, 1);
|
shader_->setUniformLocationWith4fv(colorLocation_, (GLfloat*) &color_.r, 1);
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
|
|
||||||
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
|
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
|
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
glDrawArrays(GL_LINES, 0, 2);
|
glDrawArrays(GL_LINES, 0, 2);
|
||||||
|
|
||||||
CC_INCREMENT_GL_DRAWS(1);
|
CC_INCREMENT_GL_DRAWS(1);
|
||||||
|
|
|
@ -49,6 +49,9 @@ THE SOFTWARE.
|
||||||
|
|
||||||
NS_CC_BEGIN
|
NS_CC_BEGIN
|
||||||
|
|
||||||
|
/** initlialize context */
|
||||||
|
void CC_DLL ccDrawInit();
|
||||||
|
|
||||||
/** draws a point given x and y coordinate measured in points */
|
/** draws a point given x and y coordinate measured in points */
|
||||||
void CC_DLL ccDrawPoint( const CCPoint& point );
|
void CC_DLL ccDrawPoint( const CCPoint& point );
|
||||||
|
|
||||||
|
|
|
@ -140,6 +140,10 @@ public:
|
||||||
/** returns the program error log */
|
/** returns the program error log */
|
||||||
const char* programLog();
|
const char* programLog();
|
||||||
|
|
||||||
|
// reload all shaders, this function is designed for android
|
||||||
|
// when opengl context lost, so don't call it.
|
||||||
|
void reset();
|
||||||
|
|
||||||
inline const GLuint getProgram() { return m_uProgram; }
|
inline const GLuint getProgram() { return m_uProgram; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -52,6 +52,9 @@ public:
|
||||||
/** loads the default shaders */
|
/** loads the default shaders */
|
||||||
void loadDefaultShaders();
|
void loadDefaultShaders();
|
||||||
|
|
||||||
|
/** reload the default shaders */
|
||||||
|
void reloadDefaultShaders();
|
||||||
|
|
||||||
/** returns a GL program for a given key */
|
/** returns a GL program for a given key */
|
||||||
CCGLProgram * programForKey(const char* key);
|
CCGLProgram * programForKey(const char* key);
|
||||||
|
|
||||||
|
@ -60,6 +63,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool init();
|
bool init();
|
||||||
|
void loadDefaultShader(CCGLProgram *program, int type);
|
||||||
|
|
||||||
CCDictionary* m_pPrograms;
|
CCDictionary* m_pPrograms;
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ CCGLProgram::CCGLProgram()
|
||||||
|
|
||||||
CCGLProgram::~CCGLProgram()
|
CCGLProgram::~CCGLProgram()
|
||||||
{
|
{
|
||||||
CCLOGINFO("cocos2d: deallocing 0x%X", this);
|
CCLOGINFO("cocos2d: %s %d deallocing 0x%X", __FUNCTION__, __LINE__, this);
|
||||||
|
|
||||||
// there is no need to delete the shaders. They should have been already deleted.
|
// there is no need to delete the shaders. They should have been already deleted.
|
||||||
CCAssert( m_uVertShader == 0, "Vertex Shaders should have been already deleted");
|
CCAssert( m_uVertShader == 0, "Vertex Shaders should have been already deleted");
|
||||||
|
@ -79,6 +79,7 @@ CCGLProgram::~CCGLProgram()
|
||||||
bool CCGLProgram::initWithVertexShaderByteArray(const GLchar* vShaderByteArray, const GLchar* fShaderByteArray)
|
bool CCGLProgram::initWithVertexShaderByteArray(const GLchar* vShaderByteArray, const GLchar* fShaderByteArray)
|
||||||
{
|
{
|
||||||
m_uProgram = glCreateProgram();
|
m_uProgram = glCreateProgram();
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
|
|
||||||
m_uVertShader = m_uFragShader = 0;
|
m_uVertShader = m_uFragShader = 0;
|
||||||
|
|
||||||
|
@ -101,12 +102,15 @@ bool CCGLProgram::initWithVertexShaderByteArray(const GLchar* vShaderByteArray,
|
||||||
if( m_uVertShader ) {
|
if( m_uVertShader ) {
|
||||||
glAttachShader(m_uProgram, m_uVertShader);
|
glAttachShader(m_uProgram, m_uVertShader);
|
||||||
}
|
}
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
|
|
||||||
if( m_uFragShader ) {
|
if( m_uFragShader ) {
|
||||||
glAttachShader(m_uProgram, m_uFragShader);
|
glAttachShader(m_uProgram, m_uFragShader);
|
||||||
}
|
}
|
||||||
m_pHashForUniforms = NULL;
|
m_pHashForUniforms = NULL;
|
||||||
|
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,9 +136,12 @@ bool CCGLProgram::compileShader(GLuint * shader, GLenum type, const GLchar* sour
|
||||||
|
|
||||||
*shader = glCreateShader(type);
|
*shader = glCreateShader(type);
|
||||||
glShaderSource(*shader, 1, &source, NULL);
|
glShaderSource(*shader, 1, &source, NULL);
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
glCompileShader(*shader);
|
glCompileShader(*shader);
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
|
|
||||||
glGetShaderiv(*shader, GL_COMPILE_STATUS, &status);
|
glGetShaderiv(*shader, GL_COMPILE_STATUS, &status);
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
|
|
||||||
if( ! status ) {
|
if( ! status ) {
|
||||||
if( type == GL_VERTEX_SHADER )
|
if( type == GL_VERTEX_SHADER )
|
||||||
|
@ -169,7 +176,7 @@ bool CCGLProgram::link()
|
||||||
{
|
{
|
||||||
glLinkProgram(m_uProgram);
|
glLinkProgram(m_uProgram);
|
||||||
|
|
||||||
#if DEBUG
|
//#if DEBUG
|
||||||
GLint status;
|
GLint status;
|
||||||
glValidateProgram(m_uProgram);
|
glValidateProgram(m_uProgram);
|
||||||
|
|
||||||
|
@ -184,7 +191,7 @@ bool CCGLProgram::link()
|
||||||
m_uVertShader = m_uFragShader = m_uProgram = 0;
|
m_uVertShader = m_uFragShader = m_uProgram = 0;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
if (m_uVertShader)
|
if (m_uVertShader)
|
||||||
glDeleteShader(m_uVertShader);
|
glDeleteShader(m_uVertShader);
|
||||||
|
@ -373,4 +380,27 @@ void CCGLProgram::setUniformForModelViewProjectionMatrix()
|
||||||
setUniformLocationwithMatrix4fv(m_uUniforms[kCCUniformMVPMatrix], matrixMVP.mat, 1);
|
setUniformLocationwithMatrix4fv(m_uUniforms[kCCUniformMVPMatrix], matrixMVP.mat, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CCGLProgram::reset()
|
||||||
|
{
|
||||||
|
m_uVertShader = m_uFragShader = 0;
|
||||||
|
memset(m_uUniforms, 0, sizeof(m_uUniforms));
|
||||||
|
|
||||||
|
|
||||||
|
// it is already deallocated by android
|
||||||
|
//ccGLDeleteProgram(m_uProgram);
|
||||||
|
m_uProgram = 0;
|
||||||
|
|
||||||
|
|
||||||
|
tHashUniformEntry *current_element, *tmp;
|
||||||
|
|
||||||
|
// Purge uniform hash
|
||||||
|
HASH_ITER(hh, m_pHashForUniforms, current_element, tmp)
|
||||||
|
{
|
||||||
|
HASH_DEL(m_pHashForUniforms, current_element);
|
||||||
|
free(current_element->value);
|
||||||
|
free(current_element);
|
||||||
|
}
|
||||||
|
m_pHashForUniforms = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
NS_CC_END
|
NS_CC_END
|
||||||
|
|
|
@ -31,6 +31,26 @@ THE SOFTWARE.
|
||||||
|
|
||||||
NS_CC_BEGIN
|
NS_CC_BEGIN
|
||||||
|
|
||||||
|
#define kCCShader_PositionTextureColor "ShaderPositionTextureColor"
|
||||||
|
#define kCCShader_PositionTextureColorAlphaTest "ShaderPositionTextureColorAlphaTest"
|
||||||
|
#define kCCShader_PositionColor "ShaderPositionColor"
|
||||||
|
#define kCCShader_PositionTexture "ShaderPositionTexture"
|
||||||
|
#define kCCShader_PositionTexture_uColor "ShaderPositionTexture_uColor"
|
||||||
|
#define kCCShader_PositionTextureA8Color "ShaderPositionTextureA8Color"
|
||||||
|
#define kCCShader_Position_uColor "ShaderPosition_uColor"
|
||||||
|
|
||||||
|
enum {
|
||||||
|
kCCShaderType_PositionTextureColor,
|
||||||
|
kCCShaderType_PositionTextureColorAlphaTest,
|
||||||
|
kCCShaderType_PositionColor,
|
||||||
|
kCCShaderType_PositionTexture,
|
||||||
|
kCCShaderType_PositionTexture_uColor,
|
||||||
|
kCCShaderType_PositionTextureA8Color,
|
||||||
|
kCCShaderType_Position_uColor,
|
||||||
|
|
||||||
|
kCCShaderType_MAX,
|
||||||
|
};
|
||||||
|
|
||||||
static CCShaderCache *_sharedShaderCache = 0;
|
static CCShaderCache *_sharedShaderCache = 0;
|
||||||
|
|
||||||
CCShaderCache* CCShaderCache::sharedShaderCache()
|
CCShaderCache* CCShaderCache::sharedShaderCache()
|
||||||
|
@ -73,118 +93,176 @@ void CCShaderCache::loadDefaultShaders()
|
||||||
{
|
{
|
||||||
// Position Texture Color shader
|
// Position Texture Color shader
|
||||||
CCGLProgram *p = new CCGLProgram();
|
CCGLProgram *p = new CCGLProgram();
|
||||||
|
loadDefaultShader(p, kCCShaderType_PositionTextureColor);
|
||||||
|
|
||||||
|
m_pPrograms->setObject(p, kCCShader_PositionTextureColor);
|
||||||
|
p->release();
|
||||||
|
|
||||||
|
// Position Texture Color alpha test
|
||||||
|
p = new CCGLProgram();
|
||||||
|
loadDefaultShader(p, kCCShaderType_PositionTextureColorAlphaTest);
|
||||||
|
|
||||||
|
m_pPrograms->setObject(p, kCCShader_PositionTextureColorAlphaTest);
|
||||||
|
p->release();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Position, Color shader
|
||||||
|
//
|
||||||
|
p = new CCGLProgram();
|
||||||
|
loadDefaultShader(p, kCCShaderType_PositionColor);
|
||||||
|
|
||||||
|
m_pPrograms->setObject(p, kCCShader_PositionColor);
|
||||||
|
p->release();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Position Texture shader
|
||||||
|
//
|
||||||
|
p = new CCGLProgram();
|
||||||
|
loadDefaultShader(p, kCCShaderType_PositionTexture);
|
||||||
|
|
||||||
|
m_pPrograms->setObject(p, kCCShader_PositionTexture);
|
||||||
|
p->release();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Position, Texture attribs, 1 Color as uniform shader
|
||||||
|
//
|
||||||
|
p = new CCGLProgram();
|
||||||
|
loadDefaultShader(p, kCCShaderType_PositionTexture_uColor);
|
||||||
|
|
||||||
|
m_pPrograms->setObject(p ,kCCShader_PositionTexture_uColor);
|
||||||
|
p->release();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Position Texture A8 Color shader
|
||||||
|
//
|
||||||
|
p = new CCGLProgram();
|
||||||
|
loadDefaultShader(p, kCCShaderType_PositionTextureA8Color);
|
||||||
|
|
||||||
|
m_pPrograms->setObject(p, kCCShader_PositionTextureA8Color);
|
||||||
|
p->release();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Position and 1 color passed as a uniform (to similate glColor4ub )
|
||||||
|
//
|
||||||
|
p = new CCGLProgram();
|
||||||
|
loadDefaultShader(p, kCCShaderType_Position_uColor);
|
||||||
|
|
||||||
|
m_pPrograms->setObject(p, kCCShader_Position_uColor);
|
||||||
|
p->release();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCShaderCache::reloadDefaultShaders()
|
||||||
|
{
|
||||||
|
// reset all programs and reload them
|
||||||
|
|
||||||
|
// Position Texture Color shader
|
||||||
|
CCGLProgram *p = programForKey(kCCShader_PositionTextureColor);
|
||||||
|
p->reset();
|
||||||
|
loadDefaultShader(p, kCCShaderType_PositionTextureColor);
|
||||||
|
|
||||||
|
// Position Texture Color alpha test
|
||||||
|
p = programForKey(kCCShader_PositionTextureColorAlphaTest);
|
||||||
|
p->reset();
|
||||||
|
loadDefaultShader(p, kCCShaderType_PositionTextureColorAlphaTest);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Position, Color shader
|
||||||
|
//
|
||||||
|
p = programForKey(kCCShader_PositionColor);
|
||||||
|
p->reset();
|
||||||
|
loadDefaultShader(p, kCCShaderType_PositionColor);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Position Texture shader
|
||||||
|
//
|
||||||
|
p = programForKey(kCCShader_PositionTexture);
|
||||||
|
p->reset();
|
||||||
|
loadDefaultShader(p, kCCShaderType_PositionTexture);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Position, Texture attribs, 1 Color as uniform shader
|
||||||
|
//
|
||||||
|
p = programForKey(kCCShader_PositionTexture_uColor);
|
||||||
|
p->reset();
|
||||||
|
loadDefaultShader(p, kCCShaderType_PositionTexture_uColor);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Position Texture A8 Color shader
|
||||||
|
//
|
||||||
|
p = programForKey(kCCShader_PositionTextureA8Color);
|
||||||
|
p->reset();
|
||||||
|
loadDefaultShader(p, kCCShaderType_PositionTextureA8Color);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Position and 1 color passed as a uniform (to similate glColor4ub )
|
||||||
|
//
|
||||||
|
p = programForKey(kCCShader_Position_uColor);
|
||||||
|
p->reset();
|
||||||
|
loadDefaultShader(p, kCCShaderType_Position_uColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCShaderCache::loadDefaultShader(CCGLProgram *p, int type)
|
||||||
|
{
|
||||||
|
switch (type) {
|
||||||
|
case kCCShaderType_PositionTextureColor:
|
||||||
p->initWithVertexShaderByteArray(ccPositionTextureColor_vert, ccPositionTextureColor_frag);
|
p->initWithVertexShaderByteArray(ccPositionTextureColor_vert, ccPositionTextureColor_frag);
|
||||||
|
|
||||||
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
|
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
|
||||||
p->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
|
p->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
|
||||||
p->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
|
p->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
|
||||||
|
|
||||||
p->link();
|
break;
|
||||||
p->updateUniforms();
|
case kCCShaderType_PositionTextureColorAlphaTest:
|
||||||
|
|
||||||
m_pPrograms->setObject(p, kCCShader_PositionTextureColor);
|
|
||||||
p->release();
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
|
|
||||||
// Position Texture Color alpha test
|
|
||||||
p = new CCGLProgram();
|
|
||||||
p->initWithVertexShaderByteArray(ccPositionTextureColor_vert, ccPositionTextureColorAlphaTest_frag);
|
p->initWithVertexShaderByteArray(ccPositionTextureColor_vert, ccPositionTextureColorAlphaTest_frag);
|
||||||
|
|
||||||
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
|
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
|
||||||
p->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
|
p->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
|
||||||
p->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
|
p->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
|
||||||
|
|
||||||
p->link();
|
break;
|
||||||
p->updateUniforms();
|
case kCCShaderType_PositionColor:
|
||||||
|
|
||||||
m_pPrograms->setObject(p, kCCShader_PositionTextureColorAlphaTest);
|
|
||||||
p->release();
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
|
|
||||||
//
|
|
||||||
// Position, Color shader
|
|
||||||
//
|
|
||||||
p = new CCGLProgram();
|
|
||||||
p->initWithVertexShaderByteArray(ccPositionColor_vert ,ccPositionColor_frag);
|
p->initWithVertexShaderByteArray(ccPositionColor_vert ,ccPositionColor_frag);
|
||||||
|
|
||||||
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
|
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
|
||||||
p->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
|
p->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
|
||||||
|
|
||||||
p->link();
|
break;
|
||||||
p->updateUniforms();
|
case kCCShaderType_PositionTexture:
|
||||||
|
|
||||||
m_pPrograms->setObject(p, kCCShader_PositionColor);
|
|
||||||
p->release();
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
//
|
|
||||||
// Position Texture shader
|
|
||||||
//
|
|
||||||
p = new CCGLProgram();
|
|
||||||
p->initWithVertexShaderByteArray(ccPositionTexture_vert ,ccPositionTexture_frag);
|
p->initWithVertexShaderByteArray(ccPositionTexture_vert ,ccPositionTexture_frag);
|
||||||
|
|
||||||
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
|
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
|
||||||
p->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
|
p->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
|
||||||
|
|
||||||
p->link();
|
break;
|
||||||
p->updateUniforms();
|
case kCCShaderType_PositionTexture_uColor:
|
||||||
|
|
||||||
m_pPrograms->setObject(p, kCCShader_PositionTexture);
|
|
||||||
p->release();
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
|
|
||||||
//
|
|
||||||
// Position, Texture attribs, 1 Color as uniform shader
|
|
||||||
//
|
|
||||||
p = new CCGLProgram();
|
|
||||||
p->initWithVertexShaderByteArray(ccPositionTexture_uColor_vert, ccPositionTexture_uColor_frag);
|
p->initWithVertexShaderByteArray(ccPositionTexture_uColor_vert, ccPositionTexture_uColor_frag);
|
||||||
|
|
||||||
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
|
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
|
||||||
p->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
|
p->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
|
||||||
|
|
||||||
p->link();
|
break;
|
||||||
p->updateUniforms();
|
case kCCShaderType_PositionTextureA8Color:
|
||||||
|
|
||||||
m_pPrograms->setObject(p ,kCCShader_PositionTexture_uColor);
|
|
||||||
p->release();
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
|
|
||||||
//
|
|
||||||
// Position Texture A8 Color shader
|
|
||||||
//
|
|
||||||
p = new CCGLProgram();
|
|
||||||
p->initWithVertexShaderByteArray(ccPositionTextureA8Color_vert, ccPositionTextureA8Color_frag);
|
p->initWithVertexShaderByteArray(ccPositionTextureA8Color_vert, ccPositionTextureA8Color_frag);
|
||||||
|
|
||||||
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
|
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
|
||||||
p->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
|
p->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
|
||||||
p->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
|
p->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
|
||||||
|
|
||||||
p->link();
|
break;
|
||||||
p->updateUniforms();
|
case kCCShaderType_Position_uColor:
|
||||||
|
|
||||||
m_pPrograms->setObject(p, kCCShader_PositionTextureA8Color);
|
|
||||||
p->release();
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
|
|
||||||
//
|
|
||||||
// Position and 1 color passed as a uniform (to similate glColor4ub )
|
|
||||||
//
|
|
||||||
p = new CCGLProgram();
|
|
||||||
p->initWithVertexShaderByteArray(ccPosition_uColor_vert, ccPosition_uColor_frag);
|
p->initWithVertexShaderByteArray(ccPosition_uColor_vert, ccPosition_uColor_frag);
|
||||||
|
|
||||||
p->addAttribute("aVertex", kCCVertexAttrib_Position);
|
p->addAttribute("aVertex", kCCVertexAttrib_Position);
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CCLOG("cocos2d: %s:%d, error shader type", __FUNCTION__, __LINE__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
p->link();
|
p->link();
|
||||||
p->updateUniforms();
|
p->updateUniforms();
|
||||||
|
|
||||||
m_pPrograms->setObject(p, kCCShader_Position_uColor);
|
|
||||||
p->release();
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
CHECK_GL_ERROR_DEBUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ CCTextureAtlas::CCTextureAtlas()
|
||||||
|
|
||||||
CCTextureAtlas::~CCTextureAtlas()
|
CCTextureAtlas::~CCTextureAtlas()
|
||||||
{
|
{
|
||||||
CCLOGINFO("cocos2d: CCTextureAtlas deallocing %p."this);
|
CCLOGINFO("cocos2d: CCTextureAtlas deallocing %p.", this);
|
||||||
|
|
||||||
CC_SAFE_FREE(m_pQuads);
|
CC_SAFE_FREE(m_pQuads);
|
||||||
CC_SAFE_FREE(m_pIndices);
|
CC_SAFE_FREE(m_pIndices);
|
||||||
|
|
|
@ -34,8 +34,11 @@ void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thi
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cocos2d::CCTextureCache::reloadAllTextures();
|
ccDrawInit();
|
||||||
|
ccGLInvalidateStateCache();
|
||||||
cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
|
cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
|
||||||
|
CCShaderCache::sharedShaderCache()->reloadDefaultShaders();
|
||||||
|
cocos2d::CCTextureCache::reloadAllTextures();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue