我试图创建一个übershader表示这可能会有些波阵面数据或可能不包含一些属性,如:GLSL着色器可选属性
- 一个或多个对象可能包含
uv
坐标和纹理 - 一个或多个对象可能包含正常映射为每个顶点
- 一种或多种材料可能具有不同的照明类型来呈现,并且包含用于凹凸映射纹理
等。
现在,它可能或可能不是一个好主意,为此创建一个ubershader(我正在尝试),但我面临的问题是一些属性被指定,一些不是(缺少制服,如纹理未设置采样器的布尔值统一可以打开和关闭采样功能)。
是什么在GLSL v 3.00发生时的属性是既未分配(这意味着没有glEnableVertexAttribArray
,例如,还没有绑定任何/任何缓冲液)在GLSL程序不用于阅读(例如,我将使用一个统一的boolean
把纹理查找关闭,当UV坐标缺失,但我仍然会插的坐标为顶点和片段着色器之间的输入/输出,像这样:
// Vertex shader
in vec3 vn;
out vec3 fvn;
[...]
fvn = vn;
...)?
这是glsl的合法使用,还是会产生奇怪的兼容性问题(我正在开发移动设备,正如OpenGL ES3.0标记所暗示的)?
我正在寻找第一手经验或权威来源,
谢谢!
你是什么意思“既没有指定也没有使用”?具体由“未指定”? –
@NicolBolas谢谢你的评论(我的解释不清楚)!我会立即纠正这个问题,尽管我认为Reto的答案能够解决我的问题。 – Rick77