WebGL性能问题与a>;MacBook Pro上的65k顶点网格

WebGL性能问题与a>;MacBook Pro上的65k顶点网格,webgl,nvidia,x3dom,webgl-extensions,Webgl,Nvidia,X3dom,Webgl Extensions,以下型号在几种低端机器上具有良好的性能: 然而,在配备Nvidia GT 650m的MacBook Pro上,帧速率非常低。我认为这是因为MacBook没有OES\u元素\u索引\u uint扩展,但如果我这样做,扩展就会出现: document.createElement(“画布”).getContext(“实验性webgl”).getSupportedExtensions(); 在65K以下重新构造网格可以解决此问题。有没有办法在不进行重组的情况下取得良好的业绩 我安装了一个应用程序(g

以下型号在几种低端机器上具有良好的性能:

然而,在配备Nvidia GT 650m的MacBook Pro上,帧速率非常低。我认为这是因为MacBook没有
OES\u元素\u索引\u uint
扩展,但如果我这样做,扩展就会出现:

document.createElement(“画布”).getContext(“实验性webgl”).getSupportedExtensions();
在65K以下重新构造网格可以解决此问题。有没有办法在不进行重组的情况下取得良好的业绩

我安装了一个应用程序(gfxCardStatus),该应用程序禁用GT 650m并强制仅使用集成图形。现在,一切正常。这是一个驱动程序错误吗

我发现另一个3d场景在专用GPU上比在集成GPU上工作更快:


我认为这是因为它由许多小网格组成。同时,当我运行这个场景时,我可以听到GPU风扇旋转起来。它不适用于sofaGirl场景。

First off WebGL不限于每次绘制调用65k个顶点
gl.DrainElements
有一个64k的限制,尽管有一个扩展可以删除该限制<代码>总帐。虽然drawArrays没有这样的限制

我不知道为什么速度慢,但在X3DOM中查看帧时使用的是
gl.drawArrays

我又挖了一点。我试着使用Chrome和Chrome的分析器。它显示了在
gl.readPixels
中花费的大量时间

为了确定这是否是问题所在,我打开了JavaScript控制台,并将
gl.readPixels
替换为如下的no op

在JavaScript控制台中:

// find the canvas
c = document.getElementsByTagName("canvas")[0]

// get the webgl context for that canvas
gl = c.getContext("webgl")

// replace readPixels with a no-op
gl.readPixels = function(x, y, w, h, f, t, b) { 
  var s = w * h * 4; 
  for (var ii = 0; ii < s; ++ii) {
    b[ii] = 0;
  }
};
// save off the original drawArrays so we can call it
window.origDrawArrays = gl.drawArrays.bind(gl)

// patch in our own that draws less
gl.drawArrays = function(t, o, c) { window.origDrawArrays(t, o, 50000); }
你知道吗,现在它跑得超快。嗯,也许是司机的毛病。它被要求绘制1070706个顶点,但对于NVidia GT 650m来说,这似乎不是一个很大的数字


所以,我不知道为什么,但我想调查一下这个问题。我编写了一个本地应用程序来显示相同的数据。它可以轻松地以每秒60帧的速度运行。我在WebGL中检查了集成图形,如OP所说。也容易达到60帧/秒。英伟达650GT在1fp/s左右。 我还检查了Safari和Firefox。他们也跑得很慢。常见的是角度。它们都使用角度来重新写入着色器。可能有一个问题,因为同一个着色器在我的本机测试中运行良好。当然,本机测试所做的工作与WebGL不完全相同,但它不仅仅是绘制1M多边形

所以我提出了一个错误:

您必须使用uint编制索引吗?您可以编写一个包装器,自动将一个大网格批处理为多个抽屉元素调用。根据我绘制大量立方体的经验,这样做的开销非常小。我不必这样做。事实上,根据他们的文档,我认为X3DOM.js框架确实将其拆分了。不管怎样,MacBook上的速度仍然很慢。感谢您的调查。窗口原始绘图阵列(t,o,50000);仅绘制网格的一小部分。可以多次调用它作为解决方法吗?只是尝试了一下,但不幸的是没有帮助。我在我原来的帖子中添加了另一个更新。我想我必须先把网格分割出来,如果我想使用英伟达卡。我怀疑分割网格会有帮助,因为这与DavaReX每次渲染50K多个像素的情况没有什么不同。问题似乎在于着色器。它的一些事情是让英伟达不高兴。你发现了什么导致了经济放缓吗?我多年来一直受到这个问题的影响,但似乎没有人关心或对此有答案:O