![](/img/trans.png)
[英]OpenGL HeightMap with vertex shader and 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.