X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=shared%2Fcontext.cpp;h=db4babbab4c82007158df23d472c9a2d9fcdb2b8;hb=d9ddc0c342d6145c14eef021a58d8969043e24e4;hp=678457101ac39ffdd1056dcdc54f6dce874f4e67;hpb=9ffd4f03f314cc6e0254449593def95c9bc203d6;p=nageru diff --git a/shared/context.cpp b/shared/context.cpp index 6784571..db4babb 100644 --- a/shared/context.cpp +++ b/shared/context.cpp @@ -50,7 +50,20 @@ QOpenGLContext *create_context(const QSurface *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; }