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

Michael Meeks michael.meeks at collabora.com
Wed Sep 2 11:29:58 PDT 2015


 include/vcl/opengl/OpenGLContext.hxx |    4 ++-
 vcl/source/opengl/OpenGLContext.cxx  |   11 ++++++++++
 vcl/source/opengl/OpenGLHelper.cxx   |   38 +++++++++++++++++++++--------------
 3 files changed, 37 insertions(+), 16 deletions(-)

New commits:
commit 39312d64b5e135159b80f0b65282dd977d31d3d7
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Wed Sep 2 17:28:39 2015 +0100

    Don't call GL debugging methods if there is no context.
    
    Change-Id: Ie6b824953b8ad19fd1b6a146cb6bf52bbb152ef7
    Reviewed-on: https://gerrit.libreoffice.org/18277
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx
index 7012c31..5aa318e 100644
--- a/include/vcl/opengl/OpenGLContext.hxx
+++ b/include/vcl/opengl/OpenGLContext.hxx
@@ -210,9 +210,11 @@ public:
     OpenGLProgram*      GetProgram( const OUString& rVertexShader, const OUString& rFragmentShader, const OString& preamble = "" );
     OpenGLProgram*      UseProgram( const OUString& rVertexShader, const OUString& rFragmentShader, const OString& preamble = "" );
 
+    /// Is this GL context the current context ?
     bool isCurrent();
     static void clearCurrent();
-
+    /// Is there a current GL context ?
+    static bool hasCurrent();
     /// make this GL context current - so it is implicit in subsequent GL calls
     void makeCurrent();
     /// reset the GL context so this context is not implicit in subsequent GL calls.
diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx
index 16e499d..ad31a36 100644
--- a/vcl/source/opengl/OpenGLContext.cxx
+++ b/vcl/source/opengl/OpenGLContext.cxx
@@ -1402,6 +1402,17 @@ bool OpenGLContext::isCurrent()
 #endif
 }
 
+bool OpenGLContext::hasCurrent()
+{
+#if defined( WNT )
+    return wglGetCurrentContext() != NULL;
+#elif defined( MACOSX ) || defined( IOS ) || defined( ANDROID ) || defined(LIBO_HEADLESS)
+    return false;
+#elif defined( UNX )
+    return glXGetCurrentContext() != None;
+#endif
+}
+
 void OpenGLContext::clearCurrent()
 {
     ImplSVData* pSVData = ImplGetSVData();
diff --git a/vcl/source/opengl/OpenGLHelper.cxx b/vcl/source/opengl/OpenGLHelper.cxx
index ad90e1a..d2a917f 100644
--- a/vcl/source/opengl/OpenGLHelper.cxx
+++ b/vcl/source/opengl/OpenGLHelper.cxx
@@ -32,6 +32,7 @@
 #include "opengl/zone.hxx"
 #include "opengl/watchdog.hxx"
 #include <osl/conditn.h>
+#include <vcl/opengl/OpenGLContext.hxx>
 
 #if defined UNX && !defined MACOSX && !defined IOS && !defined ANDROID
 #include "opengl/x11/X11DeviceInfo.hxx"
@@ -690,29 +691,36 @@ void OpenGLHelper::debugMsgPrint(const char *pArea, const char *pFormat, ...)
     va_list aArgs;
     va_start (aArgs, pFormat);
 
-    char pStr[1024];
+    char pStr[1044];
 #ifdef _WIN32
 #define vsnprintf _vsnprintf
 #endif
     vsnprintf(pStr, sizeof(pStr), pFormat, aArgs);
-    pStr[sizeof(pStr)-1] = '\0';
+    pStr[sizeof(pStr)-20] = '\0';
+
+    bool bHasContext = !OpenGLContext::hasCurrent();
+    if (!bHasContext)
+        strcat(pStr, "- no GL context");
 
     SAL_INFO(pArea, pStr);
 
-    OpenGLZone aZone;
+    if (bHasContext)
+    {
+        OpenGLZone aZone;
 
-    if (GLEW_KHR_debug)
-        glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION,
-                             GL_DEBUG_TYPE_OTHER,
-                             1, // one[sic] id is as good as another ?
-                             // GL_DEBUG_SEVERITY_NOTIFICATION for >= GL4.3 ?
-                             GL_DEBUG_SEVERITY_LOW,
-                             strlen(pStr), pStr);
-    else if (GLEW_AMD_debug_output)
-        glDebugMessageInsertAMD(GL_DEBUG_CATEGORY_APPLICATION_AMD,
-                                GL_DEBUG_SEVERITY_LOW_AMD,
-                                1, // one[sic] id is as good as another ?
-                                strlen(pStr), pStr);
+        if (GLEW_KHR_debug)
+            glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION,
+                                 GL_DEBUG_TYPE_OTHER,
+                                 1, // one[sic] id is as good as another ?
+                                 // GL_DEBUG_SEVERITY_NOTIFICATION for >= GL4.3 ?
+                                 GL_DEBUG_SEVERITY_LOW,
+                                 strlen(pStr), pStr);
+        else if (GLEW_AMD_debug_output)
+            glDebugMessageInsertAMD(GL_DEBUG_CATEGORY_APPLICATION_AMD,
+                                    GL_DEBUG_SEVERITY_LOW_AMD,
+                                    1, // one[sic] id is as good as another ?
+                                    strlen(pStr), pStr);
+    }
 
     va_end (aArgs);
 }


More information about the Libreoffice-commits mailing list