我已经有了一个WebGL场景,并且我可以使用一组参数来平衡渲染质量和速度。只要帧速率没有降低到某个阈值以下,我就会尽可能提高质量,从而向用户展示场景。为了实现这一点,我必须以某种方式测量“当前”帧速率以响应质量变化。测量渲染时间
但是,只要用户不与其交互(如使用鼠标旋转相机),场景就是静态的。即使没有任何变化,我也不想让循环重新渲染同一场景。如果场景停止移动,我想停止渲染。这意味着我不能简单地平均连续帧之间的时间,因为我无法区分呈现器缓慢和用户只是更慢地移动鼠标。
我想过在启动时多次渲染场景,并从中判断帧速率。但是由于场景的一部分可以从当前相机位置看到,或者由于用户在画布外进行交互,场景的复杂性可能会随时间而改变。所以当场景改变时,我必须调整质量。在每次鼠标释放之后运行校准循环可能是一种选择。
我也想过使用finish
而不是flush
调用来准确测量渲染时间。但是当我等待GL完成渲染时,我的应用程序基本上无响应,特别是无法排队鼠标事件。由于我设想渲染理想地在两帧之间以目标阈值帧速率占据所有时间,所以这可能是相当糟糕的。我只能在某些场合使用finish
而不是flush
,就像在鼠标释放之后一样。
什么是在WebGL应用程序中实现所需帧速率或定期测量渲染时间的最佳方法?
仅供参考:[完成只是在chrome中刷新](http://stackoverflow.com/a/20810521/128511)。 – gman 2015-03-14 08:12:23
@gman:有一个想法...非常感谢那篇文章! – MvG 2015-03-14 14:34:02