Qt中关于opengl的问题

1、检测显卡驱动是否存在,不存在的情况,再去使用Qt::AA_UseSoftwareOpenGL选项

bool _isNotInstalledVideoDriver() {
    QProcess *wmic = new QProcess();
    wmic->setProcessChannelMode(QProcess::MergedChannels);

    QObject::connect(wmic, &QProcess::readyReadStandardOutput, [wmic]() {
        QTextStream stream(wmic->readAllStandardOutput());
        QString s;
        while (stream.readLineInto(&s)) {
            QString line = s.trimmed();
            if (line.isEmpty())
                continue;
            if (line.startsWith("InfFilename", Qt::CaseSensitive)) {
                infName = line.split("=")[1];
            } else if (line.startsWith("Name", Qt::CaseSensitive)) {
                drvName = line.split("=")[1];
            }
        }
    });
    wmic->start("wmic path win32_videoController get InfFilename,name /format:list");
    wmic->waitForFinished();
    return infName.startsWith("display.inf");
}

2、检测opengl版本

    QOpenGLContext ctx;
    ctx.create();
    QSurfaceFormat format = ctx.format();

    auto major = format.majorVersion();
    auto minor = format.minorVersion();
    if (major < 2) {
        QCoreApplication::setAttribute(Qt::AA_UseOpenGLES, false);
        QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL, true);
    }

注意:这些Attribute,要在QGuiApplication 构造之前设置才会生效!!!


版权声明:本文为mvmmvm原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。