在Windows 10(带有Three.js)上的WebGL中初始化大(4096 x 4096)纹理时,Chrome的主线程停滞了相当长的时间,而探查器却什么也没发生。

这是4096 x 4096纹理的示例配置文件:
javascript - WebGL较大的纹理会导致Chrome中隐藏的停顿-LMLPHP

在1500毫秒之前的“高原”是对Three.js和WebGL中的texImage2D的调用,然后在出现幻象间隙之前,两次调用了requestAnimationFrame代码。

是什么原因造成的? chrome中的基础WebGL代码是否发生了事件探查器未报告的情况?为什么调用texImage2D需要90毫秒,然后出现空白?我希望所有将纹理加载到GPU的工作都会在此处进行。

Here is a link应该重现该行为。

最佳答案

4096 x 4096是一个大纹理,需要花费一些时间才能将所有数据传输到GPU。如果要先调用texImage2D,然后立即调用drawArrays,则只有在drawArray中完成上传后,才能执行texImage2D。这解释了您在探查器中看到的延迟。

10-06 00:29