在大多数现代浏览器中,渲染循环使用requestAnimationFrame (RAF)方法。如果RAF不可用,它将用一个16毫秒的定时器进行微调。
在cornerstone中渲染循环功能基于元素启用的。在cornerstone中用enable(element)或disable(element)来启用和禁用元素。
执行情况如下:
- 在RAF注册draw()回调;
- 在屏幕上显示帧之后,浏览器调用draw();
- Once called,
- 如果元素计划重新呈现,则它将被呈现并重新向RAF注册draw();
- 如果元素计划重新呈现,则不执行任何工作,回调将重新注册到RAF;
- 如果元素已经被禁用,回调返回是not重新注册结束渲染循环。
这意味着:
- cornerstone.draw()和cornerstone.invalidate()不再触发立即渲染视图,而是将图像标记为需要重新呈现;
- 每个cornerstone 元素注册自己的RAF循环;
- 如果在一个60赫兹的系统中渲染时间超过16毫秒,则跳过渲染帧;
- 即使渲染时间远低于16ms,每个帧只能有一个渲染;
- 所有的交互(平移、缩放等)都被合并并呈现在下一帧中。