记录用VS2015目录树自带文件夹存放shader文件的一个小坑

诡异的VS,在识别shader的版本声明的时候,会把#识别为预处理指令。(前提:当且仅当你把shader放进Resource Files时)但如果你只有一个shader,这个问题还不会暴露出来。因为VS可能把它,即#version 330 core解读成了#define version 330 core。然后主程序在编译时根本不会鸟这种文件的。所以一切正常。
但是当你有两个shader的时候,两个#version 330 core,如果真的被解读成了#define version 330 core,那就会出现冲突,发生问题,而且问题会出现在编译前的预处理阶段(由于把shader版本声明中的#误认为是预处理指令的开始标志)。

当然实际情况可能和我们的猜测不太相符,但有一点我们可以明确了。那就是不要在Resource Files里面乱放文件。

自己创建的文件,或引用到的外部文件,一定要单独自定义一个文件夹来存放。比如创建一个和Resource Files在同一层级结构下的Shaders Files文件夹,然后把写好的glsl文件放在这个里面,就完全没有问题。不会出现符号误认的现象。

你可能感兴趣的:(记录用VS2015目录树自带文件夹存放shader文件的一个小坑)