我正在试图创建一个übershader来表示一些波前数据,可能包含有/没有某些属性,例如:
1. 一个或多个对象可能包含`uv`坐标和纹理 2. 一个或多个对象可能包含每个顶点的法线映射 3. 一个或多个材质可能以不同的照明类型呈现,并包含用于凹凸映射的纹理
等等。
现在,为此创建übershader可能是个好主意也可能不是(我正在进行实验),但我面临的问题是,有些属性已经被指定了,有些则没有(缺少uniforms,如未设置的纹理采样器会使用布尔uniforms来打开和关闭采样特性)。
当GLSL v3.00中的属性既未分配(这意味着没有glEnableVertexAttribArray,例如,但也没有绑定缓冲区/任何内容),又没有在GLSL程序中用于读取时会发生什么(例如,当UV坐标丢失时,我将使用一个uniform布尔量来关闭纹理查找,尽管我仍然可能像这样在顶点和片段着色器之间插值坐标:)。
1. 一个或多个对象可能包含`uv`坐标和纹理 2. 一个或多个对象可能包含每个顶点的法线映射 3. 一个或多个材质可能以不同的照明类型呈现,并包含用于凹凸映射的纹理
等等。
现在,为此创建übershader可能是个好主意也可能不是(我正在进行实验),但我面临的问题是,有些属性已经被指定了,有些则没有(缺少uniforms,如未设置的纹理采样器会使用布尔uniforms来打开和关闭采样特性)。
当GLSL v3.00中的属性既未分配(这意味着没有glEnableVertexAttribArray,例如,但也没有绑定缓冲区/任何内容),又没有在GLSL程序中用于读取时会发生什么(例如,当UV坐标丢失时,我将使用一个uniform布尔量来关闭纹理查找,尽管我仍然可能像这样在顶点和片段着色器之间插值坐标:)。
// Vertex shader
in vec3 vn;
out vec3 fvn;
[...]
fvn = vn;
这是否是GLSL的合法使用,还是会遇到奇怪的兼容性问题(因为OpenGL ES3.0标签意味着我正在开发移动应用)?
我正在寻找第一手经验或权威来源,
谢谢!