Я пытаюсь реализовать сбор (используя цвета и readPixels) в моей программе WebGL. Когда я запускаю свою программу, я создаю отдельную программу ShaderProgram. Один для затенения по фонгу, а другой просто придает фигурам цвет, который будет использоваться для определения, по какой фигуре щелкнули.
Фонг шейдер имеет 2 атрибута. Положение вершины и вершина нормальная. У выбора просто есть позиция.
Теперь я обнаружил, что по какой-то странной причине, когда оба этих шейдера существуют в одной и той же программе, а я использую комплектующий, мой вызов drawArray, похоже, завершается неудачно. Последнее, что должно произойти, это мой вызов gl.vertexAttribPointer. Я возился и обнаружил, что когда я проверяю активные массивы атрибутов, используя:
gl.getVertexAttrib (индекс, gl.VERTEX_ATTRIB_ARRAY_ENABLED);
оба 0,1 возвращают true (это когда шейдер выбора активен с помощью gl.useProgram (picking))
Теперь, если я отключу 1 с помощью gl.disableVertexAttribArray (1); Все снова работает. Другое исправление - сначала рисовать с помощью шейдера Phong, а затем использовать шейдер выбора, и это каким-то волшебным образом делает все нормально. Я предполагаю, что в этом случае при подключении моего буфера нормалей вершин при использовании шейдера phong он каким-то образом остается, когда я затем переключаюсь на шейдер выбора и вызов drawArray работает.
Я хотел бы знать, правильно ли я использую gl.enableAttribArray и должен ли отключить их при переключении шейдеров или что-то в этом роде.
Я также безуспешно пытался создавать шейдерные программы в другом порядке.