1

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

着色器:

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

我该如何解决这个问题?

4

2 回答 2

2

#version指令必须出现在着色器中的任何其他内容之前,注释和空白除外。

甚至预处理器指令也是非法的(NVIDIA 接受但 AMD 不接受!)。如果这没有帮助,请给我们更多信息。例如glGetString(GL_VERSION)glGetString(GL_VENDOR)

参考您的评论,您会误解着色器的编译方式。C++ 编译器无法编译着色器。将你的着色器放入一个文本文件并在运行时加载它,然后调用 OpenGL 的编译方法。

于 2012-11-08T08:43:55.790 回答
0

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

于 2017-06-01T12:06:12.743 回答