summaryrefslogtreecommitdiff
path: root/vcl/source/opengl/OpenGLContext.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/source/opengl/OpenGLContext.cxx')
-rw-r--r--vcl/source/opengl/OpenGLContext.cxx37
1 files changed, 12 insertions, 25 deletions
diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx
index 2502a830a4e4..251be21083b4 100644
--- a/vcl/source/opengl/OpenGLContext.cxx
+++ b/vcl/source/opengl/OpenGLContext.cxx
@@ -1725,22 +1725,25 @@ void OpenGLContext::ReleaseFramebuffers()
BindFramebuffer( NULL );
}
-OpenGLProgram* OpenGLContext::GetProgram( const OUString& rVertexShader, const OUString& rFragmentShader, const OString& preamble )
+OpenGLProgram* OpenGLContext::GetProgram( const OUString& rVertexShader, const OUString& rFragmentShader, const rtl::OString& preamble )
{
OpenGLZone aZone;
- ProgramKey aKey( rVertexShader, rFragmentShader, preamble );
+ rtl::OString aKey = OpenGLHelper::GetDigest( rVertexShader, rFragmentShader, preamble );
- std::map< ProgramKey, boost::shared_ptr<OpenGLProgram> >::iterator
- it = maPrograms.find( aKey );
- if( it != maPrograms.end() )
- return it->second.get();
+ if( !aKey.isEmpty() )
+ {
+ ProgramCollection::iterator it = maPrograms.find( aKey );
+ if( it != maPrograms.end() )
+ return it->second.get();
+ }
- boost::shared_ptr<OpenGLProgram> pProgram = boost::make_shared<OpenGLProgram>();
- if( !pProgram->Load( rVertexShader, rFragmentShader, preamble ) )
+ std::shared_ptr<OpenGLProgram> pProgram = std::make_shared<OpenGLProgram>();
+ if( !pProgram->Load( rVertexShader, rFragmentShader, preamble, aKey ) )
return NULL;
- maPrograms.insert(std::pair<ProgramKey, boost::shared_ptr<OpenGLProgram> >(aKey, pProgram));
+ maPrograms.insert(std::make_pair(aKey, pProgram));
+
return pProgram.get();
}
@@ -1766,20 +1769,4 @@ OpenGLProgram* OpenGLContext::UseProgram( const OUString& rVertexShader, const O
return mpCurrentProgram;
}
-inline
-OpenGLContext::ProgramKey::ProgramKey( const OUString& v, const OUString& f, const OString& p )
-: vertexShader( v ), fragmentShader( f ), preamble( p )
-{
-}
-
-inline
-bool OpenGLContext::ProgramKey::operator< ( const ProgramKey& other ) const
-{
- if( vertexShader != other.vertexShader )
- return vertexShader < other.vertexShader;
- if( fragmentShader != other.fragmentShader )
- return fragmentShader < other.fragmentShader;
- return preamble < other.preamble;
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */