GLSL着色器编程#version头错误:无法识别的预处理指令

时间:2012-11-08 08:27:55

标签: opengl 3d shader fragment-shader vertex-shader

我刚开始使用GLSL着色器编程,但是我得到了 unrecognized preprocessing directive 只要我将#version指令放在预处理程序指令头栈中,尽管我在源文件中包含了所有与opengl相关的头文件和文件,

着色器:

#version 400
in vec3 Color; 
out vec4 FragColor; 
void main() 
{ 
    FragColor = vec4(Color, 1.0); 
}

如何解决此问题?

2 个答案:

答案 0 :(得分:2)

  

除了注释和空格之外,#version指令必须先出现在着色器中。

即使预处理器指令也是非法的(NVIDIA接受它,但AMD不接受!)。 如果这没有帮助,请提供更多信息。例如。 glGetString(GL_VERSION)glGetString(GL_VENDOR)

参考您的评论,您会错误地了解着色器是如何编译的。着色器无法由C ++编译器编译。将着色器放入文本文件并在运行时加载,然后调用OpenGL的编译方法。

答案 1 :(得分:0)

#version预处理器命令在c ++编译时运行,glsl仅基于文本,不应编译。如果程序中的#include "file"或程序中的.cpp,它将触发编译和错误。因此,不要将#include glsl文件放入您的应用程序中。