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

Posted

技术标签:

【中文标题】如何从 QOpenGLShader 获取着色器版本?【英文标题】:How to get shader version from QOpenGLShader? 【发布时间】:2015-06-05 11:44:02 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于如何从 QOpenGLShader 获取着色器版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中获取像素着色器版本和顶点着色器版本

统一值和 OpenGL 着色器

从 GLSL 着色器中获取常量

从着色器读取数据

如何使用 Nsight 调试(GLSL)着色器?

顶点纹理获取(在顶点着色器中读取纹理)