更新我的图形驱动程序并尝试从John Chapman的博客运行此示例后,出现此错误代码

Vertex shader failed to compile with the following errors:
ERROR: 0:8: error(#105) #version must occur before any other program statement


因此在所有其他着色器文件中,可以看到第一行如下所示

#ifndef DEF_GLSL_
#define DEF_GLSL_

#version 420

...


我记得几个月前这已经完美地运作了。那么到底发生了什么变化,而#include命令不再有效?

评论

链接页面上有很多代码段,但是似乎都没有字符“#”。您能否显示一个已知错误代码的最小示例?

@trichoplax我不好。我应该解释说,提供了一个可执行文件以便您运行它。我将用一个最小的示例来更新问题。

#1 楼

错误消息提供了以下提示:

#version must occur before any other program statement


是否有理由需要在#version行之前出现前两行?如果不是这样,您可以通过将该行移到开头来避免错误,因为在这种情况下,这些行的操作与它们的顺序无关。

#version必须位于文件的开头不是新要求。我不知道您为什么以前能够运行此代码。

评论


$ \ begingroup $
但是,正如您自己所看到的那样,查普曼未经编辑的算法以这种精确形式给出,我保证它可以在这台计算机上(也有ATI图形卡)完美运行。我认为这可能与Vulkan和更严格的规则有关,但我还无法验证。
$ \ endgroup $
– ealiaj
16年5月29日在20:56

$ \ begingroup $
@green_leaf哦,是的,我毫不怀疑它确实起作用-我只是没有解释为什么。我想这个更改是“更正”,即使尚未证明对您有帮助...
$ \ endgroup $
– trichoplax
16年5月29日在22:10

$ \ begingroup $
ATI非常经典
$ \ endgroup $
–v.oddou
16年5月30日在1:04

$ \ begingroup $
@ v.oddou现在确实已经提到了。看来他们经常这样做。
$ \ endgroup $
– ealiaj
16年5月30日在18:19