fixed #1466:restore shader when comming to background

This commit is contained in:
minggo 2012-10-18 10:15:46 +08:00
parent f0e7d5a87b
commit bfa7991a94
2 changed files with 22 additions and 0 deletions

View File

@ -150,6 +150,11 @@ ShaderNode::ShaderNode()
{ {
} }
ShaderNode::~ShaderNode()
{
CCNotificationCenter::sharedNotificationCenter()->removeObserver(this, EVNET_COME_TO_FOREGROUND);
}
ShaderNode* ShaderNode::shaderNodeWithVertex(const char *vert, const char *frag) ShaderNode* ShaderNode::shaderNodeWithVertex(const char *vert, const char *frag)
{ {
ShaderNode *node = new ShaderNode(); ShaderNode *node = new ShaderNode();
@ -161,6 +166,10 @@ ShaderNode* ShaderNode::shaderNodeWithVertex(const char *vert, const char *frag)
bool ShaderNode::initWithVertex(const char *vert, const char *frag) bool ShaderNode::initWithVertex(const char *vert, const char *frag)
{ {
CCNotificationCenter::sharedNotificationCenter()->addObserver(this,
callfuncO_selector(ShaderNode::listenBackToForeground),
EVNET_COME_TO_FOREGROUND,
NULL);
loadShaderVertex(vert, frag); loadShaderVertex(vert, frag);
@ -172,9 +181,18 @@ bool ShaderNode::initWithVertex(const char *vert, const char *frag)
setContentSize(CCSizeMake(SIZE_X, SIZE_Y)); setContentSize(CCSizeMake(SIZE_X, SIZE_Y));
setAnchorPoint(ccp(0.5f, 0.5f)); setAnchorPoint(ccp(0.5f, 0.5f));
m_vertFileName = vert;
m_fragFileName = frag;
return true; return true;
} }
void ShaderNode::listenBackToForeground(CCObject *obj)
{
this->setShaderProgram(NULL);
loadShaderVertex(m_vertFileName.c_str(), m_fragFileName.c_str());
}
void ShaderNode::loadShaderVertex(const char *vert, const char *frag) void ShaderNode::loadShaderVertex(const char *vert, const char *frag)
{ {
CCGLProgram *shader = new CCGLProgram(); CCGLProgram *shader = new CCGLProgram();

View File

@ -114,9 +114,11 @@ class ShaderNode : public CCNode
{ {
public: public:
ShaderNode(); ShaderNode();
~ShaderNode();
bool initWithVertex(const char *vert, const char *frag); bool initWithVertex(const char *vert, const char *frag);
void loadShaderVertex(const char *vert, const char *frag); void loadShaderVertex(const char *vert, const char *frag);
void listenBackToForeground(CCObject *obj);
virtual void update(float dt); virtual void update(float dt);
virtual void setPosition(const CCPoint &newPosition); virtual void setPosition(const CCPoint &newPosition);
@ -130,6 +132,8 @@ private:
ccVertex2F m_resolution; ccVertex2F m_resolution;
float m_time; float m_time;
GLuint m_uniformCenter, m_uniformResolution, m_uniformTime; GLuint m_uniformCenter, m_uniformResolution, m_uniformTime;
std::string m_vertFileName;
std::string m_fragFileName;
}; };
class ShaderTestScene : public TestScene class ShaderTestScene : public TestScene