src/viewer/scene/PerformanceModel/lib/layers/linesBatching/LinesBatchingRenderers.js
import {LinesBatchingColorRenderer} from "./renderers/LinesBatchingColorRenderer.js";
import {LinesBatchingSilhouetteRenderer} from "./renderers/LinesBatchingSilhouetteRenderer.js";
/**
* @private
*/
class LinesBatchingRenderers {
constructor(scene) {
this._scene = scene;
}
_compile() {
if (this._colorRenderer && (!this._colorRenderer.getValid())) {
this._colorRenderer.destroy();
this._colorRenderer = null;
}
if (this._silhouetteRenderer && (!this._silhouetteRenderer.getValid())) {
this._silhouetteRenderer.destroy();
this._silhouetteRenderer = null;
}
}
get colorRenderer() {
if (!this._colorRenderer) {
this._colorRenderer = new LinesBatchingColorRenderer(this._scene, false);
}
return this._colorRenderer;
}
get silhouetteRenderer() {
if (!this._silhouetteRenderer) {
this._silhouetteRenderer = new LinesBatchingSilhouetteRenderer(this._scene);
}
return this._silhouetteRenderer;
}
_destroy() {
if (this._colorRenderer) {
this._colorRenderer.destroy();
}
if (this._silhouetteRenderer) {
this._silhouetteRenderer.destroy();
}
}
}
const cachedRenderers = {};
/**
* @private
*/
function getBatchingRenderers(scene) {
const sceneId = scene.id;
let batchingRenderers = cachedRenderers[sceneId];
if (!batchingRenderers) {
batchingRenderers = new LinesBatchingRenderers(scene);
cachedRenderers[sceneId] = batchingRenderers;
batchingRenderers._compile();
scene.on("compile", () => {
batchingRenderers._compile();
});
scene.on("destroyed", () => {
delete cachedRenderers[sceneId];
batchingRenderers._destroy();
});
}
return batchingRenderers;
}
export {getBatchingRenderers};