簡體   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