2015-02-09 98 views
2

我有一些非常基本的OpenGL着色器,用於編譯但在Nvidia驅動程序更新後不再編譯。 每個着色器開始於下列行: 的#Version 150芯 ....Nvidia驅動程序更新後無法在Qt 5.3上編譯GLSL着色器

我用於編譯使用QGLShaderProgram :: addShaderFromSourceFile方法

它在文檔(http://doc.qt.digia.com/qt-5.1/qtgui/qopenglshaderprogram.html#writing-portable-shaders)mentionned,對於可重用性的目的的那些着色器繼預處理指令在着色器開始時加入

#define highp 
#define mediump 
#define lowp 

然而,由於驅動程序更新,我有一個編譯錯誤:

error C0204: version directive must be first statement and may not be repeated 

和我着色器源已成爲

#define highp 
#define mediump 
#define lowp 
#version 150 core 
.... 

所以這個問題是很容易理解,但是修復也不是那麼容易。 這是一種防止Qt擁有#define的方法嗎? 什麼是適當的解決方案來處理這個問題(如果可能,不用重寫所有我的着色器管理代碼)

+0

您可以添加您正在使用的確切着色器,以及'log()'報告的確切錯誤日誌,以及控制檯上打印的任何東西嗎? – peppe 2015-02-09 23:15:05

+0

[OpenGL 4.1和Qt 5嚴重渲染問題]的可能重複(http://stackoverflow.com/questions/25858868/serious-rendering-issues-with-opengl-4-1-and-qt-5) – 2015-02-10 03:23:15

+0

感謝你們。是的,這是你提到的問題的重複。 – Zed 2015-02-10 11:35:36

回答

3

我在更新後有完全相同的問題。 我做的事情是:

  • 刪除所有評論之前的版本定義。
  • 刪除版本定義之前的所有空行和空格。
  • 重建一切,甚至是您的資源文件。

看起來像Qt讓沙發編譯器更挑剔!

+0

如果我在#version指令之前刪除註釋,它似乎確實可行。謝謝你的幫助! – Zed 2015-02-10 11:36:38

+0

不客氣! – Nox 2015-02-10 21:48:26

0

這是Qt 5.3.0,5.3.1,5.3.2,5.4.0的錯誤5.4.1 5.4.2對於NVIDIA驅動程序347+, 它將在Qt5.5中修復。 查看鏈接QTBUG 44968