CCGLProgram::~CCGLProgram() { #if ND_MOD DEC_CCOBJ("CCGLProgram"); #endif CCLOGINFO("cocos2d: %s %d deallocing 0x%X", __FUNCTION__, __LINE__, this); // 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_uFragShader == 0, "Vertex Shaders should have been already deleted"); if (m_uProgram) { ccGLDeleteProgram(m_uProgram); } 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); }
bool GLProgram::link(void) { glLinkProgram(program_); #if DEBUG GLint status; glValidateProgram(program_); glGetProgramiv(program_, GL_LINK_STATUS, &status); if (status == GL_FALSE) { CCLOG(@"cocos2d: ERROR: Failed to link program: %p", program_); if( vertShader_ ) glDeleteShader( vertShader_ ); if( fragShader_ ) glDeleteShader( fragShader_ ); ccGLDeleteProgram( program_ ); vertShader_ = fragShader_ = program_ = 0; return false; } #endif if (vertShader_) glDeleteShader(vertShader_); if (fragShader_) glDeleteShader(fragShader_); vertShader_ = fragShader_ = 0; return true; }
GLProgram::~GLProgram(void) { char* logchar = this->description(); CCLOGINFO( "cocos2d: deallocing %s", logchar); delete (logchar); if (program_) ccGLDeleteProgram(program_); }
GLProgram::~GLProgram() { CCLOGINFO("cocos2d: %s %d deallocing %p", __FUNCTION__, __LINE__, this); // there is no need to delete the shaders. They should have been already deleted. CCAssert(_vertShader == 0, "Vertex Shaders should have been already deleted"); CCAssert(_fragShader == 0, "Fragment Shaders should have been already deleted"); if (_program) { ccGLDeleteProgram(_program); } tHashUniformEntry *current_element, *tmp; // Purge uniform hash HASH_ITER(hh, _hashForUniforms, current_element, tmp) { HASH_DEL(_hashForUniforms, current_element); free(current_element->value); free(current_element); }