如何从 QOpenGLShader 获取着色器版本?

How to get shader version from QOpenGLShader?

我正在使用 QT 加载、编译和 link OpenGL 着色器。

我需要根据着色器代码中使用的 GLSL 版本执行特定操作

是否可以在不实际获取着色器源代码并解析它以检测版本行的情况下从 QOpenGLShader 接口恢复版本?

Qt 和 OpenGL 都不允许访问着色器版本(对于 Qt,可能是因为它不知道也不需要)。您剩下的是解析源代码,但是由于 #version 需要单独一行,您应该能够通过拆分和基本字符串操作提取您想要的内容。

这里是读取版本解析源码的解决方法。 它可能对某人有用。

int extractVersion(QOpenGLShader* s){
    assert(s);

    //get the source code
    QString code = QString::fromUtf8(s->sourceCode());

    QRegExp versionExp("#version\s+(\d+)");
    bool b = code.contains(versionExp);

    if (!b) return 100;
    else return versionExp.cap(1).toInt();
}