【问题标题】:unable to compile GLSL shaders on Qt 5.3 after Nvidia driver updateNvidia 驱动程序更新后无法在 Qt 5.3 上编译 GLSL 着色器
【发布时间】:2015-06-06 22:21:35
【问题描述】:

我有一些非常基本的 openGL 着色器,这些着色器用于编译,但在 Nvidia 驱动程序更新后不再编译。 每个着色器都以以下行开头: #版本 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的一种方法吗? 处理此问题的正确解决方案是什么(如果可能,无需重写我所有的着色器管理代码)

【问题讨论】:

  • 能否请您添加您正在使用的确切着色器、log() 报告的确切错误日志以及控制台上打印的任何内容?
  • 谢谢你们。是的,它与您提到的问题重复。

标签: qt opengl


【解决方案1】:

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

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

看起来 Qt 让着色器编译器变得更加挑剔!

【讨论】:

  • 如果我在 #version 指令之前删除 cmets,它似乎确实有效。谢谢你的帮助!
【解决方案2】:

这是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2018-07-19
    相关资源
    最近更新 更多