javascript - 是否可以使用 gl.finish() 测量 webgl 中的渲染时间?

标签 javascript opengl-es webgl

我正在尝试测量加载 webgl 中的图像所需的时间。

我正在考虑使用 gl.finish() 来获取图像加载前后的时间戳,并将两者相减以获得准确的测量结果,但是我找不到这种用法的好例子。

这种事情是否可能,如果可以,有人可以提供示例代码吗?

最佳答案

现在可以使用 EXT_disjoint_timer_query_webgl2 扩展为 WebGL2 执行计时。

const ext = gl.getExtension('EXT_disjoint_timer_query_webgl2');
const query = gl.createQuery();
gl.beginQuery(ext.TIME_ELAPSED_EXT, query);
/* gl.draw*, etc */
gl.endQuery(ext.TIME_ELAPSED_EXT);

稍后,您可以获得查询的运行时间:

const available = this.gl.getQueryParameter(query, this.gl.QUERY_RESULT_AVAILABLE);
if (available) {
    const elapsedNanos = gl.getQueryParameter(query, gl.QUERY_RESULT);
}

需要注意的几件事:

  • 一次只能进行一个计时查询。
  • 结果可能会异步提供。如果每一帧有多个时间调用,您可以考虑使用查询池。

关于javascript - 是否可以使用 gl.finish() 测量 webgl 中的渲染时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20798294/

相关文章:

JavaScript/JQuery 发布订阅无法在两个页面之间工作,但可以在以下代码中的页面内工作

java - 在 Android 上快速开始使用 opengl

javascript - 渲染数百万个元素的最佳 WebGL 框架

javascript - OBJMTLLoader 未渲染纹理

javascript - 使作用域函数可以从 <head> 中的主 onload 函数访问

javascript - 使用 ExtJS 自定义 div 标签上的类属性

javascript - Clipboardjs 将div的html内容复制到剪贴板

android - 为什么我们需要将颜色传递给每个顶点?

Android - 如何使用 opengl-es 在 3D 立方体上渲染视频纹理?

colors - 使用 THREE.js 实现颜色之间的淡入淡出