我正在尝试测量WebGL中图像加载所需的时间。
我想使用gl.finish()在图像加载前后获取时间戳,并相减以获得准确的测量结果,但是我找不到这种用法的好示例。
这种方法可行吗?如果可以,可以有人提供示例代码吗?
我正在尝试测量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);
}
需要注意以下几点:
一些GPU有GL扩展可获取时间信息。不幸的是,它们(a) 在WebGL中不可用,(b) 也不太可能会被使用,因为它们不具备可移植性,无法在许多手机中找到的瓦片GPU上运行。
与其问如何计时GL调用,你究竟想通过计时它们实现什么?也许人们可以提出解决方案。
由于 WebGL 是基于客户端的,因此事件时间取决于客户端机器的当前加载情况(CPU 负载)、GPU 负载以及客户端本身的实现。一种获取非常粗略估计的方法是使用 XmlHttpRequest
(http://en.wikipedia.org/wiki/XMLHttpRequest)测量从服务器到客户端的往返延迟。通过找到从服务器测量时间到本地时间的延迟,可以得到可能的负载度量。
new Date().getTime();
- vallentin