vcl/source/opengl/OpenGLHelper.cxx | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-)
New commits: commit 565a39cf4c1f715e320eed468ed25ea7fa07a512 Author: Tor Lillqvist <t...@collabora.com> Date: Thu Oct 8 13:24:12 2015 +0300 Don't re-read the same glsl files over and over again (cherry picked from commit 048076b8e32a8d348e4b1b4dc72fef860f4498bd) Change-Id: I10b4badaba01630e1a054b3d4d9cc4720822511a Reviewed-on: https://gerrit.libreoffice.org/19246 Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/source/opengl/OpenGLHelper.cxx b/vcl/source/opengl/OpenGLHelper.cxx index 538e467..43317d5 100644 --- a/vcl/source/opengl/OpenGLHelper.cxx +++ b/vcl/source/opengl/OpenGLHelper.cxx @@ -66,6 +66,7 @@ OString loadShader(const OUString& rFilename) { OUString aFileURL = getShaderFolder() + rFilename +".glsl"; osl::File aFile(aFileURL); + SAL_INFO("vcl.opengl", "Reading " << aFileURL); if(aFile.open(osl_File_OpenFlag_Read) == osl::FileBase::E_None) { sal_uInt64 nSize = 0; @@ -85,6 +86,18 @@ OString loadShader(const OUString& rFilename) return OString(); } +OString& getShaderSource(const OUString& rFilename) +{ + static std::unordered_map<OUString, OString, OUStringHash> aMap; + + if (aMap.find(rFilename) == aMap.end()) + { + aMap[rFilename] = loadShader(rFilename); + } + + return aMap[rFilename]; +} + } namespace { @@ -189,8 +202,8 @@ namespace const OString& rPreamble ) { // read shaders source - OString aVertexShaderSource = loadShader( rVertexShaderName ); - OString aFragmentShaderSource = loadShader( rFragmentShaderName ); + OString aVertexShaderSource = getShaderSource( rVertexShaderName ); + OString aFragmentShaderSource = getShaderSource( rFragmentShaderName ); // get info about the graphic device #if defined( SAL_UNX ) && !defined( MACOSX ) && !defined( IOS )&& !defined( ANDROID ) @@ -374,8 +387,8 @@ GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName, GLint ProgramID = glCreateProgram(); // read shaders from file - OString aVertexShaderSource = loadShader(rVertexShaderName); - OString aFragmentShaderSource = loadShader(rFragmentShaderName); + OString aVertexShaderSource = getShaderSource(rVertexShaderName); + OString aFragmentShaderSource = getShaderSource(rFragmentShaderName); GLint bBinaryResult = GL_FALSE;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits