summaryrefslogtreecommitdiff
path: root/vcl/source/opengl/OpenGLContext.cxx
diff options
context:
space:
mode:
authorMarco Cecchetti <marco.cecchetti@collabora.com>2015-09-13 12:15:13 +0200
committerMarco Cecchetti <marco.cecchetti@collabora.com>2015-09-14 13:00:49 +0200
commit3f73cfdf5c721b250910cd220e54d53e3311840b (patch)
tree866104092fa4d2dd755fe605a460b297056bd71c /vcl/source/opengl/OpenGLContext.cxx
parente6ae8ce99566f59b2011f614160f6bdd4d5034cc (diff)
tdf#93814: Added support for caching shader program binaries.private/mcecchetti/gl-program-binary
Change-Id: I21c844b47282f6b3eec443933a86421a074e24df
Diffstat (limited to 'vcl/source/opengl/OpenGLContext.cxx')
-rw-r--r--vcl/source/opengl/OpenGLContext.cxx34
1 files changed, 10 insertions, 24 deletions
diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx
index 181d5ab38be3..bfbd8a7b9607 100644
--- a/vcl/source/opengl/OpenGLContext.cxx
+++ b/vcl/source/opengl/OpenGLContext.cxx
@@ -1634,22 +1634,24 @@ 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, std::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();
+ }
std::shared_ptr<OpenGLProgram> pProgram = std::make_shared<OpenGLProgram>();
- if( !pProgram->Load( rVertexShader, rFragmentShader, preamble ) )
+ if( !pProgram->Load( rVertexShader, rFragmentShader, preamble, aKey ) )
return NULL;
- maPrograms.insert(std::pair<ProgramKey, std::shared_ptr<OpenGLProgram> >(aKey, pProgram));
+ maPrograms.insert(std::make_pair(aKey, pProgram));
return pProgram.get();
}
@@ -1675,20 +1677,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: */