在新版本的OpenGL(3.0和4.0)中,内置顶点属性(如gl_Vertex)将被弃用。实际渲染任何东西的“新方法”是为位置,颜色等指定自己的顶点属性,然后将这些自定义属性绑定到缓冲区。应该如何编写现代OpenGL着色器以便相互兼容?
我的问题是:如何在不紧密耦合渲染代码和着色器的情况下做到这一点?如果我编写一个使用“位置”作为顶点位置的着色器,则使用着色器的主机代码必须知道并将顶点数据作为“位置”传递。如果我想使用不同的着色器来写入“vertex_pos”中的顶点数据,我必须首先重写该着色器,或者修改我的主机代码来将顶点数据发送为“vertex_pos”。
是否有一套适用于所有着色器应该使用的标准顶点和片段属性的最佳实践名称?或者是否存在Balkanized特定于引擎的标准,例如为一个引擎编写的着色器无法修改而无法在另一个引擎上工作?或者根本没有标准,因此,一般来说,每个对象都需要自己的自定义渲染代码来匹配自定义着色器。
其实并非如此。 GLSL保留**以“gl_”开头的任何**名称。如果核心编译器允许使用“gl_Vertex”,那么它不符合规范。 1.50规范将重新声明语法阐明为仅对声明类型的属性进行更改有效。所以它不应该让你重新声明它们。 – 2011-06-11 21:54:16
@Nicol:现在这里开始语言lawery:有些人可能会看到不赞成的变量名称作为预定义的标识符从兼容性配置文件,并在1.50 GLSL程序中使用它们是一个属性更改重新声明;恕我直言规范不清楚这一点,虽然§#版本#3.3似乎表明核心的意思是“没有兼容性名称可用”。如果想要安全,他可以使用预处理程序`#define gl_Vertex glVertex`并在核心配置文件中使用该名称。 – datenwolf 2011-06-11 22:18:08