覆盖GLSL中的属性

时间:2011-12-23 08:30:23

标签: opengl-es glsl opengl-es-2.0

较新版本的GLSL减少了标准内置属性和制服的数量,例如: gl_Colorgl_ModelViewMatrix不在GLES 2.0中。

是否可以覆盖这些名称并在着色器中将它们重新定义为另一种变量类型?如果您自己设置,那么在早期GLSL版本上运行时会声明自己的gl_ModelViewMatrix制服吗?

早期GLSL gl_Color可以是每个顶点或整个调用,具体取决于客户端是否调用glColor()glColorPointer() - 可以设置一次属性,使其生效成为制服?或者如何处理这种歧义?

(这是为了使着色器能够在加载时使用一些简单的查找替换脚本在一系列目标上工作)

2 个答案:

答案 0 :(得分:2)

你不能覆盖它们,你不能使用变量名称和开头“gl _”(一篇论文告诉我这个)。根本不可能改变内置类型/变量。

答案 1 :(得分:1)

你最好的选择,如果你想轻松支持多种版本的GLSL,就是使用宏。例如,您可以将输入颜色定义为:

#ifndef color
in vec4 color;
#endif

然后,要在旧版本的GLSL上运行,请在着色器前添加#define color gl_Color