コード例 #1
0
//--------------------------------------------------------------
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;
}
コード例 #2
0
//--------------------------------------------------------------
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;
}
コード例 #3
0
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);
    }
}