diff options
-rw-r--r-- | include/vcl/opengl/OpenGLContext.hxx | 4 | ||||
-rw-r--r-- | vcl/source/opengl/OpenGLContext.cxx | 11 | ||||
-rw-r--r-- | vcl/source/opengl/OpenGLHelper.cxx | 38 |
3 files changed, 37 insertions, 16 deletions
diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx index cb45973395b4..cf8bd6d0272a 100644 --- a/include/vcl/opengl/OpenGLContext.hxx +++ b/include/vcl/opengl/OpenGLContext.hxx @@ -208,9 +208,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 f3eeb7cfc53f..49feb75368b4 100644 --- a/vcl/source/opengl/OpenGLContext.cxx +++ b/vcl/source/opengl/OpenGLContext.cxx @@ -1314,6 +1314,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 4065ce0590ff..6019850c88fe 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" @@ -686,29 +687,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); } |