3
我是OpenGL ES2.0和GLSL的新手,我想使用着色器来处理图像。当我用Xcode编码时,我直接使用了内置变量,如gl_Normal
,gl_Vertex
,并没有在着色器的开头声明它们。最后,我收到一条错误消息:内置变量,如GLSL在OpenGL ES 2.0中支持的gl_Normal gl_Vertex?
使用未声明的标识符
gl_Normal
。为什么?
我是OpenGL ES2.0和GLSL的新手,我想使用着色器来处理图像。当我用Xcode编码时,我直接使用了内置变量,如gl_Normal
,gl_Vertex
,并没有在着色器的开头声明它们。最后,我收到一条错误消息:内置变量,如GLSL在OpenGL ES 2.0中支持的gl_Normal gl_Vertex?
使用未声明的标识符
gl_Normal
。为什么?
使用未声明的标识符gl_Normal。为什么?
在OpenGL-ES 2中,在OpenGL-3的核心脚步中,不再有预定义的着色器输入变量。 OpenGL-4甚至没有使用预定义的着色器输出。
相反,您需要定义自己的输入和输出。每个输入或输出变量分配一个所谓的位置。可以隐式地通过OpenGL,并且可以由glGetAttribLocation
检索,或者由程序员使用location
存储限定符属性或glBindAttribLocation
函数明确地检索。输出类似地由片段数据位置分配。
从技术上讲,ES2在GL3之前有很大的优势。最好说GL 3是基于ES 2的,但即使这样也是不正确的。 – 2012-02-17 15:37:36
@NicolBolas:IIRC OpenGL-3和OpenGL-ES 2是并行开发的,OpenGL-3需要更长的时间才能完成。毕竟像兼容性配置文件等必须包含在规范中。 – datenwolf 2012-02-17 16:16:49
这不是OpenGL 3.0的历史。 GL 3.0的历史经历了一个名为“Longs Peak”的努力,它是试图完全重写OpenGL API的代码名称。该重写尝试花了2年时间,最终在2008年初失败(http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Main=47703&Number=243307#Post243307)。 ES 2.0在2007年发布。因此它*不能基于GL 3.0,因为3.0仍然是Longs Peak的新API。 – 2012-02-17 16:37:47