複数のピクセルシェーダー間で共有される頂点シェーダーがあります-iOSのGLSL ES 2.0。VS は、変換された位置、法線、および 1 セットの 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 はそうではないということです。uv を渡すように PS メソッド シグネチャを変更しても、これを使用しない場合は機能します。
これは期待される、明確に定義された動作ですか? もしそうなら、不要なパラメーターをシェーダーに渡したり、VS の複数のバージョンを作成したりすることを避ける方法はありますか?