QGLShaderProgram重新编译着色器

时间:2015-01-13 07:12:01

标签: qt opengl shader

我有一个使用QT的GLShaderProgram类的工作GLSL片段着色器。它在第一次编译着色器时工作得很好。

当我尝试使用下面的代码重新编译着色器(在运行时)时,没有编译错误(“Shader重新编译”),但着色器显示不会改变。发生了什么事?

delete SHADER; // free up the existing shader
SHADER = new QGLShaderProgram(context);
if (SHADER->addShaderFromSourceFile(QGLShader::Fragment, ":/shaders/test_shader1.frag")) {
    if (!SHADER->link()) {
        qDebug() << SHADER->log().trimmed();
        delete SHADER;
    }
    qDebug() << "Shader recompiled";
} else {
    qDebug() << SHADER->log().trimmed();
    delete SHADER;
}

1 个答案:

答案 0 :(得分:3)

找出问题所在。我正在使用QT资源(http://doc.qt.io/qt-5/resources.html)通过相对路径加载着色器文件。据我所知,QT在第一次访问资源时会缓存资源的内容,因此更改资源的内容不会更新程序。

通过引用文件的绝对路径,重新加载着色器现在可以正常工作。

addShaderFromSourceFile(QGLShader::Fragment, "/home/eric/test_shader1.frag")

干杯!