У меня есть вершинный шейдер, используемый несколькими пиксельными шейдерами - GLSL ES 2.0 на iOS. VS выводит преобразованное положение, нормальный и один набор двумерных uv-коордов. Вот голые кости из него:GLSL ES Pixel Shader работает только в том случае, если неиспользованные текс-символы передаются в
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);
}
Это основан на шейдере Cg, который выводит иу в TEXCOORD0 и использует TEXCOORD6 для нормального.
Моя проблема заключается в том, что PS, которые принимают уф Coords и нормально, так как входы работают отлично, но те, которые принимают нормальный только нет. Если я изменю сигнатуру метода PS, которая будет передана uv, но не используйте ее, она работает!
Является ли это ожидаемым, четко определенным поведением? Если да, существует ли способ избежать передачи нежелательных параметров шейдерам или создания нескольких версий VS?
Не могли бы вы поделиться код вывода структуры ВС и соответствующий вход PS как в рабочем и сломанных шейдеры? В целом эти структуры должны быть равны. – brigadir
У меня есть это, но не я могу добраться до него прямо сейчас. Однако я думаю: «В целом эти структуры должны быть равны» - это ответ, который я ищу ... если вы можете написать это как ответ с любыми ссылками, репутация ваша :) –
Хорошо. В любом случае, было бы полезно посмотреть на объявление структуры вершины в пиксель-шейдер. – brigadir