surface->create();
if (!surface->isValid()) {
fprintf(stderr, "ERROR: surface not valid!\n");
- exit(1);
+ abort();
}
return surface;
}
surface->create();
if (!surface->isValid()) {
fprintf(stderr, "ERROR: surface not valid!\n");
- exit(1);
+ abort();
}
return surface;
}
{
QOpenGLContext *context = new QOpenGLContext;
context->setShareContext(global_share_widget->context()->contextHandle());
- context->setFormat(surface->format());
+
+ // Qt has a bug (QTBUG-76299) where, when using EGL, the surface ignores
+ // the requested OpenGL context version and just becomes 2.0. Mesa honors
+ // this and gives us a 3.0 compatibility context, but then has a bug related
+ // to its shader cache (Mesa bug #110872) that causes spurious linker failures
+ // when we need to re-link a Movit shader in the same context. However,
+ // the surface itself doesn't use the OpenGL version in its format for anything,
+ // so we can just override it and get a proper context.
+ QSurfaceFormat fmt = surface->format();
+ fmt.setProfile(QSurfaceFormat::CoreProfile);
+ fmt.setMajorVersion(4);
+ fmt.setMinorVersion(5);
+ context->setFormat(fmt);
+
context->create();
return context;
}