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

时间:2015-06-05 11:44:03

标签: qt opengl glsl

我正在使用QT加载,编译和链接OpenGL着色器。

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

是否有可能从QOpenGLShader接口恢复版本而不实际获取着色器源代码并解析它以检测版本行?

2 个答案:

答案 0 :(得分:1)

Qt和OpenGL都不能访问着色器版本(在Qt的情况下,可能是因为它不知道它并且不需要)。您只需要解析源代码,但由于#version需要在自己的行上,因此您应该能够通过拆分和基本字符串操作来提取所需内容。

答案 1 :(得分:0)

以下是解析解析源代码的版本的解决方案。 这可能对某人有用。

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();
}