Nvidia 驱动程序更新后无法在 Qt 5.3 上编译 GLSL 着色器
unable to compile GLSL shaders on Qt 5.3 after Nvidia driver update
我有一些非常基本的 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 的方法吗?
处理此问题的正确解决方案是什么(如果可能,无需重写我所有的着色器管理代码)
更新后我遇到了完全相同的问题。
我做的事情是:
- 删除版本定义前的所有注释。
- 删除版本定义前的所有空行和 space。
- 重建一切,甚至你的资源文件。
看起来 Qt 使 shadder 编译器更加挑剔!
这是 Qt 5.3.0, 5.3.1, 5.3.2, 5.4.0 5.4.1 5.4.2 for NVIDIA drivers 347+ 的错误,
它会在 Qt5.5 中修复。
见 link QTBUG 44968
我有一些非常基本的 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 的方法吗? 处理此问题的正确解决方案是什么(如果可能,无需重写我所有的着色器管理代码)
更新后我遇到了完全相同的问题。 我做的事情是:
- 删除版本定义前的所有注释。
- 删除版本定义前的所有空行和 space。
- 重建一切,甚至你的资源文件。
看起来 Qt 使 shadder 编译器更加挑剔!
这是 Qt 5.3.0, 5.3.1, 5.3.2, 5.4.0 5.4.1 5.4.2 for NVIDIA drivers 347+ 的错误, 它会在 Qt5.5 中修复。 见 link QTBUG 44968