我刚开始使用GLSL着色器编程,但是我得到了
unrecognized preprocessing directive
只要我将#version
指令放在预处理程序指令头栈中,尽管我在源文件中包含了所有与opengl相关的头文件和文件,
着色器:
#version 400
in vec3 Color;
out vec4 FragColor;
void main()
{
FragColor = vec4(Color, 1.0);
}
如何解决此问题?
答案 0 :(得分:2)
除了注释和空格之外,
#version
指令必须先出现在着色器中。
即使预处理器指令也是非法的(NVIDIA接受它,但AMD不接受!)。
如果这没有帮助,请提供更多信息。例如。 glGetString(GL_VERSION)
和glGetString(GL_VENDOR)
。
参考您的评论,您会错误地了解着色器是如何编译的。着色器无法由C ++编译器编译。将着色器放入文本文件并在运行时加载,然后调用OpenGL的编译方法。
答案 1 :(得分:0)
#version
预处理器命令在c ++编译时运行,glsl
仅基于文本,不应编译。如果程序中的#include "file"
或程序中的.cpp
,它将触发编译和错误。因此,不要将#include
glsl文件放入您的应用程序中。