当前位置: 首页 > 知识库问答 >
问题:

GLSL:使用未声明的标识符“gl_fragdata”

欧阳俊明
2023-03-14

我正在调试一个非常大的树着色项目,在该项目中,作者使用glsl文件来着色树,但我在编译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);
}
compile: code/trees/TreeRender/Shader/Default.vert.glsl
ERROR: 0:11: 'matModel' : syntax error: syntax error
#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);
}

我使用mac osx,Xcode7.0,OpenGL和glut都是默认版本。Glew版本是1.13.0。

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

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

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

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

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

defaultlight.frag.glsl:

#version 400 core


in vec4 VertPosition;
in vec4 VertNormal;
in vec4 VertColor;
in vec4 VertTexture;

uniform vec3 lightPos;

void main()
{
    float moment1 = gl_FragCoord.z;
    float moment2 = moment1 * moment1;

    gl_FragData[0] = vec4(moment1, moment2, 0.0, 1.0);

}

共有1个答案

万俟光临
2023-03-14

版本120不支持核心配置文件(仅OpenGL 3.2+)布局限定符也仅在OpenGL 3.2+中可用

 类似资料:
  • 任务“:app:ExternalNativeBuildDebug”执行失败。生成命令失败。执行进程/home/raed/android/sdk/cmake/3.10.2.4988404/bin/ninja时出错,参数为{-c/home/raed/androidstudioprojects/simd/app/.CXX/cmake/debug/armeabi-v7a native-lib}ninja:

  • 我正在使用SODA for Java存储和检索Oracle12c DB中的文档。我正在效仿这个例子。 这一例外背后的原因将是什么?

  • 我使用Identityserver3作为MVC应用程序的授权服务器。因此,我的类如下: 这是我的子类: 这是我的: 但是在我的

  • 我最近换了我的ASP。NET应用程序到ASP。NET标识远离Azure的Active Directory配置。我在本地测试时没有问题,但是当我发布到Azure时,我得到以下错误: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier或http://schemas.microsoft.com/accesscontro

  • 本文向大家介绍C#中使用@声明变量示例(逐字标识符),包括了C#中使用@声明变量示例(逐字标识符)的使用技巧和注意事项,需要的朋友参考一下 在C#中,@符号不仅可以加在字符串常量之前,使字符串不作转义之用,还可以加在变量名之前,使变量名与关键字不冲突,这种用法称为“逐字标识符”。请看下面的代码: 这里使用到@的地方有三处,@class,@static和@bool,如果不加@的话,他们都是关键字,编