2012-02-17 64 views

回答

5

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

在OpenGL-ES 2中,在OpenGL-3的核心脚步中,不再有预定义的着色器输入变量。 OpenGL-4甚至没有使用预定义的着色器输出。

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

+0

从技术上讲,ES2在GL3之前有很大的优势。最好说GL 3是基于ES 2的,但即使这样也是不正确的。 – 2012-02-17 15:37:36

+0

@NicolBolas:IIRC OpenGL-3和OpenGL-ES 2是并行开发的,OpenGL-3需要更长的时间才能完成。毕竟像兼容性配置文件等必须包含在规范中。 – datenwolf 2012-02-17 16:16:49

+0

这不是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