我正在使用QT加载,编译和链接OpenGL着色器。
我需要根据着色器代码中使用的GLSLversion执行特定操作
是否有可能从QOpenGLShader接口恢复版本而不实际获取着色器源代码并解析它以检测版本行?
答案 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();
}