From 64ced6ee049c96e0c473e4bccd5419438878a49a Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Tue, 22 Mar 2016 12:04:24 -0700 Subject: [PATCH 1/5] Add comment explaining bare glGetError --- libraries/gpu/src/gpu/GLBackend.cpp | 7 ++----- plugins/oculus/src/OculusBaseDisplayPlugin.cpp | 2 +- plugins/openvr/src/OpenVrDisplayPlugin.cpp | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/libraries/gpu/src/gpu/GLBackend.cpp b/libraries/gpu/src/gpu/GLBackend.cpp index 14e4397b83..2c25255a80 100644 --- a/libraries/gpu/src/gpu/GLBackend.cpp +++ b/libraries/gpu/src/gpu/GLBackend.cpp @@ -87,18 +87,15 @@ void GLBackend::init() { static std::once_flag once; std::call_once(once, [] { qCDebug(gpulogging) << "GL Version: " << QString((const char*) glGetString(GL_VERSION)); - qCDebug(gpulogging) << "GL Shader Language Version: " << QString((const char*) glGetString(GL_SHADING_LANGUAGE_VERSION)); - qCDebug(gpulogging) << "GL Vendor: " << QString((const char*) glGetString(GL_VENDOR)); - qCDebug(gpulogging) << "GL Renderer: " << QString((const char*) glGetString(GL_RENDERER)); glewExperimental = true; GLenum err = glewInit(); - glGetError(); + glGetError(); // clear the potential error from glewExperimental if (GLEW_OK != err) { - /* Problem: glewInit failed, something is seriously wrong. */ + // glewInit failed, something is seriously wrong. qCDebug(gpulogging, "Error: %s\n", glewGetErrorString(err)); } qCDebug(gpulogging, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION)); diff --git a/plugins/oculus/src/OculusBaseDisplayPlugin.cpp b/plugins/oculus/src/OculusBaseDisplayPlugin.cpp index 9d0838606e..29fc014a64 100644 --- a/plugins/oculus/src/OculusBaseDisplayPlugin.cpp +++ b/plugins/oculus/src/OculusBaseDisplayPlugin.cpp @@ -30,7 +30,7 @@ bool OculusBaseDisplayPlugin::isSupported() const { void OculusBaseDisplayPlugin::customizeContext() { glewExperimental = true; GLenum err = glewInit(); - glGetError(); + glGetError(); // clear the potential error from glewExperimental Parent::customizeContext(); } diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index 843b70807d..0cd9bac15f 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -101,7 +101,7 @@ void OpenVrDisplayPlugin::customizeContext() { std::call_once(once, []{ glewExperimental = true; GLenum err = glewInit(); - glGetError(); + glGetError(); // clear the potential error from glewExperimental }); Parent::customizeContext(); } From 23e3b7e4e3bf93dca28f06b2fb6ac248edc0460d Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Tue, 22 Mar 2016 12:04:58 -0700 Subject: [PATCH 2/5] Rm extra GL logging --- libraries/gl/src/gl/GLWindow.cpp | 8 -------- libraries/gl/src/gl/OffscreenGLCanvas.cpp | 11 ----------- 2 files changed, 19 deletions(-) diff --git a/libraries/gl/src/gl/GLWindow.cpp b/libraries/gl/src/gl/GLWindow.cpp index 78c7666d25..bde33ed170 100644 --- a/libraries/gl/src/gl/GLWindow.cpp +++ b/libraries/gl/src/gl/GLWindow.cpp @@ -39,14 +39,6 @@ GLWindow::~GLWindow() { bool GLWindow::makeCurrent() { bool makeCurrentResult = _context->makeCurrent(this); Q_ASSERT(makeCurrentResult); - - std::call_once(_reportOnce, []{ - qDebug() << "GL Version: " << QString((const char*) glGetString(GL_VERSION)); - qDebug() << "GL Shader Language Version: " << QString((const char*) glGetString(GL_SHADING_LANGUAGE_VERSION)); - qDebug() << "GL Vendor: " << QString((const char*) glGetString(GL_VENDOR)); - qDebug() << "GL Renderer: " << QString((const char*) glGetString(GL_RENDERER)); - }); - Q_ASSERT(_context == QOpenGLContext::currentContext()); return makeCurrentResult; diff --git a/libraries/gl/src/gl/OffscreenGLCanvas.cpp b/libraries/gl/src/gl/OffscreenGLCanvas.cpp index 7406577814..ddca53d2f4 100644 --- a/libraries/gl/src/gl/OffscreenGLCanvas.cpp +++ b/libraries/gl/src/gl/OffscreenGLCanvas.cpp @@ -44,10 +44,6 @@ bool OffscreenGLCanvas::create(QOpenGLContext* sharedContext) { return true; } - qWarning() << "GL Version: " << QString((const char*) glGetString(GL_VERSION)); - qWarning() << "GL Shader Language Version: " << QString((const char*) glGetString(GL_SHADING_LANGUAGE_VERSION)); - qWarning() << "GL Vendor: " << QString((const char*) glGetString(GL_VENDOR)); - qWarning() << "GL Renderer: " << QString((const char*) glGetString(GL_RENDERER)); qWarning() << "Failed to create OffscreenGLCanvas"; return false; @@ -57,13 +53,6 @@ bool OffscreenGLCanvas::makeCurrent() { bool result = _context->makeCurrent(_offscreenSurface); Q_ASSERT(result); - std::call_once(_reportOnce, []{ - qDebug() << "GL Version: " << QString((const char*) glGetString(GL_VERSION)); - qDebug() << "GL Shader Language Version: " << QString((const char*) glGetString(GL_SHADING_LANGUAGE_VERSION)); - qDebug() << "GL Vendor: " << QString((const char*) glGetString(GL_VENDOR)); - qDebug() << "GL Renderer: " << QString((const char*) glGetString(GL_RENDERER)); - }); - #ifdef DEBUG if (result && !_logger) { _logger = new QOpenGLDebugLogger(this); From 362e288be8ef18d466e13db1dbea4bb6a00a7b8b Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Tue, 22 Mar 2016 12:05:24 -0700 Subject: [PATCH 3/5] Rm mystery GL error before qml fbo --- libraries/gl/src/gl/OffscreenQmlSurface.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libraries/gl/src/gl/OffscreenQmlSurface.cpp b/libraries/gl/src/gl/OffscreenQmlSurface.cpp index 0a3598e840..0f7a30a7d8 100644 --- a/libraries/gl/src/gl/OffscreenQmlSurface.cpp +++ b/libraries/gl/src/gl/OffscreenQmlSurface.cpp @@ -187,6 +187,15 @@ bool OffscreenQmlRenderThread::event(QEvent *e) { void OffscreenQmlRenderThread::setupFbo() { using namespace oglplus; _textures.setSize(_size); + + // Before making any ogl calls, clear any outstanding errors + // FIXME: Something upstream is polluting the context with a GL_INVALID_ENUM, + // likely from glewExperimental = true + GLenum err = glGetError(); + if (err != GLEW_OK) { + qDebug() << "Clearing outstanding GL error to set up QML FBO:" << glewGetErrorString(err); + } + _depthStencil.reset(new Renderbuffer()); Context::Bound(Renderbuffer::Target::Renderbuffer, *_depthStencil) .Storage( From 471ac80135cd6d46a33acfd9ee4bb73012c3ad1b Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Tue, 22 Mar 2016 13:24:29 -0700 Subject: [PATCH 4/5] Revert most of "Rm extra GL logging" --- libraries/gl/src/gl/GLWindow.cpp | 8 ++++++++ libraries/gl/src/gl/OffscreenGLCanvas.cpp | 9 +++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/libraries/gl/src/gl/GLWindow.cpp b/libraries/gl/src/gl/GLWindow.cpp index bde33ed170..78c7666d25 100644 --- a/libraries/gl/src/gl/GLWindow.cpp +++ b/libraries/gl/src/gl/GLWindow.cpp @@ -39,6 +39,14 @@ GLWindow::~GLWindow() { bool GLWindow::makeCurrent() { bool makeCurrentResult = _context->makeCurrent(this); Q_ASSERT(makeCurrentResult); + + std::call_once(_reportOnce, []{ + qDebug() << "GL Version: " << QString((const char*) glGetString(GL_VERSION)); + qDebug() << "GL Shader Language Version: " << QString((const char*) glGetString(GL_SHADING_LANGUAGE_VERSION)); + qDebug() << "GL Vendor: " << QString((const char*) glGetString(GL_VENDOR)); + qDebug() << "GL Renderer: " << QString((const char*) glGetString(GL_RENDERER)); + }); + Q_ASSERT(_context == QOpenGLContext::currentContext()); return makeCurrentResult; diff --git a/libraries/gl/src/gl/OffscreenGLCanvas.cpp b/libraries/gl/src/gl/OffscreenGLCanvas.cpp index ddca53d2f4..31bbc84cb2 100644 --- a/libraries/gl/src/gl/OffscreenGLCanvas.cpp +++ b/libraries/gl/src/gl/OffscreenGLCanvas.cpp @@ -44,8 +44,6 @@ bool OffscreenGLCanvas::create(QOpenGLContext* sharedContext) { return true; } - qWarning() << "Failed to create OffscreenGLCanvas"; - return false; } @@ -53,6 +51,13 @@ bool OffscreenGLCanvas::makeCurrent() { bool result = _context->makeCurrent(_offscreenSurface); Q_ASSERT(result); + std::call_once(_reportOnce, []{ + qDebug() << "GL Version: " << QString((const char*) glGetString(GL_VERSION)); + qDebug() << "GL Shader Language Version: " << QString((const char*) glGetString(GL_SHADING_LANGUAGE_VERSION)); + qDebug() << "GL Vendor: " << QString((const char*) glGetString(GL_VENDOR)); + qDebug() << "GL Renderer: " << QString((const char*) glGetString(GL_RENDERER)); + }); + #ifdef DEBUG if (result && !_logger) { _logger = new QOpenGLDebugLogger(this); From e28a876629636c74dbfcd8d27444847146d3ef3a Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Tue, 22 Mar 2016 13:25:43 -0700 Subject: [PATCH 5/5] Compare gl to GL_NO_ERROR, not GLEW_OK --- libraries/gl/src/gl/OffscreenQmlSurface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/gl/src/gl/OffscreenQmlSurface.cpp b/libraries/gl/src/gl/OffscreenQmlSurface.cpp index 0f7a30a7d8..563c590874 100644 --- a/libraries/gl/src/gl/OffscreenQmlSurface.cpp +++ b/libraries/gl/src/gl/OffscreenQmlSurface.cpp @@ -192,7 +192,7 @@ void OffscreenQmlRenderThread::setupFbo() { // FIXME: Something upstream is polluting the context with a GL_INVALID_ENUM, // likely from glewExperimental = true GLenum err = glGetError(); - if (err != GLEW_OK) { + if (err != GL_NO_ERROR) { qDebug() << "Clearing outstanding GL error to set up QML FBO:" << glewGetErrorString(err); }