Конфликт при использовании двух или более шейдеров с разным количеством атрибутов

Я пытаюсь реализовать выбор (используя цвета и readPixels) в моей программе WebGL. Когда я запускаю свою программу, я создаю отдельную программу ShaderProgram. Один для затенения по фонгу, а другой просто придает фигурам цвет, который будет использоваться для определения, по какой фигуре щелкнули.

Фонг шейдер имеет 2 атрибута. Положение вершины и вершина нормальная. У выбора просто есть позиция.

Теперь я обнаружил, что по какой-то странной причине, когда оба этих шейдера существуют в одной и той же программе, и я использую один из них, мой вызов drawArray, похоже, не выполняется. Последнее, что должно произойти, это мой вызов gl.vertexAttribPointer. Я возился и обнаружил, что когда я проверяю активные массивы атрибутов, используя: gl.getVertexAttrib (index, gl.VERTEX_ATTRIB_ARRAY_ENABLED);

оба 0,1 возвращают true (это когда шейдер выбора активен с помощью gl.useProgram (picking))

Теперь, если я отключу 1 с помощью gl.disableVertexAttribArray (1); Все снова работает. Другое исправление - сначала рисовать с помощью шейдера Phong, а затем использовать шейдер выбора, и это каким-то волшебным образом делает все нормально. Я предполагаю, что в этом случае при подключении моего буфера нормалей вершин при использовании шейдера phong он каким-то образом остается, когда я затем переключаюсь на шейдер выбора и вызов drawArray работает.

Я хотел бы знать, если я использую gl.enableAttribArray неправильно и должен отключить их при переключении шейдеров или что-то в этом роде.

Я также пытался создавать шейдерные программы в другом порядке, но безуспешно.

Ответы на вопрос(3)

Ваш ответ на вопрос