我有一个顶点着色器,在几个像素着色器之间共享——iOS 上的 GLSL ES 2.0。VS 输出转换后的位置、法线和一组 2D uv 坐标。这是它的基本信息:
void main() {
vec4 xlt_outPos;
vec3 xlt_outNormal;
vec2 xlt_uv0;
xray_bone_vp( vec4(vertex), vec3(normal), vec2(uv), xlt_outPos, xlt_outNormal, xlt_uv0);
gl_Position = vec4( xlt_outPos);
xlv_TEXCOORD6 = vec3( xlt_outNormal);
xlv_TEXCOORD0 = vec2( xlt_uv0);
}
这是基于将 uv 输出到 TEXCOORD0 并使用 TEXCOORD6 作为法线的 Cg 着色器。
我的问题是,将 uv 坐标和法线作为输入的 PS 工作正常,但仅采用法线的 PS却不行。如果我将 PS 方法签名更改为通过 uv 但不使用它,它可以工作!
这是预期的、定义明确的行为吗?如果是这样,有没有办法避免将不需要的参数传递给着色器或必须创建多个版本的 VS?