Мы можем только догадываться, но
, если атрибут не используется, он может быть оптимизирован. Удаляя условия, вы больше не можете использовать texcoord_y
. Если texcoord_y
является атрибутом, и он оптимизирован, это может повлиять на местоположение атрибутов. Это говорит о том, что код использует неправильные местоположения атрибутов.
Вы всегда должны искать местоположения атрибутов с помощью gl.getAttribLocation
или назначать их перед связыванием с gl.bindAttribLocation
.
Предположим, у вас есть шейдер, который объявляет
attribute vec4 position;
attribute float texcoord_y;
...
Расположение position
и texcoord_y
не определено. Если вы предполагаете, что position
- это местоположение 1, а texcoord_y
- это положение 0, все может сработать по счастливой случайности (поскольку это может отличаться на другом устройстве / драйвере / браузере), но когда texcoord_y
оптимизирован и внезапно position
- это местоположение 0 ваш код потерпит неудачу.
местоположения - оба значения имплантации c и для программы c. Таким образом, только то, что шейдерная пара A имеет position
в местоположении 0 и texcoord_y
в позиции 1, не означает, что они будут одинаковыми в шейдерной паре B.
Вам всегда нужно либо смотреть их после связывания для каждой и каждой программы или вам нужно связать их перед связыванием, чтобы убедиться, что вы хотите.
Я не могу знать, что это ваша проблема, но эта ошибка и ваше редактирование шейдера - то, что она предлагает мне. То, что где-то код неправильно использует расположение атрибутов. С закомментированными условиями ошибка скрыта. С этим комментируется ошибка, обнаруживается. Вы могли бы искать или привязывать местоположения правильно, но, возможно, где-то у вас есть опечатка, связанная с настройкой атрибутов. Например, строка типа
gl.vertexAttribPointer(positionLocation, 3, gl.FLOAT, false, 0, 0);
, которая была скопирована и вставлена в другое место, а positionLocation
не была изменена на правильную переменную.