我是OpenGL ES2.0和GLSL的新手,希望使用着色器处理图像。在Xcode中编码时,我直接使用内置变量如gl_Normal、gl_Vertex,没有在着色器开头声明它们。最后,我收到了错误信息: 使用了未声明的标识符gl_Normal。为什么会这样?
未声明的标识符gl_Normal的使用,为什么会出现这种情况?在OpenGL-ES 2中,以及其后继者OpenGL-3核心版本中,不再有预定义的着色器输入变量。OpenGL-4甚至取消了预定义的着色器输出。相反,您需要定义自己的输入和输出。每个输入或输出变量都被分配一个所谓的位置。可以通过OpenGL隐式分配,并可通过glGetAttribLocation检索,也可以由程序员显式地使用location存储限定符属性或glBindAttribLocation函数进行分配。输出同样也是通过片段数据位置进行分配的。