GLSL:使用未声明的标识符' gl_FragData'

时间:2015-10-20 16:20:12

标签: macos qt opengl glsl

我正在调试一个非常大的项目着色树,在该项目中作者使用glsl文件来着色树,但是我在编译glsl文件时遇到了麻烦:

以下是错误日志:

%

Graph40.vert.glsl:

compile: code/trees/TreeRender/Shader/Graph40.vert.glsl
    ERROR: 0:4: '' : syntax error: #version
    ERROR: 0:15: 'layout' : syntax error: syntax error

另一个错误日志:

 #version 120 core  //the original file use version 400

#define VERT_POSITION   0
#define VERT_NORMAL     1
#define VERT_COLOR      2
#define VERT_TEXTURE    3

uniform mat4x4 matModel;
uniform mat4x4 matView;
uniform mat4x4 matProjection;

layout(location = VERT_POSITION) in vec4 Position;
layout(location = VERT_NORMAL)   in vec4 Normal;
layout(location = VERT_COLOR)    in vec4 Color;
layout(location = VERT_TEXTURE)  in vec4 Texture;

out vec4 VertPosition;
out vec4 VertNormal;
out vec4 VertColor;
out vec4 VertTexture;

void main()
{      
    VertPosition = Position; 
    VertNormal   = Normal;
    VertColor    = Color;
    VertTexture  = Texture;

    gl_Position = matProjection * matView * matModel * vec4(Position.xyz, 1);
}

Default.vert.glsl:

compile: code/trees/TreeRender/Shader/Default.vert.glsl
ERROR: 0:11: 'matModel' : syntax error: syntax error

我试图谷歌错误,但没有找到可行的解决方案。

我使用mac osx,xcode 7.0,OpenGL和glut都是默认版本。 Glew版本是1.13.0。

是否因为该版本与作者使用的原始版本不匹配?因为我检查了原始版本,他使用了GLEW 1.9.0和GLUT 3.7.6。

/////更新//////

原始glsl文件包含:

#define VERT_POSITION   0
#define VERT_NORMAL     1
#define VERT_COLOR      2
#define VERT_TEXTURE    3

uniform mat4x4 matModel;
uniform mat4x4 matView;
uniform mat4x4 matProjection;

layout(location = VERT_POSITION) in vec4 Position;
layout(location = VERT_NORMAL)   in vec4 Normal;
layout(location = VERT_COLOR)    in vec4 Color;
layout(location = VERT_TEXTURE)  in vec4 Texture;

out vec4 VertPosition;
out vec4 VertNormal;
out vec4 VertColor;
out vec4 VertTexture;

void main()
{      
    VertPosition = Position; 
    VertNormal   = Normal;
    VertColor    = Color;
    VertTexture  = Texture;

    gl_Position = matProjection * matView * matModel * vec4(Position.xyz, 1);
}

但会出现错误:

#version 400 core 

所以我评论了这一行。但其他错误仍然存​​在。

我检查了我的OpenGL版本,使用OpenGL Extension查看器,它在我的Mac中的4.1,但是也支持早于此版本的版本,也应该可以使用。但是当我改为#version 410核心时,它有同样的错误,说410不受支持。

///////////更新////////////

原来,支持的版本mac不是我的上下文使用的版本。我使用GL_VERSION在我的代码中打印,它是2.1我使用的。根据[this] [1],现在我已经变成了4.1。但仍有错误:

ERROR: 0:4: '' :  version '400' is not supported
ERROR: 0:4: '' : syntax error: #version

DefaultLight.frag.glsl:

trees/TreeRender/Shader/DefaultDepth.frag.glsl
helloERROR: 0:20: Use of undeclared identifier 'gl_FragData'

1 个答案:

答案 0 :(得分:2)

版本120不支持核心配置文件(仅限OpenGL 3.2+) 布局规则器也仅在OpenGL 3.2 +

中可用