2011-12-23 60 views
1

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

是否确定要覆盖这些名字,并重新定义它们的着色器是另一个变量类型的?如果您自己设置GLSL版本,在早期GLSL版本上运行时,会自行声明自己的gl_ModelViewMatrix

在早期GLSL gl_Color可以每个顶点或整个呼叫,取决于如果客户端调用glColor()glColorPointer() - 你能在效果设置一次的属性,使其成为一个统一的?或者如何处理这种歧义?

(这是所有在寻求使该在一系列的工作目标与着色器的一些简单的查找替换在加载时脚本)

回答

2

不能覆盖他们,你不能使用变量 - 名称与开始“gl _”(一篇论文告诉我这一点)。改变内置类型/变量是不可能的。

+2

着色器不幸的是我无法找到的文件,但我我确定这是正确的。 – 2011-12-23 09:27:32

+0

OpenGL-3核心和GLSL 1.40标准清楚地表明,自定义变量不能用'gl_'前缀命名。但是,一旦可以使用一些预处理器技巧来显然“重新引入”它们。 – datenwolf 2011-12-23 10:53:41

+0

@datenwolf是的,这是我的计划,虽然我有点卡住了gl_Color – Will 2011-12-23 13:00:55

1

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

#ifndef color 
in vec4 color; 
#endif 

然后,在旧版本的GLSL的运行,你在前面加上#define color gl_Color