繁体   English   中英

QGLShaderProgram重新编译着色器

[英]QGLShaderProgram recompiling 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;
}

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

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

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

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM