在Nvidia驱动程序更新后无法在Qt 5.3上编译GLSL着色器

时间:2015-02-09 19:39:39

标签: qt opengl

我有一些非常基本的openGL着色器,用于编译但在Nvidia驱动程序更新后不再编译。 每个着色器都以以下行开头:     #version 150核心      ....

我曾经使用QGLShaderProgram :: addShaderFromSourceFile方法编译这些着色器

在文档(http://doc.qt.digia.com/qt-5.1/qtgui/qopenglshaderprogram.html#writing-portable-shaders)中提到,为了可重用性,在着色器的开头添加了以下预处理器指令

#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的方法吗? 处理此问题的正确解决方案是什么(如果可能,不重写所有着色器管理代码)

2 个答案:

答案 0 :(得分:3)

我在更新后遇到了完全相同的问题。 我做的事情是:

  • 删除版本定义之前的所有评论。
  • 在版本定义之前删除所有空行和空格。
  • 重建所有内容,甚至是资源文件。

看起来Qt使得shadder编译器更加挑剔!

答案 1 :(得分:0)

对于NVIDIA驱动程序347+,这是Qt 5.3.0,5.3.1,5.3.2,5.4.0 5.4.1 5.4.2的错误, 它将在Qt5.5中修复。 请参阅链接QTBUG 44968