[Libreoffice-commits] core.git: Branch 'libreoffice-5-0-3' - vcl/source

Tor Lillqvist tml at collabora.com
Mon Oct 12 05:21:55 PDT 2015


 vcl/source/opengl/OpenGLHelper.cxx |   21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

New commits:
commit 565a39cf4c1f715e320eed468ed25ea7fa07a512
Author: Tor Lillqvist <tml at 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 <vmiklos at collabora.co.uk>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at 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;


More information about the Libreoffice-commits mailing list