Merge pull request #7428 from zzmp/fix/clear-qml-gl

Clear GL error before initializing qml to avoid mystery crash
This commit is contained in:
Brad Hefta-Gaub 2016-03-22 13:39:45 -07:00
commit d372ca47ad
5 changed files with 13 additions and 13 deletions

View file

@ -44,12 +44,6 @@ bool OffscreenGLCanvas::create(QOpenGLContext* sharedContext) {
return true; 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; return false;
} }

View file

@ -187,6 +187,15 @@ bool OffscreenQmlRenderThread::event(QEvent *e) {
void OffscreenQmlRenderThread::setupFbo() { void OffscreenQmlRenderThread::setupFbo() {
using namespace oglplus; using namespace oglplus;
_textures.setSize(_size); _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 != GL_NO_ERROR) {
qDebug() << "Clearing outstanding GL error to set up QML FBO:" << glewGetErrorString(err);
}
_depthStencil.reset(new Renderbuffer()); _depthStencil.reset(new Renderbuffer());
Context::Bound(Renderbuffer::Target::Renderbuffer, *_depthStencil) Context::Bound(Renderbuffer::Target::Renderbuffer, *_depthStencil)
.Storage( .Storage(

View file

@ -87,18 +87,15 @@ void GLBackend::init() {
static std::once_flag once; static std::once_flag once;
std::call_once(once, [] { std::call_once(once, [] {
qCDebug(gpulogging) << "GL Version: " << QString((const char*) glGetString(GL_VERSION)); 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 Shader Language Version: " << QString((const char*) glGetString(GL_SHADING_LANGUAGE_VERSION));
qCDebug(gpulogging) << "GL Vendor: " << QString((const char*) glGetString(GL_VENDOR)); qCDebug(gpulogging) << "GL Vendor: " << QString((const char*) glGetString(GL_VENDOR));
qCDebug(gpulogging) << "GL Renderer: " << QString((const char*) glGetString(GL_RENDERER)); qCDebug(gpulogging) << "GL Renderer: " << QString((const char*) glGetString(GL_RENDERER));
glewExperimental = true; glewExperimental = true;
GLenum err = glewInit(); GLenum err = glewInit();
glGetError(); glGetError(); // clear the potential error from glewExperimental
if (GLEW_OK != err) { 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, "Error: %s\n", glewGetErrorString(err));
} }
qCDebug(gpulogging, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION)); qCDebug(gpulogging, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));

View file

@ -30,7 +30,7 @@ bool OculusBaseDisplayPlugin::isSupported() const {
void OculusBaseDisplayPlugin::customizeContext() { void OculusBaseDisplayPlugin::customizeContext() {
glewExperimental = true; glewExperimental = true;
GLenum err = glewInit(); GLenum err = glewInit();
glGetError(); glGetError(); // clear the potential error from glewExperimental
Parent::customizeContext(); Parent::customizeContext();
} }

View file

@ -101,7 +101,7 @@ void OpenVrDisplayPlugin::customizeContext() {
std::call_once(once, []{ std::call_once(once, []{
glewExperimental = true; glewExperimental = true;
GLenum err = glewInit(); GLenum err = glewInit();
glGetError(); glGetError(); // clear the potential error from glewExperimental
}); });
Parent::customizeContext(); Parent::customizeContext();
} }