在OpenGL ES 2.0中GLSL是否支持内置变量如gl_Normal gl_Vertex?

时间:2012-02-17 10:31:21

标签: opengl-es glsl shader

我是OpenGL ES2.0和GLSL的新手,我想使用着色器来处理图像。当我在Xcode中编码时,我直接使用了内置变量,例如gl_Normalgl_Vertex,并且没有在着色器的开头声明它们。最后,我收到了一条错误消息:

  

使用未声明的标识符gl_Normal。为什么呢?

1 个答案:

答案 0 :(得分:5)

  

使用未声明的标识符gl_Normal。为什么呢?

在OpenGL-ES 2中,跟随其脚步OpenGL-3核心,不再有预定义的着色器输入变量。 OpenGL-4甚至完成了预定义的着色器输出。

相反,您需要定义自己的输入和输出。每个输入或输出变量分配一个所谓的位置。由OpenGL隐式提供,可由glGetAttribLocation检索,或由程序员使用location存储限定符属性或glBindAttribLocation函数显式提取。输出由片段数据位置类似地分配。