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 *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)
{
CCNotificationCenter::sharedNotificationCenter()->addObserver(this,
callfuncO_selector(ShaderNode::listenBackToForeground),
EVNET_COME_TO_FOREGROUND,
NULL);
loadShaderVertex(vert, frag);
@ -171,10 +180,19 @@ bool ShaderNode::initWithVertex(const char *vert, const char *frag)
setContentSize(CCSizeMake(SIZE_X, SIZE_Y));
setAnchorPoint(ccp(0.5f, 0.5f));
m_vertFileName = vert;
m_fragFileName = frag;
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)
{
CCGLProgram *shader = new CCGLProgram();

View File

@ -114,9 +114,11 @@ class ShaderNode : public CCNode
{
public:
ShaderNode();
~ShaderNode();
bool initWithVertex(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 setPosition(const CCPoint &newPosition);
@ -130,6 +132,8 @@ private:
ccVertex2F m_resolution;
float m_time;
GLuint m_uniformCenter, m_uniformResolution, m_uniformTime;
std::string m_vertFileName;
std::string m_fragFileName;
};
class ShaderTestScene : public TestScene