Fixed ShaderComposer::releaseGLObjects(State*) const method as it's const was missing.

Rewrote the ShaderComposer::releaseGLObjects() const method to pass on the releaseGLObjects() calls to any associated Program or Shader objects.
This commit is contained in:
Robert Osfield 2016-04-18 20:46:45 +01:00
parent 29ce4f616d
commit 653af27d02
2 changed files with 15 additions and 4 deletions

View File

@ -39,7 +39,7 @@ class OSG_EXPORT ShaderComposer : public osg::Object
virtual osg::Shader* composeMain(const Shaders& shaders); virtual osg::Shader* composeMain(const Shaders& shaders);
virtual void addShaderToProgram(Program* program, const Shaders& shaders); virtual void addShaderToProgram(Program* program, const Shaders& shaders);
void releaseGLObjects(osg::State* state); virtual void releaseGLObjects(osg::State* state) const;
protected: protected:

View File

@ -37,10 +37,21 @@ ShaderComposer::~ShaderComposer()
OSG_INFO<<"ShaderComposer::~ShaderComposer() "<<this<<std::endl; OSG_INFO<<"ShaderComposer::~ShaderComposer() "<<this<<std::endl;
} }
void ShaderComposer::releaseGLObjects(osg::State* state) void ShaderComposer::releaseGLObjects(osg::State* state) const
{ {
_programMap.clear(); for(ProgramMap::const_iterator itr = _programMap.begin();
_shaderMainMap.clear(); itr != _programMap.end();
++itr)
{
itr->second->releaseGLObjects(state);
}
for(ShaderMainMap::const_iterator itr = _shaderMainMap.begin();
itr != _shaderMainMap.end();
++itr)
{
itr->second->releaseGLObjects(state);
}
} }
osg::Program* ShaderComposer::getOrCreateProgram(const ShaderComponents& shaderComponents) osg::Program* ShaderComposer::getOrCreateProgram(const ShaderComponents& shaderComponents)