Javascript 从性能角度来看,调用bufferData是否比UniformMatrix x3fv更糟糕?

Javascript 从性能角度来看,调用bufferData是否比UniformMatrix x3fv更糟糕?,javascript,performance,webgl,Javascript,Performance,Webgl,在WebGL中绘制矩形时,有两种主要方法: 创建一个单位四边形,将其上传到GPU一次,然后在绘图时,传入一个与单位四边形相乘的变换矩阵。这涉及使用转换矩阵调用uniformMatrix3fv 只需创建组成四边形的两个三角形的所有点的数组(在世界坐标中),然后在绘制时使用bufferData将其上载到着色器 这两种解决方案在性能方面与我听起来非常相似,因为它们似乎都只是将大约40个字节从CPU传递到GPU,但随后我阅读了Mozilla文章的这一部分: 避免在生产中阻塞API调用(例如getEr

在WebGL中绘制矩形时,有两种主要方法:

  • 创建一个单位四边形,将其上传到GPU一次,然后在绘图时,传入一个与单位四边形相乘的变换矩阵。这涉及使用转换矩阵调用
    uniformMatrix3fv

  • 只需创建组成四边形的两个三角形的所有点的数组(在世界坐标中),然后在绘制时使用
    bufferData
    将其上载到着色器

  • 这两种解决方案在性能方面与我听起来非常相似,因为它们似乎都只是将大约40个字节从CPU传递到GPU,但随后我阅读了Mozilla文章的这一部分:

    避免在生产中阻塞API调用(例如getError、getParameter) 某些WebGL入口点会导致调用线程上的同步暂停。即使是基本请求也可能需要1毫秒的时间,但如果需要等待所有图形工作完成,则可能需要更长的时间(其效果类似于本机OpenGL中的glFinish()

    在生产代码中,避免使用此类入口点,尤其是在浏览器主线程上,因为它们可能会导致整个页面发出刺耳的声音(通常包括滚动,甚至整个浏览器)

    getError():导致刷新+往返从GPU进程获取错误)

    例如,在Firefox中,检查glGetError的唯一时间是在分配(bufferData、texImage、texStorage*)以提取任何GL OUT OF内存错误之后

    我注意到他们只提到了
    bufferData
    ,而没有提到
    uniformMatrix3fv
    。这是否意味着从性能角度来看,前者更糟糕?我需要在我的
    draw
    函数中调用其中一个函数,这两个函数可以共同产生相同的输出。我认为这两种方法之间并没有太大区别,但这似乎意味着
    bufferData
    uniformMatrix3fv
    糟糕得多,因为前者需要调用
    getError
    ,这会导致同步往返暂停

    我读对了吗?如果是这样的话,人们是否更愿意使用
    uniformMatrix3fv
    而不是
    bufferData
    来渲染四边形呢?

    我在前面的一个问题上给出的方法也适用于这里。由于多种原因,制服可以更快地通过缓冲区进行同步,无论哪种方式,您都很少希望为每个四边形发出单独的绘制调用,但最重要的是,您不希望过早地进行优化。