Я думаю, ты должен делать все, что хочешь. Я имею в виду, что действительно трудно предложить, что лучше, так как это слишком сильно зависит от ваших личных предпочтений кодирования.
Допустим, вы создали такой вектор
const v = {x: 1, y: 2, z: 3}
Теперь, когда придет время использовать его с gl.uniform
, вы можете сделать любой из этих
gl.uniform3f(loc, v.x, v.y, v.z);
gl.uniform3fv(loc, [v.x, v.y, v.z]);
В этом случае первое лучше, потому что второе создает новый массив каждый раз, когда выполняется эта строка.
С другой стороны, если вы создадите такой вектор
const v = [1, 2, 3];
Тогда
gl.uniform3f(loc, v[0], v[1], v[2]);
gl.uniform3fv(loc, v);
Ясно, что второе лучше.
С ES5 у вас есть еще одна опция, которая
gl.uniform3f(loc, ...v);
Я не знаю, быстрее это или медленнее, чем gl.uinform3fv(loc, v)
. Я подозреваю, что это медленнее сегодня, но может быть такой же скоростью в будущем. Поскольку у вас есть gl.uinform3fv
, на самом деле нет причин использовать этот стиль. Это может быть полезно для других функций, хотя у них нет формата, который принимает массив. Примеры
const color = [1, 0, 0, 1];
gl.clearColor(...color);