QOpenGLConfig::Gpu QOpenGLConfig::Gpu::fromContext() { QOpenGLContext *ctx = QOpenGLContext::currentContext(); QScopedPointer<QOpenGLContext> tmpContext; QScopedPointer<QOffscreenSurface> tmpSurface; if (!ctx) { tmpContext.reset(new QOpenGLContext); if (!tmpContext->create()) { qWarning("QOpenGLConfig::Gpu::fromContext: Failed to create temporary context"); return QOpenGLConfig::Gpu(); } tmpSurface.reset(new QOffscreenSurface); tmpSurface->setFormat(tmpContext->format()); tmpSurface->create(); tmpContext->makeCurrent(tmpSurface.data()); } QOpenGLConfig::Gpu gpu; ctx = QOpenGLContext::currentContext(); const GLubyte *p = ctx->functions()->glGetString(GL_VENDOR); if (p) gpu.glVendor = QByteArray(reinterpret_cast<const char *>(p)); return gpu; }