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;
}
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;
}

View file

@ -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 != GL_NO_ERROR) {
qDebug() << "Clearing outstanding GL error to set up QML FBO:" << glewGetErrorString(err);
}
_depthStencil.reset(new Renderbuffer());
Context::Bound(Renderbuffer::Target::Renderbuffer, *_depthStencil)
.Storage(

View file

@ -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));

View file

@ -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();
}

View file

@ -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();
}