2015-06-05 15 views
1

我正在使用QT加載,編譯和鏈接OpenGL着色器。如何從QOpenGLShader獲取着色器版本?

我需要執行的具體操作取決於着色器代碼

使用GLSLversion是否有可能恢復從QOpenGLShader接口的版本,而實際得到的着色器的源代碼,並解析其檢測版本線?

回答

1

Qt和OpenGL都不允許訪問着色器版本(在Qt的情況下,可能是因爲它不知道它並且不需要)。您只需解析源代碼即可,但由於#version需要獨立運行,因此只需分割和基本字符串操作即可提取所需內容。

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