Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在WebGL程序中使用制服[1234][uif]设置制服:矢量版本[v]在任何方面都更好吗?_Javascript_Performance_Glsl_Webgl - Fatal编程技术网

Javascript 在WebGL程序中使用制服[1234][uif]设置制服:矢量版本[v]在任何方面都更好吗?

Javascript 在WebGL程序中使用制服[1234][uif]设置制服:矢量版本[v]在任何方面都更好吗?,javascript,performance,glsl,webgl,Javascript,Performance,Glsl,Webgl,使用带有数组类型的uniform[1234][uif][v]设置WebGL程序的制服,而不是仅使用uniform[1234][uif]+散布参数,是否有任何显著的优点/缺点,例如: gl.uniform3f(位置,v0,v1,v2);//GLSL类型:vec3 //vs gl.uniform3fv(位置[v0,v1,v2]);//GLSL类型:vec3(或vec3[]数组) 显然,撇开该方法的一个版本处理数组这一事实不谈 我正在寻找性能、可读性和总体最佳实践方面的考虑因素 谢谢 我认为你应该想

使用带有数组类型的
uniform[1234][uif][v]
设置WebGL程序的制服,而不是仅使用
uniform[1234][uif]
+散布参数,是否有任何显著的优点/缺点,例如:

gl.uniform3f(位置,v0,v1,v2);//GLSL类型:vec3
//vs
gl.uniform3fv(位置[v0,v1,v2]);//GLSL类型:vec3(或vec3[]数组)
显然,撇开该方法的一个版本处理数组这一事实不谈

我正在寻找性能、可读性和总体最佳实践方面的考虑因素


谢谢

我认为你应该想做什么就做什么。我的意思是很难建议哪一个更好,因为这太依赖于你的个人编码偏好了

假设你做了一个这样的向量

 const v = {x: 1, y: 2, z: 3}
 const v = [1, 2, 3];
现在,当需要将其与
gl.uniform
一起使用时,您可以执行以下任一操作

 gl.uniform3f(loc, v.x, v.y, v.z);
 gl.uniform3fv(loc, [v.x, v.y, v.z]);
在这种情况下,第一个更好,因为第二个是在每次执行该行时创建一个新数组

另一方面,如果你创建一个像这样的向量

 const v = {x: 1, y: 2, z: 3}
 const v = [1, 2, 3];
然后

显然,第二个更好

使用ES5,您还有一个选择,即

 gl.uniform3f(loc, ...v);
我不知道这比gl.uinform3fv(loc,v)快还是慢。我怀疑今天的速度会慢一些,但将来的速度可能会一样。因为您有
gl.uinform3fv
,所以没有理由使用这种样式。它对于其他没有数组格式的函数也很有用。例子

 const color = [1, 0, 0, 1];

 gl.clearColor(...color);

阵列版本本身稍微慢一点。引用(第19页)

例如,比较
uniform4f
uniform4fv
而不是
uniform1f
,我们 发现
uniform4fv
在所有方面都比
uniform4f
慢 我们尝试的浏览器,尽管参数尽可能少
uniform1f
。这是因为
uniform4fv
uniform4f
有更多的工作要做,因为它可以处理 任意统一数组上传

基本上,必须检查输入是否是数组(然后检查其元素类型)、类型化数组等会失去传递较少参数所获得的性能


不过,这主要意味着您应该使用与您的数据匹配的数据,因为解压缩现有阵列可能会超过其好处(尽管可以自由测试)。

谢谢!因此,程序/应用程序的设计似乎决定了其中一个的使用。最终我想这取决于浏览器的WebGL实现。在这一点上,这可能是过早的优化。