ol-cesium
Version:
OpenLayers Cesium integration library
72 lines (58 loc) • 1.71 kB
JavaScript
/**
* @module olcs.AutoRenderLoop
*/
class AutoRenderLoop {
/**
* @constructor
* @param {olcs.OLCesium} ol3d
*/
constructor(ol3d) {
this.ol3d = ol3d;
this.scene_ = ol3d.getCesiumScene();
this.canvas_ = this.scene_.canvas;
this._boundNotifyRepaintRequired = this.notifyRepaintRequired.bind(this);
this.repaintEventNames_ = [
'mousemove', 'mousedown', 'mouseup',
'touchstart', 'touchend', 'touchmove',
'pointerdown', 'pointerup', 'pointermove',
'wheel'
];
this.enable();
}
/**
* Enable.
*/
enable() {
this.scene_.requestRenderMode = true;
this.scene_.maximumRenderTimeChange = 1000;
for (const repaintKey of this.repaintEventNames_) {
this.canvas_.addEventListener(repaintKey, this._boundNotifyRepaintRequired, false);
}
window.addEventListener('resize', this._boundNotifyRepaintRequired, false);
// Listen for changes on the layer group
this.ol3d.getOlMap().getLayerGroup().on('change', this._boundNotifyRepaintRequired);
}
/**
* Disable.
*/
disable() {
for (const repaintKey of this.repaintEventNames_) {
this.canvas_.removeEventListener(repaintKey, this._boundNotifyRepaintRequired, false);
}
window.removeEventListener('resize', this._boundNotifyRepaintRequired, false);
this.ol3d.getOlMap().getLayerGroup().un('change', this._boundNotifyRepaintRequired);
this.scene_.requestRenderMode = false;
}
/**
* Restart render loop.
* Force a restart of the render loop.
* @api
*/
restartRenderLoop() {
this.notifyRepaintRequired();
}
notifyRepaintRequired() {
this.scene_.requestRender();
}
}
export default AutoRenderLoop;