Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何知道WebGL何时完成绘图?_Javascript_Performance_Webgl_Latency - Fatal编程技术网

Javascript 如何知道WebGL何时完成绘图?

Javascript 如何知道WebGL何时完成绘图?,javascript,performance,webgl,latency,Javascript,Performance,Webgl,Latency,我想测量web应用程序中的往返时间,以查看发送、应答和解释请求所需的时间。我向数据库服务器发送一个请求,它向我发回一些数据,我想使用WebGL可视化这些数据。WebGL部分只包括设置纹理并将其打印到四边形上 我希望在发送请求时开始测量,并在渲染完成后立即停止测量。就目前而言,我的(可能是幼稚的)方法是这样的: ws.send(JSON.stringify(request)); 开始=性能。现在(); ws.onmessage=(d)=>{ ... render(d);//下面是一些典型的普通We

我想测量web应用程序中的往返时间,以查看发送、应答和解释请求所需的时间。我向数据库服务器发送一个请求,它向我发回一些数据,我想使用WebGL可视化这些数据。WebGL部分只包括设置纹理并将其打印到四边形上

我希望在发送请求时开始测量,并在渲染完成后立即停止测量。就目前而言,我的(可能是幼稚的)方法是这样的:

ws.send(JSON.stringify(request));
开始=性能。现在();
ws.onmessage=(d)=>{
...
render(d);//下面是一些典型的普通WebGL代码,用于在四边形上准备和打印2D纹理
end=performance.now();
}
往返=结束-开始;
但我不确定这是否是一个准确的测量,并且
end
是否真的指的是最终绘制的画布有没有办法获得渲染帧的确切时刻?目前,我没有典型的渲染循环,而是在触发新请求时使用新帧更新视图。我知道
gl.finish()。我也听说过WebGL2 API,但首先我使用的是WebGL1,其次我觉得它不是一个那么复杂的问题……

你说的“渲染”是什么意思?你的意思是“对用户可见”还是“放在backbuffer中的像素”或其他什么

对于“用户可见”来说,除了在另一台机器上设置一个摄像头来查看屏幕外,别无选择。根据WebGL和用户之间的所有情况,可能会有几帧延迟。浏览器合成内容,无论浏览器是单缓冲、双缓冲还是三缓冲。操作系统以及它如何组合windows、显示器或电视的图像处理,用户是否使用HDMI、DisplayPort、VGA、DisplayLink、Airplay、Chromecast

对于像使用
gl.finish
或类似的
gl.readPixels
之类的“放入backbuffer的像素”,readPixels将不会告诉您某件事情花费了多长时间。相反,它会告诉你某个东西需要多长时间+停止图形管道需要多长时间,并且没有简单的方法来减去最后一部分。另一方面,你也许可以用它来判断一种做事方式是否比另一种做事方式快。

你说的“渲染”是什么意思?你的意思是“对用户可见”还是“放在backbuffer中的像素”或其他什么

对于“用户可见”来说,除了在另一台机器上设置一个摄像头来查看屏幕外,别无选择。根据WebGL和用户之间的所有情况,可能会有几帧延迟。浏览器合成内容,无论浏览器是单缓冲、双缓冲还是三缓冲。操作系统以及它如何组合windows、显示器或电视的图像处理,用户是否使用HDMI、DisplayPort、VGA、DisplayLink、Airplay、Chromecast

对于像使用
gl.finish
或类似的
gl.readPixels
之类的“放入backbuffer的像素”,readPixels将不会告诉您某件事情花费了多长时间。相反,它会告诉你某个东西需要多长时间+停止图形管道需要多长时间,并且没有简单的方法来减去最后一部分。另一方面,你可以用它来判断一种做事方式是否比另一种做事方式快