diff --git a/libraries/gl/src/gl/Context.cpp b/libraries/gl/src/gl/Context.cpp
index 8acbada5aa..309839808e 100644
--- a/libraries/gl/src/gl/Context.cpp
+++ b/libraries/gl/src/gl/Context.cpp
@@ -23,25 +23,31 @@
 #include <shared/GlobalAppProperties.h>
 #include <GLMHelpers.h>
 #include "GLLogging.h"
-#include "Config.h"
-
-#ifdef Q_OS_WIN
-
-#if defined(DEBUG) || defined(USE_GLES)
-static bool enableDebugLogger = true;
-#else
-static const QString DEBUG_FLAG("HIFI_DEBUG_OPENGL");
-static bool enableDebugLogger = QProcessEnvironment::systemEnvironment().contains(DEBUG_FLAG);
-#endif
-
-#endif
-
 #include "Config.h"
 #include "GLHelpers.h"
 
 using namespace gl;
 
 
+bool Context::enableDebugLogger() {
+#if defined(DEBUG) || defined(USE_GLES)
+    static bool enableDebugLogger = true;
+#else
+    static const QString DEBUG_FLAG("HIFI_DEBUG_OPENGL");
+    static bool enableDebugLogger = QProcessEnvironment::systemEnvironment().contains(DEBUG_FLAG);
+#endif
+    static std::once_flag once;
+    std::call_once(once, [&] {
+        // If the previous run crashed, force GL debug logging on
+        if (qApp->property(hifi::properties::CRASHED).toBool()) {
+            enableDebugLogger = true;
+        }
+    });
+    return enableDebugLogger;
+}
+
+
+
 std::atomic<size_t> Context::_totalSwapchainMemoryUsage { 0 };
 
 size_t Context::getSwapchainMemoryUsage() { return _totalSwapchainMemoryUsage.load(); }
@@ -245,10 +251,6 @@ void Context::create() {
     // Create a temporary context to initialize glew
     static std::once_flag once;
     std::call_once(once, [&] {
-        // If the previous run crashed, force GL debug logging on
-        if (qApp->property(hifi::properties::CRASHED).toBool()) {
-            enableDebugLogger = true;
-        }
         auto hdc = GetDC(hwnd);
         setupPixelFormatSimple(hdc);
         auto glrc = wglCreateContext(hdc);
@@ -328,7 +330,7 @@ void Context::create() {
         contextAttribs.push_back(WGL_CONTEXT_CORE_PROFILE_BIT_ARB);
 #endif
         contextAttribs.push_back(WGL_CONTEXT_FLAGS_ARB);
-        if (enableDebugLogger) {
+        if (enableDebugLogger()) {
             contextAttribs.push_back(WGL_CONTEXT_DEBUG_BIT_ARB);
         } else {
             contextAttribs.push_back(0);
@@ -350,7 +352,7 @@ void Context::create() {
     if (!makeCurrent()) {
         throw std::runtime_error("Could not make context current");
     }
-    if (enableDebugLogger) {
+    if (enableDebugLogger()) {
         glDebugMessageCallback(debugMessageCallback, NULL);
         glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB);
     }
diff --git a/libraries/gl/src/gl/Context.h b/libraries/gl/src/gl/Context.h
index 4f0747a86f..b6160cbd6c 100644
--- a/libraries/gl/src/gl/Context.h
+++ b/libraries/gl/src/gl/Context.h
@@ -47,6 +47,7 @@ namespace gl {
         Context(const Context& other);
 
     public:
+        static bool enableDebugLogger();
         Context();
         Context(QWindow* window);
         void release();
diff --git a/libraries/gl/src/gl/OffscreenGLCanvas.cpp b/libraries/gl/src/gl/OffscreenGLCanvas.cpp
index 8a476c45ad..380ba085cc 100644
--- a/libraries/gl/src/gl/OffscreenGLCanvas.cpp
+++ b/libraries/gl/src/gl/OffscreenGLCanvas.cpp
@@ -18,6 +18,7 @@
 #include <QtCore/QDebug>
 #include <QtGui/QOffscreenSurface>
 #include <QtGui/QOpenGLContext>
+#include <QtGui/QOpenGLDebugLogger>
 
 #include "Context.h"
 #include "GLHelpers.h"
@@ -68,9 +69,32 @@ bool OffscreenGLCanvas::create(QOpenGLContext* sharedContext) {
     }
 #endif
 
+    if (gl::Context::enableDebugLogger()) {
+        _context->makeCurrent(_offscreenSurface);
+        QOpenGLDebugLogger *logger = new QOpenGLDebugLogger(this);
+        connect(logger, &QOpenGLDebugLogger::messageLogged, this, &OffscreenGLCanvas::onMessageLogged);
+        logger->initialize();
+        logger->enableMessages();
+        logger->startLogging(QOpenGLDebugLogger::SynchronousLogging);
+        _context->doneCurrent();
+    }
+
     return true;
 }
 
+void OffscreenGLCanvas::onMessageLogged(const QOpenGLDebugMessage& debugMessage) {
+    auto severity = debugMessage.severity(); 
+    switch (severity) {
+    case QOpenGLDebugMessage::NotificationSeverity:
+    case QOpenGLDebugMessage::LowSeverity:
+        return;
+    default:
+        break;
+    }
+    qDebug(glLogging) << debugMessage;
+    return;
+}
+
 bool OffscreenGLCanvas::makeCurrent() {
     bool result = _context->makeCurrent(_offscreenSurface);
     std::call_once(_reportOnce, []{
diff --git a/libraries/gl/src/gl/OffscreenGLCanvas.h b/libraries/gl/src/gl/OffscreenGLCanvas.h
index 583aa7c60f..be0e0d9678 100644
--- a/libraries/gl/src/gl/OffscreenGLCanvas.h
+++ b/libraries/gl/src/gl/OffscreenGLCanvas.h
@@ -17,7 +17,7 @@
 
 class QOpenGLContext;
 class QOffscreenSurface;
-class QOpenGLDebugLogger;
+class QOpenGLDebugMessage;
 
 class OffscreenGLCanvas : public QObject {
 public:
@@ -32,6 +32,9 @@ public:
     }
     QObject* getContextObject();
     
+private slots:
+    void onMessageLogged(const QOpenGLDebugMessage &debugMessage);
+
 protected:
     std::once_flag _reportOnce;
     QOpenGLContext* _context{ nullptr };
diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp
index db3df34dc5..b56de957d2 100644
--- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp
+++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp
@@ -543,6 +543,7 @@ void OffscreenQmlSurface::cleanup() {
 
 void OffscreenQmlSurface::render() {
 #if !defined(DISABLE_QML)
+
     if (nsightActive()) {
         return;
     }
@@ -565,6 +566,7 @@ void OffscreenQmlSurface::render() {
     glBindTexture(GL_TEXTURE_2D, texture);
     glGenerateMipmap(GL_TEXTURE_2D);
     glBindTexture(GL_TEXTURE_2D, 0);
+    glFinish();
 
 
     {