//-------------------------------------------------------------- void ofShader::unload() { if(bLoaded) { for(unordered_map<GLenum, GLuint>::const_iterator it = shaders.begin(); it != shaders.end(); ++it) { GLuint shader = it->second; if(shader) { ofLogVerbose("ofShader") << "unload(): detaching and deleting " << nameForType(it->first) << " shader from program " << program; releaseShader(program,shader); } } if (program) { releaseProgram(program); program = 0; } shaders.clear(); } bLoaded = false; }
//-------------------------------------------------------------- void ofShader::unload() { if(bLoaded) { for(map<GLenum, GLuint>::const_iterator it = shaders.begin(); it != shaders.end(); ++it) { GLuint shader = it->second; if(shader) { ofLog(OF_LOG_VERBOSE, "Detaching and deleting shader of type " + nameForType(it->first)); releaseShader(program,shader); } } if (program) { releaseProgram(program); program = 0; } shaders.clear(); } bLoaded = false; }
ProgramPipeline::~ProgramPipeline() { if (0 == id()) { for (auto & program : m_programs) { program->deregisterListener(this); } } else { for (auto program : std::set<Program *>(m_programs)) { releaseProgram(program); } } while (!m_programSubjects.empty()) { // calls removeSubject (*m_programSubjects.begin())->deregisterListener(this); } }