Opengl es OpenGL ES 2.0中的GLSL是否支持内置变量(如gl_法线gl_顶点)?

Opengl es OpenGL ES 2.0中的GLSL是否支持内置变量(如gl_法线gl_顶点)?,opengl-es,glsl,shader,Opengl Es,Glsl,Shader,我是OpenGLES2.0和GLSL的新手,我想使用着色器处理图像。当我在Xcode中编码时,我直接使用了内置变量,例如gl_Normal,gl_Vertex,并且没有在着色器的开头声明它们。最后,我收到一条错误消息: 使用未声明的标识符gl\u Normal。为什么? 使用未声明的标识符是正常的。为什么? 在OpenGL ES 2中,继OpenGL-3核心之后,不再有预定义的着色器输入变量。OpenGL-4甚至取消了预定义的着色器输出 相反,您需要定义自己的输入和输出。每个输入或输出变量都分配

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

使用未声明的标识符
gl\u Normal
。为什么?

使用未声明的标识符是正常的。为什么?

在OpenGL ES 2中,继OpenGL-3核心之后,不再有预定义的着色器输入变量。OpenGL-4甚至取消了预定义的着色器输出


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

从技术上讲,ES2比GL 3早很多。最好说GL 3是基于ES 2的,但即使这样也不正确。@Nicolas:IIRC OpenGL-3和OpenGL ES 2是并行开发的,只是OpenGL-3需要更长的时间才能最终确定。毕竟,像兼容性配置文件之类的东西也必须包含在规范中。这不是OpenGL3.0的历史。GL3.0的历史经历了一个名为“LongsPeak”的过程,这是一个试图完全重写OpenGLAPI的代码名。那次重写尝试花了2年时间,终于成功了。ES 2.0于2007年发布。所以它不能基于GL 3.0,因为3.0在其新的API中仍然是Longs Peak。@Nicolas:好吧,我知道Longs Peak,但不知怎的,我有一个(错误的)记忆,它在更早的时候就失败了。。。不管怎样,我会相应地改变我的答案,谢谢大家的提醒。谢谢大家!非常感谢你!